今日は、ノイズを加えて3分間待つのだよ。
と言う簡単なお仕事を2,30回こなしたあと、
やっと本来のPICのコーディングに戻れました。
いつもの様に修正を加えてビルド、PICkit2での書き込み、
あれ、動作がおかしい。
おかしくなるような修正したはずはないのに、
と思って、修正したところを元に戻しました。
でも、まだ動作がおかしいのです。
よく見ると、シリアル通信で、ACKを返していません。
コマンドを読み込んだら、ACKを返すはずなのに
と思って、通過ポイントをチェックしてみると
どうやら、受信データがエラーになっています。
試しに、受信したデータをそのまま送信するように
コードを追加してみると....
なんと、1ビットの長さが114μsになっています。
9600ボーなので、104μsになっていないといけない。
目で見ただけで、長くなっているのが分かるほどです。
逆算してクロックの周波数を計算すると、7.3MHzです。
本来の8MHzに比べて8%も低いのです。
これはどう考えてもおかしい。
普通に書き込みをしただけなのに。
ひょっとして、周波数校正したデータを書き換えてしまった?
ところが、このPIC16F687にはそういうものがありません。
クロックは校正され、それからずらすためのOSCTUNEと言う
レジスタは有るみたいですが、起動時は0になっています。
念のため、OSCTUNE = 0; を入れてやっていましたが
変わりませんでした。
代わりに、初期値として10を入れると、動作が正常になりました。
と言うことは、何らかの原因で、ユーザから操作できないレジスタが
書き換わって、周波数がずれてしまったのかも知れません。
ツイッターで聞いてみたら、PICkit3のバグで書き換わることが有ったそうです。
えー、そんなの怖くて量産で使えないじゃん!
って言ったら、PICkitは量産用のツールじゃ無いとのこと。
なーんだ、そうなのか。
って、そう言う問題じゃないって。
いずれにしても、気持ちが悪いので、
基板から外して調べてみる必要がありますね。
それと、新しいのを貼り付けたらどうなるのか。
んー、どうも最近PICに振り回され続けています。
と言う簡単なお仕事を2,30回こなしたあと、
やっと本来のPICのコーディングに戻れました。
いつもの様に修正を加えてビルド、PICkit2での書き込み、
あれ、動作がおかしい。
おかしくなるような修正したはずはないのに、
と思って、修正したところを元に戻しました。
でも、まだ動作がおかしいのです。
よく見ると、シリアル通信で、ACKを返していません。
コマンドを読み込んだら、ACKを返すはずなのに
と思って、通過ポイントをチェックしてみると
どうやら、受信データがエラーになっています。
試しに、受信したデータをそのまま送信するように
コードを追加してみると....
なんと、1ビットの長さが114μsになっています。
9600ボーなので、104μsになっていないといけない。
目で見ただけで、長くなっているのが分かるほどです。
逆算してクロックの周波数を計算すると、7.3MHzです。
本来の8MHzに比べて8%も低いのです。
これはどう考えてもおかしい。
普通に書き込みをしただけなのに。
ひょっとして、周波数校正したデータを書き換えてしまった?
ところが、このPIC16F687にはそういうものがありません。
クロックは校正され、それからずらすためのOSCTUNEと言う
レジスタは有るみたいですが、起動時は0になっています。
念のため、OSCTUNE = 0; を入れてやっていましたが
変わりませんでした。
代わりに、初期値として10を入れると、動作が正常になりました。
と言うことは、何らかの原因で、ユーザから操作できないレジスタが
書き換わって、周波数がずれてしまったのかも知れません。
ツイッターで聞いてみたら、PICkit3のバグで書き換わることが有ったそうです。
えー、そんなの怖くて量産で使えないじゃん!
って言ったら、PICkitは量産用のツールじゃ無いとのこと。
なーんだ、そうなのか。
って、そう言う問題じゃないって。
いずれにしても、気持ちが悪いので、
基板から外して調べてみる必要がありますね。
それと、新しいのを貼り付けたらどうなるのか。
んー、どうも最近PICに振り回され続けています。