研究室内のページ

2022.4.8(金)

ラズパイのreal time化

google「raspberry pi リアルタイムカーネル」 https://qiita.com/mt08/items/136c29bba5e0a3e4972c ... PREEMPT_RTについて

google「raspberry pi リアルタイムカーネル rtlinux」 https://nw-electric.way-nifty.com/blog/2018/02/raspberrypirt-l.html ... RT-Linuxについて。 RT-Linux の開発は少なくとも 2018年までは続いていたようだ。今月のバージョンもあり。

2022.4.12(火)

ラズパイにRT-Linuxをインストールする

上記URLのページを参考に作業:

https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/ より、 https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/5.17/patch-5.17.1-rt17.patch.gz をダウンロード。 これは、ラズベリーパイかどうかとは無関係であることに注意。

対応するカーネルソースを https://github.com/raspberrypi/linux よりダウンロード

2022.4.14(木)

ラズパイにRT-Linuxインストールつづき

5.17はバージョンが新しすぎてラズパイ用のlinuxソースが無さそう。 ウェブページに掲載されている4.9.76でやってみる。

https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patch-4.9.76-rt61.patch.gz をダウンロード。

しかし、ソースがダウンロードできず: kobayasi@akamono%[1025]wget https://github.com/raspberrypi/linux/archive/aae807a781807e95c761fe0a5babbc9bd5adaed6.tar

2018の情報だから、ディレクトリ構成が変わっていても無理はない。

2023.3.2(木)

新しいmicroSDカードにラズパイOSの最新版をインストールする

参考: https://sozorablog.com/raspberrypi_initial_setting/

ノートPCで作業。

https://www.raspberrypi.com/software/ より、Raspberry PI Imager (Windows用のimager_1.7.4) をダウンロード、ファイルをダブルクリックしてすぐインストールできた。

SDカードを挿してから、

「OSを選ぶ」で、Raspberry Pi OS(64-bit)を選択、 「ストレージを選ぶ」で新品の32GB SDカード(F:としてマウント済)を選択、 「書き込み」

ラズパイに挿して、起動。 指示に従い、ユーザ:kobayasi で初期設定した。

GUI画面で起動後、ラズパイにて: $ sudo apt-get install tenet telnetd 問題なくインストールされた。ノートPC からラズパイに telnet 接続できるようになった。

$ sudo apt-get install ftpd この後、ftp で caio530F.tgz をラズパイに転送できた。

しかし、caio530F.tgz を展開、make したらエラーとなるので、対処: kobayasi@raspberrypi:~ $ sudo apt-get install linux-headers

その後、make が通った。

sudo make install もOK。

1. /boot/config.txt に dtparam=i2c_vc=on を追記 2. 再起動

3. と 4.

$ cd caio530F/contec/caio/config
kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo ./config
----------------------------------
CONTEC API-AIO(LNX) Configuration
---------------------------------- 
メッセージ:デバイスを検出中です。
...................................................................................
.
--------------------------------------------------------------------------------
 デバイス一覧
 --------------------------------------------------------------------------------
     DeviceName   Product Name       ID              IP/Master IP    Status
     [1]:+ AIO000     CPI-AI-1208LI      0
     --------------------------------------------------------------------------------
     [#]:デバイス選択        [o]:リスト並べ替え      [r]:デバイスリスト再検出
     [d]:デバイス削除        [a]:デバイス手動追加    [e]:診断レポート
     [s]:設定の保存          [q]:終了
     設定を行うデバイスを選択してください。
     コマンド入力:s
     ********************************************************************************
     設定を保存しますか?(y/n):y
     メッセージ:設定ファイルは'contec_aio.conf'です。
     メッセージ:起動スクリプトファイルは'contec_aio_start.sh'です。
     メッセージ:停止スクリプトファイルは'contec_aio_stop.sh'です。
     確認(y):
    

5.

kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo ./contec_aio_start.sh

以上で初期設定は完了だそうだが、 しかし、

kobayasi@raspberrypi:~/caio530F/contec/caio/config $ i2cdetect -y 1
Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory

再起動しても症状変わらず。 再起動する前に lsmod で表示されていた caio が出てこない。

contec_aio_start.sh に実行属性が無く、ちゃんと動かなかったようだ。

kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo chmod 755 contec_aio_start.sh

今度は

kobayasi@raspberrypi:~/caio530F/contec/caio/config $ ls /usr/local/etc/contec_aio.conf
/usr/local/etc/contec_aio.conf

がちゃんと出来た。

しかし、

kobayasi@raspberrypi:~/caio530F/contec/caio/config $ i2cdetect -y 1
Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory

症状変わらず。 マニュアルに、本体のダイヤルか何かでアドレスを設定する話があったが、それをやっていないのが原因か。 ダイヤルではなかったが、I2Cを有効にしていなかった。 マニュアルの指示通りに、 ラズパイで、設定→Raspberry Piの設定→インターフェイスで I2C を on にしてOKを選択。 今度は、

kobayasi@raspberrypi:~/caio530F/contec/caio/config $ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
     00:                         -- -- -- -- -- -- -- --
     10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     20: -- -- -- -- -- -- -- -- 28 -- -- -- -- -- -- --
     30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     70: -- -- -- -- -- -- -- -- 

できた。

kobayasi@raspberrypi:~/caio530F/contec/caio/config $ i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
     00:                         -- -- -- -- -- -- -- --
     10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     70: -- -- -- -- -- -- -- --

問題なし。

アナログ入力を使う

アナログ入出力ドライバ API-AIO(LNX) の使い方、サンプルプログラムなどはオンラインマニュアルにある。 https://www.contec.com/jp/api/downloadlogger?download=https://help.contec.com/pc-helper/api-tool-lnx/jp/APITOOL.htm#t=mergedProjects%2FCAIO%2Fwelcome%2Findex.htm

A/Dボードの取説 filelxab03_220531.pdf

kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/Ai $ pwd
/home/kobayasi/caio530F/contec/caio/samples/jp/gcc/console/Ai
kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/Ai $ make
gcc -Wall   -c -o ai.o ai.c
gcc ai.o -o ai -lcaio
kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/Ai $ ./ai

デバイス名を入力してください : AIO000

アナログ入力レンジを以下の範囲から選択してください
±10V            : 0    0〜10V           : 50
±5V             : 1    0〜5V            : 51
±2.5V           : 2    0〜4.095V        : 52
±1.25V          : 3    0〜2.5V          : 53
±1V             : 4    0〜1.25V         : 54
±0.625V                 : 5    0〜1V            : 55
±0.5V           : 6    0〜0.5V          : 56
±0.3125V        : 7    0〜0.25V         : 57
±0.25V          : 8    0〜0.1V          : 58
±0.125V                 : 9    0〜0.05V         : 59
±0.1V           : 10   0〜0.025V        : 60
±0.05V          : 11   0〜0.0125V       : 61
±0.025V                 : 12   0〜0.01V         : 62
±0.0125V        : 13   0〜20mA          : 100
±0.01V          : 14   4〜20mA          : 101
+/-20mA          : 102  1〜5V            : 150
14
AioSetAiRangeAll = 21041 : The value of AiRange is outside the designated range of the device being used

英語版の python 用のサンプルプログラムの ai.c を見たら、print(f" ..... とか書いてあってsyntax error になった。 python の printf が最近関数化されたせいかも。

一度リブートしたら、また lsmod で caio が出てこなくなった。 /usr/local/etc/contec_aio.conf はある。この中に /dev/caio000 と記載されているが、このデバイスファイルも無い。 ブート時に contec_aio.conf を見ていない? 仕方ないので手動で、ついでに config もやっておく:

$ sudo ./config

sで保存 qで終了

kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo chmod 755 contec_aio_start.sh
kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo ./contec_aio_start.sh
kobayasi@raspberrypi:~/caio530F/contec/caio/config $ lsmod | grep caio
caio                  503808  0
kobayasi@raspberrypi:~/caio530F/contec/caio/config $ ls -l /dev/caio*
ls: '/dev/caio*' にアクセスできません: そのようなファイルやディレクトリはありません
kobayasi@raspberrypi:~/caio530F/contec/caio/config $ cat /proc/contec_aio.conf
#start
{
DeviceName:String:AIO000
Device:String:CPI-AI-1208LI
FileNode:String:/dev/caio000
Minor:Number:0
DeviceType:Number:30
VendorID:Number:0x0
DeviceID:Number:0x8703
BoardID:Number:0
SerialID:String:
WaitTimeWhenOutput:Number:0
IPAddress:String:
Net_UnitID:Number:0
Net_DeviceID:Number:0
Net_ProductID:Number:0
Net_Type:Number:0
Port:Number:0x0
}
#end

/dev/caio000 が無くていいのか?

サンプルプログラムの動作も、最初通過していた初期化が通らなくなってしまった:

kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/Ai $ ./ai
AioInit = 1 : Failed in the acquisition of the resource

kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/Ai $ i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/Ai $ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- 

「28」も出なくなった。??

I2Cを一旦無効→有効にしたが症状変わらず。 ADボードの設定が初期化されることを期待して、一旦 shutdown → 電源off → 電源onしてブート。

kobayasi@raspberrypi:~ $ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- 28 -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- 

表示された。

kobayasi@raspberrypi:~ $ lsmod | grep caio
kobayasi@raspberrypi:~ $ ls /dev/caio*
ls: '/dev/caio*' にアクセスできません: そのようなファイルやディレクトリはありません

kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo ./config
kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo chmod 755 contec_aio_start.sh contec_aio_stop.sh
kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo ./contec_aio_start.sh
kobayasi@raspberrypi:~/caio530F/contec/caio/config $ lsmod | grep caio
caio                  503808  0
kobayasi@raspberrypi:~/caio530F/contec/caio/config $ ls /dev/caio*
ls: '/dev/caio*' にアクセスできません: そのようなファイルやディレクトリはありません 

./ai の動作は元に戻った(電源offにしたのが効いたかも):

kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/Ai $ ./ai
 
アナログ入力レンジを以下の範囲から選択してください
±10V            : 0    0〜10V           : 50 
±5V             : 1    0〜5V            : 51
±2.5V           : 2    0〜4.095V        : 52
±1.25V          : 3    0〜2.5V          : 53
±1V             : 4    0〜1.25V         : 54
±0.625V                 : 5    0〜1V            : 55
±0.5V           : 6    0〜0.5V          : 56
±0.3125V        : 7    0〜0.25V         : 57
±0.25V          : 8    0〜0.1V          : 58
±0.125V                 : 9    0〜0.05V         : 59
±0.1V           : 10   0〜0.025V        : 60
±0.05V          : 11   0〜0.0125V       : 61
±0.025V                 : 12   0〜0.01V         : 62
±0.0125V        : 13   0〜20mA          : 100
±0.01V          : 14   4〜20mA          : 101
+/-20mA          : 102  1〜5V            : 150
50
AioSetAiChannels = 10002 : AIO driver can't be called

/dev/caio* が FIFO なのでは。これが無いのは、ラズパイOSが新しすぎるからかも?

FIFOを使わない SingleAi を試してみる。

kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/SingleAi $ ./singleai

デバイス名を入力してください : AIO000

アナログ入力レンジを以下の範囲から選択してください
±10V            : 0    0〜10V           : 50
±5V             : 1    0〜5V            : 51
±2.5V           : 2    0〜4.095V        : 52
±1.25V          : 3    0〜2.5V          : 53
±1V             : 4    0〜1.25V         : 54
±0.625V                 : 5    0〜1V            : 55
±0.5V           : 6    0〜0.5V          : 56
±0.3125V        : 7    0〜0.25V         : 57
±0.25V          : 8    0〜0.1V          : 58
±0.125V                 : 9    0〜0.05V         : 59
±0.1V           : 10   0〜0.025V        : 60
±0.05V          : 11   0〜0.0125V       : 61
±0.025V                 : 12   0〜0.01V         : 62
±0.0125V        : 13   0〜20mA          : 100
±0.01V          : 14   4〜20mA          : 101
+/-20mA          : 102  1〜5V            : 150
50


アナログ入力を行うチャネルを入力してください 0〜7 : 0
チャネル        電圧
0        0.002441V

できた。

・おそらく、/dev/caio* は FIFO。 ・single の AD変換 を繰り返せばいい。 ・API-TOOL(LNX)のマニュアルは、PCIバスのボードとか、他のと共用。

一旦電源off後、GND と AD0 に直流安定化電源をつないでから:

kobayasi@raspberrypi:~ $ cd caio530F/contec/caio/config/
kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo ./contec_aio_start.sh
kobayasi@raspberrypi:~/caio530F/contec/caio/config $ lsmod | grep caio
caio                  503808  0
kobayasi@raspberrypi:~/caio530F/contec/caio/config $ cd ../samples/jp/gcc/console/SingleAi/
kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/SingleAi $ ls
Makefile  caio.h  singleai  singleai.c  singleai.c.org  singleai.c~  singleai.o
kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/SingleAi $ ./singleai

アナログ入力レンジを以下の範囲から選択してください
±10V            : 0    0〜10V           : 50
±5V             : 1    0〜5V            : 51
±2.5V           : 2    0〜4.095V        : 52
±1.25V          : 3    0〜2.5V          : 53
±1V             : 4    0〜1.25V         : 54
±0.625V                 : 5    0〜1V            : 55
±0.5V           : 6    0〜0.5V          : 56
±0.3125V        : 7    0〜0.25V         : 57
±0.25V          : 8    0〜0.1V          : 58
±0.125V                 : 9    0〜0.05V         : 59
±0.1V           : 10   0〜0.025V        : 60
±0.05V          : 11   0〜0.0125V       : 61
±0.025V                 : 12   0〜0.01V         : 62
±0.0125V        : 13   0〜20mA          : 100
±0.01V          : 14   4〜20mA          : 101
+/-20mA          : 102  1〜5V            : 150


アナログ入力を行うチャネルを入力してください 0〜7 : min=0.002441, max=0.024414

直流安定化電源に同期して電圧表示が変化した。A/D変換自体はOKだ。

TODO

あとは、ラズパイos上でリアルタイム処理をどう動かすか。 そこで、A/D変換用の関数が動くかどうか(動かないのでは。。。) OSとしてはI2Cデバイスとして見えているので、I2Cがリアルタイムで動けばいいはずだが、 I2Cデバイスのドライバを書けるか?


添付ファイル: filelxab03_220531.pdf 180件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-10-09 (月) 07:54:08