マイコン開発顛末の続き
LEDを順次に点滅させるプログラムをアセンブラーで書いた後も、冒険物語が続く。アップルの6502以来のアセンブラーである。対象が全部1バイトというのもせせこましいが、ビットの数え方が右から0で始まるのでやたらと紛らわしい。ピン配置の番号、ポートアドレスの番号、データ内のビット番号、さらに出てくるピンの論理値が自由に操作できるというのも混乱の元だ。
まあ、ソフトウエアの世界はもう40年の経験があるから、ハードほど不安ではない。アセンブラーは、I/Oや割り込みの部分の処理を理解したくてわざと試している。AVRはフリーのCコンパイラーが使えると言うのも売りで、まもなくCに移る予定だ。
ところが、LEDの出力のときは問題なかったが、入力ではまった。入力といっても、簡単な押しボタンスイッチだ。ボタンを押している時間をLEDの点滅の間隔にするというプログラムで、参考書どおりにコーディングしても入力を認めない。2~3種のコーディング例を見て同じことをやっているのだが、がんとしてボタンを認めない。プルアップしてみたり、ポート位置を変えてみたりしたが駄目。シミュレーターで動かしてみると、入力さえ認められれば動くという確認はとれたので、ハードの問題か。
意外なところで解決をした。こういうマイコンの入出力は、PORTと呼ばれる、I/Oアドレスに、INとか、OUTと言った命令でワークレジスターを介して行われる。そのまえに、当該のPORTの入出力の指定とか、さきほどの論理値の選定(0をHighとするかなど)などのデータを、このポートに出力しなければならないのでややこしい。
少々疲れて、参考書のコーディング例を見るともなく見ていると、PORTAというアドレス以外に、PINAというアドレスがあることがわかった。アセンブラーのこういうシンボルは同じものに対して別の名前をつけるということはよくあることなので、気も留めなかったのだが、アセンブラーのリストを見ると場所が違うことに気がついた。
出力は、PORTAとかPORTBのままである。半信半疑で、PINの方から入力してみるとビンゴ!であった。こんなことは当たり前すぎるということなのか。少なくとも私の見た参考文献には書いていなかった。まあ、とにかく、やっと考えていたとおり、ボタンの押している時間で点滅するLEDプログラムが完成した。
初期のアセンブラ、CのLEDプログラムのソースコードはここにまとめてあります。
各ファイルの説明は、中のTiny26test.txtをお読みください。
「Tiny26test.lzh」をダウンロード
さて、現在のマシンはブレッドボードに仮付けされ、周囲をジャンパー線がうず高く行きかっているとても実用とはいえない実験機械である。これから、タイマー、割り込み、スリープなどの機能を学習し、省電力の温度記録ロガーを作成する予定である。
(10/22/07)
| 固定リンク
「AVR」カテゴリの記事
- ソフトI2Cはクロックストレッチまで手を出してあえなく沈没(2017.09.02)
- オシロのテストどころかソフト開発で大はまり(2017.07.26)
- 超音波方式の人感センサーI2C化と新しいオシロ(2017.06.29)
- motionの動体検知はRaspi3の電源が安定しない(2017.04.16)
- 赤外線学習リモコンはデータ再現で挫折したまま進まず(2016.07.21)
コメント