debianのhostnameを変更した。
etchで測定用のPCを立ち上げ直したが、とりあえずは臨時のホスト名にしていたが、うまく動いてきたので、もともと使っていたホスト名に変更した。
/etc/hostnameで自分の名前を変更して、/etc/hostsも変更すれば完了です。あとは/etc/network/interfacesでDHCPから固定IPに変えて置きました。
測定のインターフェースとしては、GPIBとRS232Cとプリンターポートを使っているので、これらがすべて動くことを確認しないといけないのだが、前の二つは無事に動いたので、最後のも大丈夫だろう。
modprobeとudev
etchのGPIBは難しい。
なんとかGPIBが使えるようになったと思ったが、再起動するとpermissionが変わったりして、なかなかうまくいかない。この原因は、modprobeでモジュールを組み込むときに、udevがうまく働かないということが原因らしいことが分かった。手動でmodprobe tnt4882とするとgpibのグループになるのだが、/etc/modprobe.d/gpibに記述して組み込むと、グループが変わらない。waitを入れると良いという話も見付けたので試してみたが。うまくいかない。しかたがないので、install tnt4882 /sbin/modprobe –ignore-install tnt4882; chgrp gpib /dev/gpib*; /usr/local/sbin/gpib_config –minor 0としてごまかした。今のところはこれでうまく動いているようだ。
linux-gpibのインストール
optiplex 745を測定用に。
Etchを入れてみたら、xorgが動かない。他にやっている人が居ないかと探してみたら、driverをvesaにしたら良いようなので、
dpkg-reconfigure xserver-xorg
で変更したら、無事Xが立ち上がった。次はGPIBだが、headerを取ってきてコンパイルして、gpib-rubyを入れようとしたら、
/usr/bin/ld: cannot find -lfl
と出たので、
aptitude install flex
として、コンパイルして無事終了。と思ったら、なぜか動かない。結局、/etc/gpib.confをni_pciからni_pci_accelにしたり、/dev/gpib*のgroupを変更したりしていたら動いた。結局何が問題だったのだろう。ni_pciとni_pci_accelの違いは何だったか忘れてしまった。
etchでgpib
etchにはgpibが無いのか。
三月でsargeのセキュリティサポートが終了する。研究室の測定用のマシンは、sargeのkernel2.6で動かしているものがほとんどである。そろそろetchに乗り換えようと思って調べてみたら、etchにはgpibのパッケージが無いようだ。etchのリリース以前から、bugの中にはgpibがあって、bugfixを待っていたのだが、パッケージさえなくなっている。でも、lennyにはある。よく分からない。まあ仕方ないので、ソースからコンパイルするしかない。カーネルの再構築には時間がかかるので、あまり好きではないのだが。まあ、三台ぐらいだと思うし、なんとかなるだろう。
UARTの同期
USBとUART
UARTではあたりまえだが、周波数の基準が多少異なっている場合には、通信がうまくいかない場合がある。USBの通信の仕方について読んでいて、思い付いたのだが、software UARTでも、ピンの変化に応じて同期を取り直したら、多少のボーレートのズレも気にならないのではないか。コードは多少長くなるが、AVRのアセンブラ関数を書いてみた。ピンの変化を調べるために、highとlowに分けなければならないので、約二倍の長さになってしまった。また、8bitの加算は、レジスタ間でしかできないようなので、その工夫も必要になった。動作確認はしていないが、今度必要になったときに使ってみよう。送信の方はそのままだけど。
AVRとRS232Cで通信
AVRでRS232C
これまで、AVR同士ではUARTを使って通信は行っていたが、PCとの間で通信を行ってみた。MAX232でレベルコンバートして、tiny2313のUARTで受信を試みたが、全然うまくいかない。オシロで信号を見てみたら、文字化けしている。tiny2313はdefaultでは8MHzを8分割して1MHzで動いている。最初は無謀にも19200でやろうとしていたが、9600に落として、UBRRの値を6にしたら、なんとか通信できた。これでも-7%の誤差があるようだが、大丈夫だろうと思っていたら、ときどき通信できていないことに気づいた。
CLKPR=0x80; CLKPR=0x02;
として、2MHzにしたら、今のところうまくいっている。このときの誤差は0.2%なので、今度こそ大丈夫だろう。それにしても、AVRは途中で周波数を変えられるんですね。昔、8086で10-8を切替えても落ちなかったのが思い出される。
AVRのUART
software UART
AVRでは、UARTを使える端子は決まっている。reset端子をRxDに使いたいので、アセンブラ関数でsoftware UARTを作ってみた。信号の無いときは、highにして、start bitでlowにして、、といった感じで作ったら、あっさり動いた。正論理だか負論理だかわけが分からなくなってきたが。1MHzで19200bpsで動かしているが、問題はないようだ。ただし、読み取り中には割り込み等はできないので、注意が必要だ。これで、電流をあまり引き出せないreset端子をRxDにすることによって、もともとRxDだった端子をIOとして使えるようになった。
AVRのニーモニック
AVRのアセンブラをすこし勉強した。
命令が思ったよりたくさんあって覚えに難いと感じたが、単純なことをするプログラムはそれほど苦労せずに書けそうだ。しかし、avr-gccでアセンブラ関数を使おうと思うのだが、そのやり方がまだ分からない。
Mac OS 拡張フォーマット
hfsplus
Macで作ったDVDを読もうと思ったが、フォーマット形式が分からない。いろいろ調べたら、HFS+というものらしい。etchではhfsplusと指定したら、directoryは見えたが、中身は見えなかった。moduleを入れれば対応できるようだが、まあ面倒なので止めた。
tiny26のtimer
timer割り込み
tiny26でtimer1を使おうと思って割り込みvectorを
ISR(TIMER1_OVF_vect)
としたらうまくいかない。includeファイルを見てみたら、
ISR(TIMER1_OVF1_vect)
が正しいらしい。TIMER1_OVF0_vectが無いのにこんな名前にするのもよく分からないけど、まあ動いたからいいや。