Arduinoをつかって3進カウンタを作ってみた

以前にArduinoの開発環境を整えたという記事をかきましたが、今回はそれをつかって3進カウンタを作ってみました。

ハードウェア(回路)

今回はD-FFを使って3進カウンタを設計しました。まずは状態遷移表を作成しました(表1参照)。遷移表ができたので次はカルノー図を設計しました。カルノー図の記述はさすがに面倒くさいのでカットして、結果の特性方程式を示します。
 

表1 状態遷移表
入力 現在の状態 次の状態 出力
A Q1 Q0 Q1+ Q0+ Z
0 0 0 0 0 0
1 0 0 0 1 0
0 0 1 0 1 0
1 0 1 1 0 0
0 1 0 1 0 0
1 1 0 0 0 1
 \begin{eqnarray} Q_{0}^{+} = \overline{A}Q_{0} + A\overline{Q_{0}}\overline{Q_{1}} \end{eqnarray} 
 \begin{eqnarray} Q_{1}^{+} = \overline{A}Q_{1} + A{Q_{0}}\overline{Q_{1}} \end{eqnarray}

特性方程式からD-FFの応用方程式にさせて、係数をもとめます。D-FFの応用方程式は下のような式になります。

 \begin{eqnarray} D = g_{1}Q + g_{2}\overline{Q} \end{eqnarray} 

次に、Q0+、Q1+に対応させます。また、カウント入力Aはクロックパルスに流用してA = Cp = 1とするとD0、D1は以下のようになります。

 \begin{eqnarray}  D_{0} = \overline{A}Q_{0} + A\overline{Q_{1}}\overline{Q_{0}} = \overline{Q_{1}}\overline{Q_{0}} \end{eqnarray} 
 \begin{eqnarray} D_{1} = \overline{A}Q_{1} + AQ_{0}\overline{Q_{1}} = Q_{0}\overline{Q_{1}} \end{eqnarray}

これを元に回路図を書くと下のようになります。

 

f:id:pgpg-sou:20131012032812p:plain

回路図を元に実際に回路を組んでみました。そしたら写真のようになりました。

f:id:pgpg-sou:20131011171608j:plain

ソフトウェア

前回インストールしたADK2012 IDEを起動し、新しいスケッチを作成し、以下のコードを入力し、適当な名前で保存します。

#define LED_PIN 46
#define VCC 47

void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(VCC, OUTPUT);
digitalWrite(VCC, HIGH);
}

void loop() {
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}

実行

Arduinoの46ピン、47ピン、GNDからコードを伸ばしてそれぞれクロック、VCC、GNDの所定の場所にさします。ArduinoとパソコンをUSBケーブルでつなぎ、IDEから実行すると、無事に光りました~~~~~。

まとめ

というわけで、今回はArduinoを使って3進カウンタをD-FFを用いて作成しました。ソフトウェアの方は全然難しくなかったのですが、やっぱりハードウェアが大変でした。設計をして、回路図を書くところまではスラスラいったのですが、普段からあまり回路を組まないせいもあって回路ではすごく手間取りました。回路を組んだのはいいけど、なかなか思いどうりの動作をしなかったりと、様々な艱難辛苦をのりこえてなんとか完成しました(笑)今度はArduinoAndroidを合体してなんかできたらいいなーとおもいます。