I am feeling lazy so I will do an article later. For now here is some stuff to play with. I found that I am out of 684s so I did this with a 676. Should work with the 684.
For now we will look at 8 bit ADC. Using 8 bit the signal is divided into 256 steps, 0 - 255.
The ADC will return 0 - 255. If you use this to read a voltage and you are using 5 volts for the VDD/reference, 1 volt will return 51, 2 volts will return 102, 3 volts.....
You will not find this way of doing the ADC in the manual, but if you follow along with the data sheet you will see what is happening with the registers.
I wrote the examples for the PicKit1 test board. Using the on-board POT and LEDs.
Example #1
Example #2Code:'FL PIC16F676 '16F676 ADC ON PICKIT_1 DEFINE OSC 4 @ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _CP_OFF ANSEL = %00000001 'CHANNEL AN0 ADCON1 = %00010000 'FOSC/8 TRISA = %00000001 CMCON = %00000111 CHAN0 VAR BYTE 'VAR TO HOLD ADC0 READING CHECK: GOSUB ADC_0 IF CHAN0 > 128 THEN GOSUB BLINK ELSE PORTA = %00000000 ENDIF GOTO CHECK BLINK: D0_HIGH: TRISA = %11001111 PORTA = %00010000 PAUSE 500 D1_HIGH: TRISA = %11001111 PORTA = %00100000 PAUSE 500 D2_HIGH: TRISA = %11101011 PORTA = %00010000 PAUSE 500 D3_HIGH: TRISA = %11101011 PORTA = %00000100 PAUSE 500 RETURN ADC_0: 'READ AN0 ADCON0 = %00000001 'TURNS ADC ON, SET FOR 8 BIT GOSUB READ_AD CHAN0 = ADRESH RETURN READ_AD: 'DOES THE ADC CONVERSION PAUSE 50 ADCON0.1=1 WHILE ADCON0.1=1:WEND RETURN
Code:'FL PIC16F676 '16F676 ADC ON PICKIT_1 WITH CASE SELECT DEFINE OSC 4 @ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _CP_OFF ANSEL = %00000001 'CHANNEL AN0 ADCON1 = %00010000 'FOSC/8 TRISA = %00000001 CMCON = %00000111 CHAN0 VAR BYTE 'VAR TO HOLD ADC0 READING CHECK: GOSUB ADC_0 GOSUB BLINK GOTO CHECK BLINK: SELECT CASE CHAN0 CASE IS > 254 TRISA = %11001111 PORTA = %00010000 CASE IS > 192 TRISA = %11001111 PORTA = %00100000 CASE IS > 128 TRISA = %11101011 PORTA = %00010000 CASE IS > 64 TRISA = %11101011 PORTA = %00000100 CASE ELSE PORTA = %00000000 END SELECT RETURN ADC_0: 'READ AN0 ADCON0 = %00000001 'TURNS ADC ON, SET FOR 8 BIT GOSUB READ_AD CHAN0 = ADRESH RETURN READ_AD: 'DOES THE ADC CONVERSION PAUSE 50 ADCON0.1=1 WHILE ADCON0.1=1:WEND RETURN





Bookmarks