だんだんAVRの工作についても先が見えてきたので、いよいよNXTの自作センサーを接続する実験をしたいと思います。
とはいえ、以前にYが作成した自作センサーのキット(NICO SENSOR)があるので、それを大いに参考に(別名「パクる」)しようと思います。
これまで、ATmega88を中心に使っていたのですが、アナログポート数が多いという理由で、ATTiny26Lを使うことにします。
ブレッドボードに、部品を挿して行き、ハードはすぐにできました。
ソフトウェアは、NICO SENSORのものを改造(というか、不要のものを削除して簡略化したもの)を入れてみると・・・NXTとの通信はうまくいくのですが、ADC0ポートの値が「0」となってしまいます。 どうも、アナログポートの読み込みが全然できていないようです。
プログラムの中で、NXTに送る値を適当に埋め込むと、ちゃんとその数字が「NXT側」に表示されるので、通信は問題無いようです。
何で、アナログポートを読んでくれないの?
AREFやAVCCを+5Vに接続しても、変わりませんねぇ。
いろいろ試しても一向にアナログポートからの読み込みはできません。
きっと、このAVRマイコンが壊れているんだ! (すぐに他人のせいにする悪いクセ)
などと、現実逃避をしてみても、時間が過ぎるだけです。
実は、adc.c がATmega88用に書かれていた(修正されていた)ことをすっかり忘れていました。
adc.cの中の ADCSRA の記述を ADCSR に変更したら、何事も無かったように動作しました!
しかし、レジスタの名前が(ATTiny26用でなく)間違っていたにも関わらず、なぜコンパイルエラーが表示されなかったのか? それが不思議です。
後から考えると・・・単にコンパイルエラーを見過ごしていただけらしい・・・シッカリしろ俺
とにかく、上の修正をしたら、やっとアナログポートに接続した光センサーの値をNXT上に表示することができました。 (長い道のりであった)
これで、スペインチームのロボットのようにたくさんのセンサーを搭載できる・・・かもね。