2008年
3月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

セットアップ日記


2008年03月02日 AVRのニーモニック

_ AVRのアセンブラをすこし勉強した。

命令が思ったよりたくさんあって覚えに難いと感じたが、単純なことをするプログラムはそれほど苦労せずに書けそうだ。しかし、avr-gccでアセンブラ関数を使おうと思うのだが、そのやり方がまだ分からない。


2008年03月03日 AVRのUART

_ software UART

AVRでは、UARTを使える端子は決まっている。reset端子をRxDに使いたいので、アセンブラ関数でsoftware UARTを作ってみた。信号の無いときは、highにして、start bitでlowにして、、といった感じで作ったら、あっさり動いた。正論理だか負論理だかわけが分からなくなってきたが。1MHzで19200bpsで動かしているが、問題はないようだ。ただし、読み取り中には割り込み等はできないので、注意が必要だ。これで、電流をあまり引き出せないreset端子をRxDにすることによって、もともとRxDだった端子をIOとして使えるようになった。


2008年03月06日 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を切替えても落ちなかったのが思い出される。


2008年03月08日 UARTの同期

_ USBとUART

UARTではあたりまえだが、周波数の基準が多少異なっている場合には、通信がうまくいかない場合がある。USBの通信の仕方について読んでいて、思い付いたのだが、software UARTでも、ピンの変化に応じて同期を取り直したら、多少のボーレートのズレも気にならないのではないか。コードは多少長くなるが、AVRのアセンブラ関数を書いてみた。ピンの変化を調べるために、highとlowに分けなければならないので、約二倍の長さになってしまった。また、8bitの加算は、レジスタ間でしかできないようなので、その工夫も必要になった。動作確認はしていないが、今度必要になったときに使ってみよう。送信の方はそのままだけど。


2008年03月09日 etchでgpib

_ etchにはgpibが無いのか。

三月でsargeのセキュリティサポートが終了する。研究室の測定用のマシンは、sargeのkernel2.6で動かしているものがほとんどである。そろそろetchに乗り換えようと思って調べてみたら、etchにはgpibのパッケージが無いようだ。etchのリリース以前から、bugの中にはgpibがあって、bugfixを待っていたのだが、パッケージさえなくなっている。でも、lennyにはある。よく分からない。まあ仕方ないので、ソースからコンパイルするしかない。カーネルの再構築には時間がかかるので、あまり好きではないのだが。まあ、三台ぐらいだと思うし、なんとかなるだろう。


2008年03月11日 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の違いは何だったか忘れてしまった。


2008年03月12日 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としてごまかした。今のところはこれでうまく動いているようだ。


2008年03月13日 hostnameの変更

_ debianのhostnameを変更した。

etchで測定用のPCを立ち上げ直したが、とりあえずは臨時のホスト名にしていたが、うまく動いてきたので、もともと使っていたホスト名に変更した。

/etc/hostnameで自分の名前を変更して、/etc/hostsも変更すれば完了です。あとは/etc/network/interfacesでDHCPから固定IPに変えて置きました。

測定のインターフェースとしては、GPIBとRS232Cとプリンターポートを使っているので、これらがすべて動くことを確認しないといけないのだが、前の二つは無事に動いたので、最後のも大丈夫だろう。


2008年03月16日 Macのバックスラッシュ

_ Macでは、yenとバックスラッシュが違うらしい。

昔、発見して知っていたのだが、またこのせいで時間を取られてしまった。プログラムでspecial codeを表すときによく使うので、注意が必要だ。


2008年03月17日 プリンターポートの設定

_ etchでプリンターポート

測定用のパソコンで、プリンターポートを使えるようにした。まず、双方向通信ができるように、biosの設定でEPPにした。次に、cupsysを組み込んでいると、lpを占有するようなので、これを開放する必要がある。rootでrmmod lpとすれば良いのだが、これを毎回するのも面倒なので、
echo '#! /bin/sh' > /etc/init.d/rmlp
echo 'rmmod lp' >> /etc/init.d/rmlp
chmod ugo+x /etc/init.d/rmlp
update-rc.d rmlp defaults 98
として、起動時にrmmodが自動的に行われるようにした。 そういえば、プリンターの設定をまだしていないな。まあ、あまり使わないけど。ppdを探すのが面倒だなあ。

2008年03月23日 大阪出張

_ デジットへ

新しく購入したPCを立ち上げていて気がついたのだが、プリンタポートが無い。確認を怠ったのが悪いのだが、なんとかしたい。パラレルポートはTTL出力で、いろいろなことに使えるので、いろいろと便利だ。マザーボードを調べてみると、ピンヘッダーは出ているので、これをD-subにするケーブルがあれば良いことが分かった。そこで、ケーブルを探すために日本橋へ。いろいろと探し回ったが、そのようなケーブルは見つからなかった。自作するかということで、デジットへ。出張中で半田ごてが手元にないので、フラットケーブル用のコネクタを購入して適当につないだら、あっさりと動作。ピンの番号はD-subのとピンヘッダのがずれることになるが、1番が一致するようにすれば良いようだ。ついでにいくつか玩具を購入。出張から戻ったら動かしてみよう。


2008年03月26日 LANG変数

_ DebianのLANG

LANGの設定が日本語になっていて、うまく動かないので、それを解除しようと思ったが、なかなかどこで指定されているのか見つからなかった。.bashrcや/etc/profileを見ても無かったが、/etc/environmentで設定してあるのを見つけた。これをコメントアウトしたら、うまくいった。インストールのときに、決まってしまうのかと思うと、少し押し付けがましい気がする。


2008年03月29日 sargeからetchへ

_ 測定用のPCのOSをsargeからetchにした。

今回は二台目なので、ほとんど問題なくいったが、GPIBを入れるときに、シェルスクリプトを動かしたのだが、ソースをtarで展開するところがスキップされてしまったようだ。一行ずつコピーして実行したら動いたので、結局何が悪かったのかよく分からないけど。