I'm trying to get temperature readings from a thermocouple, using INA128 op.amp. connected to pic16f88. The problem is that although I get readings that seem to be valid, every now and then (10 to 20% of the reading, with irregular intervals) are erratic. The erronous readings are always smaller than the correct ones, typically about 1/4 of the real values (i.e. if I should get values around 400, I get every now and then values of about 100). The op.amp. is connected to the porta.2 pin.
My configuration is like this:
Code:
OPTION_REG.7 = 0 'enable portb pullups
TRISA = %00000100 'set porta pin 2 as inputs
TRISB = %01110011 'set portb pins 2,3,7 as output
OSCCON =%01101100 'set internal osc at 4 mhz w/freq stable
OSCTUNE = 0 'internal osc. running at factory calibration
CMCON = 7 'comparators off
ANSEL = 4 'porta.2 AD-input, others digital
ADCON0 = %01010000
ADCON1 = %10000000
PIE1 = 0 'disable all interrupts
INTCON = 0 ' -"-
And the code that reads A/D looks like this:
Code:
readAD: 'Do the AD-conversion
adcon0.0 = 1 'turn on AD-converter
pauseus 20
ADCON0.2 = 1 'Start AD-conversion
notdone:
if ADCON0.2 = 1 then notdone 'wait for low on bit-2 of ADCON0,
' = conversion finished
ADresult.highbyte = ADRESH 'move HIGH byte of result to ADresult
ADresult.lowbyte = ADRESL 'move LOW byte of result to ADresult
return
Is there something wrong in my configuration/code? Thanks!
Bookmarks