2013年12月30日月曜日

74HC595と74HC138Nで16x8(8x8x2)マトリクスLED点灯

シフトレジスタ74HC595とデコーダ74HC138Nで8x8のマトリクスLED2個を動かしてみた。
  • マトリクスLEDのアノードを74HC138Nの出力に接続(行)
  • マトリクスLEDのカソードを74HC595の出力に接続(列)
  • 74HC595を連結(1個目のQ7Sを2個目のDSに接続)
  • 74HC138N、74HC595ともに入力はジャンパーピンでHL切り替え
  • 74HC595のクロックはスライドスイッチで行う
  • いわば手動ダイナミック制御
  • 簡単な回路なのに手持ちのジャンパーピン全部使用
  • とくにマトリクスLEDの下部に配線するのに腐心した
  • 次はAtmega8で制御予定


動作風景

2013年12月29日日曜日

秋月PINフォトダイオードガイガー制作(2)

秋月の回路図を改めて確認したところ、アナログ部の出力をPICマイコンのAD変換ピンに挿してるっぽいことに気づいた。

アナログ部の出力を外部割り込みするんじゃなくてAD変換するのが正解っぽい。

ということでAtmega8でAD変換してみた。

  • アナログ部出力をADC0に接続し、その結果をLEDに出力
  • Atmega8のAD変換は10bitなのだが上8bitのみを使用(ADLAR)
  • 連続AD変換と割り込みを利用してLED表示用バイト領域を更新
  • 200kHzを超えると変換精度が下がるらしいのでAD変換用タイマーをck/8にする
  • 基準電圧に内部2.56Vを使用
----
----

で、実験結果。

  • PINフォトダイオードのアルミ遮蔽が不十分らしく太陽光があたると電圧低下する様子
  •  →簡易照度計完成(アレ!?)
  •  →AD変換はできてるっぽい
  • やはり手を近づけるとLEDがチラチラする
  •  →静電気に弱し
  • マントルを近づけるとチラチラするものの静電気のせいかどうか判別不能


ふーむ。PINフォトダイオードのアルミ遮蔽をしっかりやって再実験の必要がありそうだ。

2013年12月24日火曜日

秋月PINフォトダイオードガイガー制作(1)

秋月のPINフォトダイオードガイガーキットの回路をサイトのマニュアルを元にブレッドボード上に作成してみた。


マニュアルの回路図のアナログ部を作成してテストポイントをAtmega8のINT0に接続。

ハイインピーダンスモードで割り込み。

割り込みがあったらLED点灯というシンプルなもの。


なのだが。うまく動作しない。

マントルを近づけても反応なし。

指を近づけると静電気のせいか光る。
マニュアルにあった静電気対策(PINフォトダイオードのアルミカバーをアース)していないせいかも。

あと色々試したところスマホのカメラ用フラッシュを利用したライトに反応する。

強力な光なのでアルミ箔を通過するんだろうか?

原因としては回路のC3(1pF)が入手できなかったので代わりに2pFを挿してるせいが有力。

他の抵抗だとかを調整してやれば動きそうだが回路の動作原理を全く理解していないので困難。

どうしたものか。OPアンプとかの勉強すべきだろうか。すべきだろうなあ

2013年12月10日火曜日

島根県出雲市の線量上昇 低気圧による影響?

xively.comのGC10 cpmグラフが上昇していた。

1日グラフ
1週間グラフ
atmc.jpでもほぼ同様

天気図はこんな。
http://www.jma.go.jpより

台風26号のときと似た天気図かも。

北陸から山陰にかけて日本海側各地で上昇してるっぽい。

ただ新潟には上昇がみられないから福島由来ではないのかも。

とすると福井の原発銀座あたりかなぁと。





2013年12月9日月曜日

マトリクスLEDでライフゲーム

というわけで定番のライフゲームを実装してみた。

動作風景


ソース
----
----

まあどうってことない。

で、動作確認してて気づいたのだけど、光らない列が1列あった。

調べたらハンダ剥がれとった。ぐむぅ。修正。

2013年12月5日木曜日

USBマトリクスLEDディスプレイ(1)

以前、ブレッドボードに作成したUSBマトリクスLEDディスプレイをブレッドボードに実装してみた。

左がUSB-UART変換モジュール、中央にマトリクスLED、右にAtmega8、上部にISPコネクタ

基板ウラ面
動作風景

感想など


どう考えても結線がクロスするので最初から細めの耐熱ワイヤを使って繋いでいったのだけど、

Atmega8のポートとマトリクスLEDの端子をもう少し考慮して、

マトリクスLEDの端子間にAtmega8を配置すればもっと綺麗に配線できた気がする。。。

プログラムは以前作成したものを使ったが、なぜだか特定のビットパターンをUSARTで受信すると暴走するので少し直した(簡単なパターン送信Rubyスクリプトも追加)。

直した点は
  • USART_RXC_vectの中でフレームエラーをチェックしてる部分を削除
  • UCSRBの送信フラグTXENを0に
フレームエラーが一度発生した際にUDRを読み込まずに延々とフレームエラーで割り込みがかかり続けたのではないかと想像。

次はプログラムを修正して待機モードを作成しようかと、

  • 待機モード中は幾何パターンとかビットマンとかライフゲームとか適当に表示
  • USART受信したらしばらく受信パターン表示
  • 最終受信から適当な時間経過したら待機モード移行

2013年11月23日土曜日

LEDケーブル+メロディIC+Atmega8-16PU => クリスマスイルミネーションボード

というわけで100均LEDケーブルと電子オルゴールキットをAtmega8-16PUで制御してクリスマスイルミネーションを作成してみた。

動作風景




感想
  • 回路やプログラムはマトリクスLEDの制御でそこそこ経験を積んでたので以外とあっさりできた
  • LEDケーブルにワイヤハンダ付けしたりスチレンボードを探したりとかの方が面倒だったり
  • 使用したパーツだけでも2000円はかかってることを考えるとまあ微妙っちゃ微妙(量産すれば500円とかにできるんだろうけど)
  • スチレンボードとか火がついたらヤバいよね
  • LEDの位置は適当すぎたかもしんない、もうちょい拘ってもよかった
  • だが面倒


回路説明

  • Atmega8 PC0,PC1,PC2にLEDケーブル(白、赤、青)を接続
  • Atmega8 PC3をメロディIC UM3481のSLに接続
  • Atmega8 PD2(INT0)をプッシュボタンに接続(プッシュでGND立ち下がり)

ざっくり制御概要

  • プッシュボタンでメロディスタート、メロディと共にLED点滅
  • ボタンを押す毎にメロディ、LEDパターンを変更

ちょびっと詳細説明
  • プッシュボタンでINT0割り込み
  • INT0割り込み処理でUM3481 SLをH(次曲選択)、LEDパターンの変更、LED累積表示時間のリセット
  • メインループでLED累積表示時間が設定時間(=60秒)未満ならLEDパターン表示
  • メインループでLED累積表示時間が設定時間以上ならLED消灯

回路以外の材料

  • 100円ショップPET素材のクリスマス飾り(壁掛け用?)
  • 100円ショップ木箱
  • 100円ショップA4スチレンボード(2枚入り、爪楊枝を指して2枚接続)
ブレッドボード上UM3481、ブレッドボード下Atmega8とLED駆動トランジスタ等
プッシュボタン、LEDケーブルとボード
LEDケーブルをボードに貼りつけ


ボードに壁掛け飾りをかぶせる
Atmgega8プログラム
----

----

2013年11月16日土曜日

100円ショップ クリスマス用デコレーションLEDライト=スライドスイッチ付き電池ボックス+LED10球ケーブル

100円ショップシルクに大変お買い得な商品があったので買ってみた。

クリスマス用デコレーションライト。



たった105円でスライドスイッチ付き電池ボックスとLED10個付きケーブルが手に入るのだ。

これは大変お得。

LEDは赤、白、青の3色があるので3つともゲット。

単体では電池を入れるとスイッチオンオフで点灯、消灯するだけのシロモノだが。

分解してLEDをマイコンに繋げば点滅パターンは思いのままに。

よーし。パパ、クリスマスツリー用オリジナルデコレーションライトでも作っちゃうぞー。

秋月電子ブレッドボード電子オルゴールキット(2)

ベースのキットに以下の変更を加えてみた。
  • 電源を1.5V単四電池から3.3Vブレッドボード電源モジュールに変更
  • メロディICをUM3482からUM3481に変更
  • 圧電ブザーを8Wツイーターに変更

動作風景

圧電ブザーよりツイーターの方が音が断然いい。

昔のファミコンのような音で懐かしい感じ。

UM3481はUM3482よかエフェクトに拘ってる感じではあるけども、ジングルベルとか音量小さくなるのが☓だなぁ。

UM3482のように素朴で良かったのに。


あとUM3481をブレッドボードからはずすときにピンをあからさまにねじ曲げてしまった。

指で直そうとしたけど下手にすると完全に折れてしまいそうなので、ねじれたまま(´・ω・`)ショボーン



なんか綺麗にはずせるうまい方法はなきものか。

2013年11月15日金曜日

機材追加 秋月電子ブレッドボード電子オルゴールキット等

マトリクスLEDので大量のジャンパーピンを消費したこともあって、秋月でジャンパーピンを追加することにした。

せっかくなのでメロディICを使った電子オルゴールキットも購入。てかこっちがメイン!?
送料込みで\2,500なーりー。



その他は

  • 8Wスピーカー(よくわからないけど買ってみた。)
  • クリスマスソングメロディIC(シーズンなので)
  • スペーサー+プラネジ
  • マイクロUSBDIP化キット(便利かなと)


で、早速オルゴールキット組み立ててみた。

親切丁寧なマニュアルがあるので20分くらいで完成。



動作風景


圧電スピーカーのチープな電子音が物悲しい感じ。


にしても0Ωの抵抗=ジャンパーピンって電子工作以外に何のために使うのだろうか。

抵抗と同じラインで作れるから安い!とかそんな?

Raspberry PI CPU温度に見る冬の到来

すっかり寒くなってまいりました。

夏ぐらいには最大55度あったCPU温度も40度前後まで下がってます。

ここ数日の急降下がキビシィ。

Atmega8-16PU + USB-UART変換モジュールでUSBマトリクスLED表示器

前回でマトリクスLEDのダイナミック制御ができるようになったので、さらに一歩前進して

USART(シリアル通信)で描画パターンを指定できるようにする。

前回の回路に加えて、以前買っておいたaitendoのUSB-UART変換モジュールを使用する。





回路的には前回の回路にAtmega8のRXとTXを変換モジュールに接続するだけ。

変換モジュールに3.3V電源とGNDがついているのでそれを利用することでUSBバスパワー駆動となる。

信号線と電源が一緒にできるなんてUSB最高ですね。


で、回路は簡単だったのだけどソフトはかなり手こずった。

最初、橋本商会さんのページを参考にしたんだけど、avr-gccなのか、チップ自体の仕様変更なのか割り込みのコードが変わっててビルドエラーになって戸惑う等、落とし穴盛りだくさんな感じだった。

最終的な参考サイトは以下

Interrupt Driven USART in AVR-GCC(PDF)
http://www.fourwalledcubicle.com/AVRArticles.php

http://homepage3.nifty.com/rio_i/lab/avr/03usart.html
http://homepage3.nifty.com/rio_i/lab/avr/03usart.html

ソースコード
----
----

解説

usart.c

  • Atmega8-16PU用プログラム
  • シリアル通信はRX(受信)のみ
  • 1バイト受信したら割り込み処理で1行分のパターン(1バイト)を更新
  • 1バイト受信する毎に更新対象の行を1行ずらす(8バイトで全行更新)
usart.rb
  • テスト用Rubyスクリプト
  • 0x00から0xFFまで1秒ごとに1バイトずつ送信
ハマりポイント
  • シグナルハンドラがSIGNAL(SIG_UART_RECV)からISR(USART_RXC_vect)に変わってた
  • プロセッサの動作周波数はFOSCじゃなくてF_CPUだった
  • UCSRBのRXCIEを立てること(割り込み指定)
  • UCSRCのUSBSを間違って立てていてストップビット2になってた
  • パターンの変数matrixにvolatile指定が必要だった
  • F_CPU 8MHzだと上手く動かなかった -> 1MHzに
最後に動作風景


うし。ユニバーサル基板に実装してUSBマトリクスLED表示器を作るど。

2013年11月10日日曜日

Atmega8-16PUでマトリクスLEDのダイナミック制御

前回確認したマトリクスLEDをAtmega8-16PUでダイナミック制御してみた。

単純なパターンを一定間隔で反転するだけ。



回路はAtmega8-16PUの16ポートにマトリクスLEDを直結しただけ。

一応アノードに100Ωの抵抗かましてある。

当初はシフトレジスタとデコーダ使おうかと思ってたけどAtmega8の出力ポート数足りてたので直結してみた。

割り込みとか入力とかする場合はシフトレジスタが必要になるかも。

プログラムについては、ポートに対応したビット操作だけなんで簡単だろうと思ってたけど以外と手間取った。

特定のビットだけ書き換えたりとか。いや基本なんだろうけど。普段ビット操作なんかしないから。
あとは行表示の前に一度LEDオフにしとくとか、ディレイの入れ方とか。

それとプログラムのバイナリが650バイトで転送に180秒かかる。
ちょっと直しては転送を繰り返すと結構待ち時間がガガガ。

今時のフラッシュメモリデバイスと比べると桁違いに遅い。のはデバイスなのか、ドライバというか転送プロトコルのせいなのか。まあいいや。

作成したプログラム
---- ----


2013年11月8日金曜日

マトリクスLED LD-1088BGY の動作確認

aitendo 8x8マトリクスLED LD-1088BGYの動作確認をした。

サイトにある以下のデータシート?だとピン配置が不明なので、実際にブレッドボードに繋いで確認した。




側面に1088BGと書いてある辺を左として上からpin1、下まで行ってまた左からpin9と定義する。

                    1 2 3 4 5 6 7 8
1  pin01  1 o o o o o o o o pin09
0  pin02  2 o o o o o o o o pin10
8  pin03  3 o o o o o o o o pin11
8  pin04  4 o o o o o o o o pin12
B  pin05  5 o o o o o o o o pin13
G  pin06  6 o o o o o o o o pin14
     pin07  7 o o o o o o o o pin15
     pin08  8 o o o o o o o o pin16
pin01 ... col4
pin02 ... col2
pin03 ... row2
pin04 ... row3
pin05 ... col1
pin06 ... row5
pin07 ... col3
pin08 ... col6
pin09 ... row8
pin10 ... row7
pin11 ... col7
pin12 ... row1
pin13 ... col5
pin14 ... row6
pin15 ... row4
pin16 ... col8

column ... アノード
row ... カソード

       05 02 07 01 13 08 11 16
12  oo oo oo oo oo oo oo oo
03  oo oo oo oo oo oo oo oo
04  oo oo oo oo oo oo oo oo
15  oo oo oo oo oo oo oo oo
06  oo oo oo oo oo oo oo oo
14  oo oo oo oo oo oo oo oo
10  oo oo oo oo oo oo oo oo
09  oo oo oo oo oo oo oo oo

ええとアノードコモンなので、column=列が共通であると。
てことはrow=行毎に描画して、表示する行をLOW、表示しない行をHI。
点灯する列をHI、点灯しない列をLOWとすると。

1行目の描画
    H L L L L L L L
L  o x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
2行目の描画
    H H L L L L L L
H  x x x x x x x x
L   o o x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
H  x x x x x x x x
....
という感じかな。

次はプログラム作ってダイナミック駆動の確認ですな。

しかしこのマトリクスLED、ピンの長さが微妙に足らずにブレッドボードにうまく刺さらん。

グッと押し込んでもビョンと跳ね返る。なんかいい方法ないかなぁ。

2013年11月6日水曜日

AVRプログラマ自作(2) Ubunutu + avrdude + 自作回路 + RS232C USB変換ケーブル

前回作成した回路をユニバーサル基板に実装してみた。





早速、試した見たところ、以下のように途中でエラーとなった。
$ avrdude -p m8 -c ponyser -P /dev/ttyUSB0 -U flash:w:blink2.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.58s
avrdude: Device signature = 0x000102
avrdude: Expected signature for ATMEGA8 is 1E 93 07
         Double check chip, or use -F to override this check.
avrdude done.  Thank you.
どうもデバイス識別コードがうまくPC側に伝わってない様子。

たぶんPCへの入力はMOSIだと思うんだけど、
MOSIの部分の配線を間違えたのかなぁと何度も確認するがやはり正しい。

2,3日悩んでふと回路を触ってみたところ、GNDのラインで一部ハンダがはがれて接触不良を起こしていることがわかった。

その部分をハンダ付け直したらうまく動作した。

基盤裏、一番下がGND
やれやれ。

あー。一応使った部品リストを載せておこう。

2013年11月1日金曜日

AVRプログラマ自作(1) Ubunutu + avrdude + 自作回路 + RS232C USB変換ケーブル

前回、aitendoのAVRプログラマでAtmega8-16PUにプログラム転送できることは確認した。

したんだけど、いちいちWindows起動してプログラム転送するのが面倒。

なんとかLinuxでプログラム転送できないかなぁということで調べてみた。

で、RS232Cと簡単な回路でできそうなことがわかった。


  1. Serial programmer
  2. Simple Serial Programmer for AVR

1.と2.では微妙に回路が違うんだけど、2.の方は~RESETになってるので1.の回路をブレッドボードに作成。

RS232Cの方はUSB変換ケーブルを持っていたのでそれを使用。

回路全体

回路拡大

RS232C変換ケーブル

そして2.のサイトを参考に以下のコマンドを実行したところ、無事転送成功。
$ avrdude -p m8 -c ponyser -P /dev/ttyUSB0 -U flash:w:blink2.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.58s
avrdude: Device signature = 0x1e9307
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "blink2.hex"
avrdude: input file blink2.hex auto detected as Intel Hex
avrdude: writing flash (104 bytes):
Writing | ################################################## | 100% 20.37s
avrdude: 104 bytes of flash written
avrdude: verifying flash memory against blink2.hex:
avrdude: load data flash data from input file blink2.hex:
avrdude: input file blink2.hex auto detected as Intel Hex
avrdude: input file blink2.hex contains 104 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 19.97s
avrdude: verifying ...
avrdude: 104 bytes of flash verified
avrdude: safemode: Fuses OK
avrdude done.  Thank you.
動作確認は出来たのでユニバーサル基板に本番回路を実装しよう。


2013年10月28日月曜日

8ビットシフトレジスタ 74HC595の動作確認

ブレッドボードに8bitシフトレジスタ 74HC595とLEDを繋いで遊んでみた。

ざっくりとデータシートを斜め読みしたところ、DSが入力で、SH_CPとST_CPの立ち上がりでシフト動作となる様子。

Q0からQ7にLEDを繋いで、


  • DS
  • SH_CPとST_CP
をそれぞれスライドスイッチでH、L切り替えてみたところ、予定通りシフト動作が確認できた。




一応マトリックスLEDの制御に使えそうな感じではある。
けど入力がシリアルだから素直にデコーダ買えばよかったかなぁと。

あとちっちゃいスライドスイッチの切り替えで指痛くなった。
トグルスイッチにしとけばよかったと後悔先に立たずの連続である。

クロックはタクトスイッチでもよかったかと今思いついたり。

2013年10月25日金曜日

ATMEGA8-16PU(1) はじめてのAVRマイコン マイコンへのプログラム転送

電子工作キットは一応作ってしまったのでいよいよAVRマイコンへ取り掛かる。

まずは簡単なプログラムを作成してとにかくマイコンで動かすというのが第一目標。

例によってまずはググって情報収集。

で、まさにATMEGA8-16PUを動かしてみたというサイトを見つけた。


* Linux環境
* LEDを1秒ごとに点灯するプログラムを作成
* LPTポートとavrdudeでATMEGA8-16PUに転送

こちらはプログラム転送はaitendo AVR/51プログラマーで行うので、プログラムのコンパイルとhexファイル作成まで行った。

で、作成したhexファイルをWindowsマシンに置いてAVR/51プログラマーで転送。

ドライバのインストール、デバイス認識、ライターソフトの起動はうまくいってるみたいだが、ATMEGA8-16PUをうまく認識しない。

Connect Error

となる。こりゃ困った。

ATMEGA8-16PUには対応してないのか?と対応デバイス一覧PDFを見たところ、ATMEGA8@ISPとある。

よくみるとプログラマーにISPコネクタがついていた。

ISPコネクタではなく緑のパラレルポート?の方にマイコンをセットしてたのでダメだったのでは?

ということでブレッドボードでISPコネクタと接続したところあっさり認識。

ライターソフト
ATMEGA8-16PUとAVRプログラマ

作成したblink.hexファイルをLoadで開いてAutoボタンをクリックして転送成功。



うーむ。ICSP接続でいいならUSB接続AVRライタ[AVR-USBasp-B]でよかったような・・・900円だし・・・

まあいいや・・・

電源をAVRプログラマーから拝借してPD4とLEDを繋いでみたところLEDが点滅。

やった。マイコンが動いた。



動作風景

次はマトリックスLEDで遊んでみよう。

2013年10月16日水曜日

台風26号による島根県出雲市の線量上昇

15日21時くらいから16日3時くらいまで線量上昇があった様子。
xively.comのGC-10のグラフにばっちり記録されてた。

普段は20cpm前後なのに一時は40cpm近くまで上昇していたらしい。
下の7daysのグラフがわかりやすい(xively.comのグラフは縦軸自動表示なので若干見辛い)。




atmc.jpのグラフでも同様の上昇が確認できる。



台風の左回りの渦に沿って福島からの気流が運ばれてそれが雨で着弾したんじゃないかと思う。

↓は15日21時くらいの衛星写真。


もっとも島根、福井、新潟あたりの原発の可能性も否定できないけど。

全国各地の線量と降雨のグラフを時系列毎に比較すれば推定できるかも知れない・・・

けどそこまではやんない。


金属探知機キット(aitendo.com AKIT-400)(1)

前回購入した最後のキットになる金属探知機キット(AKIT-400)を作成した。



コイル付きの基盤なのでパターンも妙な感じ。

回路図と基盤の対応がパッと見よくわからない。

で、ブレッドボードに繋いで動かしてみたのだけどスピーカーがピーと鳴るだけで金属に反応している気配なし。

ニッパーとか近づけても変化なし。

スピーカーや基盤自体に触れるとピーという音が消えて高周波音だけになる。

目視ではショートしてたり接続不良な部分は無さそうだけど・・・

うーむ。ハンダ付け間違ってんのかな・・・?

動作?風景

2013年10月12日土曜日

音感知キット(aitendo.com AKIT-101)、ブレッドボード用電源モジュール

続いてaitendo.com音感知キットを作成。

部品点数が少ないので30分ぐらいで一気に作り上げた。

電子工作キットも3つ目なので多少こなれてきた感。

部品取り付け前

取り付け後
そうそう。電源用に機材(ブレッドボード用電源モジュール)を追加していた。


DCアダプターもしくはUSBポートからブレッドボードに直接給電できるというスグレモノ。
スイッチで給電をON・OFF、LEDで確認。3.3Vと5Vをジャンパーピンで切り替えることができるのだ。

これが\1,100で送料無料。ブレッドボード=\350,電源モジュール=>\700と考えるとなかなかのお買い得商品だと思う。

ただし1点難があってUSB給電ポートがタイプAのメス。

つまりUSBタイプAのオスオスのケーブルが必要になる。ってそんなの普通持ってないよ。

とまあ、広告はこの辺にして。

音感知キットの動作確認風景を以下に示す。



グラフィックイコライザみたくLEDが周波数毎に点灯するかと思ったら、そうではなく全点灯だったw

反応する音(手を叩く音、声)としない音(ゲームのBGM)があって疑問に思ったのでNexus7のスマートテルミンなるアプリでどういう音が光るか調べてみた。

どうも高音だと光るが低音だと光りにくいようだ(低音でも音量を上げれば光る)。

高周波の方がエネルギーが高いせいなのか、回路の特性なのか、電子回路についてはさっぱり(かつて授業で習ったはずなのに)なのでよくわからない。

amazonアソシエイト