昨日はRS-232C経由でPCと接続しGT-720Fの動作確認をしたので、今日は本命のLVTTL側の端子を使ってマイコンでデータを扱うことに挑戦。
実は今回のGT-720Fを使う前に、一度秋月からGPS-52を購入し、同じようなGPSロガーを作ろうとしていました。
しかし端子を逆差ししてしまい、GPS-52はあえなくご臨終。4800円が一瞬で吹き飛びました(泣)
今回はそのテストに使っていた回路を再利用してGPS-52のテストを行うことにしました。
GPSモジュールから受け取るプロトコルはNMEA-0183で同じなので、プログラムもほとんどそのまま再利用。
GT-720からの出力を液晶モジュールSC1602にそのまま出力する安直なプログラムです。
とりあえずつないでみよう。えいっ。
・・・文字化け。
テストパターンの”Hello, world!"はちゃんと出力されるから、LCDへの出力プログラムミスではないらしい。となるとUARTがうまく受信できていないらしい。
とりあえずGT-720(9600bps出力)からの信号にうまく同期できていないのだろう、と当たりを付けて、
・baud rateはちゃんと9600bpsになっているか。
・1byte=8bitの受信になっているか。
ということを確認。問題なし。
・・・困った。UARTを扱うのが初めてだからどう対処すべきかわからない。
UARTはクロックにうるさいとどこかで聞いたので、内臓クロックを使ってるのがまずいのかと思って内臓クロックの精度を見てみた。
tiny2313のデータシートによると、
内臓RC発振器:誤差2%
UARTの精度は5%絶対必要でできれば3%といっているので結構大きい。面倒くさがらず、外部クロックにしよう。
買ってあったまま使っていない8MHzセラロックを使う。
これまた使うのは初めてなので、極性がないこととか、ちゃんと調べながらw
回路図上の記号が対称だから、極性なんてないとは思っていたけど、やっぱりないようですねw

セラロックをつけたところ。
コネクタは赤いコネクタから右回りに、電源、ISP、GPSモジュール、LCD。
外部クロックに切り替えようとヒューズビットを書き込んだところ。
まったく入力を受け付けなくなりました。
お約束ですね~
間違ったヒューズビットを焼いてしまったようです。
AVRはヒューズビットという、電源が切れてもAVR自身の設定を覚えておくビットがあります。
クロックの部分やリセットの条件についてなど、AVR動く条件がそのヒューズビットで決められています。
ですので、意図しないヒューズビットを書き込んでしまった場合、AVRを動かしてやれる条件を満たすことができず、AVRは動きません。
AVRが動かないとヒューズビットの書き換えもできないので、誤ったヒューズビットを書き込んでしまうと、手持ちの機材ではAVRは一切動いてくれなくなる、という地雷のような設定があるのです。
今回はその地雷を見事に踏み抜いてしまったらしいです。
ATtiny2313のヒューズビットはクロック選択の部分だけ抜き出すと、
となっているようなのですが、誤って0110を焼いてしまったようなのです。(今となっては確認すらできません)
表によれば128kHz内部発振器が働くはずなのですが、SPIでプログラミングできません。これまたよくわかりません。
使っているプログラマはディジットのAVR WRTなので高電圧プログラミングによるヒューズビットの書き換えもできず、お手上げです。
クロック周りの設定は気をつけなければならないとわかってはいたのですが、今回は外部発振器を持っていたので楽観していました。
油断大敵です。
ということで、ATtiny2313を一つ封印してしまいました。1個100円なのでたいしたことはないですが、予備が一個もないので今日は作業中止。
結局UARTがうまく働かなかったのは、内臓クロックを使ったせいなのかどうかも検証できずじまいでした。ヒューズビットを直すか、新しい2313で成功したら、内臓クロックでも試してみたいです。
実は今回のGT-720Fを使う前に、一度秋月からGPS-52を購入し、同じようなGPSロガーを作ろうとしていました。
しかし端子を逆差ししてしまい、GPS-52はあえなくご臨終。4800円が一瞬で吹き飛びました(泣)
今回はそのテストに使っていた回路を再利用してGPS-52のテストを行うことにしました。
GPSモジュールから受け取るプロトコルはNMEA-0183で同じなので、プログラムもほとんどそのまま再利用。
GT-720からの出力を液晶モジュールSC1602にそのまま出力する安直なプログラムです。
とりあえずつないでみよう。えいっ。
・・・文字化け。
テストパターンの”Hello, world!"はちゃんと出力されるから、LCDへの出力プログラムミスではないらしい。となるとUARTがうまく受信できていないらしい。
とりあえずGT-720(9600bps出力)からの信号にうまく同期できていないのだろう、と当たりを付けて、
・baud rateはちゃんと9600bpsになっているか。
・1byte=8bitの受信になっているか。
ということを確認。問題なし。
・・・困った。UARTを扱うのが初めてだからどう対処すべきかわからない。
UARTはクロックにうるさいとどこかで聞いたので、内臓クロックを使ってるのがまずいのかと思って内臓クロックの精度を見てみた。
tiny2313のデータシートによると、
内臓RC発振器:誤差2%
UARTの精度は5%絶対必要でできれば3%といっているので結構大きい。面倒くさがらず、外部クロックにしよう。
これまた使うのは初めてなので、極性がないこととか、ちゃんと調べながらw
回路図上の記号が対称だから、極性なんてないとは思っていたけど、やっぱりないようですねw
セラロックをつけたところ。
コネクタは赤いコネクタから右回りに、電源、ISP、GPSモジュール、LCD。
外部クロックに切り替えようとヒューズビットを書き込んだところ。
まったく入力を受け付けなくなりました。
お約束ですね~
間違ったヒューズビットを焼いてしまったようです。
AVRはヒューズビットという、電源が切れてもAVR自身の設定を覚えておくビットがあります。
クロックの部分やリセットの条件についてなど、AVR動く条件がそのヒューズビットで決められています。
ですので、意図しないヒューズビットを書き込んでしまった場合、AVRを動かしてやれる条件を満たすことができず、AVRは動きません。
AVRが動かないとヒューズビットの書き換えもできないので、誤ったヒューズビットを書き込んでしまうと、手持ちの機材ではAVRは一切動いてくれなくなる、という地雷のような設定があるのです。
今回はその地雷を見事に踏み抜いてしまったらしいです。
ATtiny2313のヒューズビットはクロック選択の部分だけ抜き出すと、
外部クリスタル/セラミック発振子 | 1111~1000 |
128kHz内部(WDT)発振器 | 0110 |
8MHz校正付き内蔵RC発振器 | 0100 |
4MHz校正付き内蔵RC発振器 | 0010 |
外部クロック信号 | 0000 |
(予約) | 0xx1 |
となっているようなのですが、誤って0110を焼いてしまったようなのです。(今となっては確認すらできません)
表によれば128kHz内部発振器が働くはずなのですが、SPIでプログラミングできません。これまたよくわかりません。
使っているプログラマはディジットのAVR WRTなので高電圧プログラミングによるヒューズビットの書き換えもできず、お手上げです。
クロック周りの設定は気をつけなければならないとわかってはいたのですが、今回は外部発振器を持っていたので楽観していました。
油断大敵です。
ということで、ATtiny2313を一つ封印してしまいました。1個100円なのでたいしたことはないですが、予備が一個もないので今日は作業中止。
結局UARTがうまく働かなかったのは、内臓クロックを使ったせいなのかどうかも検証できずじまいでした。ヒューズビットを直すか、新しい2313で成功したら、内臓クロックでも試してみたいです。
PR
トラックバック
トラックバックURL: