・TD4(ICのみ)の電流値は20mA程度。LEDは1個に付き12mAです。
仮に全てのLEDが点灯した場合、20+12*10=140mAとなります。
・電流はArduino UNOの5Vピン(最大200mA)で十分でした。
アダプタとジャックは買う必要ありません。
・ROMはArduino UNOにまかせてよかった気もします。
https://hackaday.io/project/8442/gallery#9b10d6c3077fde6e4e7ec6aaad3083c8
・部品は調べていたらもっといいものがありました・・・。
タクトスイッチ
http://akizukidenshi.com/catalog/g/gP-08074/
トグルスイッチ
http://akizukidenshi.com/catalog/g/gP-02399/
・書籍は意図して必要な情報を抜いています。
「部品リスト」「配線図」「データシート」はどれも必須です。
・回路図は書籍からコピーします。3ページは忘れずに。
拡大するのもいいかも。本に癖がつくのが嫌な方は、図書館で借りるの手です。
・データシートは「ピン接続図」と「真理値表」をそれぞれ印刷します。
pdfでいいやと思っていると、デバッグのときファイルを開く操作で時間を取ります。
一回の操作どころか、数十回は見積もった方がいいです。やはり紙での作業こそ至高。
・配線図は自分で作ります。といってもデータシートの「ピン接続図」を画像コピーして、
wordなどに紙1枚につきIC2,3個貼り付けるだけです。印刷後、回路図を見つつ接続ピンを自分で書く。
自分用の資料なんだから見栄えはどうでもいいんです。
・全体の配線図はこちらをどうぞ。動作済みだから間違いないです。
超読みにくいですけど、書くの2回目なんで勘弁してください。
・作る順番は電源、クロック、リセット、ROM、CPU。
・「電源、クロック、リセット」を作ったら電源ON。
クロックとリセットにはLEDをそれぞれ付けます。
最悪、5VとGNDを逆にしてもコンデンサ、74HC14だけ壊れるだけです。
・誰得ATMEGA328PのROMソースコード。
/*
IDE 物理ピン 名称
3 5 D0
4 6 D1
5 11 D2
6 12 D3
7 13 D4
8 14 D5
9 15 D6
10 16 D7
16 25 A0
17 26 A1
18 27 A2
19 28 A3
※スケッチの書き込み用ピン
- 1 RESET
- 17 MOSI
- 18 MISO
- 19 SCK
*/
#define _A0 16
#define _D0 3
void setup()
{
for(int i=0; i<4; i++)
{
pinMode(_A0+i, INPUT);
}
for(int i=0; i<8; i++)
{
pinMode(_D0+i, OUTPUT);
}
}
byte tmp = 0xff;
void loop()
{
byte t = 0;
byte d = 0;
for(int i=0; i<4; i++)
{
if(digitalRead(_A0+i) == HIGH)
{
t |= (1 << i);
}
}
if(tmp == t)
{
return;
}
t = 0;
// 変化中に読み込んだ可能性があるのでリトライ
for(int i=0; i<4; i++)
{
if(digitalRead(_A0+i) == HIGH)
{
t |= (1 << i);
}
}
tmp = t;
// ラーメンタイマー
switch(t)
{
case 0x00: d = B10110111; break;
case 0x01: d = B00000001; break;
case 0x02: d = B11100001; break;
case 0x03: d = B00000001; break;
case 0x04: d = B11100011; break;
case 0x05: d = B10110110; break;
case 0x06: d = B00000001; break;
case 0x07: d = B11100110; break;
case 0x08: d = B00000001; break;
case 0x09: d = B11101000; break;
case 0x0a: d = B10110000; break;
case 0x0b: d = B10110100; break;
case 0x0c: d = B00000001; break;
case 0x0d: d = B11101010; break;
case 0x0e: d = B10111000; break;
case 0x0f: d = B11111111; break;
}
for(int i=0; i<8; i++)
{
digitalWrite(_D0+i, (d & (1 << i)) ? HIGH : LOW);
}
}
・全てのICソケットと配線を済ませたら、ショートしていないかチェックをします。
DCジャックの横にある1kを外してやると確実。
・最初の動作テストはROMをすべて0にして、アドレスが一周することを確認。
問題なければラーメンタイマーをセットする。
・おかしい動きをしているアドレスを発見した場合、1つ前のアドレスを確認する。
補助にエミュレータとLEDを使う。
片方をGNDへ。もう一方をICの足にくっつけます。
・デバッグの進め方は大きく分けて2種類。
OUT用LED側か、ROM側か。ROMの方から出発すると発見しやすい。
・プリント基板なんだからショートはないっしょ、
と思っていたらありました。orz
あれですよ、注文10分前にビアがピンに近すぎるので配線変えて、
ベタGNDを変更しないままガバー作っちゃったって話です。
問題を見つけるだけで2,3時間パー。泣きたい。
・IC取り出し器具は買いましょう。
僕みたいにドライバーでやってぽっきりいかないように。
TD4は作るに当たっての情報収集能力が問われるというか、
よしやるぞっ!て決めてからの意識が違うと思います。
ミスも大量にして、人間間違いをして覚える生き物なんだなと
改めて痛感した次第です。