こんばんは
電子工作
もう一週間以上になりますが、ライフゲーム基盤の縦増設
完成したと思っていた基盤がどうしても期待通りの動作をしません
データは間違いなく流れているし基盤設計も配線も間違っていません
どういうことか全点灯になってしまいます
こんな状況がずっと続き、なんとかこれを解決しようと孤軍奮闘していました
昨日はシンクドライバのCOMMON端子について調べて対処しましたが、解決しません
今日はまず初心に帰り2x2の基本基盤に戻ってみました
するとどうでしょう、ちゃんと動いていたはずのライフゲームが今悩んでいる状況と同じ全点灯になるではないですか
これはおかしい、じゃあ横に増設した16x32はどうだと試したところ、これもちゃんと動いていたはずが同じ全点灯
プログラムは一切変わってないのに動作が変わった
ということは、これは完全にハードの問題だ・・・
疑わしいのはシフトレジスタSN74H595の誤動作
なんらかの原因でデータをまともに処理できてない
ネットで色々と検索してみると少し状況は違うんですが、SN74H595の雑音(当然電波やサージのこと)による誤動作に対してクロックピンにコンデンサーをつないで解消したという記事がありました
コンデンサーをGNDにつなぐだけなので大きな事故にはならないだろうということで、ダメもとでやってみることにしました
6個あるSN74H595の11番ピンとGNDを0.01μFでつなぎました
恐る恐るスイッチオン
変わらず全点灯、だが待てよ・・・
少し動作がぬるい、マイルドな動きになっている
考えてみれば当然のことでコンデンサは充放電にそれなりの時間がかかるためです
・・・ということは・・・
SN74H595のVccとGND端子間につないである0.1μFのパスコン、これが信号の遅延を招いているのではないか
シフトレジスタはシリアルデータを順番に受け取りこれをまとめてパラレルで出力する
データは1ビットずつ受け取るのにクロックに乗って2本の信号のHIGHとLOWと同期している
この同期がずれることが原因かも・・・
早速、基盤上のコンデンサを全部取り除き、ついでに昨日のシンクドライバのCOMMON端子も元に戻して、すっぴんにした
これでどうだ!と、恐る恐るスイッチオン
まだまだ程遠い状態にがっかり
だが待てよ・・・
よくみると今までと様子が違う、明らかに良くなっていてあと一歩といった感じがする(ここはカンですね)
そうか、昨日のシンクドライバの件、これは信号とは関係ない部分だからまたつなぐことにしよう
これでどうだ!と、またまた恐る恐るスイッチオン
出た!出た!出た!
予定していたテストパターン
この日をどれだけ待ったことか、待ったというよりよくぞまあここまで辛抱強くかじりついてこれた
完全に根性の勝利ですね
まさに赤壁で曹操を蹴散らした劉備玄徳
恋するお通にやっと会えた宮本武蔵
そんな気分です
できてみれば何のことはないのですが、そもそもの原因はパスコン
少し前に読んだ『CPUの創りかた』
この本にICの動作に必要な電力の不足を補正するのでこれがあるとICの動作が安定するとのことだった
このことをちゃんと理解せずに鵜呑みにして、ただ単に「転ばぬ先の杖」みたいに応用していたのが間違いだったようです
ライフゲームを動かしてみました
綺麗に写っています
しかし一つ疑問があります
それは前のお天気ボード、これも同じシフトレジスタを6個使ってそれぞれにパスコンをつけています
これは何ともなく動いています
よくよく考えてみるとお天気ボードは横長ということです
横方向のCOLデータはプログラム中では二進数で表現していてビットシフトなどCPUの得意な処理をしています
一方、縦のROW方向データはPython言語のリストを使って整数データがドットの数だけ並んでいます
ということはROW方向のデータ処理はCOL方向のデータ処理のおそらく何倍もの負荷がかかっているということです
今回の現象とその解決のために調べたことや試したことはいい勉強になりました
ネットで調べたり人に聞いてあっさりと片付けていたら勉強にならなかったでしょう
それにこんなに嬉しい達成感も味わえなかったでしょう
愚かなり!
転ばぬ先の杖につまづいてしまった!
縦増設をすると全体的に遅くなりましたが、今度はこれを横にもつないで最終的に32x32にします
今週末にアマゾンにLEDを注文するのでそれが届くのが9月下旬、それまでに基盤を作って待つことにします
あ〜、しつこく食い下がってよかった・・・
※コメント投稿者のブログIDはブログ作成者のみに通知されます