2013年11月23日土曜日

LEDケーブル+メロディIC+Atmega8-16PU => クリスマスイルミネーションボード

というわけで100均LEDケーブルと電子オルゴールキットをAtmega8-16PUで制御してクリスマスイルミネーションを作成してみた。

動作風景




感想
  • 回路やプログラムはマトリクスLEDの制御でそこそこ経験を積んでたので以外とあっさりできた
  • LEDケーブルにワイヤハンダ付けしたりスチレンボードを探したりとかの方が面倒だったり
  • 使用したパーツだけでも2000円はかかってることを考えるとまあ微妙っちゃ微妙(量産すれば500円とかにできるんだろうけど)
  • スチレンボードとか火がついたらヤバいよね
  • LEDの位置は適当すぎたかもしんない、もうちょい拘ってもよかった
  • だが面倒


回路説明

  • Atmega8 PC0,PC1,PC2にLEDケーブル(白、赤、青)を接続
  • Atmega8 PC3をメロディIC UM3481のSLに接続
  • Atmega8 PD2(INT0)をプッシュボタンに接続(プッシュでGND立ち下がり)

ざっくり制御概要

  • プッシュボタンでメロディスタート、メロディと共にLED点滅
  • ボタンを押す毎にメロディ、LEDパターンを変更

ちょびっと詳細説明
  • プッシュボタンでINT0割り込み
  • INT0割り込み処理でUM3481 SLをH(次曲選択)、LEDパターンの変更、LED累積表示時間のリセット
  • メインループでLED累積表示時間が設定時間(=60秒)未満ならLEDパターン表示
  • メインループでLED累積表示時間が設定時間以上ならLED消灯

回路以外の材料

  • 100円ショップPET素材のクリスマス飾り(壁掛け用?)
  • 100円ショップ木箱
  • 100円ショップA4スチレンボード(2枚入り、爪楊枝を指して2枚接続)
ブレッドボード上UM3481、ブレッドボード下Atmega8とLED駆動トランジスタ等
プッシュボタン、LEDケーブルとボード
LEDケーブルをボードに貼りつけ


ボードに壁掛け飾りをかぶせる
Atmgega8プログラム
----

----

2013年11月16日土曜日

100円ショップ クリスマス用デコレーションLEDライト=スライドスイッチ付き電池ボックス+LED10球ケーブル

100円ショップシルクに大変お買い得な商品があったので買ってみた。

クリスマス用デコレーションライト。



たった105円でスライドスイッチ付き電池ボックスとLED10個付きケーブルが手に入るのだ。

これは大変お得。

LEDは赤、白、青の3色があるので3つともゲット。

単体では電池を入れるとスイッチオンオフで点灯、消灯するだけのシロモノだが。

分解してLEDをマイコンに繋げば点滅パターンは思いのままに。

よーし。パパ、クリスマスツリー用オリジナルデコレーションライトでも作っちゃうぞー。

秋月電子ブレッドボード電子オルゴールキット(2)

ベースのキットに以下の変更を加えてみた。
  • 電源を1.5V単四電池から3.3Vブレッドボード電源モジュールに変更
  • メロディICをUM3482からUM3481に変更
  • 圧電ブザーを8Wツイーターに変更

動作風景

圧電ブザーよりツイーターの方が音が断然いい。

昔のファミコンのような音で懐かしい感じ。

UM3481はUM3482よかエフェクトに拘ってる感じではあるけども、ジングルベルとか音量小さくなるのが☓だなぁ。

UM3482のように素朴で良かったのに。


あとUM3481をブレッドボードからはずすときにピンをあからさまにねじ曲げてしまった。

指で直そうとしたけど下手にすると完全に折れてしまいそうなので、ねじれたまま(´・ω・`)ショボーン



なんか綺麗にはずせるうまい方法はなきものか。

2013年11月15日金曜日

機材追加 秋月電子ブレッドボード電子オルゴールキット等

マトリクスLEDので大量のジャンパーピンを消費したこともあって、秋月でジャンパーピンを追加することにした。

せっかくなのでメロディICを使った電子オルゴールキットも購入。てかこっちがメイン!?
送料込みで\2,500なーりー。



その他は

  • 8Wスピーカー(よくわからないけど買ってみた。)
  • クリスマスソングメロディIC(シーズンなので)
  • スペーサー+プラネジ
  • マイクロUSBDIP化キット(便利かなと)


で、早速オルゴールキット組み立ててみた。

親切丁寧なマニュアルがあるので20分くらいで完成。



動作風景


圧電スピーカーのチープな電子音が物悲しい感じ。


にしても0Ωの抵抗=ジャンパーピンって電子工作以外に何のために使うのだろうか。

抵抗と同じラインで作れるから安い!とかそんな?

Raspberry PI CPU温度に見る冬の到来

すっかり寒くなってまいりました。

夏ぐらいには最大55度あったCPU温度も40度前後まで下がってます。

ここ数日の急降下がキビシィ。

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表示器を作るど。

2013年11月10日日曜日

Atmega8-16PUでマトリクスLEDのダイナミック制御

前回確認したマトリクスLEDをAtmega8-16PUでダイナミック制御してみた。

単純なパターンを一定間隔で反転するだけ。



回路はAtmega8-16PUの16ポートにマトリクスLEDを直結しただけ。

一応アノードに100Ωの抵抗かましてある。

当初はシフトレジスタとデコーダ使おうかと思ってたけどAtmega8の出力ポート数足りてたので直結してみた。

割り込みとか入力とかする場合はシフトレジスタが必要になるかも。

プログラムについては、ポートに対応したビット操作だけなんで簡単だろうと思ってたけど以外と手間取った。

特定のビットだけ書き換えたりとか。いや基本なんだろうけど。普段ビット操作なんかしないから。
あとは行表示の前に一度LEDオフにしとくとか、ディレイの入れ方とか。

それとプログラムのバイナリが650バイトで転送に180秒かかる。
ちょっと直しては転送を繰り返すと結構待ち時間がガガガ。

今時のフラッシュメモリデバイスと比べると桁違いに遅い。のはデバイスなのか、ドライバというか転送プロトコルのせいなのか。まあいいや。

作成したプログラム
---- ----


2013年11月8日金曜日

マトリクスLED LD-1088BGY の動作確認

aitendo 8x8マトリクスLED LD-1088BGYの動作確認をした。

サイトにある以下のデータシート?だとピン配置が不明なので、実際にブレッドボードに繋いで確認した。




側面に1088BGと書いてある辺を左として上からpin1、下まで行ってまた左からpin9と定義する。

                    1 2 3 4 5 6 7 8
1  pin01  1 o o o o o o o o pin09
0  pin02  2 o o o o o o o o pin10
8  pin03  3 o o o o o o o o pin11
8  pin04  4 o o o o o o o o pin12
B  pin05  5 o o o o o o o o pin13
G  pin06  6 o o o o o o o o pin14
     pin07  7 o o o o o o o o pin15
     pin08  8 o o o o o o o o pin16
pin01 ... col4
pin02 ... col2
pin03 ... row2
pin04 ... row3
pin05 ... col1
pin06 ... row5
pin07 ... col3
pin08 ... col6
pin09 ... row8
pin10 ... row7
pin11 ... col7
pin12 ... row1
pin13 ... col5
pin14 ... row6
pin15 ... row4
pin16 ... col8

column ... アノード
row ... カソード

       05 02 07 01 13 08 11 16
12  oo oo oo oo oo oo oo oo
03  oo oo oo oo oo oo oo oo
04  oo oo oo oo oo oo oo oo
15  oo oo oo oo oo oo oo oo
06  oo oo oo oo oo oo oo oo
14  oo oo oo oo oo oo oo oo
10  oo oo oo oo oo oo oo oo
09  oo oo oo oo oo oo oo oo

ええとアノードコモンなので、column=列が共通であると。
てことはrow=行毎に描画して、表示する行をLOW、表示しない行をHI。
点灯する列をHI、点灯しない列をLOWとすると。

1行目の描画
    H L L L L L L L
L  o x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
2行目の描画
    H H L L L L L L
H  x x x x x x x x
L   o o x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
....
という感じかな。

次はプログラム作ってダイナミック駆動の確認ですな。

しかしこのマトリクスLED、ピンの長さが微妙に足らずにブレッドボードにうまく刺さらん。

グッと押し込んでもビョンと跳ね返る。なんかいい方法ないかなぁ。

2013年11月6日水曜日

AVRプログラマ自作(2) Ubunutu + avrdude + 自作回路 + RS232C USB変換ケーブル

前回作成した回路をユニバーサル基板に実装してみた。





早速、試した見たところ、以下のように途中でエラーとなった。
$ avrdude -p m8 -c ponyser -P /dev/ttyUSB0 -U flash:w:blink2.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.58s
avrdude: Device signature = 0x000102
avrdude: Expected signature for ATMEGA8 is 1E 93 07
         Double check chip, or use -F to override this check.
avrdude done.  Thank you.
どうもデバイス識別コードがうまくPC側に伝わってない様子。

たぶんPCへの入力はMOSIだと思うんだけど、
MOSIの部分の配線を間違えたのかなぁと何度も確認するがやはり正しい。

2,3日悩んでふと回路を触ってみたところ、GNDのラインで一部ハンダがはがれて接触不良を起こしていることがわかった。

その部分をハンダ付け直したらうまく動作した。

基盤裏、一番下がGND
やれやれ。

あー。一応使った部品リストを載せておこう。

2013年11月1日金曜日

AVRプログラマ自作(1) Ubunutu + avrdude + 自作回路 + RS232C USB変換ケーブル

前回、aitendoのAVRプログラマでAtmega8-16PUにプログラム転送できることは確認した。

したんだけど、いちいちWindows起動してプログラム転送するのが面倒。

なんとかLinuxでプログラム転送できないかなぁということで調べてみた。

で、RS232Cと簡単な回路でできそうなことがわかった。


  1. Serial programmer
  2. Simple Serial Programmer for AVR

1.と2.では微妙に回路が違うんだけど、2.の方は~RESETになってるので1.の回路をブレッドボードに作成。

RS232Cの方はUSB変換ケーブルを持っていたのでそれを使用。

回路全体

回路拡大

RS232C変換ケーブル

そして2.のサイトを参考に以下のコマンドを実行したところ、無事転送成功。
$ avrdude -p m8 -c ponyser -P /dev/ttyUSB0 -U flash:w:blink2.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.58s
avrdude: Device signature = 0x1e9307
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "blink2.hex"
avrdude: input file blink2.hex auto detected as Intel Hex
avrdude: writing flash (104 bytes):
Writing | ################################################## | 100% 20.37s
avrdude: 104 bytes of flash written
avrdude: verifying flash memory against blink2.hex:
avrdude: load data flash data from input file blink2.hex:
avrdude: input file blink2.hex auto detected as Intel Hex
avrdude: input file blink2.hex contains 104 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 19.97s
avrdude: verifying ...
avrdude: 104 bytes of flash verified
avrdude: safemode: Fuses OK
avrdude done.  Thank you.
動作確認は出来たのでユニバーサル基板に本番回路を実装しよう。


amazonアソシエイト