ポケコン PC-G850Vで電子回路工作(3/22)
最初はあんなに詳しく一から考えたわけじゃない。
まずなんでデータAがCLKとずれてるのかな?じゃあCLKの立上がりの前で1かな?続けて1かな?
じゃあ次のCLKの準備だから立下りで1かな?おーうまくいった。じゃあこれを1CLK毎に繰返せばいいのか~
でも本当にそれでいいのかな?理屈は?という風にあとから詳細はついてきたのだ。
なんかひどく難しくなってしまっていたが、要はそういう事だ。
で今回は出来上がったデータを表にしてきれいにまとめた。

一番下にgoogleシートでの関数の式をメモしてある。
今度はそれを実際のタイミングチャートにするとどうなるか示している。

最初の表と横に揃えた方が分かり易かったのだが、ちょっと幅が窮屈なのでこうして縦に分けた。
上のLED表示はそれぞれの1片がa~hで、隣は数字の1の場合、2の場合を示している。ここでhは使われていない。
そして列10~12は、LEDの場所と相当するICの出力ピンを示している。ちょうどその下のタイミングチャートとも縦を揃えている。
そして列13以降がタイミングチャートで、0(Low)を灰色にして1(Hi)を目立たせるようにしている。
1の場合、LEDのcとbに相当するQFとQGのピンがONになるようにCLKの立上がり前から立上った後まで(立下り直後から立下り後直前まで)を1(Hi)にしている。以下同様。最後に式もメモ。(ダミーはどこに行ったって?最初のCLKの2回分DATA(A)がLOWになっている所がダミー。8回CLKで送ることで、7セグで必要な7つのデータからはみ出して使われない。)
やっぱり最初からこうやって考えたわけでなく、うまくいったから、じゃあ信号はどうなの?って考えてまとめたらこうなっていたというわけ。あとづけ。でも前のもそうだけど、ここに備忘録として残しておけば、次に考える時には、まずこの表から考えてデータを作れるから、1.どの出力ピンがどのLEDを光らせるのか、2.そのLEDは数字のどの部分に当たるのか、3.そして出力ピンはシフトレジスタでどの順番のデータに当たるのか、という風に整理し1、2、3の順で当てはめて考えればいい。まめにメモ取ることは頭の整理になるだけでなく、後から忘れた事を思い出す手助けになるのだから。
【Cプログラム】
main() {
char a[190]={
4,6,4,6,4,6,4,6,4,6,4,6,5,7,5,7,98
4,6,5,7,4,6,5,7,5,7,5,7,4,6,5,7,98
4,6,5,7,4,6,5,7,4,6,5,7,5,7,5,7,98
4,6,4,6,5,7,5,7,4,6,4,6,5,7,5,7,98
4,6,5,7,5,7,5,7,4,6,5,7,5,7,4,6,98
4,6,5,7,5,7,5,7,5,7,5,7,5,7,4,6,98
4,6,5,7,4,6,4,6,4,6,4,6,5,7,5,7,98
4,6,5,7,5,7,5,7,5,7,5,7,5,7,5,7,98
4,6,5,7,5,7,5,7,4,6,5,7,5,7,5,7,98
4,6,5,7,5,7,4,6,5,7,5,7,5,7,5,7,98,99
};
int p;
foqen("pio","a+");
pioset(0);
p=0;
read:
if(a[p] == 98){
wait(3000);
}
else if(a[p] == 99){
p=0;
goto read;
}
pioput(a[p++]);
goto read;
}
wait(t) {
for(;t>0;t--);
}