5V PIC16F819, olimex pic18 dev board, PBPW in MPLAB, PICKIT3
Hello everybody,
Nothing extrodinary here, except the amount of time I've spent on this :-) I'm simply trying to read a voltage (right now it's off a pot, but eventually it would be a battery) and send the value out over RS-232. I'm getting some strange results from the scaling math. Here is the code.
and here are the results I get. notice the strange readings when the A2D count is 201 and 202, also 406, also 1021.Code:' PIC16F819 Configuration ' ================ @ __CONFIG _HS_OSC & _MCLR_OFF & _LVP_OFF & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF DEFINE DEBUG_REG PORTB 'RS-232 output on PORTB.4 DEFINE DEBUG_BIT 4 DEFINE DEBUG_BAUD 19200 ' 19200 Baud, DEFINE DEBUG_MODE 0 ' not inverted. using (MAX232) RS-232 level shifer DEFINE ADC_BITS 10 ' Set number of bits in result DEFINE ADC_CLOCK 3 ' Set clock source (3=rc) DEFINE ADC_SAMPLEUS 50 ' Set sampling time in uS DEFINE OSC 20 ADCON0 = %11000001 ADCON1 = %10001110 ' AN0 (PORTA.0) is analog TRISB = %00000110 TRISA = %00000011 PushB var PORTB.2 ' Pushbutton (OLIMEX 18 pin PIC dev board) LED var PORTB.3 ' Indicator LED (OLIMEX 18 pin PIC dev board) A2DPIN var PORTA.0 ' AN0 A2Dvalue var WORD ' to store result W0 var WORD ' division remainder W1 var WORD ' division modulus A2Dvalue = 0 W0 = 0 W1 = 0 DEBUG REP $00\8,13,10,"Start Up" LED = 1 'Wait at startup pause 7000 LED = 0 mainloop: pause 250 ADCIN 0, A2Dvalue ' Read channel 0 to variable advalue W0 = (A2Dvalue * 5) / 1024 W1 = (A2Dvalue * 5) // 1024 DEBUG REP $00\8,13,10, "Voltage = ",DEC W0,".",DEC3 W1, " A2D value = ",DEC A2Dvalue Goto mainloop END
Code:Start Up Voltage = 0.000 A2D value = 0 Voltage = 0.080 A2D value = 16 Voltage = 0.125 A2D value = 25 Voltage = 0.190 A2D value = 38 Voltage = 0.310 A2D value = 62 Voltage = 0.335 A2D value = 67 Voltage = 0.405 A2D value = 81 Voltage = 0.445 A2D value = 89 Voltage = 0.500 A2D value = 100 Voltage = 0.565 A2D value = 113 Voltage = 0.630 A2D value = 126 Voltage = 0.675 A2D value = 135 Voltage = 0.700 A2D value = 140 Voltage = 0.750 A2D value = 150 Voltage = 0.845 A2D value = 169 Voltage = 0.900 A2D value = 180 Voltage = 0.920 A2D value = 184 Voltage = 0.930 A2D value = 186 Voltage = 0.940 A2D value = 188 Voltage = 0.950 A2D value = 190 Voltage = 0.960 A2D value = 192 Voltage = 0.975 A2D value = 195 Voltage = 0.005 A2D value = 201 Voltage = 0.010 A2D value = 202 Voltage = 1.026 A2D value = 210 Voltage = 1.076 A2D value = 220 Voltage = 1.141 A2D value = 233 Voltage = 1.196 A2D value = 244 Voltage = 1.246 A2D value = 254 Voltage = 1.306 A2D value = 266 Voltage = 1.356 A2D value = 276 Voltage = 1.356 A2D value = 276 Voltage = 1.366 A2D value = 278 Voltage = 1.611 A2D value = 327 Voltage = 1.771 A2D value = 359 Voltage = 1.851 A2D value = 375 Voltage = 1.891 A2D value = 383 Voltage = 1.901 A2D value = 385 Voltage = 1.901 A2D value = 385 Voltage = 1.926 A2D value = 390 Voltage = 1.956 A2D value = 396 Voltage = 1.956 A2D value = 396 Voltage = 1.006 A2D value = 406 Voltage = 2.037 A2D value = 417 Voltage = 2.082 A2D value = 426 Voltage = 2.157 A2D value = 441 Voltage = 2.207 A2D value = 451 Voltage = 2.207 A2D value = 451 Voltage = 2.207 A2D value = 451 Voltage = 2.612 A2D value = 532 Voltage = 2.727 A2D value = 555 Voltage = 2.807 A2D value = 571 Voltage = 2.837 A2D value = 577 Voltage = 2.022 A2D value = 614 Voltage = 3.068 A2D value = 628 Voltage = 3.098 A2D value = 634 Voltage = 3.153 A2D value = 645 Voltage = 3.228 A2D value = 660 Voltage = 4.894 A2D value = 998 Voltage = 4.894 A2D value = 998 Voltage = 4.009 A2D value = 1021
..a better way????





Bookmarks