ラベル ATMEGA8-16PU の投稿を表示しています。 すべての投稿を表示
ラベル ATMEGA8-16PU の投稿を表示しています。 すべての投稿を表示

2014年12月5日金曜日

atmega8 + 100円ショップLEDケーブルでクリスマスイルミネーション

実に10ヶ月ぶりの投稿。

そろそろクリスマスなシーズンなので去年作成したイルミネーションをアレンジしてみた。

  • 白色LEDケーブルを3本追加→計6本LED60個
  • オルゴールはなし
  • LED点灯パターンを点滅のみにして10秒毎に点滅時間をランダムに(100ms~2000ms)
簡単な回路とプログラムの割にはいい感じ。
このままツリーにまとわりつかせて飾る予定。


回路


  • atmega8
  • aitendo USB-UART変換モジュール(電源として使用)
  • トランジスタx6
  • 抵抗100Ωx6
  • 100円ショップLEDx6


動画


コード


久々にatmegaやらはんだごてやらさわったけどもわりと楽しめた。

2014年2月11日火曜日

温湿度センサDHT11(1)

秋月で買った温湿度センサDHT11で遊んでみた。

DHT11は単線シリアル通信で、LOWが50us続いた後HIGHが26-28usなら0、HIGHが70us以上続いたら1というような形式。

ここを参考にプログラム組んで試してみたのだけど信号40bit全部0しか返してこない。

マトリクスLEDにシグナルのHIGHのヒストグラムを取ってみたりしたけど見事に全部25us前後。

ぬー。

----
----

色々試してるうちにDHT11をショートさせてしまいご臨終に。。。


中央部が発熱して若干盛り上がったかんじに
せっかくなので分解してみた。

小刀で接合部をこじ開けたらあっさりとはずせた。

中央の銅色のところが湿度センサっぽい

本体ICチップ、これが壊れたっぽい
湿度センサははずしたらまた使えそうな気もするがまあ放置。

そのうちまた買ってリベンジしたい。

2014年1月13日月曜日

16x8マトリクスLEDでbitman表示(3)

前回ブレッドボードに作成した回路をユニバーサル基板に実装した。




  • 左のピンソケットにaitendo USB USART接続して電源供給と同時に、USART可能
  • 右のピンソケットにAVR ISPライタを接続してプログラム転送可能
  • 8x8のマトリクスLED2個ということでかなりのカオス配線
  • 結構気をつけたつもりでも配線間違いが発生→4箇所ほどハンダ付け直し
  • 序盤はなるたけ綺麗に実装するんだけど中盤から後半にかけておざなりになってしまうところは性格によるものだろうなぁと
次はMDF材でカバーをつけます。

2014年1月5日日曜日

16x8マトリクスLEDでbitman表示(2)

前回のプログラムを組み合わせてさらにUSARTによるビットパターン更新を加えたものを作成した。



  • 待機モードとUSARTモード
  • 待機モードではbitman run,dance,ランダムパターンスクロールの3種類を10秒ずつランダムに切り替え
  • USART読み込みがあるとUSARTモードに移行し転送されたビットパターンを表示
  • 最後の転送から10秒経過すると待機モードに移行
動作風景



プログラム
----

----

2014年1月4日土曜日

16x8マトリクスLEDでbitman表示

前回のマトリクスLED回路をAtmega8で制御してbitmanを表示してみた。
  • bitmanのパターンはここを参考
  • runで巡回スクロールするのにかなり脳みそを使った
  • runのパターンとMSB,LSBが逆になっていてスクロール方向が右シフトになってる状況でさらに巡回とか
  • danceも同様にスクロールのシフト演算がややこしかった
  • 十数回はトライアンドエラーを繰り返してようやく思い通りのパターンに
  • プログラム変更して試すのに毎回4分かかるのがやはりキツイ
動作風景



プログラム
----
----

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月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月15日金曜日

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月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月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で遊んでみよう。