というわけで定番のライフゲームを実装してみた。
動作風景
ソース
----
----
まあどうってことない。
で、動作確認してて気づいたのだけど、光らない列が1列あった。
調べたらハンダ剥がれとった。ぐむぅ。修正。
2013年12月9日月曜日
2013年12月5日木曜日
USBマトリクスLEDディスプレイ(1)
以前、ブレッドボードに作成したUSBマトリクスLEDディスプレイをブレッドボードに実装してみた。
動作風景
![]() |
| 左がUSB-UART変換モジュール、中央にマトリクスLED、右にAtmega8、上部にISPコネクタ |
![]() |
| 基板ウラ面 |
感想など
どう考えても結線がクロスするので最初から細めの耐熱ワイヤを使って繋いでいったのだけど、
Atmega8のポートとマトリクスLEDの端子をもう少し考慮して、
マトリクスLEDの端子間にAtmega8を配置すればもっと綺麗に配線できた気がする。。。
プログラムは以前作成したものを使ったが、なぜだか特定のビットパターンをUSARTで受信すると暴走するので少し直した(簡単なパターン送信Rubyスクリプトも追加)。
直した点は
- USART_RXC_vectの中でフレームエラーをチェックしてる部分を削除
- UCSRBの送信フラグTXENを0に
フレームエラーが一度発生した際にUDRを読み込まずに延々とフレームエラーで割り込みがかかり続けたのではないかと想像。
次はプログラムを修正して待機モードを作成しようかと、
- 待機モード中は幾何パターンとかビットマンとかライフゲームとか適当に表示
- USART受信したらしばらく受信パターン表示
- 最終受信から適当な時間経過したら待機モード移行
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(シリアル通信)で描画パターンを指定できるようにする。
前回の回路に加えて、以前買っておいた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表示器を作るど。
登録:
投稿 (Atom)




