
 Originally Posted by 
Ioannis
					 
				 
				...What about LM35_Vout being less than LM35_VGND? 
I expected you would do this and noted in earlier post (#33) 

 
	 
 Sorry, I forgot this one   . I was focused on the "mysterious" values I was reading.
 . I was focused on the "mysterious" values I was reading.
	
		
			
			
				
					
 Originally Posted by 
me
					
				 
				I might be wrong with the ADCON0.7 setting but I'm not used to modify it so I'm not sure about that.
			
		 
	 
 I changed to ADCON0.7 = 1 and the values I read look much better. Still the Temperature value has to be divide by 2 to give the correct reading.

Even if it's not the main subject here, can you shortly explain what the difference between ADCON0.7 = 0 and ADCON0.7 = 1 is?
The temporary code is now:
	Code:
	' PIC 16F690 Fuses
@ __config _FCMEN_OFF &_IESO_OFF &_CPD_OFF &_WDT_OFF &_HS_OSC &_BOR_OFF &_CP_OFF &_PWRTE_OFF &_MCLRE_OFF
'_______________________________________________________________________________
' Registers   76543210
OPTION_REG = %10000000 'OPTION REGISTER
ANSEL      = %00000100 'Select analog inputs Channels 0 to 7
ANSELH     = %00000010 'Select analog inputs Channels 8 to 11
ADCON0     = %10000001 'A/D control register
ADCON1     = %00000000 'A/D control register
CM1CON0    = %00000000 'Comparator1 Module
CM2CON0    = %00000000 'Comparator2 Module
INTCON     = %00000000 'INTerrupts CONtrol
TRISA      = %00000110 'Set Input/Output (0 to 5)
PORTA      = %00000000 'Ports High/Low (0 to 5)
TRISB      = %00000000 'Set Input/Output (4 to 7)
PORTB      = %00000000 'Ports High/Low (4 to 7)
TRISC      = %10000000 'Set Input/Output (0 to 7)
PORTC      = %00000000 'Ports High/Low (0 to 7)
'_______________________________________________________________________________
' Defines
DEFINE OSC 4
DEFINE ADC_BITS 10
'_______________________________________________________________________________
' Variables
LM35_Vout       var word ' AN2 PORTA.2
LM35_VGND       var word ' AN9 PORTC.7
Temperature     var word
DataVar         VAR WORD(12)
DataTemp        var WORD
Counter_A       var WORD
'_______________________________________________________________________________
' Program
MAIN:
    ' LM35_Vout
    FOR counter_A = 0 to 11
        adcin 2, DataVar(counter_A)
    next counter_A
    Counter_a = 0
    GOSUB SORT
    LM35_Vout = DataTemp
    
    
    ' LM35_VGND
    FOR counter_A = 0 to 11
        adcin 9, DataVar(counter_A)
    next counter_A
    Counter_a = 0
    GOSUB SORT
    LM35_VGND = DataTemp
    if LM35_Vout >LM35_VGND then
        Temperature = ((LM35_Vout - LM35_VGND) * 100) / 2
    endif
    if LM35_Vout <= LM35_VGND then
        Temperature = ((LM35_VGND - LM35_Vout) * 100) / 2
    endif
    GOSUB DISPLAY
    pause 1000
    
Goto main:
'_______________________________________________________________________________
' Subroutine
DISPLAY:
    Serout2 PORTB.7,84,["Temp.: ", dec2 (temperature/100),",",dec1 (temperature/10),"°C  LM35_Vout: ", dec4 LM35_Vout,"  LM35_VGND: ", dec4 LM35_VGND,13]
RETURN
'_______________________________________________________________________________
' Subroutine
SORT:
' Melanie NEWMAN's
' This subroutine sorts, in this example, 12 elements,
'   MyData array in sequence placing the smallest value into MyData[0] and
'   the largest value into MyData[11]...
    If DataVar(counter_A + 1) < DataVar(counter_A) then
        DataTemp = DataVar(counter_A)
        DataVar(counter_A) = DataVar(counter_A + 1)
        DataVar(counter_A + 1) = DataTemp
        If Counter_A > 0 then Counter_A = Counter_A - 2
    endif
    Counter_A = Counter_A + 1
    If Counter_A < 11 then GOTO SORT
    
    ' Average four middle values
    DataTemp = 0
    For Counter_A = 4 to 7
        DataTemp = DataTemp + DataVar(counter_A)
    next Counter_A
    
    DataTemp = DataTemp / 4
Return
 
				
			
Bookmarks