2015年 03月 21日
ポケコン PC-G850Vで電子回路工作(3/21)

ちょっと見づらくなってしまったが、元のフィットホームページ様のタイミングチャートと見比べてほしい。

①のオレンジの所が元の図でクロックがLowになった時で、それに対応する①の青い所が、データAがHiになっている事を示している。
②の黄色の所が元の図でクロックがHiになった時で、それに対応する②の青い所が、データAがHiになっている事を示している。
③のオレンジ+薄オレンジの所が元の図でクロックがLowになった時で、それに対応する③の青い所が、データAがHiになっている事を示している。
ちょっと戻るが、①が半端な長さだったのが、仮に④の点線のようだったと考えれば、長さは同じになる。
つまり、クロックがLow,Hi,Lowと変化している間に、それに対応するデータAはHi,Hi,Hiになっている。
これはCLKのLow→Hi(立上がり)になる前から、データAをあらかじめHiにしているという事なのか?(①の所)
なぜCLKとデータAがLow,Hi,Lowでぴったり一緒にON/OFFしてはだめなのか?
その方が簡単ジャン?と思うのだが、この立上がりというのは実際はまっすぐ上に立上るのではなくて、ある期間かけてゆっくり坂を上るようにLow→Hiになる(現実は急に0から5Vに上がるのは自然ではないという事)のだ。
【Wikiより】

その期間どの時刻にICがクロックをHiにしたと考えるかは、使う側には正確にはわからないのである。
そうするとあらかじめ坂の手前でデータAをHiにしておいて、坂を上り切るまでHiにしておけば、ICは坂を上っている間いつでもデータAを取りに行けることになりICはデータAがHiになった事を検出できるというわけだ。

だからデータAをHiと認識させるためには、クロックの立上がりの前後でHiにしてやる必要があるのだ。
【参考:Wikiより】

となっており、74HC164(CMOS)では、0-(0.3*Vdd)=0.3*5V=0-1.5VをLow、0.7*5=3.5 3.5-5VをHiとみなしている。
もちろんこのタイミングチャートではデータAがクロックよりちょっと前に変化しているように描いてあるから、立上がりで検出するんだなとわかるのであって、逆にクロックが下がる少し前に変化しているように描いてあれば、立下りで検出するんだなという事になり、それに合わせてデータAを変化させてやらなければならない。
データAがHiと書いてあった上の表現は実はHiではなくLowでもよい。HiかLowのどちらかの値がデータAの値として検出されるのだ(そりゃそうだ)。だからデータAの部分はクロックのように上に凸になっているのではなく四角で書かれている。QAも同じ。(またCLKだけが坂になっているのではなく、データAももちろん坂になっているのだ)
またICはQAピンを、CLKがHiになったタイミングで、データAの値にしている。
これをクロックがHi→Lowになっている間に繰返している。
じゃあ、CLKがLowになった時はどうするのか?何でもいいように思うが、Lowになった時は同じように、次のデータAをHiにする準備としてHiにしておかなければならないのだ。つまり1CLK毎に繰返しているのだ。(またHiと書いてあるがLowでもいい)
これが元の図と違うところだ。

つまりクロックがLow→Hiになる際にデータAをHi,Hiのように同じ値にするのだ。
本当はもっと正確にクロックが立上る前後だけデータAをHiにすればいいはずだし、逆に変なところでデータAがHiになっている(たとえばクロックの立下りで)とおかしくなるかもしれないのだ。ICの種類やタイミングがシビアなものの場合は。
でもこの場合は、ポケコンが自分でクロック信号を作っている「同期用クロック」というやつなので、クロックの幅も全然ゆっくりだし、自分で決められるので別にクロックといってもHiとLowで同じ長さになっている必要もない。
で、ICもクロックがHi→Lowになる間にデータAがHiとからLowに変化してしまっていても、うまくいくようだ。
つまり立下り中にデータAが変化しても問題ない。
こんな大雑把な動きでは本当にシビアなタイミングチャートは正しく動かないが、今回はこれでうまく動いている。
この数字を作るデータ列はろくに調べずに実際にやってみてうまくいったに過ぎず、簡易的なものである。だがこれでBASICはうまくいったし、数字を表示する処理には十分だった。
簡易的なのだが、一応理屈は以上のように考えてやっている。
タイミングチャートは、こんな感じで試行錯誤することが多いんじゃないかな。
正解に近い処理はあるかもしれないが、すべて誤差範囲。ハードって100%完璧で動いている訳じゃないのが、最近分かってきたのできっとこういう適材適所?実利優先?みたいな考えでやっているのだろう。
【まとめ】
クロックの立上がりの前後でデータAの値をキープするように信号ピンをON/OFFしてやればよい。
立下りでは特に気にする必要はない。
なので立下り直後~立下り直前までデータAの値をキープすればよい。

