2013年11月15日金曜日

Atmega8-16PU + USB-UART変換モジュールでUSBマトリクスLED表示器

前回でマトリクスLEDのダイナミック制御ができるようになったので、さらに一歩前進して

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

  • 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 件のコメント:

amazonアソシエイト