Archive for 2013/03/20

シフトレジスタを使わないでやってみる

 午後、遅いお昼を食べに行ってからテスト開始。
 で、○○堂で手に入れた安いブレッドボードでやってたら動作が不安定。午前中のブレッドボードに変えてやりなおし。

 20130320_02

 まず、アノード側の8ピンをシフトレジスタを使わずAVRに直結してテスト。大丈夫ですね。
 実はソフトウエアの部分でちょっとハマりましたけど。演算子の優先順位で。論理演算子って後回しなのね、言語を考えればそうなのだけどもね。ビット演算してるとついやらかすミス。

20130320_03

 つづいて、カソード側のピンもシフトレジスタを使わずにAVRに直結。直結と言ってもシンクドライバをかましてます。LEDを2セットにしたので、Arduino側のピンはAnalog0-5をDigital14-19として使うようにして対応。とりあえず動いてました。

 ただ、12桁表示にはマイコンのピンが足りない。あと空いているのはUARTの2つとSPIの3つ、そしてdigital 13番。全部使えば12桁対応できますが、他のIOが出来ないので表示するべきネタデータが取れないです。動作モードを指定するスイッチすら繋げられない。
 そろそろATmega644Pの出番ですかねぇ。Sanguino系は公式サポートじゃないので試してみるしかないですね。それとも、ATmega168/328系で、せめてカソード側はシフトレジスタ使うかだな。シフトレジスタを使えば12pinが3pinで済むのだから。

違うようで同じような事

 昨夜仕事で帰宅が23:00過ぎになってしまったので、今日の春分の日はまったりと。

20130320_01

 何のことはない、7セグLED 3桁のモジュールの表示。まずはシフトレジスタを使った形式で。マイコンはArduino microにて。このArduino micro、スケッチを書き込む動作が遅い。一旦USBの接続モードを変えているかんじで。特にmicroの機能を使わない&実験くんの時はArduino nanoとかを使っておくほうが速いな。

 ほんでもって、7セグ(小数点があるので8セグですが、慣例的名称として)は、1桁が8×8マトリックスLEDの1行分とみなせます。桁単位でダイナミック点灯させるので、MAX8個しかLEDが同時点灯しない。これならアノード側はシフトレジスタを使わずとも、ATmega単体で処理できそうですね。と言うわけでこれからお試しです。