ADCON0.0 = 1 ' <-- Turn ON A/D module
please read before replying; i told that all these bits are set AND i sad that it works without the pause command or do you want to say that beacause i added the command line "pause 50" that the a/d conversion module shuts off?Originally Posted by Bruce
Sorry. It's hard to "guess" how you're configuring things if you don't show it in your code.
I'm sure this isn't what the rest of your own application is doing, but it works fine with the
pause 50 in there;
I left the WDT enabled just to be sure PBP was handling it during the pause periods.Code:@ DEVICE HS_OSC, WDT_ON, LVP_OFF, PROTECT_OFF DEFINE OSC 20 SYMBOL AD_Progress = ADCON0.2 SYMBOL ADON = ADCON0.0 SYMBOL LED = PORTB.0 Sound_Level VAR WORD TRISA.0 = 1 ' A/D input PORTB.0 = 1 ' LED on at boot TRISB.0 = 0 ' LED output ADCON0 = 128 ' A/D clock Fosc/32, RA0/AN0, A/D disabled ANSEL = 1 ' RA0 analog ADCON1.7 = 1 ' right justify for 10-bit Main: ADON = 1 ' turn on A/D module PAUSE 50 ' wait AD_Progress = 1 ' start conversion WHILE AD_Progress = 1 : WEND Sound_Level.lowbyte = ADRESL Sound_Level.highbyte = ADRESH LED = LED ^ 1 ' toggle LED for visual GOTO Main END
this code works but if you change the input port of the a/d convertor and then add a pause in the line between changing and a/d conversions start then it stucks.
example:
Code:'retrieve sound level ADCON0.5 = 0 ADCON0.4 = 0 ADCON0.3 = 0 pause 50 AD_Progress = 1 while AD_Progress = 1: wend Sound_Level.lowbyte = ADRESL Sound_Level.highbyte = ADRESH 'retrieve negative level ADCON0.5 = 0 ADCON0.4 = 0 ADCON0.3 = 1 pause 50 AD_Progress = 1 while AD_Progress = 1: wend Negative_Voltage.lowbyte = ADRESL Negative_Voltage.highbyte = ADRESH 'retrieve positieve level ADCON0.5 = 0 ADCON0.4 = 1 ADCON0.3 = 0 pause 50 AD_Progress = 1 while AD_Progress = 1: wend Positive_Voltage.lowbyte = ADRESL Positive_Voltage.highbyte = ADRESH
Last edited by egberttheone; - 8th February 2006 at 21:12.
That's odd. It works for me without getting stuck.
I modified your version to include 3 LED's in the last section of each channel read routine,
and all 3 LED's blink right along.
It doesn't appear to be getting getting stuck at any point.
Are you reading 0-5 VDC voltage levels?Code:@ DEVICE HS_OSC, WDT_ON, LVP_OFF, PROTECT_OFF DEFINE OSC 20 SYMBOL AD_Progress = ADCON0.2 SYMBOL ADON = ADCON0.0 SYMBOL LED1 = PORTB.0 SYMBOL LED2 = PORTB.1 SYMBOL LED3 = PORTB.2 Sound_Level VAR WORD Negative_Voltage VAR WORD Positive_Voltage VAR WORD TRISA.0 = 1 ' A/D input PORTB = %00000111 ' LED's on at boot TRISB = 0 ' LED outputs ADCON0 = 128 ' A/D clock Fosc/32, RA0/AN0, A/D disabled ANSEL = 1 ' RA0 analog ADCON1.7 = 1 ' right justify for 10-bit Main: ADON = 1 ' turn on A/D module PAUSE 50 ' wait AD_Progress = 1 ' start conversion WHILE AD_Progress = 1: WEND Sound_Level.lowbyte = ADRESL Sound_Level.highbyte = ADRESH LED1 = LED1 ^ 1 ' toggle LED for visual 'retrieve negative level ADCON0.5 = 0 ADCON0.4 = 0 ADCON0.3 = 1 PAUSE 50 AD_Progress = 1 WHILE AD_Progress = 1: WEND Negative_Voltage.lowbyte = ADRESL Negative_Voltage.highbyte = ADRESH LED2 = LED2 ^ 1 ' toggle LED for visual 'retrieve positieve level ADCON0.5 = 0 ADCON0.4 = 1 ADCON0.3 = 0 PAUSE 50 AD_Progress = 1 WHILE AD_Progress = 1: WEND Positive_Voltage.lowbyte = ADRESL Positive_Voltage.highbyte = ADRESH LED3 = LED3 ^ 1 ' toggle LED for visual GOTO Main END
yes, i'm reading voltage's between 0-5VDC. i found out that it doesn't mather where i place the pause command(in the interrupt routine); it instant freez the pic forever. The AD routine is placed in a interrupt routine is it not possible to place a pause periode into a interrupt handel?
note: timer0, timer1 and serial interrupt are activated.
Bookmarks