2011年4月1日金曜日

LEDバーサライタmarkII

そこそこ完成に近いと思います。

ブレッドボードの大きさの問題でLEDは初期と同じく9個ですけど
反対向きに振ったときの文字の表示もできるようになりました。

前回は割り込みを外部割り込みINT0~1を使う予定でしたが
あまりにも文字部分を書き換える手間が発生してしまうので、
最終的にはPCINTを使うことに。

INTもPCINTもたぶん大して変わりはない(INTはまったく使用せずなので)と思います。
INTがレジスタで割り込みの発生条件を決めるのに対して、
PCINTはプログラム内で発生条件を決める、という解釈でいいんでしょうか?

まあPCINTがなんでもかんでも拾うからそれをifとかで選別しろってことですね。たぶん(ぇ


というわけで回路図。


前より少しだけ横長になりました(笑

いつものことですけどGNDとかVCCとか書かないのはだれが見てもわかるように。
今はちょっと読めるようになったけど昔は「GNDってなんだ?」状態でしたので。



その他、プログラムの方は
配列を作るとなぜかEEPROMに書き込まれる仕様
となっていたので(AVR特有らしい)、それをフラッシュメモリ(プログラムと一緒のところ)に
入れるのに四苦八苦。

別にEEPROMでもよかったんですけどこれには深いわけが…。
ということもなく(実際にはあったんですけど)。

単純に電源の質が悪かっただけなのに行き着いた結果がこれです(笑
ダイジェストで説明。

LEDの点滅速度が一定じゃない(9個バラバラなので振っても文字にならない)

もしかして割り込みが悪いんじゃないか

違ったので、もしかしたら配列がEEPROMに入っているのが悪いんじゃ(略

ここでEEPROMからフラッシュに移動させる(しかし改善されず)

どうやらライタが接続されている間はちゃんと動作するのに、
ライタを外すとダメなようだ

ライタの中で何か接続がされていてそこを繋げばいいんじゃ

ISPケーブルを一本ずつ抜いていってどれを抜くとアウトかを調べる

VCCまたはGNDでした。ということはつまり。


電源(電池)の接触が悪く、単にノイズ(というよりはもっと大きな電圧変化)の所為でした。
もともとブレッドボードは場所により接触悪いので、挿す場所を変え、
電源用の電解コンデンサをぶち込む事で解決でした。



なんという徒労…orz

上の「配列を作ると~」は全く関係なかったわけですね。
ライタを接続していれば大丈夫だった理由は、
たぶんライタ内にコンデンサでも入ってるってことなんでしょうね。
(半透明なのに見えない…( ̄⊿ ̄)ぐぬぬ…


まあ結果的に書き換え回数が10,000回のEEPROMを使わずに済んだのは良かったのかも。
今後はこれで嵌ることがないようにしないと…。数時間これと格闘してたからなぁ(遠い目

回路図のRESET10kΩもたぶんいらないです。

これを完成させるにはまずICソケットを買わないとなぁ。
物流動いてるんだろーか。
プログラムスケッチは別で貼ろう。

0 件のコメント:

コメントを投稿