超入門本シリーズをしばらくお休みする前に、補足です。
*****
1:0N0さんとこの不定期日記で、
「メヒャニカ! 岡山県立大学ロボット研究サークルで、 ATmega128の罠の話。」
という記事がありました。リンク先にお邪魔してみると、ATmega128で2つある8ビットタイマのレジスタの並びが違っていて同じプログラムで動かないって話で、超入門本でも注意してねってことが書いてありました。
そーなんです。ATmega32(タイマ0とタイマ2が8ビットタイマ)でも違うんです。超入門本の場合は、本のサポートページ(URLは本に載ってます)の正誤表に書いてあったので、私は助かったのですが。
というわけで、超入門本でロボット作ってみようって人は、
- 紹介ページ
- サポートページ(本に載っています)
をしっかり読みましょう。ヒント満載です。
追記:
いや、もちろん、データシートをしっかり読むのが一番なんですけどね。私も上で書いた正誤表だけじゃなくて、ぴしいさんに教えていただいた日本語データシートでも確認しました。
*****
2:10/17に
が、問題は、ごにゃごにゃ・・・(自分でアイディア見つけることこそが楽しいので、しばらく自分で考えてみます)。
と書きました。これは、8個のモーターを動かす場合、、、
8個を順番に動かすときは
- タイマ0:パルス幅
- タイマ1:パルス周期
- タイマ2:waitルーチン用
ですが、8個を2個ずつ同時に動かすときは
- タイマ0:1個目のサーボモーターのパルス幅
- タイマ1:パルス周期
- タイマ2:2個目のサーボモーターのパルス幅
となって、waitルーチン用のタイマーがなくなってしまったので、どーしよーかなーと、ちょっと考えてしまったわけです。
結局、8個を2個ずつ同時に動かすプログラムでは、グローバル変数1個使って、タイマ1の割り込み処理の中で「変数++;」って入れておいて、waitルーチンの中のwhile文でそのグローバル変数の値を使って時間を計っています。
これから先、いろいろ遊べるようにと考えると、サーボモーターは8個を順番に動かすことにして、タイマ2は自由に使えるようにしておいたほうがいいなぁと思っています。
コメントする