| なる研>電子工作小品集>ミニ電光掲示板 |
16x16@2色ので電光掲示板のようなものを作ろうと考えたのですが、ちと高価。
で、やむなく10x10に…でもただ作ったんじゃ面白くない、コンセプトはできる限り小さく。
今回はEEPROMをふんだんに使おうと思うのでAVR
ICは面実装のものが手に入らないので、足を右のように加工します。
全体の厚さは電池が少し出っ張ってますが7mm(LEDの足を含めた厚さ)に納まりました。
電源はアルカリLR43を3つ直列で使いました、これもUEWで配線して両面テープでぐるぐる巻きにしました。コネクタをつけてISPポートから供給します。ちょっときたないですが5時間は連続表示できました。もう少し小さい電池でもいけそうです。
縦にミニ四駆の6角シャフトを2本入れて補強してます。
漢字や記号等も表示したいので表示内容はドット画として保存しておきます。保存先は製作開始当初EEP-ROMで十分と思ってましたが、実際に動かしてみると足りない(128÷2=64行≒8文字)。で、1Kbもあるflash-ROMにデータテーブルを置いてます。表示を変える時は毎回Assembleする必要があります。が、いまいち桁上がりの方法が解らないので今のところ256行迄となってます。
プログラムソース(200leds.txt)
回路図(200leds.png)
表示ライブラリ(data.txt)
動画(200leds.wmv 256kB) ←ちょっと汚いですが
今回使用したのは東芝の74HC164APです。データシートによると、A,Bから入力したデータは次のCKの立ち上がりで(LからHになた時)QAに反映され、以後CKの立ち上がりごとにQB,QC,QD…へと入力したデータが移動していき、CLRをLにするとCKに関係なく直にQxは全てLになる。というものです。A,Bは両方Hになった時だけHを出力するandゲートになってます。
ldi scroll,5 ldi zero,0 ldi tempA,low(data*2) ;データアドレス下 ldi tempC,high(data*2) ;データアドレス上 add tempA,scroll ;相対座標の下位ビットを加算 adc tempC,zero ;相対座標の上位ビットを加算 mov ZL,tempA ;テーブルポインタ下位ビット設定 mov ZH,tempC ;テーブルポインタ上位ビット設定 lpm ;r0にデータをロード data: .db 0x07,0x02,0x03,0x2f,0x0a,0x55,0x45 |