(仮)釣りと電子工作 MikroC+16F1827でADC 忍者ブログ
趣味の電子工作と釣りについて。電子工作は、おもに変換器作成。釣りはおもにトラウトの管釣り。
[274] [273] [272] [271] [270] [269] [268] [267] [266] [265] [264]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

16F1827のADCにはバグがあって、回り道しないとハングすることは知っていたが、その回り道の方法が今まで間違っていた。

Errataには、ADCのクロックをFRCにするとGO/DONEを返さない(通常はハングに直結)のでFOSCを使え、と書いてある。なので、

  ADCON1.ADCS0=1;
  ADCON1.ADCS1=0;
  ADCON1.ADCS2=0;
  ADC_Read(0);

みたいな感じで使っていた。が、よ~くMikroCのマニュアルを読むと、ADC_Read(char channel)はFRC固定と書いてあった。つまり、いくらFOSCに指定しても、結局ADC_Readの中でFRCに変更されてしまうのだった。これでかな?ハングしまくっていたのは?

ということで、16F1827ではADC_Readは使用禁止。代わりに、ADC_Init、ADC_GetSampleを使用するべきである。まあ、下記のような関数を定義して、ADC_Readの代わりに使えばいいのかな?

unsigned int ADC_Read2(char channel)
{
  unsigned int adc;
  OSCCON=0b01110000;  // 8MHz
  ADC_Init();
  ADCON1.ADCS0=1;
  ADCON1.ADCS1=0;
  ADCON1.ADCS2=0;
  adc=ADC_Get_Sample(channel);
  OSCCON=0b11110000;  // 8MHz x 4
  return adc;
}

いまのところハングしていないが、まだ様子見、といったところ。本当にこれでいいのかわからん。
もしもこれでいいなら、16F1938の場合にも有効かもしれない。
PR
この記事にコメントする
お名前
タイトル
文字色
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
リンク
最新TB
バーコード
ブログ内検索
カウンター
Powered by ニンジャブログ  Designed by 穂高
Copyright © (仮)釣りと電子工作 All Rights Reserved
忍者ブログ / [PR]