Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/317-bf0eeb69

-件のトラックバック

-件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Arduino+TC74HC595AP

長年プログラマをしてきたが、気が付けば、制御しているものは、ハードディスク、ネットワークデバイス、モニターばかりで飽きてきた。

ということで、Arduino(Made in ITALY)です。

そんな、Aruduinoには、出力PINが14本アナログ入力PINが6本ついてる。アナログPINは出力PINに設定できるが、これを使っても最大で20本までしか制御できないOrzと思ってたら、シフトレジスタなるモノを使えば、もっといける!! 

という事で、今回は3本の出力PINで16個のLEDを操作してみる。応用すれば6×16=96までいけるのかな。(さらにマトリックス方式にすれば、48×48=2304までいける?)

参考にしたのは以下
http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=2349
http://isa.asablo.jp/blog/2010/01/20/4824466
http://arduino.cc/forum/index.php?topic=17519.0

まずは、秋葉で部品を購入。
IMG_9788.jpg
ジャンパーコード(オス・オス)200円 ×2

IMG_9790.jpg
LED 100個 400円

IMG_9836.jpg
1/4W 150Ω抵抗 100本 100円

IMG_9833.jpg
シフトレジスタ TC74HC595AP 170円 ×2

IMG_9844.jpg
絶縁型ラジアルリードタイプ積層セラミックコンデンサー0.1μF50V10個入5mm 100円

あと、ブレッドボードを一枚。値段と写真は失念。

お店は、
IMG_9780.jpg
千石電商
IMG_9781.jpg
秋月電子
で購入。 他店も覗いてみたが、圧倒的にこの2店が安い。 平日の昼間だというのに、けっこう混んでいた。

で、繋いでみる。 ハンダ付けなんてしないでただ繋ぐだけ。
IMG_9838.jpg

Arduinoの日本語リファレンスのshiftOutの図を参考にしつつ、以下の様に、シフトレジスタを直列に二つ繋げるのがポイント。
74HC595.jpg
注1)74HC595のOEとGND MRを5Vに繋ぐこと(5vへの接続及びGNDへの接続は1レジスタあたり2カ所ある)
注2)ST_CPとAruduinoのデジタルピンとの間に0.1μってのがGNDへの接続が図ではあるが、これが、積層セラミックコンデンサー0.1μFになる。理由などなどは、こちらのQAによると、ノイズ防止の為のもので、無くても良い様だ。購入して付けてみたが、付けてスケッチ(コードのことを、Arduino界ではそう呼ぶらしい)を書き込みしようとすると、「avrdude: stk500_getsync(): not in sync: resp=0x1c」などとエラーがでて書き込みが失敗してしまうので、外した。原因は、後日。

レジスタまわりのアップ
IMG_9841.jpg
この写真じゃ、何がどう繋がっているのか、解りにくい。。。 ソフトだけなら、こういった基礎動作検証ものを、ハードディスクにストックしておけば、それが自分の財産になっていくのだが、ハードはこういったものをストックするのにコストがかかるのが難。
IMG_9848.jpg
なので、やっぱし写真に取っておくしかない。
IMG_9842.jpg
無機質な同じものが沢山、しかも、じゃっかん揺らいで繋がる姿は好き。
IMG_9843.jpg
レトロフューチャーな感じもしてイイ。。。 などと絵になる構図などは不要なのだが。。

コードは以下

int dataPin = 0; // 74HC595のDSへ
int latchPin = 1; // 74HC595のST_CPへ
int clockPin = 2; // 74HC595のSH_CPへ
int val;
int h;
int l;

void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}

void loop() {
// LED1からLED16までを順に光らせます
for (int j = 0; j < 16; j++) {
// 送信中のlatchPinはグランド(LOW)レベル
digitalWrite(latchPin, LOW);
// シフト演算を使って点灯するLEDを選択しています
val = 1<<j;
h = val>>8;
l = val & 0xff;
shiftOut(dataPin, clockPin, LSBFIRST, h);
shiftOut(dataPin, clockPin, LSBFIRST, l);

// 送信終了後latchPinをHIGHにする
digitalWrite(latchPin, HIGH);
delay(100);
}
}


で、実行すると、
http://www.youtube.com/watch?v=ODCijiUmSq0

こういう工作は、自分には不可能だと思っていたが、Aruduinoのおかげで簡単にできる。
といっても、今はLEDをチカチカさせているだけだが、、、
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/317-bf0eeb69

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

kovayashi

Author:kovayashi
・嫌いなもの
 →好きなもの

・インストール
 →バンドル
・バックアップ
 →アップロード
・努力
 →チート

最近のトラックバック

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。