最近PICを使い始めた初心者です。
現在、PICを使用して温度センサーを作ってます。温度センサーの詳細は下記の通りです。
・白金抵抗を使用して、温度による抵抗値の変換を電圧値として測定⇒計算式から温度に変換
・温度を1分ごとに測定
・測定の間は、電力消費を抑えるためにスリープモード
スリープモードに入る前に、スリープモードへ移行することを知らせるためにLEDを点滅させています。
現在の問題は、MPLAB Code Configurator(MCC)で設定した時間スリープしないことです。
具体的には、MCCで下記の通りにWatchdog timer(WDT)を使用してスリープ時間を設定しています。
この画面上では、WDTは67.65006sです。
プログラミングコードは下記の通りです。
C
1void main(void) 2{ 3 // Initialize the device 4 SYSTEM_Initialize(); 5 6 // If using interrupts in PIC18 High/Low Priority Mode you need to enable the Global High and Low Interrupts 7 // If using interrupts in PIC Mid-Range Compatibility Mode you need to enable the Global Interrupts 8 // Use the following macros to: 9 10 // Enable the Global Interrupts 11 // INTERRUPT_GlobalInterruptEnable(); 12 13 // Disable the Global Interrupts 14 // INTERRUPT_GlobalInterruptDisable(); 15 16 int tempValue = 0; 17 double tempVoltage = 0; 18 double temp = 0; 19 20 while (1) 21 { 22 tempValue = ADC_GetSingleConversion(RA0); 23 tempVoltage = tempValue * 5 / 1024; //Convert to voltage 24 temp = 34.283 * tempVoltage + 24.29; // Convert to temperature 25 printf(temp); 26 27 RC5 = 1; 28 __delay_ms(3000); 29 RC5 = 0; 30 31 SLEEP(); 32 33 // Add your application code 34 }
当初、温度を出力した後にLEDが3秒間点灯し、スリープモードへ移行、その後67.65006秒後にスリープから復帰して再度温度を出力、という流れを想定しておりました。しかしながら、実際は、温度出力、3秒間LED点灯、その後一瞬だけLEDが消えて、すぐに温度出力、LED点灯となってしまいました。WDTが指定した時間作動してないのだと思います。
ADCを作動させずに、LEDの点滅だけのコードで試したところ、LEDが3秒間点灯、消滅した後67秒後に再点灯、という当初予想していた流れとなりました。
この結果から、ADCを作動させることで、WDTがリセット?されているのではないかと考えております。
ADCを作動させる場合でも同じように、設定した時間スリープモードへ移行させたいのですが、コードをどのように修正するべきかご教授いただきたく存じます。
なお、使用しているマイコンはPIC18F27Q84です。開発環境はMPLAB X IDE v5.45になります。MPLABではMCCを使用しています。
回答2件
あなたの回答
tips
プレビュー