ikkei blog

電子工作やパズルのブログです。主にLEDを使った電子工作をやっています。

また?PICkit2のしわざ?

2013年07月22日 21時37分26秒 | PIC
また、PICで急に通信が出来なくなって、右往左往してしまった。
そう、ひょっとしてまた内蔵RC発振器の周波数が変わってしまったのかと、
  OSCTUNE = 10;
を追加してみた。
そしたら、見事に復活。
同じ数値で復活したと言うことは何かあるのかな?
でも、もう、いい加減にして欲しい。

ググっても、そう言う現象は無さそうだし、
謎じゃ。


追記
2度も起こったので、日本のMicrochipに問い合わせ中です。

3・3・7拍子のウインカー

2013年07月08日 23時27分04秒 | PIC
「すごい!電子工作」の記事で、3・3・7拍子のウインカーを
作ってみました。PIC12F629が手元に有ったので。

確認用のLEDを付けましたが、リレーのカチカチ言う音で
3・3・7拍子になっているのが分かります。

波形を見ると、この通り。


だけど、この記事大丈夫かなぁ。
読者は電子工作の初心者だと思うのですが、
回路が間違っているので、動かないって問い合わせが来そうです。

GND線が抜けていました。(赤線)


説明には0.3~0.4秒周期が一般的と書いてありますが、
波形を見ると0.25秒になっていました。

追記
周期が0,25秒と言うことは、毎分240回。
保安基準では60回~120回と言う説明もあるのに、
これじゃ、ダメじゃん。
おそらくどっかで、周期と点灯時間を勘違いしたんじゃないだろうか。
やっぱり、トンデモ回路だった。 orz

追記
周期が0,25秒と言うのは、オシロの表記が間違っていたようです。
従って、回路は毎分120回で、保安基準に合っています。
トンデモなのは、オシロだった。 orz

やっぱりPICkit2があやしい

2013年07月03日 02時22分58秒 | PIC
PIC16F687には calibration word があるらしい。
しかも、bulk erase でも消えないと。

しかし、PICkit2はアクセス出来るわけだし、
バグで書き換えてしまったらアウトです。

処理手順がフローチャートになってるけど、
Read and Store Calibration Memory Values
って、Storeする必要あるの?

プログラムを書いたあと

Read and Verify Calibration Memory Values
で、エラーチェックしてるけど、
エラーになる可能性があるってことですね。
エラーで、Fail になれば、書き換わったってことで、既に手遅れ。

んーん、結局クロック周波数を決めているcalibration word が
PICkit2からはアクセス出来るわけだし、
アプリとかMPLABからはアクセス出来ない訳だから、
クロック周波数が変わってしまったと言うことは
やはり、PICkit2があやしいようです。


PICを貼り替えたら元通りになった

2013年07月01日 22時42分54秒 | PIC
この間のPICの件
貼り替えてみたら、元のソースで問題無く動きました。

やはり、PICkit2にキャリブレーションデータを破壊されたようです。
ちょっと不安ですが、代わりがないので、
とりあえずこのままいくことにします。


今日もPICにハメられた...orz

2013年06月28日 23時31分36秒 | PIC
今日は、ノイズを加えて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に振り回され続けています。