一向に進まない4桁7セグLED(x2台)表示テストです。
下記のArduinoの事例を真似てブレッドボードに配線したのですが、
上手いことPICプログラムを書けませんでした。
どちらもC言語ベースだからいけるかな?と思ったのですが、
ちょっと甘かったようです。
C言語プログラミングの知識不足はとりあえず右に避けておいて、
まず、74HC595がどんな動作をするICなのかを確認したいと思います。
データシートを眺めてもピンとこなかったので良い事例が無いかと探して、
見つけたのが下記のサイト。
Arduinoだとシフトアウト関数が使えるようですが、PICには無いようなので自作関数を使われています。
何故サイト主はオシロを繋いで確認しているのか?
イマイチピンときていませんでしたが、
ちょうど使用されているPIC12F1822もオシロ代わりのAnalog Discoveryもあるので、試してみました。
カソードコモンのLEDバー・・・
先日購入したaitendoのものが使えそうだったのですが、Arduino UNOの端子に合わせた脚になっているのでブレッドボードに挿せないと思い、
代わりの抵抗入りLEDを、74HC595出力のQA~QHまで右から左へ並べました。
そしてサイトに掲載されていたプログラムをそのまま実行しました。
文脈とコードから察するに、5=0b00000101(0x05) 8ビット出力していると思います。
Analog Discovery 2のアナログ端子をブレッドボードに繋ぐと回路が誤動作しているようだったので、デジタル端子に繋いでロジックアナライザーで見てみました。
(多分アナログ計測は、計測器側のインピーダンスが低くいためオプションのプローブを繋がないといけないのだと思います。)
この時点では、何を言っているのか判りませんでした。
多分8ビット転送だから、MAX255を送信すればLEDがいっぱい光りそう。
思惑通り8灯全点灯しましたね。そのときの波形が下記。
”SI”が左端から"Hi"になっていますね。ここまでやって何となく読めてきました。
次は”9”を送ってみました。
2進数表記だとそうなりますよね。そして波形は下記。
SCK(8ビットのクロック)立ち上がり時にSIが"Hi”だったビットに1を転送するようです。
上図で③~①付近を拡大してみると、
SCK立ち上がりの瞬間だけSIが"Lo"に落ちていました。
隙間少ない・・・結構シビアなPICプログラムだったようです。
最後にRCKを”Hi”にして、読み取った8ビット分のQA~QHを出力(ラッチ)するという動作のようです。
ちょうどこれで7セグLED1文字分の表示に当たりますね。
サイト主がオシロを繋いで確認したかったのは、恐らくサイクルタイムでしょう。
桁数が増えると、更新スピードが遅くなりますからね。。。
先ほどまで2つの74HC595を、上図のように1つの4桁7セグLEDに繋いでいました。
各々の数字は右のICで決めて、左のICで表示桁数を決めるイメージです。
74HC595だとラッチされているので表示がちらつかないと思っていたのですけど、
この回路だとダイナミック点灯することになってしまいますね。
表示値を維持しようとすると、PICマイコンはずっとコマンドを送り続ける必要がありそうです。
4桁表示x2台だと、一文字毎にICが1つあって、一度に8ビットx8桁分データ転送が出来ないと、ちらつきは抑えられないと理解しました。
やはりプログラムに取り掛かる前に部品の特性が腹オチしてないと進めません。
こうなってくると、TM1637を2つ使う方が良かったかな?(汗)
既に74HC595関連でいっぱい投資したのに・・・(T-T)