;***************************************************************************** ; Fan Speed Controller ; Most recent version: 1.2 2024/06/25 ; Target Chip dsPIC30F4012-30I ; ; Tools Used : MPLAB X IDE 2.20 ; ; Ver 1.1: Fixed max fan speed (959 not 960) ; Added anti-windup saturation limits to integrator ; Ver 1.2: Improved ADC config (longer S/H), Increased avg to 20x ;***************************************************************************** .equ __30F4012, 1 .include "p30f4012.inc" ;............................................................................. ; Configuration bits: ;............................................................................. config __FOSC, CSW_FSCM_OFF & XT_PLL16 ;16xPLL - 120MHz/30MIPs at 7.3728MHz XTAL ;Fosc=117.9648MHz, Fcy=29.4912MHz config __FWDT, WDT_OFF ;Turn off Watchdog Timer ; config __FBORPOR, PBOR_ON & BORV27 & PWRT_16 & MCLR_EN ;Set Brown-out Reset voltage and config __FGS, CODE_PROT_OFF ;Set Code Protection Off ;............................................................................. ; Global Declarations: ;............................................................................. .global __reset ;Label for first line of code. .global __T1Interrupt ;Declare Timer 1 ISR name global .global __T2Interrupt ;Declare Timer 2 ISR name global .global __CNInterrupt ;Interrupt on port change (ZCD) .global __OscillatorFail ;Declare Oscillator Fail trap routine label .global __AddressError ;Declare Address Error trap routine label .global __StackError ;Declare Stack Error trap routine label .global __MathError ;Declare Math Error trap routine label ;............................................................................. ; Variable Storage in Data space (beginning at 0x850) ;............................................................................. .section .data .align 2 PhaseAngle: .space 2 ;Phase angle (0 .. 959 - 0 = full power) ZcdError: .space 2 ;Status of Zcd - Good (clr) or error (1/2) SetPoint: .space 2 ;SP for the process (target evap temp in x100C) Error: .space 2 ;Error (SP-PV) in x100C P_Gain: .space 2 ;0.01 to 30.00 in x100C I_Gain: .space 2 ;0.01 to 30.00 in x100C Proportional: .space 2 Integral: .space 2 Output: .space 2 ;Output value from PI loop OutputAngle: .space 2 ;Global angle for next update (--> PR1) MinFanSpeed: .space 2 ;Minimum fan speed before stalling C_Gain: .space 2 ;Control Gain (x1/2/4/8) EvapTemp: .space 2 ;Current Evap Temp (for display) FanSpeed: .space 2 ;Current Fan Speed MessageCounter: .space 2 ;Counter for message display on LCD FreezeTimer: .space 2 ;Counter for freeze-up timer BCD1: .space 2 ;ASCII string of BCD digits (converted) BCD2: .space 2 BCD3: .space 2 BCD4: .space 2 BCD5: .space 2 ;............................................................................. ; Constants ;............................................................................. ;PORT B,D,E I/O Lines to panel .equ ERROR,#5 ;RB5 is an error LED .equ PIDSTAT,#4 ;RB4 is a status LED .equ FREEZE,#3 ;RB3 is the freeze relay output .equ KEYPAD,#2 ;RB2 is the keypad input .equ SET,#0 ;RE0 polls the SET/ENTER key .equ DN,#1 ;RE1 polls the DOWN key .equ UP,#2 ;RE2 polls the UP key .equ TRIAC,#0 ;RD0 is the triac output .equ BYPASS,#1 ;RD1 is the freeze sensor bypass relay ;............................................................................. ; Code Section in Program Memory ;............................................................................. .section .text ;Start of Code section ;#################################### ;########### MAIN CODE ########## ;#################################### __reset: ;Setup Stack for Calls in program memory nop nop mov #__SP_init,W15 mov #__SPLIM_init, W0 ;Initialize the Stack Pointer Limit Register mov W0, SPLIM ;Configure processor bset CORCON,#IF ;Select Integer mode for DSP Multiplier bset CORCON,#PSV ;Enable PSV for program memory access (for table access) ;Setup I/O Ports mov #0B1111111111000111,W1 ;RB0=In(AN0),RB1=In(CN),RB2=In(KPD) ; RB5=Out(Error),RB4=Out(Status),RB3=Out(Freeze) mov W1,TRISB mov #0B1111111111111100,W1 ;RD0=triac out, RD1=Frz bypass mov W1,TRISD mov #0B1111111111000000,W1 ;RE0-5=LCD outputs (0-3=data,4=rs,5=e) mov W1,TRISE ;Configure ADC for one channel (Evap Temp) mov #0B1111111111111110,W0 ;RB0 = analog input for thermistor mov W0,ADPCFG mov #0B0000000011100000,W0 ;Set for Auto Sampling (SSRC=111) mov W0,ADCON1 clr ADCON2 ;Analog Vss/Vdd external mov #0x0000,W0 ;Select RB0/AN0 as CH0 input .. mov W0,ADCHS clr ADCSSL ; mov #0B0000000110111001,W0 ;Auto Sample, Tad for 30 MIPs max RC mov #0B0001111100111111,W0 ;For stability, 31Tad samp, Clock src, 32Tcy clk mov W0,ADCON3 clr ADCON2 ;AVdd,AVss external references on the 4012 chip bset ADCON1,#ADON ;Turn ADC module ON bset ADCON1,#SAMP ; start sampling ... ;Setup Timer 1 for phase angle delay: Assume Tcy = 29.4912MHz (7.37MHz main clock x 16PLL) ;Note - Tcy is derived from actual (PLL'd) osc mov #0x8030,w1 mov w1,T1CON ;1:256, Int Clk, ON mov #500,W1 ;Load PR1 for min angle (full power to start) - test mov w1,PR1 clr TMR1 bclr IFS0,#T1IF ;Clear Interrupt Flag bset IEC0,#T1IE ;Interrupt Enable for Timer 1 ;Setup Timer #2 for zcd timeout mov #0x8030,w1 mov w1,T2CON ;Must be same as Timer 1 mov #1000,W1 ;Max angle that can be reached without ZCD (114Hz min /2=57Hz) mov w1,PR2 clr TMR2 bclr IFS0,#T2IF ;Clear Interrupt Flag bset IEC0,#T2IE ;Interrupt Enable for Timer 2 ;Enable change notification on external interrupt for ZCD input bset CNEN1,#CN3IE ;Select CN3 as the source (RB1) bclr IFS0,#CNIF ;Clear Interrupt Flag bset IEC0,#CNIE ;Interrupt Enable for Change Notification on CN3 (RB1) ;Setup Timer 4/5 for one second PI loop delay mov #0x8038,w1 mov w1,T4CON ;1:256, Int Clk, ON, T45 mode mov #1,w1 mov w1,TMR5HLD ;Load PR5 when PR4 is loaded mov w1,PR5 mov #0xC200,W1 ;Load PR4 (and 5) for one second delay mov w1,PR4 clr TMR4 clr TMR5 bclr IFS1,#T5IF ;Clear Interrupt Flag ;Clear accumulator for Integral term clr A ;Initialize LCD call LCD_Init clr MessageCounter ;EEPROM Parameter Storage ; Address 0 = Set Point ; Address 1 = P_Gain ; Address 2 = I_Gain ; Address 3 = C_Gain ; Address 4 = Min Fan Speed ;*********************************************** ;TEST: RUN ONCE ONLY to initialize EEPROM values ; mov #500,w0 ;Set Point 5.00C ; mov #0,w1 ; call WriteEEPROM ; mov #2000,w0 ;P Gain 20.00 ; mov #1,w1 ; call WriteEEPROM ; mov #20,w0 ;I Gain 0.20 ; mov #2,w1 ; call WriteEEPROM ; mov #4,w0 ;Control Gain x4 ; mov #3,w1 ; call WriteEEPROM ; mov #480,w0 ;Min Fan Speed 50% ; mov #4,w1 ; call WriteEEPROM ;*********************************************** ;Initialize parameters from EEPROM mov #0,w1 call ReadEEPROM mov w0,SetPoint mov #1,w1 call ReadEEPROM mov w0,P_Gain mov #2,w1 call ReadEEPROM mov w0,I_Gain mov #3,w1 call ReadEEPROM mov w0,C_Gain mov #4,w1 call ReadEEPROM mov w0,MinFanSpeed ;!!! DEBUG !!! Initialize parameters ; mov #1300,w0 ; mov w0,SetPoint ; mov #1500,w0 ; mov w0,P_Gain ; mov #200,w0 ; mov w0,I_Gain ; mov #16,w0 ; mov w0,C_Gain ; mov #600,w0 ; mov w0,MinFanSpeed ;!!! DUBUG !!! Ends ;Startup: run fan on high for 2 seconds (breakaway torque, line sync) ; actual power section is now running on interrupt-drive mov #1,w0 mov w0,OutputAngle ;Global var used in ISR mov #959,w0 mov w0,Output mov #tbloffset(StringStartup), w0 ;Print intro string call LCD_String mov #3000,w1 ;Three second delay call Delay ;***************** ;Main Program Loop ;***************** MainLoop: ;Wait for loop time (PI loop) - every one second ;Update LCD while waiting for timer ;Display messages (Evap Temp, Set Pt, Fan Speed) sequentially mov MessageCounter,w0 mov #3,w1 cpsgt w1,w0 goto DisplaySetPoint ;Display Evap Temp call LCD_Cls mov #tbloffset(StringEvapTemp), w0 call LCD_String ;Convert Value to four BCD digits mov #0xC0,w0 ;Line 2 call LCD_Cmd mov EvapTemp,w0 btss EvapTemp,#15 ;Check if negative goto EvapTempPositive mov #'-',w0 call LCD_Chr mov EvapTemp,w0 com w0,w0 inc w0,w0 EvapTempPositive: call itoa mov BCD2,w0 call LCD_Chr mov BCD3,w0 call LCD_Chr mov #'.',w0 call LCD_Chr mov BCD4,w0 call LCD_Chr mov BCD5,w0 call LCD_Chr mov #67,w0 ;"C" call LCD_Chr goto DisplayEnds DisplaySetPoint: mov MessageCounter,w0 mov #5,w1 cpsgt w1,w0 goto DisplayFanSpeed ;Display Set Temp call LCD_Cls mov #tbloffset(StringSetPoint), w0 call LCD_String ;Convert Value to four BCD digits mov #0xC0,w0 ;Line 2 call LCD_Cmd mov SetPoint,w0 call itoa mov BCD2,w0 call LCD_Chr mov BCD3,w0 call LCD_Chr mov #'.',w0 call LCD_Chr mov BCD4,w0 call LCD_Chr mov BCD5,w0 call LCD_Chr mov #67,w0 ;"C" call LCD_Chr goto DisplayEnds DisplayFanSpeed: mov MessageCounter,w0 mov #7,w1 cpsgt w1,w0 goto DisplayReset ;Display Current Fan Speed call LCD_Cls mov #tbloffset(StringFanSpeed), w0 call LCD_String ;Convert Value to four BCD digits mov #0xC0,w0 ;Line 2 call LCD_Cmd mov Output,w0 call itoa mov BCD3,w0 call LCD_Chr mov BCD4,w0 call LCD_Chr mov BCD5,w0 call LCD_Chr mov #'/',w0 ;"/" call LCD_Chr mov #'9',w0 ;"9" call LCD_Chr mov #'6',w0 ;"6" call LCD_Chr mov #'0',w0 ;"0" call LCD_Chr goto DisplayEnds DisplayReset: clr MessageCounter DisplayEnds: CheckLoopTimer: bset LATE,#SET btsc PORTB,#KEYPAD ;Check if SET/ENT key pressed call KeypadPressed ; If so, go to Parm Setup btss IFS1,#T5IF ;Check if Timer 4/5 expired goto CheckLoopTimer bclr IFS1,#T5IF ;Blink PID status LED btsc LATB,#PIDSTAT goto PIDLedOff bset LATB,#PIDSTAT ;TOGGLE to Briefly blink during PI loop execution goto PIDLedDone PIDLedOff: bclr LATB,#PIDSTAT ;TOGGLE to Briefly blink during PI loop execution PIDLedDone: inc MessageCounter ;Read analog value and start next conversion ;Read twenty analog values and average to reduce noise ReadThermistor: clr w8 mov #20,w7 ;Average 20 readings WaitForADCDone: btss IFS0,#ADIF ;conversion done? goto WaitForADCDone ; if not, wait for it bclr IFS0,#ADIF ;Reset conversion flag mov ADCBUF0,w6 ;Read current ADC value bset ADCON1,#SAMP ;Start next sample mov #1,w1 call Delay bclr ADCON1,#SAMP add w8,w6,w8 ;Accumulate readings dec w7,w7 btss SR,#Z goto WaitForADCDone mov #20,w7 repeat #17 div.u w8,w7 ;Average is now in w0 ;Convert ADC reading (in w0) to Temp mov #tbloffset(TempTable), w1 ;Base Ptr to char table rlnc w0,w0 ;Multiply pointer by 2 add w0,w1,w1 ;w1 now points to digits to display mov #0x8000,w0 ;Add 0x8000 to use PSV access add w0,w1,w1 mov [w1],w0 ;TEST (allows quick update when simulating) ; mov w12,w0 ;0.01C + mov w0,EvapTemp ;Check if thermistor is in range (>-20C and <60C), otherwise fails btss EvapTemp,#15 ;Is it negative? goto EvapTempPosErrorCheck mov #0xF830,w1 ;Must be > -20C cpslt w1,w0 goto EvapTempError goto EvapThermistorOk EvapTempPosErrorCheck: mov #6000,w1 ;Must be > -20C cpsgt w1,w0 goto EvapTempError goto EvapThermistorOk EvapTempError: call LCD_Cls mov #tbloffset(StringThermError), w0 call LCD_String bset LATB,#PIDSTAT ;Continuous Status LED mov #959,w0 ;Full Power Fan mov w0,Output mov #500,w1 call Delay goto OutputLimitOk ;Jump directly to output EvapThermistorOk: ;Check if freezing-up (Evap Temp <0C for 30 seconds) mov #0,w1 cpsgt w1,w0 goto EvapTempClr inc FreezeTimer call LCD_Cls mov #tbloffset(StringFreezeError), w0 call LCD_String bset LATB,#PIDSTAT ;Continuous Status LED mov #500,w1 call Delay mov FreezeTimer,w0 mov #30,w1 cpsgt w0,w1 goto EvapTempOk bclr LATB,#FREEZE ;Still freezing-up so let the Dometic ; box shut down compressor. WILL reboot fan goto EvapTempOk EvapTempClr: clr FreezeTimer bset LATB,#FREEZE ;Since Evap is OK, bypass Dometic freeze sensor EvapTempOk: ;compute Error (Error = SP-PV), +ve = PV low so increase output ;maximum error is logically 30C (.3000, 12-bits) mov SetPoint,W2 sub w2,w0,w4 mov w4,Error ;Saturate error to +/-1000 maximum value mov #1000,w6 btsc Error,#15 goto ErrorIsNeg cpsgt w4,w6 goto ErrorDoneLimit mov w6,Error goto ErrorDoneLimit ErrorIsNeg: mov #64536,w6 ;-1000 cpslt w4,w6 goto ErrorDoneLimit mov w6,Error ErrorDoneLimit: ;*** calc P term as a signed 16-bit number ;multiply Error x P_Gain (32-bit number) then divide by 100 to re-scale (32/16 divide) ;This term will have a max alue of 30000 (at 10C error, gain=30) mov Error,W1 mov P_Gain,W2 mul.ss w1,w2,w4 ;W4/w5 contain product mov #100,w6 repeat #17 div.sd w4,w6 ;w0 contains quotient mov w0,Proportional ;*** calc I term ;Anti-Windup Logic - only allow integration if Output is not saturated. ;Check if last Output at high LIMIT (959) mov Output,w0 mov #958,w6 cpsgt w0,w6 goto OutputUnderHighLimit goto AntiWindupSkipIntegral OutputUnderHighLimit: ;Check if last Output at low LIMIT (MinFanSpeed) mov MinFanSpeed,w6 cpsgt w0,w6 goto AntiWindupSkipIntegral ;accumulate error first to ACCA (40-bit) as signed mov Error,w4 mov #1,w6 mac w4*w6,A ;Saturate integral term at +/- 100000 [max error for 100 seconds] btsc ACCAU,#15 ;Check if accumulator is negative goto SaturateAccumulatorNegative clr B add B ;Copy ACCA -->ACCB sftac B,#4 ;Shift four bits left mov ACCBL,w6 mov #0x186A,w7 cpsgt w6,w7 goto AccumulatorOk mov #0x01,w0 ;Reload ACCA with max value (100000) mov w0,ACCAH mov #0x86A0,w0 mov w0,ACCAL goto AccumulatorOk SaturateAccumulatorNegative: clr B add B ;Copy ACCA -->ACCB sftac B,#4 ;Shift four bits left mov ACCBL,w6 mov #0xE796,w7 cpslt w6,w7 goto AccumulatorOk mov #0xFFFE,w0 ;Reload ACCA with min value (-100000) mov w0,ACCAH mov #0x7960,w0 mov w0,ACCAL goto AccumulatorOk ;If Output was out of controllable limits, just skip to here AntiWindupSkipIntegral: AccumulatorOk: ;multyiply ACCA (+/-100000) by I_Gain [30 max = 3000] ;ACCA will be limited to 300000000 (100000 x 3000) mov ACCAL,w0 mov ACCAH,w1 mov I_Gain,w2 mov #0,w3 call Mult32 ;32x32 multiply, result in w3...w0 mov w0,w4 ;32-bit result mov w1,w5 ;divide by 9156 to re-scale [I term is now 300000000 max - scale to 32768 max] ; mov #0x23C4,w6 ; repeat #17 ; div.sd w4,w6 ;w0 contains quotient ; mov w0,Integral ;Divide by 100 (since gain is x100) mov #100,w6 repeat #17 div.sd w4,w6 ;w0 contains quotient ;If not overflow, the 16-bit value is valid btss SR,#OV goto ITermIsOk ;If Overflow, the ACC is too large so just limit the value of the output term btss ACCAU,#15 ;Check if negative goto SetITermLimit mov #0x8001,w0 ;Max negative value goto ITermIsOk SetITermLimit: mov #30000,w0 ;Max positive value ITermIsOk: mov w0,Integral ;Finally, calculate output as a sum of P&I terms ;Both values are signed 16-bit clr B mov Proportional,w4 mov Integral,w5 mov #1,w6 mac w4*w6,B mac w5*w6,B ;ACCB now contains an output value as 40-bits, signed. A negative value implies Evap Temp (PV) is higher than ;the setpoint so decrease fan speed to minimum (stall) speed. A positive value implies Evap Temp is lower ;so increase fan speed accordingly ;Check for negative value: if so, this means decrease speed to min btsc ACCBU,#7 ;Test bit 39 to see if negative goto SetMinFanSpeed ;Positive value, limit to .30000 if required mov ACCBL,w4 mov #30000,w6 cpsgt w4,w6 goto PositiveOutOk mov #30000,w0 ;Limit output to maximum value mov w0,ACCBL PositiveOutOk: ;Positive - it is now a 16-bit unsigned number (0..30000) in ACCBL ;30000 is max limit but 7500 is typical (2.5C error at gain 30) ;Apply a final Control Gain to compensate for the range of control needed - will compress range ; to a smaller alue for the output parameter (and then phase angle) ;Control Gain is x1(/256),x2(/128),x4(/64),x8(/32),x16(/16),x32(/8) mov #64,w6 ;Default in none selected (div by zero bad) btsc C_Gain,#0 mov #256,w6 btsc C_Gain,#1 mov #128,w6 btsc C_Gain,#2 mov #64,w6 btsc C_Gain,#3 mov #32,w6 btsc C_Gain,#4 mov #16,w6 btsc C_Gain,#5 mov #8,w6 mov ACCBL,w4 clr w5 ;High word repeat #17 div.sd w4,w6 ;w0 contains quotient mov w0,Output ;Check if greater than LIMIT (960) ... if so, set to limit mov #959,w6 cpsgt w0,w6 goto OutputDone mov #959,w0 mov w0,Output ;Actual PI output value goto OutputDone ;If output sum was negative, set to minimum speed SetMinFanSpeed: mov #0,w0 mov w0,Output ;Actual PI output value OutputDone: ;Output is now a value between 0 and 959 and represents the output required ;Normally, a value around 100 to 400 is common with a temp error ;Sum with the min fan speed and limit to 959 as required mov MinFanSpeed,w6 add w6,w0,w0 mov #959,w6 cpsgt w0,w6 goto OutputLimitOk mov #959,w0 OutputLimitOk: mov w0,Output ;"Output" is in the range (MinFanSpeed ... 959) ;Update the phase angle = (960 - Output) ;"OutputAngle" --> 1=maximum power (wave start), 959=minimum power (wave done) mov #960,w0 mov Output,w2 sub w0,w2,w4 mov w4,OutputAngle ;Global var - updates inside ISR on Zero Cross ;done goto MainLoop ;******************************** ;*** Parameter Setup routines *** ;******************************** ;*** Note that PI loop halts during setup (but not firing angle control) KeypadPressed: btsc PORTB,#KEYPAD ;Check if SET/ENT key pressed goto KeypadPressed ; Wait until released mov #5,w1 call Delay btsc PORTB,#KEYPAD ;Debounce - Still Clear? goto KeypadPressed ; Wait until released ;Parameter #1 - Set Point ;Display Parameter to update on top line call LCD_Cls mov #tbloffset(StringSetSP), w0 call LCD_String SetSP: ;Convert Current Value to four BCD digits mov #0xC0,w0 ;Line 2 call LCD_Cmd mov SetPoint,w0 call itoa mov BCD2,w0 call LCD_Chr mov BCD3,w0 call LCD_Chr mov #'.',w0 call LCD_Chr mov BCD4,w0 call LCD_Chr mov BCD5,w0 call LCD_Chr mov #67,w0 ;"C" call LCD_Chr ;Set using UP/DN keys bclr LATE,#SET bclr LATE,#UP bset LATE,#DN nop btss PORTB,#KEYPAD ;Check if DN key pressed goto NotSPDown dec SetPoint btss SetPoint,#15 ;Check if negative (<0) goto SPMinOk mov #0,w0 mov w0,SetPoint SPMinOk: mov #10,w1 ;Small Delay - no debounce but autorepeat call Delay goto SetSP NotSPDown: bclr LATE,#DN bset LATE,#UP nop btss PORTB,#KEYPAD ;Check if UP key pressed goto NotSPUp inc SetPoint mov SetPoint,w1 mov #2000,w0 ;Max value 20.00C cpslt w0,w1 goto SPMaxOk mov w0,SetPoint SPMaxOk: mov #10,w1 ;Small Delay - no debounce but autorepeat call Delay goto SetSP NotSPUp: bclr LATE,#UP bset LATE,#SET nop btss PORTB,#KEYPAD ;Check if SET/ENT key pressed goto SetSP SPExit: mov #5,w1 call Delay btsc PORTB,#KEYPAD ;Debounce - Still Clear? goto SPExit ; Wait until released ;Parameter #2 - P Gain ;Display Parameter to update on top line call LCD_Cls mov #tbloffset(StringSetPGain), w0 call LCD_String SetPGain: ;Convert Current Value to four BCD digits mov #0xC0,w0 ;Line 2 call LCD_Cmd mov P_Gain,w0 call itoa mov BCD2,w0 call LCD_Chr mov BCD3,w0 call LCD_Chr mov #'.',w0 call LCD_Chr mov BCD4,w0 call LCD_Chr mov BCD5,w0 call LCD_Chr ;Set using UP/DN keys bclr LATE,#SET bclr LATE,#UP bset LATE,#DN nop btss PORTB,#KEYPAD ;Check if DN key pressed goto NotPGDown dec P_Gain btss P_Gain,#15 ;Check if negative (<0) goto PGMinOk mov #0,w0 mov w0,P_Gain PGMinOk: mov #10,w1 ;Small Delay - no debounce but autorepeat call Delay goto SetPGain NotPGDown: bclr LATE,#DN bset LATE,#UP nop btss PORTB,#KEYPAD ;Check if UP key pressed goto NotPGUp inc P_Gain mov P_Gain,w1 mov #3000,w0 ;Max value 30.00 cpslt w0,w1 goto PGMaxOk mov w0,P_Gain PGMaxOk: mov #10,w1 ;Small Delay - no debounce but autorepeat call Delay goto SetPGain NotPGUp: bclr LATE,#UP bset LATE,#SET nop btss PORTB,#KEYPAD ;Check if SET/ENT key pressed goto SetPGain PGExit: mov #5,w1 call Delay btsc PORTB,#KEYPAD ;Debounce - Still Clear? goto PGExit ; Wait until released ;Parameter #3 - I Gain ;Display Parameter to update on top line call LCD_Cls mov #tbloffset(StringSetIGain), w0 call LCD_String SetIGain: ;Convert Current Value to four BCD digits mov #0xC0,w0 ;Line 2 call LCD_Cmd mov I_Gain,w0 call itoa mov BCD2,w0 call LCD_Chr mov BCD3,w0 call LCD_Chr mov #'.',w0 call LCD_Chr mov BCD4,w0 call LCD_Chr mov BCD5,w0 call LCD_Chr ;Set using UP/DN keys bclr LATE,#SET bclr LATE,#UP bset LATE,#DN nop btss PORTB,#KEYPAD ;Check if DN key pressed goto NotIGDown dec I_Gain btss I_Gain,#15 ;Check if negative (<0) goto IGMinOk mov #0,w0 mov w0,I_Gain IGMinOk: mov #10,w1 ;Small Delay - no debounce but autorepeat call Delay goto SetIGain NotIGDown: bclr LATE,#DN bset LATE,#UP nop btss PORTB,#KEYPAD ;Check if UP key pressed goto NotIGUp inc I_Gain mov I_Gain,w1 mov #3000,w0 ;Max value 30.00 cpslt w0,w1 goto IGMaxOk mov w0,I_Gain IGMaxOk: mov #10,w1 ;Small Delay - no debounce but autorepeat call Delay goto SetIGain NotIGUp: bclr LATE,#UP bset LATE,#SET nop btss PORTB,#KEYPAD ;Check if SET/ENT key pressed goto SetIGain IGExit: mov #5,w1 call Delay btsc PORTB,#KEYPAD ;Debounce - Still Clear? goto IGExit ; Wait until released ;Parameter #4 - C Gain ;Display Parameter to update on top line call LCD_Cls mov #tbloffset(StringSetCGain), w0 call LCD_String SetCGain: ;Convert Current Value to four BCD digits mov #0xC0,w0 ;Line 2 call LCD_Cmd mov C_Gain,w0 call itoa mov #'x',w0 call LCD_Chr mov BCD4,w0 call LCD_Chr mov BCD5,w0 call LCD_Chr ;Set using UP/DN keys bclr LATE,#SET bclr LATE,#UP bset LATE,#DN nop btss PORTB,#KEYPAD ;Check if DN key pressed goto NotCGDown rrnc C_Gain btss C_Gain,#15 ;Check if negative (<0) goto CGMinOk mov #1,w0 mov w0,C_Gain CGMinOk: mov #100,w1 ;Small Delay - no debounce but autorepeat call Delay goto SetCGain NotCGDown: bclr LATE,#DN bset LATE,#UP nop btss PORTB,#KEYPAD ;Check if UP key pressed goto NotCGUp rlnc C_Gain mov C_Gain,w1 mov #32,w0 ;Max value 16 cpslt w0,w1 goto CGMaxOk mov w0,C_Gain CGMaxOk: mov #100,w1 ;Small Delay - no debounce but autorepeat call Delay goto SetCGain NotCGUp: bclr LATE,#UP bset LATE,#SET nop btss PORTB,#KEYPAD ;Check if SET/ENT key pressed goto SetCGain CGExit: mov #5,w1 call Delay btsc PORTB,#KEYPAD ;Debounce - Still Clear? goto CGExit ; Wait until released ;Parameter #5 - Min Fan Speed ;Display Parameter to update on top line call LCD_Cls mov #tbloffset(StringSetFanMin), w0 call LCD_String SetFanSpeed: ;Convert Current Value to four BCD digits mov #0xC0,w0 ;Line 2 call LCD_Cmd mov MinFanSpeed,w0 call itoa mov BCD3,w0 call LCD_Chr mov BCD4,w0 call LCD_Chr mov BCD5,w0 call LCD_Chr mov #'/',w0 call LCD_Chr mov #'9',w0 call LCD_Chr mov #'6',w0 call LCD_Chr mov #'0',w0 call LCD_Chr ;Set using UP/DN keys bclr LATE,#SET bclr LATE,#UP bset LATE,#DN nop btss PORTB,#KEYPAD ;Check if DN key pressed goto NotFSDown dec MinFanSpeed btss MinFanSpeed,#15 ;Check if negative (<0) goto FSMinOk mov #0,w0 mov w0,MinFanSpeed FSMinOk: mov #10,w1 ;Small Delay - no debounce but autorepeat call Delay goto SetFanSpeed NotFSDown: bclr LATE,#DN bset LATE,#UP nop btss PORTB,#KEYPAD ;Check if UP key pressed goto NotFSUp inc MinFanSpeed mov MinFanSpeed,w1 mov #959,w0 ;Max value 959 cpslt w0,w1 goto FSMaxOk mov w0,MinFanSpeed FSMaxOk: mov #10,w1 ;Small Delay - no debounce but autorepeat call Delay goto SetFanSpeed NotFSUp: bclr LATE,#UP bset LATE,#SET nop btss PORTB,#KEYPAD ;Check if SET/ENT key pressed goto SetFanSpeed FSExit: mov #5,w1 call Delay btsc PORTB,#KEYPAD ;Debounce - Still Clear? goto FSExit ; Wait until released ;Display Version call LCD_Cls mov #tbloffset(StringVer1), w0 call LCD_String mov #0xC0,w0 ;Line 2 call LCD_Cmd mov #tbloffset(StringVer2), w0 call LCD_String mov #1000,w1 call Delay ;Update Paramneters in EEPROM mov SetPoint,w0 mov #0,w1 call WriteEEPROM mov P_Gain,w0 mov #1,w1 call WriteEEPROM mov I_Gain,w0 mov #2,w1 call WriteEEPROM mov C_Gain,w0 mov #3,w1 call WriteEEPROM mov MinFanSpeed,w0 mov #4,w1 call WriteEEPROM return ;########################################### ;########### PHASE ANGLE CODE ########## ;########################################### ;.............................................................................. ; Interrupt Service Routines ; These routines detect ZCD and produce the firing point for the triac ; Also detects errors when ZCD not receivved in 1/120th sec ; ; CN - ZCD input, clear timers to zero, reset output ; TMR1 - phase angle (in PR1) reached, output to triac active ; TMR2 - No ZCD before max phase angle reached, ERROR ;.............................................................................. ; Generates the triac firing signal when phase angle reached __T1Interrupt: ;Check for ZCD error Status btsc ZcdError,#0 goto DoNotFire bset PORTD,#TRIAC ;phase counter reached, activate triac bclr PORTB,#ERROR ;Clear error LED goto T1End DoNotFire: bclr PORTD,#TRIAC ;Ensure the triac does not fire bset PORTB,#ERROR T1End: bclr IFS0, #T1IF ;Clear the Timer1 Interrupt flag Status Bit retfie ; ZCD missing timer - interrupts when max phase angle reached without ZCD __T2Interrupt: bset ZcdError,#0 ;Timeout, Zcd error bclr ZcdError,#1 ; No half-syscle received yet bclr PORTD,#TRIAC ;Shut down output BCLR IFS0, #T2IF ;Clear the Timer1 Interrupt flag Status ;bit. RETFIE ;Return from Interrupt Service routine ; ZCD input - resets the ZCD missing timer and phase angle timer to zero ; Ensure there are TWO consecutive ZCDs with no timeout (one AC cycle) then clear ; Change Notification detects both edges (H->L = cycle starts, L->H = cycle ends) __CNInterrupt: push w0 ;If ZCD is high, shut off triac as cycle is ending btss PORTB,#1 goto ZcdStarts bclr PORTD,#TRIAC ;Shut off firing before next cycle goto CnIntDone ;ZCD is low so a new AC cycle starts ZcdStarts: ;If bit 1 set (one zcd), clear error as this is second half-cycle btss ZcdError,#1 goto NoZcdOneFlagEn bclr ZcdError,#1 ;Clear all errors bclr ZcdError,#0 goto NoZcdErrorEn ;If bit 0 clear, no error so just run NoZcdOneFlagEn: btss ZcdError,#0 goto NoZcdErrorEn ;If bit 0 set (in error), set bit 1 (one zcd only,half-cycle) bset ZcdError,#1 ;Flag that ONE Zcd arrived NoZcdErrorEn: clr TMR1 ;Resync phase angle counter to AC line clr TMR2 ;Clear ZCD timer to detect next error mov OutputAngle,w0 ;Update phase angle mov w0,PR1 CnIntDone: BCLR IFS0, #CNIF ;Clear the Timer1 Interrupt flag Status pop w0 RETFIE ;Return from Interrupt Service routine__T2Interrupt: ;========================================================================================================================================== ; 32x32 bit Signed Multiply ; Multiplies two 32-bit signed integers, returning a 64-bit result ; ; Input: W0 - AL ; W1 - AH ; W2 - BL ; W3 - BH ; ; Output: W0 - Result(0:15) ; W1 - Result(16:31) ; W2 - Result(32:47) ; W3 - Result(48:63) ; ; Function: ; 1. AH:AL is 32-bit operand A ; 2. BH:BL is 32-bit operand B ; 3. Unsigned mult: R1 = AL*BL ; 4. Signed mult: R2 = AH*BL ; 5. Signed mult: R3 = AL*BH ; 6. Signed mult: R4 = AH*BH ; 7. 64bit result = (R4<<32) + (R3<<16) + (R2<<16) + R1 ; W3:W2:W1:W0 = W9:W8:W1:W0 ; +**:W5:W4:00 ; +**:W7:W6:00 ; ; * Result of W5:W4 or W7:W6 is sign extended to 48 bits if negative. ; Implemented by subtracting 1 from the MSW of the 64-bit result, which is mathematically ; equivalent to sign extending W5:W4 or W7:W6 to 48 bits and summing the result. ; ;========================================================================================================================================== Mult32: push W4 push W5 push W6 push W7 push W8 push W9 mul.ss W1,W3,W8 ; Calculate partial sum R4 = W9:W8 mul.us W0,W3,W6 ; Calculate partial sum R3 = W7:W6 mul.su W1,W2,W4 ; Calculate partial sum R2 = W5:W4 mul.uu W0,W2,W0 ; Calculate partial sum R1 = W1:W0 add W1,W4,W1 ; W3:W2:W1:W0 = W9:W8:W1:W0 addc W5,W8,W2 ; + **:W5:W4:00 addc W9,#0,W3 add W1,W6,W1 ; W3:W2:W1:W0 = W3:W2:W1:W0 addc W2,W7,W2 ; + **:W7:W6:00 addc #0,W3 btsc W5,#15 ; If (R2 < 0), subtract 1 from the MSW sub #1,W3 btsc W7,#15 ; If (R3 < 0), subtract 1 from the MSW sub #1,W3 pop W9 pop W8 pop W7 pop W6 pop W5 pop W4 RETURN ; LCD Functions ; Hardware: RE0-RE3=data, RE4=RS, RE5=E ; LCD_Init - Initializes the LCD ; LCD_Cls - Clearsthen sets the cursor to top line, left ; LCD_Chr - Sends a single character (in w0) to the LCD ; LCD_Cmd - Sends a single command (in w0) to the LCD ; LCD_String - Sends a zero-terminated string to the LCD LCD_Init: mov #0x33,w0 call LCD_Cmd mov #5,w1 call Delay mov #0x32,w0 call LCD_Cmd mov #5,w1 call Delay mov #0x28,w0 ;Four bit mode call LCD_Cmd mov #0x0C,w0 ;On, Cursor, Blink call LCD_Cmd mov #0x06,w0 ;Autoinc Entry mode call LCD_Cmd call LCD_Cls return LCD_Cls: ; ; mov #15,w1 ; call Delay mov #0x01,w0 ;Clear call LCD_Cmd ; mov #15,w1 ; call Delay mov #0x02,w0 ;Home call LCD_Cmd ; mov #15,w1 ; call Delay return LCD_Chr: push w1 push w2 mov w0,W1 swap.B W1 ;Put the high nybble into lower four bits mov #0x000F,w2 and w1,w2,w1 mov w1,LATE bset LATE,#4 ;Set RS for characters bset LATE,#5 mov #1,w1 call Delay bclr LATE,#5 mov #1,w1 call Delay mov w0,W1 ;Send the low nybble mov #0x000F,w2 and w1,w2,w1 mov w1,LATE bset LATE,#4 ;Set RS for characters bset LATE,#5 mov #1,w1 call Delay bclr LATE,#5 mov #1,w1 call Delay pop w2 pop w1 return LCD_Cmd: push w1 push w2 mov w0,W1 swap.B W1 ;Put the high nybble into lower four bits mov #0x000F,w2 and w1,w2,w1 mov w1,LATE bset LATE,#5 mov #1,w1 call Delay bclr LATE,#5 mov #1,w1 call Delay mov w0,W1 ;Send the low nybble mov #0x000F,w2 and w1,w2,w1 mov w1,LATE bset LATE,#5 mov #1,w1 call Delay bclr LATE,#5 mov #1,w1 call Delay pop w2 pop w1 return ;Argument - pointer to string in w0 ; mov #tbloffset(CharPtr), w0 in main code LCD_String: push w1 push w2 mov w0,w2 mov #0x8000,w1 ;Add 0x8000 to use PSV access add w1,w2,w2 ;Calc address of first byte NextChar: mov.b [w2],w0 and #0xFF,w0 ;Check if zero btsc SR,#Z goto StringEnds call LCD_Chr inc w2,w2 ;Inc address goto NextChar StringEnds: pop w2 pop w1 return ; Delay (time in ms, in w1), assuming 30 MIPs Delay: push w4 OuterLoop: mov #7500,w4 ;1ms InnerLoop: dec W4,W4 ;4 cycles this loop btss SR,#Z goto InnerLoop dec w1,w1 btss SR,#Z goto OuterLoop pop w4 return ;------------------------------------------------------------------ ;EEPROM Functions ; ReadEEPROM - Reads a word (address=w1) to w0 from the EEPROM ; WriteEEPROM - Writes a word (address=w1, data=w0) to the EEPROM ; Addresses in w1 are 0..512 (words) ReadEEPROM: push w2 mov #0x007F,w0 ;EEPROM is located at 0x007FFC00 mov w0,TBLPAG mov #0xFC00,w2 ;Base address rlnc w1,w1 ;Multiply w1 times two to get word Address add w2,w1,w2 tblrdl [w2],w0 ;Table read since EEPROM mapped to prog memory pop w2 return WriteEEPROM: push w2 push w0 mov #0x007F,w0 ;EEPROM is located at 0x007FFC00 mov w0,TBLPAG mov w0,NVMADRU mov #0xFC00,w2 ;Base address rlnc w1,w1 ;Multiply w1 times two to get word Address add w2,w1,w2 mov w2,NVMADR ;Low address mov #0x4044,w0 ;Erase Enable mov w0,NVMCON disi #5 mov #0x55,w0 ;Key to unlock erase cycle mov w0,NVMKEY mov #0xAA,w0 mov w0,NVMKEY bset NVMCON,#WR ;Erase sequence nop nop WaitForEraseDone: btsc NVMCON,#WR goto WaitForEraseDone mov #0x007F,w0 ;EEPROM is located at 0x007FFC00 mov w0,TBLPAG mov w0,NVMADRU mov w2,NVMADR ;Low address pop w0 ;Restore data to write tblwtl w0,[w2] ;Table write mov #0x4004,w0 ;Write Enable mov w0,NVMCON disi #5 mov #0x55,w0 ;Key to unlock write cycle mov w0,NVMKEY mov #0xAA,w0 mov w0,NVMKEY bset NVMCON,#WR ;Write sequence nop nop WaitForWriteDone: btsc NVMCON,#WR goto WaitForWriteDone pop w2 return ;------------------------------------------------------------------ ; ITOA ; Converts an unsigned integer N in w0 to a 5-byte ASCII numerical string [w4] ; using a reciprocal multiplication and fractional conversion techniques ; 19 clocks including RETURN, 17 program words ; Registers trashed: w0..w4 itoa: push w0 push w1 push w2 push w3 push w4 mov #BCD1,w4 ;RAM address of destination ascii digits rec10k = 429497 ; =~ 2^32/10000 mov #rec10k >> 16,w1 mul.uu w1,w0,w2 ; w3:w2 = partial product MSWs mov #rec10k & 0xFFFF,w1 mul.uu w1,w0,w0 ; w1:w0 = partial product LSWs add w1,w2,w0 ; w0 = fract(N%10000) mov #'0',w2 ; w2 = ASCII bit mask addc.b w3,w2,w4 ; w3 = N/10000, store an ASCII MS character mov w4,BCD1 inc w0,w0 ; Correct the remainder to use 16-bit ops mul.uu w0,#10,w0 ; w1 = next ASCII digit (0..9 range), w0 = fractional remainder ior.b w1,w2,w4 ; Convert to ASCII and store a next character mov w4,BCD2 mul.uu w0,#10,w0 ; Same as above ior.b w1,w2,w4 ; mov w4,BCD3 mul.uu w0,#10,w0 ; Same as above ior.b w1,w2,w4 ; mov w4,BCD4 mul.uu w0,#10,w0 ; Same as above ior.b w1,w2,w4 ; mov w4,BCD5 pop w4 pop w3 pop w2 pop w1 pop w0 return ;------------------------------------------------------------------ StringFanSpeed: .asciz "Fan Spd" StringEvapTemp: .asciz "Evap Tmp" StringSetPoint: .asciz "SetPoint" StringSetSP: .asciz "Set SP =" StringSetPGain: .asciz "Set PGn=" StringSetIGain: .asciz "Set IGn=" StringSetCGain: .asciz "Set CGn=" StringSetFanMin: .asciz "Set Min=" StringThermError: .asciz "ERR:Thrm" StringFreezeError: .asciz "ERR:Frez" StringVer1: .asciz "M. Csele" StringVer2: .asciz "FanSp1.2" StringStartup: .asciz "Starting" ;Temperature Conversion Table ;10-bit offset from ADC returns temp as 16-bit unsigned in C x100 TempTable: .word 0xD8F1 ;Temp for ADC 0x0 = -99.99 C .word 0xDF4A ;Temp for ADC 0x1 = -83.74 C .word 0xE255 ;Temp for ADC 0x2 = -75.95 C .word 0xE434 ;Temp for ADC 0x3 = -71.16 C .word 0xE594 ;Temp for ADC 0x4 = -67.64 C .word 0xE6AC ;Temp for ADC 0x5 = -64.84 C .word 0xE795 ;Temp for ADC 0x6 = -62.51 C .word 0xE85E ;Temp for ADC 0x7 = -60.50 C .word 0xE90E ;Temp for ADC 0x8 = -58.74 C .word 0xE9AC ;Temp for ADC 0x9 = -57.16 C .word 0xEA3B ;Temp for ADC 0xA = -55.73 C .word 0xEABD ;Temp for ADC 0xB = -54.43 C .word 0xEB36 ;Temp for ADC 0xC = -53.22 C .word 0xEBA6 ;Temp for ADC 0xD = -52.10 C .word 0xEC0E ;Temp for ADC 0xE = -51.06 C .word 0xEC70 ;Temp for ADC 0xF = -50.08 C .word 0xECCD ;Temp for ADC 0x10 = -49.15 C .word 0xED24 ;Temp for ADC 0x11 = -48.28 C .word 0xED77 ;Temp for ADC 0x12 = -47.45 C .word 0xEDC6 ;Temp for ADC 0x13 = -46.66 C .word 0xEE12 ;Temp for ADC 0x14 = -45.90 C .word 0xEE5A ;Temp for ADC 0x15 = -45.18 C .word 0xEEA0 ;Temp for ADC 0x16 = -44.48 C .word 0xEEE3 ;Temp for ADC 0x17 = -43.81 C .word 0xEF23 ;Temp for ADC 0x18 = -43.17 C .word 0xEF61 ;Temp for ADC 0x19 = -42.55 C .word 0xEF9D ;Temp for ADC 0x1A = -41.95 C .word 0xEFD6 ;Temp for ADC 0x1B = -41.38 C .word 0xF00E ;Temp for ADC 0x1C = -40.82 C .word 0xF045 ;Temp for ADC 0x1D = -40.27 C .word 0xF07A ;Temp for ADC 0x1E = -39.74 C .word 0xF0AD ;Temp for ADC 0x1F = -39.23 C .word 0xF0DF ;Temp for ADC 0x20 = -38.73 C .word 0xF10F ;Temp for ADC 0x21 = -38.25 C .word 0xF13E ;Temp for ADC 0x22 = -37.78 C .word 0xF16D ;Temp for ADC 0x23 = -37.31 C .word 0xF19A ;Temp for ADC 0x24 = -36.86 C .word 0xF1C6 ;Temp for ADC 0x25 = -36.42 C .word 0xF1F0 ;Temp for ADC 0x26 = -36.00 C .word 0xF21A ;Temp for ADC 0x27 = -35.58 C .word 0xF244 ;Temp for ADC 0x28 = -35.16 C .word 0xF26C ;Temp for ADC 0x29 = -34.76 C .word 0xF293 ;Temp for ADC 0x2A = -34.37 C .word 0xF2BA ;Temp for ADC 0x2B = -33.98 C .word 0xF2E0 ;Temp for ADC 0x2C = -33.60 C .word 0xF305 ;Temp for ADC 0x2D = -33.23 C .word 0xF329 ;Temp for ADC 0x2E = -32.87 C .word 0xF34D ;Temp for ADC 0x2F = -32.51 C .word 0xF370 ;Temp for ADC 0x30 = -32.16 C .word 0xF393 ;Temp for ADC 0x31 = -31.81 C .word 0xF3B5 ;Temp for ADC 0x32 = -31.47 C .word 0xF3D6 ;Temp for ADC 0x33 = -31.14 C .word 0xF3F7 ;Temp for ADC 0x34 = -30.81 C .word 0xF418 ;Temp for ADC 0x35 = -30.48 C .word 0xF437 ;Temp for ADC 0x36 = -30.17 C .word 0xF457 ;Temp for ADC 0x37 = -29.85 C .word 0xF476 ;Temp for ADC 0x38 = -29.54 C .word 0xF494 ;Temp for ADC 0x39 = -29.24 C .word 0xF4B2 ;Temp for ADC 0x3A = -28.94 C .word 0xF4D0 ;Temp for ADC 0x3B = -28.64 C .word 0xF4ED ;Temp for ADC 0x3C = -28.35 C .word 0xF50A ;Temp for ADC 0x3D = -28.06 C .word 0xF526 ;Temp for ADC 0x3E = -27.78 C .word 0xF542 ;Temp for ADC 0x3F = -27.50 C .word 0xF55E ;Temp for ADC 0x40 = -27.22 C .word 0xF579 ;Temp for ADC 0x41 = -26.95 C .word 0xF594 ;Temp for ADC 0x42 = -26.68 C .word 0xF5AF ;Temp for ADC 0x43 = -26.41 C .word 0xF5C9 ;Temp for ADC 0x44 = -26.15 C .word 0xF5E3 ;Temp for ADC 0x45 = -25.89 C .word 0xF5FD ;Temp for ADC 0x46 = -25.63 C .word 0xF616 ;Temp for ADC 0x47 = -25.38 C .word 0xF62F ;Temp for ADC 0x48 = -25.13 C .word 0xF648 ;Temp for ADC 0x49 = -24.88 C .word 0xF661 ;Temp for ADC 0x4A = -24.63 C .word 0xF679 ;Temp for ADC 0x4B = -24.39 C .word 0xF691 ;Temp for ADC 0x4C = -24.15 C .word 0xF6A9 ;Temp for ADC 0x4D = -23.91 C .word 0xF6C1 ;Temp for ADC 0x4E = -23.67 C .word 0xF6D8 ;Temp for ADC 0x4F = -23.44 C .word 0xF6EF ;Temp for ADC 0x50 = -23.21 C .word 0xF706 ;Temp for ADC 0x51 = -22.98 C .word 0xF71C ;Temp for ADC 0x52 = -22.76 C .word 0xF733 ;Temp for ADC 0x53 = -22.53 C .word 0xF749 ;Temp for ADC 0x54 = -22.31 C .word 0xF75F ;Temp for ADC 0x55 = -22.09 C .word 0xF775 ;Temp for ADC 0x56 = -21.87 C .word 0xF78A ;Temp for ADC 0x57 = -21.66 C .word 0xF7A0 ;Temp for ADC 0x58 = -21.44 C .word 0xF7B5 ;Temp for ADC 0x59 = -21.23 C .word 0xF7CA ;Temp for ADC 0x5A = -21.02 C .word 0xF7DF ;Temp for ADC 0x5B = -20.81 C .word 0xF7F4 ;Temp for ADC 0x5C = -20.60 C .word 0xF808 ;Temp for ADC 0x5D = -20.40 C .word 0xF81C ;Temp for ADC 0x5E = -20.20 C .word 0xF831 ;Temp for ADC 0x5F = -19.99 C .word 0xF845 ;Temp for ADC 0x60 = -19.79 C .word 0xF858 ;Temp for ADC 0x61 = -19.60 C .word 0xF86C ;Temp for ADC 0x62 = -19.40 C .word 0xF880 ;Temp for ADC 0x63 = -19.20 C .word 0xF893 ;Temp for ADC 0x64 = -19.01 C .word 0xF8A6 ;Temp for ADC 0x65 = -18.82 C .word 0xF8B9 ;Temp for ADC 0x66 = -18.63 C .word 0xF8CC ;Temp for ADC 0x67 = -18.44 C .word 0xF8DF ;Temp for ADC 0x68 = -18.25 C .word 0xF8F2 ;Temp for ADC 0x69 = -18.06 C .word 0xF904 ;Temp for ADC 0x6A = -17.88 C .word 0xF917 ;Temp for ADC 0x6B = -17.69 C .word 0xF929 ;Temp for ADC 0x6C = -17.51 C .word 0xF93B ;Temp for ADC 0x6D = -17.33 C .word 0xF94D ;Temp for ADC 0x6E = -17.15 C .word 0xF95F ;Temp for ADC 0x6F = -16.97 C .word 0xF971 ;Temp for ADC 0x70 = -16.79 C .word 0xF983 ;Temp for ADC 0x71 = -16.61 C .word 0xF994 ;Temp for ADC 0x72 = -16.44 C .word 0xF9A6 ;Temp for ADC 0x73 = -16.26 C .word 0xF9B7 ;Temp for ADC 0x74 = -16.09 C .word 0xF9C8 ;Temp for ADC 0x75 = -15.92 C .word 0xF9D9 ;Temp for ADC 0x76 = -15.75 C .word 0xF9EA ;Temp for ADC 0x77 = -15.58 C .word 0xF9FB ;Temp for ADC 0x78 = -15.41 C .word 0xFA0C ;Temp for ADC 0x79 = -15.24 C .word 0xFA1C ;Temp for ADC 0x7A = -15.08 C .word 0xFA2D ;Temp for ADC 0x7B = -14.91 C .word 0xFA3E ;Temp for ADC 0x7C = -14.74 C .word 0xFA4E ;Temp for ADC 0x7D = -14.58 C .word 0xFA5E ;Temp for ADC 0x7E = -14.42 C .word 0xFA6E ;Temp for ADC 0x7F = -14.26 C .word 0xFA7F ;Temp for ADC 0x80 = -14.09 C .word 0xFA8F ;Temp for ADC 0x81 = -13.93 C .word 0xFA9E ;Temp for ADC 0x82 = -13.78 C .word 0xFAAE ;Temp for ADC 0x83 = -13.62 C .word 0xFABE ;Temp for ADC 0x84 = -13.46 C .word 0xFACE ;Temp for ADC 0x85 = -13.30 C .word 0xFADD ;Temp for ADC 0x86 = -13.15 C .word 0xFAED ;Temp for ADC 0x87 = -12.99 C .word 0xFAFC ;Temp for ADC 0x88 = -12.84 C .word 0xFB0C ;Temp for ADC 0x89 = -12.68 C .word 0xFB1B ;Temp for ADC 0x8A = -12.53 C .word 0xFB2A ;Temp for ADC 0x8B = -12.38 C .word 0xFB39 ;Temp for ADC 0x8C = -12.23 C .word 0xFB48 ;Temp for ADC 0x8D = -12.08 C .word 0xFB57 ;Temp for ADC 0x8E = -11.93 C .word 0xFB66 ;Temp for ADC 0x8F = -11.78 C .word 0xFB75 ;Temp for ADC 0x90 = -11.63 C .word 0xFB83 ;Temp for ADC 0x91 = -11.49 C .word 0xFB92 ;Temp for ADC 0x92 = -11.34 C .word 0xFBA1 ;Temp for ADC 0x93 = -11.19 C .word 0xFBAF ;Temp for ADC 0x94 = -11.05 C .word 0xFBBE ;Temp for ADC 0x95 = -10.90 C .word 0xFBCC ;Temp for ADC 0x96 = -10.76 C .word 0xFBDA ;Temp for ADC 0x97 = -10.62 C .word 0xFBE9 ;Temp for ADC 0x98 = -10.47 C .word 0xFBF7 ;Temp for ADC 0x99 = -10.33 C .word 0xFC05 ;Temp for ADC 0x9A = -10.19 C .word 0xFC13 ;Temp for ADC 0x9B = -10.05 C .word 0xFC21 ;Temp for ADC 0x9C = -9.914 C .word 0xFC2F ;Temp for ADC 0x9D = -9.775 C .word 0xFC3D ;Temp for ADC 0x9E = -9.636 C .word 0xFC4B ;Temp for ADC 0x9F = -9.497 C .word 0xFC58 ;Temp for ADC 0xA0 = -9.360 C .word 0xFC66 ;Temp for ADC 0xA1 = -9.223 C .word 0xFC74 ;Temp for ADC 0xA2 = -9.086 C .word 0xFC81 ;Temp for ADC 0xA3 = -8.950 C .word 0xFC8F ;Temp for ADC 0xA4 = -8.815 C .word 0xFC9C ;Temp for ADC 0xA5 = -8.680 C .word 0xFCAA ;Temp for ADC 0xA6 = -8.546 C .word 0xFCB7 ;Temp for ADC 0xA7 = -8.412 C .word 0xFCC5 ;Temp for ADC 0xA8 = -8.279 C .word 0xFCD2 ;Temp for ADC 0xA9 = -8.146 C .word 0xFCDF ;Temp for ADC 0xAA = -8.014 C .word 0xFCEC ;Temp for ADC 0xAB = -7.882 C .word 0xFCF9 ;Temp for ADC 0xAC = -7.751 C .word 0xFD06 ;Temp for ADC 0xAD = -7.621 C .word 0xFD13 ;Temp for ADC 0xAE = -7.490 C .word 0xFD20 ;Temp for ADC 0xAF = -7.361 C .word 0xFD2D ;Temp for ADC 0xB0 = -7.231 C .word 0xFD3A ;Temp for ADC 0xB1 = -7.103 C .word 0xFD47 ;Temp for ADC 0xB2 = -6.974 C .word 0xFD54 ;Temp for ADC 0xB3 = -6.847 C .word 0xFD61 ;Temp for ADC 0xB4 = -6.719 C .word 0xFD6D ;Temp for ADC 0xB5 = -6.592 C .word 0xFD7A ;Temp for ADC 0xB6 = -6.466 C .word 0xFD86 ;Temp for ADC 0xB7 = -6.340 C .word 0xFD93 ;Temp for ADC 0xB8 = -6.214 C .word 0xFDA0 ;Temp for ADC 0xB9 = -6.089 C .word 0xFDAC ;Temp for ADC 0xBA = -5.965 C .word 0xFDB8 ;Temp for ADC 0xBB = -5.840 C .word 0xFDC5 ;Temp for ADC 0xBC = -5.717 C .word 0xFDD1 ;Temp for ADC 0xBD = -5.593 C .word 0xFDDD ;Temp for ADC 0xBE = -5.470 C .word 0xFDEA ;Temp for ADC 0xBF = -5.347 C .word 0xFDF6 ;Temp for ADC 0xC0 = -5.225 C .word 0xFE02 ;Temp for ADC 0xC1 = -5.103 C .word 0xFE0E ;Temp for ADC 0xC2 = -4.982 C .word 0xFE1A ;Temp for ADC 0xC3 = -4.861 C .word 0xFE26 ;Temp for ADC 0xC4 = -4.740 C .word 0xFE32 ;Temp for ADC 0xC5 = -4.620 C .word 0xFE3E ;Temp for ADC 0xC6 = -4.500 C .word 0xFE4A ;Temp for ADC 0xC7 = -4.380 C .word 0xFE56 ;Temp for ADC 0xC8 = -4.261 C .word 0xFE62 ;Temp for ADC 0xC9 = -4.142 C .word 0xFE6E ;Temp for ADC 0xCA = -4.024 C .word 0xFE7A ;Temp for ADC 0xCB = -3.906 C .word 0xFE86 ;Temp for ADC 0xCC = -3.788 C .word 0xFE91 ;Temp for ADC 0xCD = -3.671 C .word 0xFE9D ;Temp for ADC 0xCE = -3.554 C .word 0xFEA9 ;Temp for ADC 0xCF = -3.437 C .word 0xFEB4 ;Temp for ADC 0xD0 = -3.320 C .word 0xFEC0 ;Temp for ADC 0xD1 = -3.204 C .word 0xFECC ;Temp for ADC 0xD2 = -3.089 C .word 0xFED7 ;Temp for ADC 0xD3 = -2.973 C .word 0xFEE3 ;Temp for ADC 0xD4 = -2.858 C .word 0xFEEE ;Temp for ADC 0xD5 = -2.743 C .word 0xFEFA ;Temp for ADC 0xD6 = -2.629 C .word 0xFF05 ;Temp for ADC 0xD7 = -2.515 C .word 0xFF10 ;Temp for ADC 0xD8 = -2.401 C .word 0xFF1C ;Temp for ADC 0xD9 = -2.287 C .word 0xFF27 ;Temp for ADC 0xDA = -2.174 C .word 0xFF32 ;Temp for ADC 0xDB = -2.061 C .word 0xFF3E ;Temp for ADC 0xDC = -1.948 C .word 0xFF49 ;Temp for ADC 0xDD = -1.836 C .word 0xFF54 ;Temp for ADC 0xDE = -1.724 C .word 0xFF5F ;Temp for ADC 0xDF = -1.612 C .word 0xFF6A ;Temp for ADC 0xE0 = -1.501 C .word 0xFF76 ;Temp for ADC 0xE1 = -1.389 C .word 0xFF81 ;Temp for ADC 0xE2 = -1.278 C .word 0xFF8C ;Temp for ADC 0xE3 = -1.168 C .word 0xFF97 ;Temp for ADC 0xE4 = -1.057 C .word 0xFFA2 ;Temp for ADC 0xE5 = -0.947 C .word 0xFFAD ;Temp for ADC 0xE6 = -0.837 C .word 0xFFB8 ;Temp for ADC 0xE7 = -0.728 C .word 0xFFC3 ;Temp for ADC 0xE8 = -0.618 C .word 0xFFCE ;Temp for ADC 0xE9 = -0.509 C .word 0xFFD8 ;Temp for ADC 0xEA = -0.401 C .word 0xFFE3 ;Temp for ADC 0xEB = -0.292 C .word 0xFFEE ;Temp for ADC 0xEC = -0.184 C .word 0xFFF9 ;Temp for ADC 0xED = -0.076 C .word 0x0003 ;Temp for ADC 0xEE = 0.0316 C .word 0x000D ;Temp for ADC 0xEF = 0.1392 C .word 0x0018 ;Temp for ADC 0xF0 = 0.2465 C .word 0x0023 ;Temp for ADC 0xF1 = 0.3536 C .word 0x002E ;Temp for ADC 0xF2 = 0.4605 C .word 0x0038 ;Temp for ADC 0xF3 = 0.5671 C .word 0x0043 ;Temp for ADC 0xF4 = 0.6735 C .word 0x004D ;Temp for ADC 0xF5 = 0.7797 C .word 0x0058 ;Temp for ADC 0xF6 = 0.8857 C .word 0x0063 ;Temp for ADC 0xF7 = 0.9914 C .word 0x006D ;Temp for ADC 0xF8 = 1.0969 C .word 0x0078 ;Temp for ADC 0xF9 = 1.2021 C .word 0x0082 ;Temp for ADC 0xFA = 1.3072 C .word 0x008D ;Temp for ADC 0xFB = 1.4121 C .word 0x0097 ;Temp for ADC 0xFC = 1.5167 C .word 0x00A2 ;Temp for ADC 0xFD = 1.6211 C .word 0x00AC ;Temp for ADC 0xFE = 1.7253 C .word 0x00B6 ;Temp for ADC 0xFF = 1.8293 C .word 0x00C1 ;Temp for ADC 0x100 = 1.9331 C .word 0x00CB ;Temp for ADC 0x101 = 2.0367 C .word 0x00D6 ;Temp for ADC 0x102 = 2.1401 C .word 0x00E0 ;Temp for ADC 0x103 = 2.2433 C .word 0x00EA ;Temp for ADC 0x104 = 2.3463 C .word 0x00F4 ;Temp for ADC 0x105 = 2.4491 C .word 0x00FF ;Temp for ADC 0x106 = 2.5517 C .word 0x0109 ;Temp for ADC 0x107 = 2.6541 C .word 0x0113 ;Temp for ADC 0x108 = 2.7563 C .word 0x011D ;Temp for ADC 0x109 = 2.8583 C .word 0x0128 ;Temp for ADC 0x10A = 2.9602 C .word 0x0132 ;Temp for ADC 0x10B = 3.0619 C .word 0x013C ;Temp for ADC 0x10C = 3.1633 C .word 0x0146 ;Temp for ADC 0x10D = 3.2646 C .word 0x0150 ;Temp for ADC 0x10E = 3.3658 C .word 0x015A ;Temp for ADC 0x10F = 3.4667 C .word 0x0164 ;Temp for ADC 0x110 = 3.5675 C .word 0x016E ;Temp for ADC 0x111 = 3.6681 C .word 0x0178 ;Temp for ADC 0x112 = 3.7685 C .word 0x0182 ;Temp for ADC 0x113 = 3.8687 C .word 0x018C ;Temp for ADC 0x114 = 3.9688 C .word 0x0196 ;Temp for ADC 0x115 = 4.0687 C .word 0x01A0 ;Temp for ADC 0x116 = 4.1685 C .word 0x01AA ;Temp for ADC 0x117 = 4.2681 C .word 0x01B4 ;Temp for ADC 0x118 = 4.3675 C .word 0x01BE ;Temp for ADC 0x119 = 4.4668 C .word 0x01C8 ;Temp for ADC 0x11A = 4.5659 C .word 0x01D2 ;Temp for ADC 0x11B = 4.6648 C .word 0x01DC ;Temp for ADC 0x11C = 4.7636 C .word 0x01E6 ;Temp for ADC 0x11D = 4.8623 C .word 0x01F0 ;Temp for ADC 0x11E = 4.9608 C .word 0x01F9 ;Temp for ADC 0x11F = 5.0591 C .word 0x0203 ;Temp for ADC 0x120 = 5.1573 C .word 0x020D ;Temp for ADC 0x121 = 5.2553 C .word 0x0217 ;Temp for ADC 0x122 = 5.3532 C .word 0x0221 ;Temp for ADC 0x123 = 5.4510 C .word 0x022A ;Temp for ADC 0x124 = 5.5486 C .word 0x0234 ;Temp for ADC 0x125 = 5.6460 C .word 0x023E ;Temp for ADC 0x126 = 5.7433 C .word 0x0248 ;Temp for ADC 0x127 = 5.8405 C .word 0x0251 ;Temp for ADC 0x128 = 5.9376 C .word 0x025B ;Temp for ADC 0x129 = 6.0345 C .word 0x0265 ;Temp for ADC 0x12A = 6.1312 C .word 0x026E ;Temp for ADC 0x12B = 6.2279 C .word 0x0278 ;Temp for ADC 0x12C = 6.3244 C .word 0x0282 ;Temp for ADC 0x12D = 6.4207 C .word 0x028B ;Temp for ADC 0x12E = 6.5170 C .word 0x0295 ;Temp for ADC 0x12F = 6.6131 C .word 0x029E ;Temp for ADC 0x130 = 6.7091 C .word 0x02A8 ;Temp for ADC 0x131 = 6.8049 C .word 0x02B2 ;Temp for ADC 0x132 = 6.9007 C .word 0x02BB ;Temp for ADC 0x133 = 6.9963 C .word 0x02C5 ;Temp for ADC 0x134 = 7.0918 C .word 0x02CE ;Temp for ADC 0x135 = 7.1871 C .word 0x02D8 ;Temp for ADC 0x136 = 7.2824 C .word 0x02E1 ;Temp for ADC 0x137 = 7.3775 C .word 0x02EB ;Temp for ADC 0x138 = 7.4725 C .word 0x02F4 ;Temp for ADC 0x139 = 7.5674 C .word 0x02FE ;Temp for ADC 0x13A = 7.6622 C .word 0x0307 ;Temp for ADC 0x13B = 7.7569 C .word 0x0311 ;Temp for ADC 0x13C = 7.8514 C .word 0x031A ;Temp for ADC 0x13D = 7.9459 C .word 0x0324 ;Temp for ADC 0x13E = 8.0402 C .word 0x032D ;Temp for ADC 0x13F = 8.1345 C .word 0x0336 ;Temp for ADC 0x140 = 8.2286 C .word 0x0340 ;Temp for ADC 0x141 = 8.3226 C .word 0x0349 ;Temp for ADC 0x142 = 8.4165 C .word 0x0353 ;Temp for ADC 0x143 = 8.5103 C .word 0x035C ;Temp for ADC 0x144 = 8.6040 C .word 0x0365 ;Temp for ADC 0x145 = 8.6976 C .word 0x036F ;Temp for ADC 0x146 = 8.7911 C .word 0x0378 ;Temp for ADC 0x147 = 8.8845 C .word 0x0381 ;Temp for ADC 0x148 = 8.9778 C .word 0x038B ;Temp for ADC 0x149 = 9.0710 C .word 0x0394 ;Temp for ADC 0x14A = 9.1641 C .word 0x039D ;Temp for ADC 0x14B = 9.2571 C .word 0x03A7 ;Temp for ADC 0x14C = 9.3500 C .word 0x03B0 ;Temp for ADC 0x14D = 9.4429 C .word 0x03B9 ;Temp for ADC 0x14E = 9.5356 C .word 0x03C2 ;Temp for ADC 0x14F = 9.6282 C .word 0x03CC ;Temp for ADC 0x150 = 9.7208 C .word 0x03D5 ;Temp for ADC 0x151 = 9.8132 C .word 0x03DE ;Temp for ADC 0x152 = 9.9056 C .word 0x03E7 ;Temp for ADC 0x153 = 9.9979 C .word 0x03F1 ;Temp for ADC 0x154 = 10.090 C .word 0x03FA ;Temp for ADC 0x155 = 10.182 C .word 0x0403 ;Temp for ADC 0x156 = 10.274 C .word 0x040C ;Temp for ADC 0x157 = 10.366 C .word 0x0415 ;Temp for ADC 0x158 = 10.458 C .word 0x041E ;Temp for ADC 0x159 = 10.549 C .word 0x0428 ;Temp for ADC 0x15A = 10.641 C .word 0x0431 ;Temp for ADC 0x15B = 10.733 C .word 0x043A ;Temp for ADC 0x15C = 10.824 C .word 0x0443 ;Temp for ADC 0x15D = 10.916 C .word 0x044C ;Temp for ADC 0x15E = 11.007 C .word 0x0455 ;Temp for ADC 0x15F = 11.099 C .word 0x045F ;Temp for ADC 0x160 = 11.190 C .word 0x0468 ;Temp for ADC 0x161 = 11.281 C .word 0x0471 ;Temp for ADC 0x162 = 11.372 C .word 0x047A ;Temp for ADC 0x163 = 11.463 C .word 0x0483 ;Temp for ADC 0x164 = 11.554 C .word 0x048C ;Temp for ADC 0x165 = 11.645 C .word 0x0495 ;Temp for ADC 0x166 = 11.736 C .word 0x049E ;Temp for ADC 0x167 = 11.827 C .word 0x04A7 ;Temp for ADC 0x168 = 11.917 C .word 0x04B0 ;Temp for ADC 0x169 = 12.008 C .word 0x04B9 ;Temp for ADC 0x16A = 12.098 C .word 0x04C2 ;Temp for ADC 0x16B = 12.189 C .word 0x04CB ;Temp for ADC 0x16C = 12.279 C .word 0x04D5 ;Temp for ADC 0x16D = 12.370 C .word 0x04DE ;Temp for ADC 0x16E = 12.460 C .word 0x04E7 ;Temp for ADC 0x16F = 12.550 C .word 0x04F0 ;Temp for ADC 0x170 = 12.640 C .word 0x04F9 ;Temp for ADC 0x171 = 12.731 C .word 0x0502 ;Temp for ADC 0x172 = 12.821 C .word 0x050B ;Temp for ADC 0x173 = 12.911 C .word 0x0514 ;Temp for ADC 0x174 = 13.001 C .word 0x051D ;Temp for ADC 0x175 = 13.091 C .word 0x0526 ;Temp for ADC 0x176 = 13.180 C .word 0x052F ;Temp for ADC 0x177 = 13.270 C .word 0x0538 ;Temp for ADC 0x178 = 13.360 C .word 0x0541 ;Temp for ADC 0x179 = 13.450 C .word 0x0549 ;Temp for ADC 0x17A = 13.539 C .word 0x0552 ;Temp for ADC 0x17B = 13.629 C .word 0x055B ;Temp for ADC 0x17C = 13.718 C .word 0x0564 ;Temp for ADC 0x17D = 13.808 C .word 0x056D ;Temp for ADC 0x17E = 13.897 C .word 0x0576 ;Temp for ADC 0x17F = 13.987 C .word 0x057F ;Temp for ADC 0x180 = 14.076 C .word 0x0588 ;Temp for ADC 0x181 = 14.165 C .word 0x0591 ;Temp for ADC 0x182 = 14.255 C .word 0x059A ;Temp for ADC 0x183 = 14.344 C .word 0x05A3 ;Temp for ADC 0x184 = 14.433 C .word 0x05AC ;Temp for ADC 0x185 = 14.522 C .word 0x05B5 ;Temp for ADC 0x186 = 14.611 C .word 0x05BE ;Temp for ADC 0x187 = 14.700 C .word 0x05C6 ;Temp for ADC 0x188 = 14.789 C .word 0x05CF ;Temp for ADC 0x189 = 14.878 C .word 0x05D8 ;Temp for ADC 0x18A = 14.967 C .word 0x05E1 ;Temp for ADC 0x18B = 15.056 C .word 0x05EA ;Temp for ADC 0x18C = 15.145 C .word 0x05F3 ;Temp for ADC 0x18D = 15.234 C .word 0x05FC ;Temp for ADC 0x18E = 15.323 C .word 0x0605 ;Temp for ADC 0x18F = 15.412 C .word 0x060E ;Temp for ADC 0x190 = 15.500 C .word 0x0616 ;Temp for ADC 0x191 = 15.589 C .word 0x061F ;Temp for ADC 0x192 = 15.678 C .word 0x0628 ;Temp for ADC 0x193 = 15.766 C .word 0x0631 ;Temp for ADC 0x194 = 15.855 C .word 0x063A ;Temp for ADC 0x195 = 15.943 C .word 0x0643 ;Temp for ADC 0x196 = 16.032 C .word 0x064C ;Temp for ADC 0x197 = 16.120 C .word 0x0654 ;Temp for ADC 0x198 = 16.209 C .word 0x065D ;Temp for ADC 0x199 = 16.297 C .word 0x0666 ;Temp for ADC 0x19A = 16.386 C .word 0x066F ;Temp for ADC 0x19B = 16.474 C .word 0x0678 ;Temp for ADC 0x19C = 16.563 C .word 0x0681 ;Temp for ADC 0x19D = 16.651 C .word 0x0689 ;Temp for ADC 0x19E = 16.739 C .word 0x0692 ;Temp for ADC 0x19F = 16.828 C .word 0x069B ;Temp for ADC 0x1A0 = 16.916 C .word 0x06A4 ;Temp for ADC 0x1A1 = 17.004 C .word 0x06AD ;Temp for ADC 0x1A2 = 17.093 C .word 0x06B6 ;Temp for ADC 0x1A3 = 17.181 C .word 0x06BE ;Temp for ADC 0x1A4 = 17.269 C .word 0x06C7 ;Temp for ADC 0x1A5 = 17.357 C .word 0x06D0 ;Temp for ADC 0x1A6 = 17.445 C .word 0x06D9 ;Temp for ADC 0x1A7 = 17.534 C .word 0x06E2 ;Temp for ADC 0x1A8 = 17.622 C .word 0x06EB ;Temp for ADC 0x1A9 = 17.710 C .word 0x06F3 ;Temp for ADC 0x1AA = 17.798 C .word 0x06FC ;Temp for ADC 0x1AB = 17.886 C .word 0x0705 ;Temp for ADC 0x1AC = 17.974 C .word 0x070E ;Temp for ADC 0x1AD = 18.062 C .word 0x0717 ;Temp for ADC 0x1AE = 18.150 C .word 0x071F ;Temp for ADC 0x1AF = 18.239 C .word 0x0728 ;Temp for ADC 0x1B0 = 18.327 C .word 0x0731 ;Temp for ADC 0x1B1 = 18.415 C .word 0x073A ;Temp for ADC 0x1B2 = 18.503 C .word 0x0743 ;Temp for ADC 0x1B3 = 18.591 C .word 0x074B ;Temp for ADC 0x1B4 = 18.679 C .word 0x0754 ;Temp for ADC 0x1B5 = 18.767 C .word 0x075D ;Temp for ADC 0x1B6 = 18.855 C .word 0x0766 ;Temp for ADC 0x1B7 = 18.943 C .word 0x076F ;Temp for ADC 0x1B8 = 19.031 C .word 0x0777 ;Temp for ADC 0x1B9 = 19.119 C .word 0x0780 ;Temp for ADC 0x1BA = 19.207 C .word 0x0789 ;Temp for ADC 0x1BB = 19.295 C .word 0x0792 ;Temp for ADC 0x1BC = 19.383 C .word 0x079B ;Temp for ADC 0x1BD = 19.471 C .word 0x07A3 ;Temp for ADC 0x1BE = 19.559 C .word 0x07AC ;Temp for ADC 0x1BF = 19.647 C .word 0x07B5 ;Temp for ADC 0x1C0 = 19.735 C .word 0x07BE ;Temp for ADC 0x1C1 = 19.823 C .word 0x07C7 ;Temp for ADC 0x1C2 = 19.911 C .word 0x07CF ;Temp for ADC 0x1C3 = 19.999 C .word 0x07D8 ;Temp for ADC 0x1C4 = 20.087 C .word 0x07E1 ;Temp for ADC 0x1C5 = 20.175 C .word 0x07EA ;Temp for ADC 0x1C6 = 20.263 C .word 0x07F3 ;Temp for ADC 0x1C7 = 20.351 C .word 0x07FB ;Temp for ADC 0x1C8 = 20.439 C .word 0x0804 ;Temp for ADC 0x1C9 = 20.527 C .word 0x080D ;Temp for ADC 0x1CA = 20.615 C .word 0x0816 ;Temp for ADC 0x1CB = 20.703 C .word 0x081F ;Temp for ADC 0x1CC = 20.791 C .word 0x0827 ;Temp for ADC 0x1CD = 20.879 C .word 0x0830 ;Temp for ADC 0x1CE = 20.967 C .word 0x0839 ;Temp for ADC 0x1CF = 21.055 C .word 0x0842 ;Temp for ADC 0x1D0 = 21.144 C .word 0x084B ;Temp for ADC 0x1D1 = 21.232 C .word 0x0854 ;Temp for ADC 0x1D2 = 21.320 C .word 0x085C ;Temp for ADC 0x1D3 = 21.408 C .word 0x0865 ;Temp for ADC 0x1D4 = 21.496 C .word 0x086E ;Temp for ADC 0x1D5 = 21.584 C .word 0x0877 ;Temp for ADC 0x1D6 = 21.673 C .word 0x0880 ;Temp for ADC 0x1D7 = 21.761 C .word 0x0888 ;Temp for ADC 0x1D8 = 21.849 C .word 0x0891 ;Temp for ADC 0x1D9 = 21.937 C .word 0x089A ;Temp for ADC 0x1DA = 22.026 C .word 0x08A3 ;Temp for ADC 0x1DB = 22.114 C .word 0x08AC ;Temp for ADC 0x1DC = 22.202 C .word 0x08B5 ;Temp for ADC 0x1DD = 22.291 C .word 0x08BD ;Temp for ADC 0x1DE = 22.379 C .word 0x08C6 ;Temp for ADC 0x1DF = 22.467 C .word 0x08CF ;Temp for ADC 0x1E0 = 22.556 C .word 0x08D8 ;Temp for ADC 0x1E1 = 22.644 C .word 0x08E1 ;Temp for ADC 0x1E2 = 22.733 C .word 0x08EA ;Temp for ADC 0x1E3 = 22.821 C .word 0x08F3 ;Temp for ADC 0x1E4 = 22.910 C .word 0x08FB ;Temp for ADC 0x1E5 = 22.998 C .word 0x0904 ;Temp for ADC 0x1E6 = 23.087 C .word 0x090D ;Temp for ADC 0x1E7 = 23.175 C .word 0x0916 ;Temp for ADC 0x1E8 = 23.264 C .word 0x091F ;Temp for ADC 0x1E9 = 23.353 C .word 0x0928 ;Temp for ADC 0x1EA = 23.441 C .word 0x0931 ;Temp for ADC 0x1EB = 23.530 C .word 0x0939 ;Temp for ADC 0x1EC = 23.619 C .word 0x0942 ;Temp for ADC 0x1ED = 23.708 C .word 0x094B ;Temp for ADC 0x1EE = 23.796 C .word 0x0954 ;Temp for ADC 0x1EF = 23.885 C .word 0x095D ;Temp for ADC 0x1F0 = 23.974 C .word 0x0966 ;Temp for ADC 0x1F1 = 24.063 C .word 0x096F ;Temp for ADC 0x1F2 = 24.152 C .word 0x0978 ;Temp for ADC 0x1F3 = 24.241 C .word 0x0981 ;Temp for ADC 0x1F4 = 24.330 C .word 0x0989 ;Temp for ADC 0x1F5 = 24.419 C .word 0x0992 ;Temp for ADC 0x1F6 = 24.508 C .word 0x099B ;Temp for ADC 0x1F7 = 24.597 C .word 0x09A4 ;Temp for ADC 0x1F8 = 24.687 C .word 0x09AD ;Temp for ADC 0x1F9 = 24.776 C .word 0x09B6 ;Temp for ADC 0x1FA = 24.865 C .word 0x09BF ;Temp for ADC 0x1FB = 24.954 C .word 0x09C8 ;Temp for ADC 0x1FC = 25.044 C .word 0x09D1 ;Temp for ADC 0x1FD = 25.133 C .word 0x09DA ;Temp for ADC 0x1FE = 25.223 C .word 0x09E3 ;Temp for ADC 0x1FF = 25.312 C .word 0x09EC ;Temp for ADC 0x200 = 25.402 C .word 0x09F5 ;Temp for ADC 0x201 = 25.491 C .word 0x09FE ;Temp for ADC 0x202 = 25.581 C .word 0x0A07 ;Temp for ADC 0x203 = 25.671 C .word 0x0A10 ;Temp for ADC 0x204 = 25.760 C .word 0x0A19 ;Temp for ADC 0x205 = 25.850 C .word 0x0A22 ;Temp for ADC 0x206 = 25.940 C .word 0x0A2B ;Temp for ADC 0x207 = 26.030 C .word 0x0A34 ;Temp for ADC 0x208 = 26.120 C .word 0x0A3D ;Temp for ADC 0x209 = 26.210 C .word 0x0A46 ;Temp for ADC 0x20A = 26.300 C .word 0x0A4F ;Temp for ADC 0x20B = 26.390 C .word 0x0A58 ;Temp for ADC 0x20C = 26.480 C .word 0x0A61 ;Temp for ADC 0x20D = 26.570 C .word 0x0A6A ;Temp for ADC 0x20E = 26.661 C .word 0x0A73 ;Temp for ADC 0x20F = 26.751 C .word 0x0A7C ;Temp for ADC 0x210 = 26.841 C .word 0x0A85 ;Temp for ADC 0x211 = 26.932 C .word 0x0A8E ;Temp for ADC 0x212 = 27.022 C .word 0x0A97 ;Temp for ADC 0x213 = 27.113 C .word 0x0AA0 ;Temp for ADC 0x214 = 27.203 C .word 0x0AA9 ;Temp for ADC 0x215 = 27.294 C .word 0x0AB2 ;Temp for ADC 0x216 = 27.385 C .word 0x0ABB ;Temp for ADC 0x217 = 27.476 C .word 0x0AC4 ;Temp for ADC 0x218 = 27.567 C .word 0x0ACD ;Temp for ADC 0x219 = 27.657 C .word 0x0AD6 ;Temp for ADC 0x21A = 27.748 C .word 0x0AE0 ;Temp for ADC 0x21B = 27.840 C .word 0x0AE9 ;Temp for ADC 0x21C = 27.931 C .word 0x0AF2 ;Temp for ADC 0x21D = 28.022 C .word 0x0AFB ;Temp for ADC 0x21E = 28.113 C .word 0x0B04 ;Temp for ADC 0x21F = 28.204 C .word 0x0B0D ;Temp for ADC 0x220 = 28.296 C .word 0x0B16 ;Temp for ADC 0x221 = 28.387 C .word 0x0B1F ;Temp for ADC 0x222 = 28.479 C .word 0x0B29 ;Temp for ADC 0x223 = 28.571 C .word 0x0B32 ;Temp for ADC 0x224 = 28.662 C .word 0x0B3B ;Temp for ADC 0x225 = 28.754 C .word 0x0B44 ;Temp for ADC 0x226 = 28.846 C .word 0x0B4D ;Temp for ADC 0x227 = 28.938 C .word 0x0B57 ;Temp for ADC 0x228 = 29.030 C .word 0x0B60 ;Temp for ADC 0x229 = 29.122 C .word 0x0B69 ;Temp for ADC 0x22A = 29.214 C .word 0x0B72 ;Temp for ADC 0x22B = 29.306 C .word 0x0B7B ;Temp for ADC 0x22C = 29.399 C .word 0x0B85 ;Temp for ADC 0x22D = 29.491 C .word 0x0B8E ;Temp for ADC 0x22E = 29.583 C .word 0x0B97 ;Temp for ADC 0x22F = 29.676 C .word 0x0BA0 ;Temp for ADC 0x230 = 29.769 C .word 0x0BAA ;Temp for ADC 0x231 = 29.861 C .word 0x0BB3 ;Temp for ADC 0x232 = 29.954 C .word 0x0BBC ;Temp for ADC 0x233 = 30.047 C .word 0x0BC6 ;Temp for ADC 0x234 = 30.140 C .word 0x0BCF ;Temp for ADC 0x235 = 30.233 C .word 0x0BD8 ;Temp for ADC 0x236 = 30.326 C .word 0x0BE2 ;Temp for ADC 0x237 = 30.420 C .word 0x0BEB ;Temp for ADC 0x238 = 30.513 C .word 0x0BF4 ;Temp for ADC 0x239 = 30.606 C .word 0x0BFE ;Temp for ADC 0x23A = 30.700 C .word 0x0C07 ;Temp for ADC 0x23B = 30.793 C .word 0x0C10 ;Temp for ADC 0x23C = 30.887 C .word 0x0C1A ;Temp for ADC 0x23D = 30.981 C .word 0x0C23 ;Temp for ADC 0x23E = 31.075 C .word 0x0C2C ;Temp for ADC 0x23F = 31.169 C .word 0x0C36 ;Temp for ADC 0x240 = 31.263 C .word 0x0C3F ;Temp for ADC 0x241 = 31.357 C .word 0x0C49 ;Temp for ADC 0x242 = 31.451 C .word 0x0C52 ;Temp for ADC 0x243 = 31.546 C .word 0x0C5C ;Temp for ADC 0x244 = 31.640 C .word 0x0C65 ;Temp for ADC 0x245 = 31.735 C .word 0x0C6F ;Temp for ADC 0x246 = 31.830 C .word 0x0C78 ;Temp for ADC 0x247 = 31.924 C .word 0x0C81 ;Temp for ADC 0x248 = 32.019 C .word 0x0C8B ;Temp for ADC 0x249 = 32.114 C .word 0x0C94 ;Temp for ADC 0x24A = 32.209 C .word 0x0C9E ;Temp for ADC 0x24B = 32.305 C .word 0x0CA8 ;Temp for ADC 0x24C = 32.400 C .word 0x0CB1 ;Temp for ADC 0x24D = 32.495 C .word 0x0CBB ;Temp for ADC 0x24E = 32.591 C .word 0x0CC4 ;Temp for ADC 0x24F = 32.687 C .word 0x0CCE ;Temp for ADC 0x250 = 32.782 C .word 0x0CD7 ;Temp for ADC 0x251 = 32.878 C .word 0x0CE1 ;Temp for ADC 0x252 = 32.974 C .word 0x0CEB ;Temp for ADC 0x253 = 33.070 C .word 0x0CF4 ;Temp for ADC 0x254 = 33.167 C .word 0x0CFE ;Temp for ADC 0x255 = 33.263 C .word 0x0D07 ;Temp for ADC 0x256 = 33.359 C .word 0x0D11 ;Temp for ADC 0x257 = 33.456 C .word 0x0D1B ;Temp for ADC 0x258 = 33.553 C .word 0x0D24 ;Temp for ADC 0x259 = 33.649 C .word 0x0D2E ;Temp for ADC 0x25A = 33.746 C .word 0x0D38 ;Temp for ADC 0x25B = 33.843 C .word 0x0D42 ;Temp for ADC 0x25C = 33.941 C .word 0x0D4B ;Temp for ADC 0x25D = 34.038 C .word 0x0D55 ;Temp for ADC 0x25E = 34.135 C .word 0x0D5F ;Temp for ADC 0x25F = 34.233 C .word 0x0D69 ;Temp for ADC 0x260 = 34.331 C .word 0x0D72 ;Temp for ADC 0x261 = 34.428 C .word 0x0D7C ;Temp for ADC 0x262 = 34.526 C .word 0x0D86 ;Temp for ADC 0x263 = 34.624 C .word 0x0D90 ;Temp for ADC 0x264 = 34.723 C .word 0x0D9A ;Temp for ADC 0x265 = 34.821 C .word 0x0DA3 ;Temp for ADC 0x266 = 34.919 C .word 0x0DAD ;Temp for ADC 0x267 = 35.018 C .word 0x0DB7 ;Temp for ADC 0x268 = 35.117 C .word 0x0DC1 ;Temp for ADC 0x269 = 35.216 C .word 0x0DCB ;Temp for ADC 0x26A = 35.315 C .word 0x0DD5 ;Temp for ADC 0x26B = 35.414 C .word 0x0DDF ;Temp for ADC 0x26C = 35.513 C .word 0x0DE9 ;Temp for ADC 0x26D = 35.613 C .word 0x0DF3 ;Temp for ADC 0x26E = 35.712 C .word 0x0DFD ;Temp for ADC 0x26F = 35.812 C .word 0x0E07 ;Temp for ADC 0x270 = 35.912 C .word 0x0E11 ;Temp for ADC 0x271 = 36.012 C .word 0x0E1B ;Temp for ADC 0x272 = 36.112 C .word 0x0E25 ;Temp for ADC 0x273 = 36.212 C .word 0x0E2F ;Temp for ADC 0x274 = 36.313 C .word 0x0E39 ;Temp for ADC 0x275 = 36.414 C .word 0x0E43 ;Temp for ADC 0x276 = 36.514 C .word 0x0E4D ;Temp for ADC 0x277 = 36.615 C .word 0x0E57 ;Temp for ADC 0x278 = 36.716 C .word 0x0E61 ;Temp for ADC 0x279 = 36.818 C .word 0x0E6B ;Temp for ADC 0x27A = 36.919 C .word 0x0E76 ;Temp for ADC 0x27B = 37.021 C .word 0x0E80 ;Temp for ADC 0x27C = 37.122 C .word 0x0E8A ;Temp for ADC 0x27D = 37.224 C .word 0x0E94 ;Temp for ADC 0x27E = 37.326 C .word 0x0E9E ;Temp for ADC 0x27F = 37.428 C .word 0x0EA9 ;Temp for ADC 0x280 = 37.531 C .word 0x0EB3 ;Temp for ADC 0x281 = 37.633 C .word 0x0EBD ;Temp for ADC 0x282 = 37.736 C .word 0x0EC7 ;Temp for ADC 0x283 = 37.839 C .word 0x0ED2 ;Temp for ADC 0x284 = 37.942 C .word 0x0EDC ;Temp for ADC 0x285 = 38.045 C .word 0x0EE6 ;Temp for ADC 0x286 = 38.149 C .word 0x0EF1 ;Temp for ADC 0x287 = 38.252 C .word 0x0EFB ;Temp for ADC 0x288 = 38.356 C .word 0x0F06 ;Temp for ADC 0x289 = 38.460 C .word 0x0F10 ;Temp for ADC 0x28A = 38.564 C .word 0x0F1A ;Temp for ADC 0x28B = 38.668 C .word 0x0F25 ;Temp for ADC 0x28C = 38.773 C .word 0x0F2F ;Temp for ADC 0x28D = 38.877 C .word 0x0F3A ;Temp for ADC 0x28E = 38.982 C .word 0x0F44 ;Temp for ADC 0x28F = 39.087 C .word 0x0F4F ;Temp for ADC 0x290 = 39.192 C .word 0x0F59 ;Temp for ADC 0x291 = 39.298 C .word 0x0F64 ;Temp for ADC 0x292 = 39.403 C .word 0x0F6E ;Temp for ADC 0x293 = 39.509 C .word 0x0F79 ;Temp for ADC 0x294 = 39.615 C .word 0x0F84 ;Temp for ADC 0x295 = 39.721 C .word 0x0F8E ;Temp for ADC 0x296 = 39.828 C .word 0x0F99 ;Temp for ADC 0x297 = 39.934 C .word 0x0FA4 ;Temp for ADC 0x298 = 40.041 C .word 0x0FAE ;Temp for ADC 0x299 = 40.148 C .word 0x0FB9 ;Temp for ADC 0x29A = 40.255 C .word 0x0FC4 ;Temp for ADC 0x29B = 40.363 C .word 0x0FCF ;Temp for ADC 0x29C = 40.470 C .word 0x0FD9 ;Temp for ADC 0x29D = 40.578 C .word 0x0FE4 ;Temp for ADC 0x29E = 40.686 C .word 0x0FEF ;Temp for ADC 0x29F = 40.794 C .word 0x0FFA ;Temp for ADC 0x2A0 = 40.902 C .word 0x1005 ;Temp for ADC 0x2A1 = 41.011 C .word 0x1010 ;Temp for ADC 0x2A2 = 41.120 C .word 0x101A ;Temp for ADC 0x2A3 = 41.229 C .word 0x1025 ;Temp for ADC 0x2A4 = 41.338 C .word 0x1030 ;Temp for ADC 0x2A5 = 41.448 C .word 0x103B ;Temp for ADC 0x2A6 = 41.557 C .word 0x1046 ;Temp for ADC 0x2A7 = 41.667 C .word 0x1051 ;Temp for ADC 0x2A8 = 41.777 C .word 0x105C ;Temp for ADC 0x2A9 = 41.888 C .word 0x1067 ;Temp for ADC 0x2AA = 41.998 C .word 0x1072 ;Temp for ADC 0x2AB = 42.109 C .word 0x107E ;Temp for ADC 0x2AC = 42.220 C .word 0x1089 ;Temp for ADC 0x2AD = 42.332 C .word 0x1094 ;Temp for ADC 0x2AE = 42.443 C .word 0x109F ;Temp for ADC 0x2AF = 42.555 C .word 0x10AA ;Temp for ADC 0x2B0 = 42.667 C .word 0x10B5 ;Temp for ADC 0x2B1 = 42.779 C .word 0x10C1 ;Temp for ADC 0x2B2 = 42.892 C .word 0x10CC ;Temp for ADC 0x2B3 = 43.005 C .word 0x10D7 ;Temp for ADC 0x2B4 = 43.118 C .word 0x10E3 ;Temp for ADC 0x2B5 = 43.231 C .word 0x10EE ;Temp for ADC 0x2B6 = 43.344 C .word 0x10F9 ;Temp for ADC 0x2B7 = 43.458 C .word 0x1105 ;Temp for ADC 0x2B8 = 43.572 C .word 0x1110 ;Temp for ADC 0x2B9 = 43.686 C .word 0x111C ;Temp for ADC 0x2BA = 43.801 C .word 0x1127 ;Temp for ADC 0x2BB = 43.916 C .word 0x1133 ;Temp for ADC 0x2BC = 44.031 C .word 0x113E ;Temp for ADC 0x2BD = 44.146 C .word 0x114A ;Temp for ADC 0x2BE = 44.262 C .word 0x1155 ;Temp for ADC 0x2BF = 44.378 C .word 0x1161 ;Temp for ADC 0x2C0 = 44.494 C .word 0x116D ;Temp for ADC 0x2C1 = 44.610 C .word 0x1178 ;Temp for ADC 0x2C2 = 44.727 C .word 0x1184 ;Temp for ADC 0x2C3 = 44.844 C .word 0x1190 ;Temp for ADC 0x2C4 = 44.961 C .word 0x119B ;Temp for ADC 0x2C5 = 45.078 C .word 0x11A7 ;Temp for ADC 0x2C6 = 45.196 C .word 0x11B3 ;Temp for ADC 0x2C7 = 45.314 C .word 0x11BF ;Temp for ADC 0x2C8 = 45.433 C .word 0x11CB ;Temp for ADC 0x2C9 = 45.551 C .word 0x11D7 ;Temp for ADC 0x2CA = 45.670 C .word 0x11E3 ;Temp for ADC 0x2CB = 45.790 C .word 0x11EE ;Temp for ADC 0x2CC = 45.909 C .word 0x11FA ;Temp for ADC 0x2CD = 46.029 C .word 0x1206 ;Temp for ADC 0x2CE = 46.149 C .word 0x1213 ;Temp for ADC 0x2CF = 46.270 C .word 0x121F ;Temp for ADC 0x2D0 = 46.391 C .word 0x122B ;Temp for ADC 0x2D1 = 46.512 C .word 0x1237 ;Temp for ADC 0x2D2 = 46.633 C .word 0x1243 ;Temp for ADC 0x2D3 = 46.755 C .word 0x124F ;Temp for ADC 0x2D4 = 46.877 C .word 0x125B ;Temp for ADC 0x2D5 = 46.999 C .word 0x1268 ;Temp for ADC 0x2D6 = 47.122 C .word 0x1274 ;Temp for ADC 0x2D7 = 47.245 C .word 0x1280 ;Temp for ADC 0x2D8 = 47.368 C .word 0x128D ;Temp for ADC 0x2D9 = 47.492 C .word 0x1299 ;Temp for ADC 0x2DA = 47.616 C .word 0x12A6 ;Temp for ADC 0x2DB = 47.740 C .word 0x12B2 ;Temp for ADC 0x2DC = 47.865 C .word 0x12BF ;Temp for ADC 0x2DD = 47.990 C .word 0x12CB ;Temp for ADC 0x2DE = 48.116 C .word 0x12D8 ;Temp for ADC 0x2DF = 48.241 C .word 0x12E4 ;Temp for ADC 0x2E0 = 48.367 C .word 0x12F1 ;Temp for ADC 0x2E1 = 48.494 C .word 0x12FE ;Temp for ADC 0x2E2 = 48.621 C .word 0x130A ;Temp for ADC 0x2E3 = 48.748 C .word 0x1317 ;Temp for ADC 0x2E4 = 48.875 C .word 0x1324 ;Temp for ADC 0x2E5 = 49.003 C .word 0x1331 ;Temp for ADC 0x2E6 = 49.132 C .word 0x133E ;Temp for ADC 0x2E7 = 49.260 C .word 0x134A ;Temp for ADC 0x2E8 = 49.389 C .word 0x1357 ;Temp for ADC 0x2E9 = 49.519 C .word 0x1364 ;Temp for ADC 0x2EA = 49.648 C .word 0x1371 ;Temp for ADC 0x2EB = 49.779 C .word 0x137E ;Temp for ADC 0x2EC = 49.909 C .word 0x138C ;Temp for ADC 0x2ED = 50.040 C .word 0x1399 ;Temp for ADC 0x2EE = 50.172 C .word 0x13A6 ;Temp for ADC 0x2EF = 50.303 C .word 0x13B3 ;Temp for ADC 0x2F0 = 50.435 C .word 0x13C0 ;Temp for ADC 0x2F1 = 50.568 C .word 0x13CE ;Temp for ADC 0x2F2 = 50.701 C .word 0x13DB ;Temp for ADC 0x2F3 = 50.834 C .word 0x13E8 ;Temp for ADC 0x2F4 = 50.968 C .word 0x13F6 ;Temp for ADC 0x2F5 = 51.102 C .word 0x1403 ;Temp for ADC 0x2F6 = 51.237 C .word 0x1411 ;Temp for ADC 0x2F7 = 51.372 C .word 0x141E ;Temp for ADC 0x2F8 = 51.508 C .word 0x142C ;Temp for ADC 0x2F9 = 51.644 C .word 0x143A ;Temp for ADC 0x2FA = 51.780 C .word 0x1447 ;Temp for ADC 0x2FB = 51.917 C .word 0x1455 ;Temp for ADC 0x2FC = 52.054 C .word 0x1463 ;Temp for ADC 0x2FD = 52.192 C .word 0x1471 ;Temp for ADC 0x2FE = 52.330 C .word 0x147E ;Temp for ADC 0x2FF = 52.469 C .word 0x148C ;Temp for ADC 0x300 = 52.608 C .word 0x149A ;Temp for ADC 0x301 = 52.748 C .word 0x14A8 ;Temp for ADC 0x302 = 52.888 C .word 0x14B6 ;Temp for ADC 0x303 = 53.028 C .word 0x14C5 ;Temp for ADC 0x304 = 53.170 C .word 0x14D3 ;Temp for ADC 0x305 = 53.311 C .word 0x14E1 ;Temp for ADC 0x306 = 53.453 C .word 0x14EF ;Temp for ADC 0x307 = 53.596 C .word 0x14FD ;Temp for ADC 0x308 = 53.739 C .word 0x150C ;Temp for ADC 0x309 = 53.882 C .word 0x151A ;Temp for ADC 0x30A = 54.026 C .word 0x1529 ;Temp for ADC 0x30B = 54.171 C .word 0x1537 ;Temp for ADC 0x30C = 54.316 C .word 0x1546 ;Temp for ADC 0x30D = 54.462 C .word 0x1554 ;Temp for ADC 0x30E = 54.608 C .word 0x1563 ;Temp for ADC 0x30F = 54.754 C .word 0x1572 ;Temp for ADC 0x310 = 54.902 C .word 0x1580 ;Temp for ADC 0x311 = 55.049 C .word 0x158F ;Temp for ADC 0x312 = 55.198 C .word 0x159E ;Temp for ADC 0x313 = 55.347 C .word 0x15AD ;Temp for ADC 0x314 = 55.496 C .word 0x15BC ;Temp for ADC 0x315 = 55.646 C .word 0x15CB ;Temp for ADC 0x316 = 55.797 C .word 0x15DA ;Temp for ADC 0x317 = 55.948 C .word 0x15EA ;Temp for ADC 0x318 = 56.100 C .word 0x15F9 ;Temp for ADC 0x319 = 56.252 C .word 0x1608 ;Temp for ADC 0x31A = 56.405 C .word 0x1617 ;Temp for ADC 0x31B = 56.558 C .word 0x1627 ;Temp for ADC 0x31C = 56.712 C .word 0x1636 ;Temp for ADC 0x31D = 56.867 C .word 0x1646 ;Temp for ADC 0x31E = 57.023 C .word 0x1655 ;Temp for ADC 0x31F = 57.179 C .word 0x1665 ;Temp for ADC 0x320 = 57.335 C .word 0x1675 ;Temp for ADC 0x321 = 57.493 C .word 0x1685 ;Temp for ADC 0x322 = 57.650 C .word 0x1694 ;Temp for ADC 0x323 = 57.809 C .word 0x16A4 ;Temp for ADC 0x324 = 57.968 C .word 0x16B4 ;Temp for ADC 0x325 = 58.128 C .word 0x16C4 ;Temp for ADC 0x326 = 58.289 C .word 0x16D5 ;Temp for ADC 0x327 = 58.450 C .word 0x16E5 ;Temp for ADC 0x328 = 58.612 C .word 0x16F5 ;Temp for ADC 0x329 = 58.775 C .word 0x1705 ;Temp for ADC 0x32A = 58.938 C .word 0x1716 ;Temp for ADC 0x32B = 59.102 C .word 0x1726 ;Temp for ADC 0x32C = 59.267 C .word 0x1737 ;Temp for ADC 0x32D = 59.432 C .word 0x1747 ;Temp for ADC 0x32E = 59.599 C .word 0x1758 ;Temp for ADC 0x32F = 59.765 C .word 0x1769 ;Temp for ADC 0x330 = 59.933 C .word 0x177A ;Temp for ADC 0x331 = 60.102 C .word 0x178B ;Temp for ADC 0x332 = 60.271 C .word 0x179C ;Temp for ADC 0x333 = 60.441 C .word 0x17AD ;Temp for ADC 0x334 = 60.612 C .word 0x17BE ;Temp for ADC 0x335 = 60.783 C .word 0x17CF ;Temp for ADC 0x336 = 60.956 C .word 0x17E0 ;Temp for ADC 0x337 = 61.129 C .word 0x17F2 ;Temp for ADC 0x338 = 61.303 C .word 0x1803 ;Temp for ADC 0x339 = 61.478 C .word 0x1815 ;Temp for ADC 0x33A = 61.653 C .word 0x1827 ;Temp for ADC 0x33B = 61.830 C .word 0x1838 ;Temp for ADC 0x33C = 62.007 C .word 0x184A ;Temp for ADC 0x33D = 62.185 C .word 0x185C ;Temp for ADC 0x33E = 62.365 C .word 0x186E ;Temp for ADC 0x33F = 62.545 C .word 0x1880 ;Temp for ADC 0x340 = 62.725 C .word 0x1892 ;Temp for ADC 0x341 = 62.907 C .word 0x18A5 ;Temp for ADC 0x342 = 63.090 C .word 0x18B7 ;Temp for ADC 0x343 = 63.274 C .word 0x18C9 ;Temp for ADC 0x344 = 63.458 C .word 0x18DC ;Temp for ADC 0x345 = 63.644 C .word 0x18EF ;Temp for ADC 0x346 = 63.830 C .word 0x1901 ;Temp for ADC 0x347 = 64.018 C .word 0x1914 ;Temp for ADC 0x348 = 64.206 C .word 0x1927 ;Temp for ADC 0x349 = 64.396 C .word 0x193A ;Temp for ADC 0x34A = 64.586 C .word 0x194D ;Temp for ADC 0x34B = 64.777 C .word 0x1961 ;Temp for ADC 0x34C = 64.970 C .word 0x1974 ;Temp for ADC 0x34D = 65.163 C .word 0x1987 ;Temp for ADC 0x34E = 65.358 C .word 0x199B ;Temp for ADC 0x34F = 65.554 C .word 0x19AF ;Temp for ADC 0x350 = 65.751 C .word 0x19C2 ;Temp for ADC 0x351 = 65.948 C .word 0x19D6 ;Temp for ADC 0x352 = 66.147 C .word 0x19EA ;Temp for ADC 0x353 = 66.347 C .word 0x19FE ;Temp for ADC 0x354 = 66.549 C .word 0x1A13 ;Temp for ADC 0x355 = 66.751 C .word 0x1A27 ;Temp for ADC 0x356 = 66.955 C .word 0x1A3B ;Temp for ADC 0x357 = 67.159 C .word 0x1A50 ;Temp for ADC 0x358 = 67.365 C .word 0x1A65 ;Temp for ADC 0x359 = 67.573 C .word 0x1A7A ;Temp for ADC 0x35A = 67.781 C .word 0x1A8F ;Temp for ADC 0x35B = 67.991 C .word 0x1AA4 ;Temp for ADC 0x35C = 68.202 C .word 0x1AB9 ;Temp for ADC 0x35D = 68.414 C .word 0x1ACE ;Temp for ADC 0x35E = 68.627 C .word 0x1AE4 ;Temp for ADC 0x35F = 68.842 C .word 0x1AF9 ;Temp for ADC 0x360 = 69.058 C .word 0x1B0F ;Temp for ADC 0x361 = 69.276 C .word 0x1B25 ;Temp for ADC 0x362 = 69.495 C .word 0x1B3B ;Temp for ADC 0x363 = 69.715 C .word 0x1B51 ;Temp for ADC 0x364 = 69.937 C .word 0x1B68 ;Temp for ADC 0x365 = 70.160 C .word 0x1B7E ;Temp for ADC 0x366 = 70.385 C .word 0x1B95 ;Temp for ADC 0x367 = 70.611 C .word 0x1BAB ;Temp for ADC 0x368 = 70.838 C .word 0x1BC2 ;Temp for ADC 0x369 = 71.067 C .word 0x1BD9 ;Temp for ADC 0x36A = 71.298 C .word 0x1BF1 ;Temp for ADC 0x36B = 71.530 C .word 0x1C08 ;Temp for ADC 0x36C = 71.764 C .word 0x1C20 ;Temp for ADC 0x36D = 72.000 C .word 0x1C37 ;Temp for ADC 0x36E = 72.237 C .word 0x1C4F ;Temp for ADC 0x36F = 72.475 C .word 0x1C67 ;Temp for ADC 0x370 = 72.716 C .word 0x1C7F ;Temp for ADC 0x371 = 72.958 C .word 0x1C98 ;Temp for ADC 0x372 = 73.202 C .word 0x1CB0 ;Temp for ADC 0x373 = 73.448 C .word 0x1CC9 ;Temp for ADC 0x374 = 73.695 C .word 0x1CE2 ;Temp for ADC 0x375 = 73.944 C .word 0x1CFB ;Temp for ADC 0x376 = 74.195 C .word 0x1D14 ;Temp for ADC 0x377 = 74.448 C .word 0x1D2E ;Temp for ADC 0x378 = 74.703 C .word 0x1D48 ;Temp for ADC 0x379 = 74.960 C .word 0x1D61 ;Temp for ADC 0x37A = 75.219 C .word 0x1D7C ;Temp for ADC 0x37B = 75.480 C .word 0x1D96 ;Temp for ADC 0x37C = 75.743 C .word 0x1DB0 ;Temp for ADC 0x37D = 76.008 C .word 0x1DCB ;Temp for ADC 0x37E = 76.275 C .word 0x1DE6 ;Temp for ADC 0x37F = 76.544 C .word 0x1E01 ;Temp for ADC 0x380 = 76.815 C .word 0x1E1C ;Temp for ADC 0x381 = 77.089 C .word 0x1E38 ;Temp for ADC 0x382 = 77.365 C .word 0x1E54 ;Temp for ADC 0x383 = 77.643 C .word 0x1E70 ;Temp for ADC 0x384 = 77.924 C .word 0x1E8C ;Temp for ADC 0x385 = 78.207 C .word 0x1EA9 ;Temp for ADC 0x386 = 78.492 C .word 0x1EC6 ;Temp for ADC 0x387 = 78.780 C .word 0x1EE3 ;Temp for ADC 0x388 = 79.070 C .word 0x1F00 ;Temp for ADC 0x389 = 79.363 C .word 0x1F1D ;Temp for ADC 0x38A = 79.658 C .word 0x1F3B ;Temp for ADC 0x38B = 79.957 C .word 0x1F59 ;Temp for ADC 0x38C = 80.257 C .word 0x1F78 ;Temp for ADC 0x38D = 80.561 C .word 0x1F96 ;Temp for ADC 0x38E = 80.867 C .word 0x1FB5 ;Temp for ADC 0x38F = 81.177 C .word 0x1FD4 ;Temp for ADC 0x390 = 81.489 C .word 0x1FF4 ;Temp for ADC 0x391 = 81.804 C .word 0x2014 ;Temp for ADC 0x392 = 82.122 C .word 0x2034 ;Temp for ADC 0x393 = 82.444 C .word 0x2054 ;Temp for ADC 0x394 = 82.768 C .word 0x2075 ;Temp for ADC 0x395 = 83.096 C .word 0x2096 ;Temp for ADC 0x396 = 83.427 C .word 0x20B8 ;Temp for ADC 0x397 = 83.761 C .word 0x20D9 ;Temp for ADC 0x398 = 84.099 C .word 0x20FC ;Temp for ADC 0x399 = 84.441 C .word 0x211E ;Temp for ADC 0x39A = 84.785 C .word 0x2141 ;Temp for ADC 0x39B = 85.134 C .word 0x2164 ;Temp for ADC 0x39C = 85.486 C .word 0x2188 ;Temp for ADC 0x39D = 85.843 C .word 0x21AC ;Temp for ADC 0x39E = 86.203 C .word 0x21D0 ;Temp for ADC 0x39F = 86.567 C .word 0x21F5 ;Temp for ADC 0x3A0 = 86.935 C .word 0x221A ;Temp for ADC 0x3A1 = 87.307 C .word 0x2240 ;Temp for ADC 0x3A2 = 87.684 C .word 0x2266 ;Temp for ADC 0x3A3 = 88.065 C .word 0x228D ;Temp for ADC 0x3A4 = 88.450 C .word 0x22B4 ;Temp for ADC 0x3A5 = 88.840 C .word 0x22DB ;Temp for ADC 0x3A6 = 89.235 C .word 0x2303 ;Temp for ADC 0x3A7 = 89.635 C .word 0x232B ;Temp for ADC 0x3A8 = 90.039 C .word 0x2354 ;Temp for ADC 0x3A9 = 90.449 C .word 0x237E ;Temp for ADC 0x3AA = 90.864 C .word 0x23A8 ;Temp for ADC 0x3AB = 91.284 C .word 0x23D2 ;Temp for ADC 0x3AC = 91.709 C .word 0x23FE ;Temp for ADC 0x3AD = 92.141 C .word 0x2429 ;Temp for ADC 0x3AE = 92.578 C .word 0x2456 ;Temp for ADC 0x3AF = 93.021 C .word 0x2483 ;Temp for ADC 0x3B0 = 93.470 C .word 0x24B0 ;Temp for ADC 0x3B1 = 93.925 C .word 0x24DE ;Temp for ADC 0x3B2 = 94.386 C .word 0x250D ;Temp for ADC 0x3B3 = 94.855 C .word 0x253D ;Temp for ADC 0x3B4 = 95.330 C .word 0x256D ;Temp for ADC 0x3B5 = 95.812 C .word 0x259E ;Temp for ADC 0x3B6 = 96.301 C .word 0x25CF ;Temp for ADC 0x3B7 = 96.798 C .word 0x2602 ;Temp for ADC 0x3B8 = 97.302 C .word 0x2635 ;Temp for ADC 0x3B9 = 97.815 C .word 0x2669 ;Temp for ADC 0x3BA = 98.335 C .word 0x269E ;Temp for ADC 0x3BB = 98.864 C .word 0x26D4 ;Temp for ADC 0x3BC = 99.401 C .word 0x270A ;Temp for ADC 0x3BD = 99.948 C .word 0x2742 ;Temp for ADC 0x3BE = 100.50 C .word 0x277A ;Temp for ADC 0x3BF = 101.06 C .word 0x27B4 ;Temp for ADC 0x3C0 = 101.64 C .word 0x27EE ;Temp for ADC 0x3C1 = 102.22 C .word 0x282A ;Temp for ADC 0x3C2 = 102.82 C .word 0x2867 ;Temp for ADC 0x3C3 = 103.43 C .word 0x28A5 ;Temp for ADC 0x3C4 = 104.05 C .word 0x28E4 ;Temp for ADC 0x3C5 = 104.68 C .word 0x2924 ;Temp for ADC 0x3C6 = 105.32 C .word 0x2965 ;Temp for ADC 0x3C7 = 105.97 C .word 0x29A8 ;Temp for ADC 0x3C8 = 106.64 C .word 0x29EC ;Temp for ADC 0x3C9 = 107.32 C .word 0x2A32 ;Temp for ADC 0x3CA = 108.02 C .word 0x2A79 ;Temp for ADC 0x3CB = 108.73 C .word 0x2AC2 ;Temp for ADC 0x3CC = 109.46 C .word 0x2B0C ;Temp for ADC 0x3CD = 110.20 C .word 0x2B58 ;Temp for ADC 0x3CE = 110.96 C .word 0x2BA6 ;Temp for ADC 0x3CF = 111.74 C .word 0x2BF6 ;Temp for ADC 0x3D0 = 112.54 C .word 0x2C47 ;Temp for ADC 0x3D1 = 113.35 C .word 0x2C9B ;Temp for ADC 0x3D2 = 114.19 C .word 0x2CF0 ;Temp for ADC 0x3D3 = 115.04 C .word 0x2D48 ;Temp for ADC 0x3D4 = 115.92 C .word 0x2DA3 ;Temp for ADC 0x3D5 = 116.83 C .word 0x2E00 ;Temp for ADC 0x3D6 = 117.76 C .word 0x2E5F ;Temp for ADC 0x3D7 = 118.71 C .word 0x2EC1 ;Temp for ADC 0x3D8 = 119.69 C .word 0x2F26 ;Temp for ADC 0x3D9 = 120.70 C .word 0x2F8E ;Temp for ADC 0x3DA = 121.74 C .word 0x2FFA ;Temp for ADC 0x3DB = 122.82 C .word 0x3069 ;Temp for ADC 0x3DC = 123.93 C .word 0x30DB ;Temp for ADC 0x3DD = 125.07 C .word 0x3152 ;Temp for ADC 0x3DE = 126.26 C .word 0x31CD ;Temp for ADC 0x3DF = 127.49 C .word 0x324C ;Temp for ADC 0x3E0 = 128.76 C .word 0x32D0 ;Temp for ADC 0x3E1 = 130.08 C .word 0x3359 ;Temp for ADC 0x3E2 = 131.45 C .word 0x33E8 ;Temp for ADC 0x3E3 = 132.88 C .word 0x347D ;Temp for ADC 0x3E4 = 134.37 C .word 0x3518 ;Temp for ADC 0x3E5 = 135.92 C .word 0x35BB ;Temp for ADC 0x3E6 = 137.55 C .word 0x3665 ;Temp for ADC 0x3E7 = 139.25 C .word 0x3718 ;Temp for ADC 0x3E8 = 141.04 C .word 0x37D4 ;Temp for ADC 0x3E9 = 142.92 C .word 0x389A ;Temp for ADC 0x3EA = 144.90 C .word 0x396C ;Temp for ADC 0x3EB = 147.00 C .word 0x3A4A ;Temp for ADC 0x3EC = 149.22 C .word 0x3B36 ;Temp for ADC 0x3ED = 151.58 C .word 0x3C32 ;Temp for ADC 0x3EE = 154.10 C .word 0x3D41 ;Temp for ADC 0x3EF = 156.81 C .word 0x3E63 ;Temp for ADC 0x3F0 = 159.71 C .word 0x3F9E ;Temp for ADC 0x3F1 = 162.86 C .word 0x40F5 ;Temp for ADC 0x3F2 = 166.29 C .word 0x426C ;Temp for ADC 0x3F3 = 170.04 C .word 0x440B ;Temp for ADC 0x3F4 = 174.19 C .word 0x45D8 ;Temp for ADC 0x3F5 = 178.80 C .word 0x47E1 ;Temp for ADC 0x3F6 = 184.01 C .word 0x4A33 ;Temp for ADC 0x3F7 = 189.95 C .word 0x4CE7 ;Temp for ADC 0x3F8 = 196.87 C .word 0x501C ;Temp for ADC 0x3F9 = 205.08 C .word 0x540A ;Temp for ADC 0x3FA = 215.14 C .word 0x5910 ;Temp for ADC 0x3FB = 228.00 C .word 0x5FE9 ;Temp for ADC 0x3FC = 245.53 C .word 0x6A5C ;Temp for ADC 0x3FD = 272.28 C .word 0x7ECB ;Temp for ADC 0x3FE = 324.59 C .word 0x7FFF ;Temp for ADC 0x3FF = 327.67 C