View previous topic :: View next topic |
Author |
Message |
E_Blue
Joined: 13 Apr 2011 Posts: 417
|
Why setup_adc perform an ADC conversion? |
Posted: Wed Jun 01, 2016 12:00 pm |
|
|
I was stepping line by line and when I get to the following line
Code: | SETUP_ADC(ADC_CLOCK_DIV_4|ADC_TAD_MUL_4); |
the cursor doesn't move, so I go to the dissasembly list and see that is waiting to the ADC to finish a conversion initiated by the same command. WTF?
It is a bug or I forgot to indicate something to the precompiler?
If I make a setup I want to setup the ADC not start a conversion.
There's a way to get what I want or should I use ASM? _________________ Electric Blue |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9221 Location: Greensville,Ontario
|
|
Posted: Wed Jun 01, 2016 12:59 pm |
|
|
Have to say the obvious...
Which PIC
What Compiler and version
Please post small compilable program that shows this.
When you post program, also post the listing.
Thanks
Jay |
|
|
E_Blue
Joined: 13 Apr 2011 Posts: 417
|
|
Posted: Wed Jun 01, 2016 2:11 pm |
|
|
The PIC is a PIC18F67J50, V5.058; I didn't think that this matters for so simple line of code.
I didn't post the code since is part of the copyright of CCS code.
Code: | 7730: SETUP_ADC(ADC_CLOCK_DIV_2|ADC_TAD_MUL_2);
0FCAC 50C1 MOVF 0xfc1, W, ACCESS
0FCAE 0BC0 ANDLW 0xc0
0FCB0 0908 IORLW 0x8
0FCB2 6EC1 MOVWF 0xfc1, ACCESS
0FCB4 8EC1 BSF 0xfc1, 0x7, ACCESS
0FCB6 80C2 BSF 0xfc2, 0, ACCESS
0FCB8 8CC1 BSF 0xfc1, 0x6, ACCESS
0FCBA 82C2 BSF 0xfc2, 0x1, ACCESS
0FCBC B2C2 BTFSC 0xfc2, 0x1, ACCESS
0FCBE D7FE BRA 0xfcbc
0FCC0 9CC1 BCF 0xfc1, 0x6, ACCESS |
_________________ Electric Blue |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Jun 01, 2016 4:53 pm |
|
|
Compile it with the .LST file in Symbolic mode. Now what's it doing ?
Quote: | ..... SETUP_ADC(ADC_CLOCK_DIV_2 | ADC_TAD_MUL_2);
0001E: MOVF ANCON0,W
00020: ANDLW C0
00022: IORLW 08
00024: MOVWF ANCON0
00026: BCF ANCON0.ADFM
00028: BSF ANCON1.ADON
0002A: BSF ANCON0.ADCAL
0002C: BSF ANCON1.NOT_DONE
0002E: BTFSC ANCON1.NOT_DONE
00030: BRA 002E
00032: BCF ANCON0.ADCAL |
Check the PIC data sheet in the A/D section for more info on calibration. |
|
|
E_Blue
Joined: 13 Apr 2011 Posts: 417
|
|
Posted: Thu Jun 02, 2016 10:01 am |
|
|
I can't configure MPLAB IDE v8.80 in order to show the bits names, but yes, now I can see that is not a regular conversion.
Unfortunately there's no way to disable this.
I will make some changes in my code to not setup the ADC every time that I need a conversion.
Thanks for your answer. _________________ Electric Blue |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19499
|
|
Posted: Fri Jun 03, 2016 1:44 am |
|
|
Why do you not want the auto-calibration?.
The data sheet says:
"it should be performed after each
device Reset or if there are other major changes in
operating conditions.".
'Should'......
Understand that the calibration does _not_ read a channel. It is a dummy read to get the offsets internal to the chip.
Now CCS are triggering this to happen here, since otherwise it'll happen the next time you try to read the chip.
You can trigger it yourself later, if (for instance) the actual voltages around the chip have not settled at this time, by setting the ADCAL bit and performing another dummy read.
If you don't use this, the ADC is not guaranteed to meet it's specified accuracies. Quite a few other chips with similar ADC's have huge errata, about very large offset numbers sometimes occurring. This is MicroChip's solution to this....
So, why do you want to get rid of it?.
If this is just for debugging, then add a rule to the stimulus settings to make the ADC complete a conversion. |
|
|
|