[戻る]
過去ログ [ 0001 ]
過去ログ:     ワード検索: 条件: 表示:

タイトル
記事No
投稿日
投稿者
参照先
PICKit3でEEPROMを読み出す
639
: 16/07/19-13:33
pic8


下記の1〜6のようなPIC16F1827(32MHz動作)のプログラムをCCSで作りました。
1.測定値aを得る。
2.aが理論値の誤差範囲のa1〜a2の範囲にあればポート出力をする。
3.aをeepromに書込む。
4.eepromの書込みアドレスから読み出す。
5.読出した値がaであればポート出力をする。
6.無限ループ

11.
実機上で動作させ2.と5.でポート出力をオシロで観測し、
測定値がa1〜a2の範囲にあり、eepromに書込みされていることを
確認する。

測定値aをPICKit3で読むために
21.PICKit3を起動させる。
22.Project Open する。
23.PICKit3の電源をONする。
24.RESET状態にする。(ReleaseFromResetをアクティブにする。)
25.実機上からはずしたCPUをPICKit3へ実装する。
26.Read ,View ,EEPROM を読む。

11と21〜26を何度も繰り返すと
約10回に2,3回a1〜a2より大きく違う値の場合がありました。

以上のことからPICKit3でeepromの値を読み出す方法に
誤りがあるのかもしれない?
という結論になりました。
誤りがあれば教えてください。
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: PICKit3でEEPROMを読み出す
640
: 16/07/19-14:27
CCS・・・・

CCS・・・・
後閑先生の推奨コンパイラーなのですか?

>
> 下記の1〜6のようなPIC16F1827(32MHz動作)のプログラムをCCSで作りました。
> 1.測定値aを得る。
> 2.aが理論値の誤差範囲のa1〜a2の範囲にあればポート出力をする。
> 3.aをeepromに書込む。
> 4.eepromの書込みアドレスから読み出す。
> 5.読出した値がaであればポート出力をする。
> 6.無限ループ
>
> 11.
> 実機上で動作させ2.と5.でポート出力をオシロで観測し、
> 測定値がa1〜a2の範囲にあり、eepromに書込みされていることを
> 確認する。
>
> 測定値aをPICKit3で読むために
> 21.PICKit3を起動させる。
> 22.Project Open する。
> 23.PICKit3の電源をONする。
> 24.RESET状態にする。(ReleaseFromResetをアクティブにする。)
> 25.実機上からはずしたCPUをPICKit3へ実装する。
> 26.Read ,View ,EEPROM を読む。
>
> 11と21〜26を何度も繰り返すと
> 約10回に2,3回a1〜a2より大きく違う値の場合がありました。
>
> 以上のことからPICKit3でeepromの値を読み出す方法に
> 誤りがあるのかもしれない?
> という結論になりました。
> 誤りがあれば教えてください。
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^2: PICKit3でEEPROM
641
: 16/07/19-16:25
Gokan <gokan@picfun.com>

PICkit3をデバッグモードで使えばいちいちPICを交換しなくても
内容をみることができますよ。

> CCS・・・・
> 後閑先生の推奨コンパイラーなのですか?
>
> >
> > 下記の1〜6のようなPIC16F1827(32MHz動作)のプログラムをCCSで作りました。
> > 1.測定値aを得る。
> > 2.aが理論値の誤差範囲のa1〜a2の範囲にあればポート出力をする。
> > 3.aをeepromに書込む。
> > 4.eepromの書込みアドレスから読み出す。
> > 5.読出した値がaであればポート出力をする。
> > 6.無限ループ
> >
> > 11.
> > 実機上で動作させ2.と5.でポート出力をオシロで観測し、
> > 測定値がa1〜a2の範囲にあり、eepromに書込みされていることを
> > 確認する。
> >
> > 測定値aをPICKit3で読むために
> > 21.PICKit3を起動させる。
> > 22.Project Open する。
> > 23.PICKit3の電源をONする。
> > 24.RESET状態にする。(ReleaseFromResetをアクティブにする。)
> > 25.実機上からはずしたCPUをPICKit3へ実装する。
> > 26.Read ,View ,EEPROM を読む。
> >
> > 11と21〜26を何度も繰り返すと
> > 約10回に2,3回a1〜a2より大きく違う値の場合がありました。
> >
> > 以上のことからPICKit3でeepromの値を読み出す方法に
> > 誤りがあるのかもしれない?
> > という結論になりました。
> > 誤りがあれば教えてください。
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^3: PICKit3でEEPROM
642
: 16/07/19-19:44
pic8

回答ありがとうございます。

> PICkit3をデバッグモードで使えばいちいちPICを交換しなくても
> 内容をみることができますよ。
質問の仕方が悪かったようです。

測定値aは実機内で発生するタイミング時間を測定するものです。
そのタイミングは実機が動作するたびにバラツキがあるので
そのバラツキを測定しようとしています。

PICを交換してはいません。
1個のPICを実機にいれて、このときの実機のタイミングを
eepromに書込み、
PICを実機から抜き取り、PICKit3へいれてeepromの値を読み取る。
また、
このPICを実機にいれて・・・
ということを繰り返しています。

ここで、
実機が動作しているときは、11.に書いたように
測定値がa1〜a2の範囲にあり、eepromにその値が書込みされている
はずなのにPICKit3でeepromを読み取ると
a1〜a2より大きく違う値の場合があったので質問させていただいた次第です。

>
> > CCS・・・・
> > 後閑先生の推奨コンパイラーなのですか?
> >
> > >
> > > 下記の1〜6のようなPIC16F1827(32MHz動作)のプログラムをCCSで作りました。
> > > 1.測定値aを得る。
> > > 2.aが理論値の誤差範囲のa1〜a2の範囲にあればポート出力をする。
> > > 3.aをeepromに書込む。
> > > 4.eepromの書込みアドレスから読み出す。
> > > 5.読出した値がaであればポート出力をする。
> > > 6.無限ループ
> > >
> > > 11.
> > > 実機上で動作させ2.と5.でポート出力をオシロで観測し、
> > > 測定値がa1〜a2の範囲にあり、eepromに書込みされていることを
> > > 確認する。
> > >
> > > 測定値aをPICKit3で読むために
> > > 21.PICKit3を起動させる。
> > > 22.Project Open する。
> > > 23.PICKit3の電源をONする。
> > > 24.RESET状態にする。(ReleaseFromResetをアクティブにする。)
> > > 25.実機上からはずしたCPUをPICKit3へ実装する。
> > > 26.Read ,View ,EEPROM を読む。
> > >
> > > 11と21〜26を何度も繰り返すと
> > > 約10回に2,3回a1〜a2より大きく違う値の場合がありました。
> > >
> > > 以上のことからPICKit3でeepromの値を読み出す方法に
> > > 誤りがあるのかもしれない?
> > > という結論になりました。
> > > 誤りがあれば教えてください。
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^4: PICKit3でEEPROM
643
: 16/07/19-21:55
Gokan <gokan@picfun.com>

実機にはPICkit3を接続したままの状態にはできないということですね。
大きく値が異なるのはEEPROMの特定の番地でしょうか?
書き込みの際には一定時間の待ち時間を挿入していますでしょうか?

> 回答ありがとうございます。
>
> > PICkit3をデバッグモードで使えばいちいちPICを交換しなくても
> > 内容をみることができますよ。
> 質問の仕方が悪かったようです。
>
> 測定値aは実機内で発生するタイミング時間を測定するものです。
> そのタイミングは実機が動作するたびにバラツキがあるので
> そのバラツキを測定しようとしています。
>
> PICを交換してはいません。
> 1個のPICを実機にいれて、このときの実機のタイミングを
> eepromに書込み、
> PICを実機から抜き取り、PICKit3へいれてeepromの値を読み取る。
> また、
> このPICを実機にいれて・・・
> ということを繰り返しています。
>
> ここで、
> 実機が動作しているときは、11.に書いたように
> 測定値がa1〜a2の範囲にあり、eepromにその値が書込みされている
> はずなのにPICKit3でeepromを読み取ると
> a1〜a2より大きく違う値の場合があったので質問させていただいた次第です。
>
> >
> > > CCS・・・・
> > > 後閑先生の推奨コンパイラーなのですか?
> > >
> > > >
> > > > 下記の1〜6のようなPIC16F1827(32MHz動作)のプログラムをCCSで作りました。
> > > > 1.測定値aを得る。
> > > > 2.aが理論値の誤差範囲のa1〜a2の範囲にあればポート出力をする。
> > > > 3.aをeepromに書込む。
> > > > 4.eepromの書込みアドレスから読み出す。
> > > > 5.読出した値がaであればポート出力をする。
> > > > 6.無限ループ
> > > >
> > > > 11.
> > > > 実機上で動作させ2.と5.でポート出力をオシロで観測し、
> > > > 測定値がa1〜a2の範囲にあり、eepromに書込みされていることを
> > > > 確認する。
> > > >
> > > > 測定値aをPICKit3で読むために
> > > > 21.PICKit3を起動させる。
> > > > 22.Project Open する。
> > > > 23.PICKit3の電源をONする。
> > > > 24.RESET状態にする。(ReleaseFromResetをアクティブにする。)
> > > > 25.実機上からはずしたCPUをPICKit3へ実装する。
> > > > 26.Read ,View ,EEPROM を読む。
> > > >
> > > > 11と21〜26を何度も繰り返すと
> > > > 約10回に2,3回a1〜a2より大きく違う値の場合がありました。
> > > >
> > > > 以上のことからPICKit3でeepromの値を読み出す方法に
> > > > 誤りがあるのかもしれない?
> > > > という結論になりました。
> > > > 誤りがあれば教えてください。
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^5: PICKit3でEEPROM
644
: 16/07/20-09:50
pic8

回答ありがとうございます。

> 実機にはPICkit3を接続したままの状態にはできないということですね。
はい、そのとおりです。

> 大きく値が異なるのはEEPROMの特定の番地でしょうか?
測定値aは常に同一アドレス(0,1)に書込んでいます。

> 書き込みの際には一定時間の待ち時間を挿入していますでしょうか?
特にディレイは入れていません。

union
{
 long L_DAT;
 int I_DAT[2];
} a;

union
{
long L_DAT;
int I_DAT[2];
} b;
測定値aを取得
if (a.L_DAT > a1 && a.L_DAT < a2) //a1-a2範囲内?
{
ポート1出力
}

write_eeprom (0,a.I_DAT[0]);
write_eeprom (1,a.I_DAT[1]);
b.I_DAT[0] = read_eeprom(0);
b.I_DAT[1] = read_eeprom(1);

if (b.L_DAT == a.L_DAT) // eeprom 書込み確認
{
ポート2出力
}
・・・というような感じです。

>
> > 回答ありがとうございます。
> >
> > > PICkit3をデバッグモードで使えばいちいちPICを交換しなくても
> > > 内容をみることができますよ。
> > 質問の仕方が悪かったようです。
> >
> > 測定値aは実機内で発生するタイミング時間を測定するものです。
> > そのタイミングは実機が動作するたびにバラツキがあるので
> > そのバラツキを測定しようとしています。
> >
> > PICを交換してはいません。
> > 1個のPICを実機にいれて、このときの実機のタイミングを
> > eepromに書込み、
> > PICを実機から抜き取り、PICKit3へいれてeepromの値を読み取る。
> > また、
> > このPICを実機にいれて・・・
> > ということを繰り返しています。
> >
> > ここで、
> > 実機が動作しているときは、11.に書いたように
> > 測定値がa1〜a2の範囲にあり、eepromにその値が書込みされている
> > はずなのにPICKit3でeepromを読み取ると
> > a1〜a2より大きく違う値の場合があったので質問させていただいた次第です。
> >
> > >
> > > > CCS・・・・
> > > > 後閑先生の推奨コンパイラーなのですか?
> > > >
> > > > >
> > > > > 下記の1〜6のようなPIC16F1827(32MHz動作)のプログラムをCCSで作りました。
> > > > > 1.測定値aを得る。
> > > > > 2.aが理論値の誤差範囲のa1〜a2の範囲にあればポート出力をする。
> > > > > 3.aをeepromに書込む。
> > > > > 4.eepromの書込みアドレスから読み出す。
> > > > > 5.読出した値がaであればポート出力をする。
> > > > > 6.無限ループ
> > > > >
> > > > > 11.
> > > > > 実機上で動作させ2.と5.でポート出力をオシロで観測し、
> > > > > 測定値がa1〜a2の範囲にあり、eepromに書込みされていることを
> > > > > 確認する。
> > > > >
> > > > > 測定値aをPICKit3で読むために
> > > > > 21.PICKit3を起動させる。
> > > > > 22.Project Open する。
> > > > > 23.PICKit3の電源をONする。
> > > > > 24.RESET状態にする。(ReleaseFromResetをアクティブにする。)
> > > > > 25.実機上からはずしたCPUをPICKit3へ実装する。
> > > > > 26.Read ,View ,EEPROM を読む。
> > > > >
> > > > > 11と21〜26を何度も繰り返すと
> > > > > 約10回に2,3回a1〜a2より大きく違う値の場合がありました。
> > > > >
> > > > > 以上のことからPICKit3でeepromの値を読み出す方法に
> > > > > 誤りがあるのかもしれない?
> > > > > という結論になりました。
> > > > > 誤りがあれば教えてください。
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^6: PICKit3でEEPROM
646
: 16/07/21-17:16
Gokan <gokan@picfun.com>


EEPROMの書き込みの際に0番地を避けてみてください。
電源のオンオフが頻繁でBORをオンにしていない場合
0番地が壊れることがあります。


> 回答ありがとうございます。
>
> > 実機にはPICkit3を接続したままの状態にはできないということですね。
> はい、そのとおりです。
>
> > 大きく値が異なるのはEEPROMの特定の番地でしょうか?
> 測定値aは常に同一アドレス(0,1)に書込んでいます。
>
> > 書き込みの際には一定時間の待ち時間を挿入していますでしょうか?
> 特にディレイは入れていません。
>
> union
> {
>  long L_DAT;
>  int I_DAT[2];
> } a;
>
> union
> {
> long L_DAT;
> int I_DAT[2];
> } b;
> 測定値aを取得
> if (a.L_DAT > a1 && a.L_DAT < a2) //a1-a2範囲内?
> {
> ポート1出力
> }
>
> write_eeprom (0,a.I_DAT[0]);
> write_eeprom (1,a.I_DAT[1]);
> b.I_DAT[0] = read_eeprom(0);
> b.I_DAT[1] = read_eeprom(1);
>
> if (b.L_DAT == a.L_DAT) // eeprom 書込み確認
> {
> ポート2出力
> }
> ・・・というような感じです。
>
> >
> > > 回答ありがとうございます。
> > >
> > > > PICkit3をデバッグモードで使えばいちいちPICを交換しなくても
> > > > 内容をみることができますよ。
> > > 質問の仕方が悪かったようです。
> > >
> > > 測定値aは実機内で発生するタイミング時間を測定するものです。
> > > そのタイミングは実機が動作するたびにバラツキがあるので
> > > そのバラツキを測定しようとしています。
> > >
> > > PICを交換してはいません。
> > > 1個のPICを実機にいれて、このときの実機のタイミングを
> > > eepromに書込み、
> > > PICを実機から抜き取り、PICKit3へいれてeepromの値を読み取る。
> > > また、
> > > このPICを実機にいれて・・・
> > > ということを繰り返しています。
> > >
> > > ここで、
> > > 実機が動作しているときは、11.に書いたように
> > > 測定値がa1〜a2の範囲にあり、eepromにその値が書込みされている
> > > はずなのにPICKit3でeepromを読み取ると
> > > a1〜a2より大きく違う値の場合があったので質問させていただいた次第です。
> > >
> > > >
> > > > > CCS・・・・
> > > > > 後閑先生の推奨コンパイラーなのですか?
> > > > >
> > > > > >
> > > > > > 下記の1〜6のようなPIC16F1827(32MHz動作)のプログラムをCCSで作りました。
> > > > > > 1.測定値aを得る。
> > > > > > 2.aが理論値の誤差範囲のa1〜a2の範囲にあればポート出力をする。
> > > > > > 3.aをeepromに書込む。
> > > > > > 4.eepromの書込みアドレスから読み出す。
> > > > > > 5.読出した値がaであればポート出力をする。
> > > > > > 6.無限ループ
> > > > > >
> > > > > > 11.
> > > > > > 実機上で動作させ2.と5.でポート出力をオシロで観測し、
> > > > > > 測定値がa1〜a2の範囲にあり、eepromに書込みされていることを
> > > > > > 確認する。
> > > > > >
> > > > > > 測定値aをPICKit3で読むために
> > > > > > 21.PICKit3を起動させる。
> > > > > > 22.Project Open する。
> > > > > > 23.PICKit3の電源をONする。
> > > > > > 24.RESET状態にする。(ReleaseFromResetをアクティブにする。)
> > > > > > 25.実機上からはずしたCPUをPICKit3へ実装する。
> > > > > > 26.Read ,View ,EEPROM を読む。
> > > > > >
> > > > > > 11と21〜26を何度も繰り返すと
> > > > > > 約10回に2,3回a1〜a2より大きく違う値の場合がありました。
> > > > > >
> > > > > > 以上のことからPICKit3でeepromの値を読み出す方法に
> > > > > > 誤りがあるのかもしれない?
> > > > > > という結論になりました。
> > > > > > 誤りがあれば教えてください。
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^7: PICKit3でEEPROM
647
: 16/07/21-20:13
pic8

回答ありがとうございます。
>
> EEPROMの書き込みの際に0番地を避けてみてください。
> 電源のオンオフが頻繁でBORをオンにしていない場合
> 0番地が壊れることがあります。

BORはONにしてあります。
a1〜a2は範囲は、aの上位バイト(eepromのアドレス1)だけで判断できます。
この上位バイトが大きく違っていました。

アドレスを0,1を2,3に変えてみても状況は同じでした。
チップを変えてみましたが同じでした。

11.のオシロによる観測は何十回やってもOKでしたが、
(このテストはオシロを見ながら、実機の電源のON/OFFを繰り返すだけのものです。)
PICKitによる読取は
5回OKが続いたら6,7回はNG、8,9,10回はOK・・・と、ランダムに
発生する感じです。

私はPICKitはビルドとプログラマーとして使っているだけで、他の機能は
使ったことはありませんが、21〜26の使い方はこれでよいのでしょうか?

>
> > 回答ありがとうございます。
> >
> > > 実機にはPICkit3を接続したままの状態にはできないということですね。
> > はい、そのとおりです。
> >
> > > 大きく値が異なるのはEEPROMの特定の番地でしょうか?
> > 測定値aは常に同一アドレス(0,1)に書込んでいます。
> >
> > > 書き込みの際には一定時間の待ち時間を挿入していますでしょうか?
> > 特にディレイは入れていません。
> >
> > union
> > {
> >  long L_DAT;
> >  int I_DAT[2];
> > } a;
> >
> > union
> > {
> > long L_DAT;
> > int I_DAT[2];
> > } b;
> > 測定値aを取得
> > if (a.L_DAT > a1 && a.L_DAT < a2) //a1-a2範囲内?
> > {
> > ポート1出力
> > }
> >
> > write_eeprom (0,a.I_DAT[0]);
> > write_eeprom (1,a.I_DAT[1]);
> > b.I_DAT[0] = read_eeprom(0);
> > b.I_DAT[1] = read_eeprom(1);
> >
> > if (b.L_DAT == a.L_DAT) // eeprom 書込み確認
> > {
> > ポート2出力
> > }
> > ・・・というような感じです。
> >
> > >
> > > > 回答ありがとうございます。
> > > >
> > > > > PICkit3をデバッグモードで使えばいちいちPICを交換しなくても
> > > > > 内容をみることができますよ。
> > > > 質問の仕方が悪かったようです。
> > > >
> > > > 測定値aは実機内で発生するタイミング時間を測定するものです。
> > > > そのタイミングは実機が動作するたびにバラツキがあるので
> > > > そのバラツキを測定しようとしています。
> > > >
> > > > PICを交換してはいません。
> > > > 1個のPICを実機にいれて、このときの実機のタイミングを
> > > > eepromに書込み、
> > > > PICを実機から抜き取り、PICKit3へいれてeepromの値を読み取る。
> > > > また、
> > > > このPICを実機にいれて・・・
> > > > ということを繰り返しています。
> > > >
> > > > ここで、
> > > > 実機が動作しているときは、11.に書いたように
> > > > 測定値がa1〜a2の範囲にあり、eepromにその値が書込みされている
> > > > はずなのにPICKit3でeepromを読み取ると
> > > > a1〜a2より大きく違う値の場合があったので質問させていただいた次第です。
> > > >
> > > > >
> > > > > > CCS・・・・
> > > > > > 後閑先生の推奨コンパイラーなのですか?
> > > > > >
> > > > > > >
> > > > > > > 下記の1〜6のようなPIC16F1827(32MHz動作)のプログラムをCCSで作りました。
> > > > > > > 1.測定値aを得る。
> > > > > > > 2.aが理論値の誤差範囲のa1〜a2の範囲にあればポート出力をする。
> > > > > > > 3.aをeepromに書込む。
> > > > > > > 4.eepromの書込みアドレスから読み出す。
> > > > > > > 5.読出した値がaであればポート出力をする。
> > > > > > > 6.無限ループ
> > > > > > >
> > > > > > > 11.
> > > > > > > 実機上で動作させ2.と5.でポート出力をオシロで観測し、
> > > > > > > 測定値がa1〜a2の範囲にあり、eepromに書込みされていることを
> > > > > > > 確認する。
> > > > > > >
> > > > > > > 測定値aをPICKit3で読むために
> > > > > > > 21.PICKit3を起動させる。
> > > > > > > 22.Project Open する。
> > > > > > > 23.PICKit3の電源をONする。
> > > > > > > 24.RESET状態にする。(ReleaseFromResetをアクティブにする。)
> > > > > > > 25.実機上からはずしたCPUをPICKit3へ実装する。
> > > > > > > 26.Read ,View ,EEPROM を読む。
> > > > > > >
> > > > > > > 11と21〜26を何度も繰り返すと
> > > > > > > 約10回に2,3回a1〜a2より大きく違う値の場合がありました。
> > > > > > >
> > > > > > > 以上のことからPICKit3でeepromの値を読み出す方法に
> > > > > > > 誤りがあるのかもしれない?
> > > > > > > という結論になりました。
> > > > > > > 誤りがあれば教えてください。
▲pagetop

- WebForum -