USART(シリアル通信)で描画パターンを指定できるようにする。
前回の回路に加えて、以前買っておいたaitendoのUSB-UART変換モジュールを使用する。
回路的には前回の回路にAtmega8のRXとTXを変換モジュールに接続するだけ。
変換モジュールに3.3V電源とGNDがついているのでそれを利用することでUSBバスパワー駆動となる。
信号線と電源が一緒にできるなんてUSB最高ですね。
で、回路は簡単だったのだけどソフトはかなり手こずった。
最初、橋本商会さんのページを参考にしたんだけど、avr-gccなのか、チップ自体の仕様変更なのか割り込みのコードが変わっててビルドエラーになって戸惑う等、落とし穴盛りだくさんな感じだった。
最終的な参考サイトは以下
Interrupt Driven USART in AVR-GCC(PDF)
http://www.fourwalledcubicle.com/AVRArticles.php
http://homepage3.nifty.com/rio_i/lab/avr/03usart.html
http://homepage3.nifty.com/rio_i/lab/avr/03usart.html
ソースコード
----
----
解説
usart.c
うし。ユニバーサル基板に実装してUSBマトリクスLED表示器を作るど。
解説
usart.c
- Atmega8-16PU用プログラム
- シリアル通信はRX(受信)のみ
- 1バイト受信したら割り込み処理で1行分のパターン(1バイト)を更新
- 1バイト受信する毎に更新対象の行を1行ずらす(8バイトで全行更新)
usart.rb
- テスト用Rubyスクリプト
- 0x00から0xFFまで1秒ごとに1バイトずつ送信
ハマりポイント
- シグナルハンドラがSIGNAL(SIG_UART_RECV)からISR(USART_RXC_vect)に変わってた
- プロセッサの動作周波数はFOSCじゃなくてF_CPUだった
- UCSRBのRXCIEを立てること(割り込み指定)
- UCSRCのUSBSを間違って立てていてストップビット2になってた
- パターンの変数matrixにvolatile指定が必要だった
- F_CPU 8MHzだと上手く動かなかった -> 1MHzに
最後に動作風景
うし。ユニバーサル基板に実装してUSBマトリクスLED表示器を作るど。
0 件のコメント:
コメントを投稿