でんし研 トップ | AVR製作 | AVR書込器 | よせ鍋 |
UART0で不具合 2chの(5月の)AVRスレやAVR-Wikiで話題になっていますが Mega644P, 164PでUART0を使うとAVRの動作がおかしくなります。 レジスタの値が勝手に書き変わるようで、どう動作しているのかよく解りません。 自分で確認したところでは、 1.UART0で起きるがUART1では問題ない。 2.クロック周波数が高いと起きやすい。 20MHzはダメ。8MHzならとりあえずOK。 3.プログラムを書き直すとうまく動くときがある。 (論理的ではないが実行コードのわずかな違いでたまたま動く?) 解決しました。内容は下記を参照してください。 |
クロックの異常でした AVR-Wikiでkkkさんからヒューズ設定がおかしいとの指摘がありました。 そして、jujurouさんからフルスィングにしたら誤動作が直ったと。 私もExt. Crystal Osc 8.0- MHz(ヒューズLow: FF)で実験していて、 フルスィングにしたら2chとjujurouさんの件は正常動作になりました。 ちなみにブレッドボードで実験してます。低電力発振は誤動作しやすいんですね、知らなかったです。とりあえずkkkさんがエスパーだということが判りました。 |
発振出力の違い 発振入力ピンの隣りが通信ピンだったからクロックが誤動作していたという今回の不具合、どのくらいのレベルなのかオシロで測ってみました。(↑の波形参照) 低電力で周波数が高いとかなり小さいです。 |
セラロックでは セラッロクだと発振しないときがあるそうです。8MHzの波形がきれいな正弦波になっていませんが意味があるのかよく解りませんでした。。 |
2313では 基板の都合でセラロックを使っています。 旧型のAT90S2313は最も振幅が大きかったです。(上の波形参照) 上の文は訂正します。 Tiny2313の追加実験 先週はTiny2313がフルスィング発振でないことを発見しました。 しかし、今まで水晶やセラロックを使ったからといってAVRが誤動作した経験がありません。 又、「振幅が小さい=Mega644P(ピコワット)と同じ。」とも限らないのでさらに実験しました。 1.ブレッドボードでクロック入力の隣りピンに信号を入れてみる。 2.クロック入力を指で触ってみる。 S2313やS1200だと簡単に暴走したり、発振停止、リセットしたりします。 (下の動画参照) 結果 Tiny2313をさらに実験した結果、振幅が小さいもののノイズに弱いわけではありませんでした。 数値で比較できる実験方法ではないですがS2313より誤動作しにくかったです。 尚、ヒューズLの設定は0xFF(8MHz以上)にしています。 0xFD(3M〜8MHz)に設定すると振幅が小さくなります。(下の波形参照) 0xFB(0.9M〜3MHz)設定ではプローブを当てると発振が止まるのでオシロでは測れませんでした。 |