I'm trying to build a fan controller for a solar heater that I built but I can't seem to get it to work. I've tried everything I can think of and now I need help.
Yes probably that kind too. I was sane before I started this.
I'm using an LM34 temperature sensor which outputs 10mv/deg F from 5F (50mv) to 300F (3000mv) and a 12F675.
Attached is a text file with the code and it is also listed below.
Any help would be appreciated. I'm trying to make it come on at 115F and go off at 80F, settable in a constant at the beginning of the code. Later I want to add PWM for servo operated dampers.
Any help will be appreciated.
Code:'Modified from file found at Renolds Electronics 'http://www.rentron.com/PIC12C67XAD.htm 'LM34 'PIN NAME Purpose ' 1 VDD +5v ' 2 Output 10mv/degF, +5° to +300°F = 50mv-3000mv ' 3 VSS GND ' 'PIC12F675 ' PIN NAME Purpose ' 1 VDD +5v ' 8 VSS GND ' 5 GPIO.2 PWM out to servo ' 6 GPIO.1 Output to NPN transistor sinking relay. ' 7 GPIO.0 A/D input from center leg of LM34 '******************* Fuses, Defines, Variables & Constants ****************** @ device pic12F675, intrc_osc_noclkout, wdt_off, pwrt_on, mclr_off, bod_off, protect_off define OSC 4 'Use 4mhz osc CMCON=7 '(%00000111) Turn off analog comparators TRISIO=%001001 '(Dec 9)Port direction register. 1=input, 0=output Note TRISIO.3 is always an input. RESULT VAR BYTE 'A/D CONVERSION RESULT STORAGE BYTE ADCON1=6 '(%00000110) SET GP.0 TO ANALOG INPUT, Vref = Vdd, ALL ELSE = DIGITAL I/O HighTemp var byte 'High temperature setpoint LowTemp Var byte 'Low temperature setpoint Relay var GPIO.1 'Output pin tp transistor 'PWMOut var GPIO.2 'Pin 5 used to drive damper servos 'To be implemented later HighTemp = 115 'Relay turn on Temp LowTemp = 80 'Relay turn off temp '************************ Main ************************ MAIN: GOSUB GETVAL 'SETUP A/D pause 500 'Wait 500ms gosub Setrelay 'Turn on or off relay pause 500 GOTO MAIN 'Start over '************************ GETRESULT: PAUSEUS 50 'WAIT FOR A/D CHANNEL SETUP (50 uS) ADCON0.2 = 1 'START CONVERSION BY SETTING GO/DONE-BIT (HIGH) '************************ LOOP: 'WAIT FOR GO/DONE BIT TO BE CLEARED IF ADCON0.2=1 THEN 'CHECK GO/DONE BIT (0=DONE) GOTO LOOP 'NOT FINISHED CONVERTING, THEN LOOP UNTIL DONE ENDIF 'IF STATEMENT SATISFIED, ADCON0.2 = 0 (DONE) RETURN 'FINISHED CONVERSION, RETURN TO GETVAL ROUTINE '************************ GETVAL: ADCON0=%10000001 'SET A/D Fosc/32,[4MHz], CHANNEL-0 = ON GOSUB GETRESULT 'START THE CONVERSION RESULT = ADRES 'STORE THE A/D CONVERSION VALUE IN RESULT RETURN 'RETURN TO MAIN ROUTINE, START OVER END '************************ SetRelay: 'Turn on or off relay with hysterisis select case RESULT case RESULT <= lowTemp low relay 'PWM GPIO.2, 127, 100 'Need 1ms wide pulse at about 40-50 per second. To be implemented later case RESULT > LowTemp and Temp > HighTemp low Relay 'PWM GPIO.2, 25, 100 'Need 1ms wide pulse at about 40-50 per second. To be implemented later end select 'PWM GPIO.2, 127, 100 'Send 50% (127) duty cycle pwm signal out pin 5 for 100 cycles return END




Bookmarks