'========================================================================== 'Project : 9000024 'Beschrijving : temperatuurregeling met PIC 12F675 versie ' 8 Mhz temperatuur op 0 en potentiometer op 1 'Ontwikkelaar : Camo Development 'Email : Camo@pi.be 'Datum : 10/05/06 'Versie : 9000024.1 '========================================================================== 'Met een zogenaamde proportionele sturing een temperatuurregeling maken '========================================================================== Device = 12F675 XTAL = 8 Config = %11000001010010 '13-12 = BG1:BGO '11-9 = 0 '8 = /CPD = 1 geen code protectie '7 = /CP = 1 geen code protectie '6 = BODEN '5 = MCLRE '4 = /PWRTE '3 = WDTE '2-0 = FOSC2:FOSC0 001 = XT, 010 = HS 'zou hetzelfde moeten zijn als oa. ' config HS_osc, WDT_off, ,MCLRE_off 'RSOUT_PIN = GPIO.0 'RSOUT_MODE = True 'Declare SERIAL_BAUD 19200 '========================================================================== 'Instellingen voor de analoge metingen '========================================================================== ' ANSEL ANALOG SELECT REGISTER '========================================================================== ANSEL.0 = 1 ' analoog ANSEL.1 = 1 ' analoog ANSEL.2 = 0 ' digitaal ANSEL.3 = 0 ' digitaal ANSEL.4 = 1 '|ADC conversion clock select ANSEL.5 = 0 '|001 = op 8 Tosc 2,0 µs ANSEL.6 = 0 '| ' ansel.7 ' vrij '========================================================================== ' ADCON0 A/D CONTROL REGISTER '========================================================================== ADCON0.7 = 0 ' Left justify the ADC result ' pakt de hoogste 10 bits en vult rechts met nullen ADCON0.6 = 0 ' VREF is set to VDD of PICmicro ' ADCON0.5 ' vrij ' ADCON0.4 ' vrij Symbol CHS1 = ADCON0.3 ' ADC channel select bit Symbol CHS0 = ADCON0.2 ' ADC channel select bit ' 00 = AN0 ' 01 = AN1 meten temperatuur ' 10 = AN2 meten instelling ' 11 = AN3 Symbol GO_DONE = ADCON0.1 ' ADC Conversion status ' / plus enable conversion-bit Symbol ADON = ADCON0.0 ' ADC Enable bit: 1 = enabled, 0 = disabled. '========================================================================== 'I/O definities '========================================================================== ' Symbol tem GPIO.0 'temperatuur ' Symbol inst GPIO.1 'temperatuur instelling Symbol Uitg GPIO.2 'uitgang naar opto coupler Symbol nul GPIO.3 'nuldoorgang Symbol pull OPTION_REG.7 'weak pull up '========================================================================== 'definieer uit/ingangen (0 = uitgang 1 = ingang) '========================================================================== TRISIO = %1011 '========================================================================== 'Variabelen '========================================================================== Dim AD_result As ADRES.Word'De waarde uit het analoge register Dim Temp As Word 'Variabele van de gemeten temperatuur Dim Inst As Word 'Variabele van de gemeten instelling Dim Stap As Byte 'Het aantal eenheden per stap Dim Stap1 As Byte 'Het aantal eenheden per stap Dim AantStap As Byte 'Het aantal eenheden dat zakt of stijgt Dim StapTellen As Byte 'Bijhouden van het aantal stappen Dim Rich As Bit 'Stijgen of dalen van de T-inst Dim cyclus As Bit 'Eerste helft of tweede helft van een cyclus Dim VtopTop As Byte 'De top tot top waarde voor de Drieh.spa. Dim Vdrieh As Word 'actuele waarde van driehoekspanning 'om de flank te detecteren Dim ppuls As Bit Dim Vnul As Bit 'om de nuldoorgang te detecteren Dim Tpuls As Bit 'start van de metingen '========================================================================== 'definieren van constanten '========================================================================== pull = 0 Stap = 50 'aantal eenheden per stap AantStap = 20 'Vtop-top = stap * aantStap 'geeft een cyclus seconden Rich = 0 VtopTop = Stap * AantStap '========================================================================== 'programma '========================================================================== MAIN: 'Bepalen van flank in de voedingsspanning If nul = 0 Then Vnul = 0 : Tpuls = 0 : Else : GoTo MAIN If nul = 1 And Vnul = 0 Then Tpuls = 1 : Vnul = 1 : Else : GoTo MAIN If Tpuls = 1 Then ppuls = ppuls + 1 If ppuls = 0 Then GoSub Get_inst ' geeft instelling potmeter GoSub Driehoek ' houd de Zaagtand bij Else GoSub Get_temp ' geeft de temperatuur weer If Temp > Vdrieh Then Uitg = 1 :Else : Uitg = 0 EndIf EndIf GoTo MAIN '========================================================================== 'Bepalen van de driehoekspanning 'Eerst de halve driehoeken 'en dan bij de pare cyclussen driehoek omkeren '========================================================================== Driehoek: If StapTellen > VtopTop Then Rich = 0 'dalende flank If StapTellen < Stap Then Rich = 1 'stijgende flank StapTellen = 0 'opnieuw beginnen tellen cyclus = cyclus - 1 'de cyclus bepalen EndIf If Rich = 1 Then If cyclus = 0 Then Stap1 = 3*Stap : Else : Stap1 = Stap 'ietwat zaagtand maken StapTellen = StapTellen + Stap1 Else If cyclus = 1 Then Stap1 = 3*Stap : Else : Stap1 = Stap StapTellen = StapTellen - Stap1 EndIf If cyclus = 1 Then 'de pare cyclussen omkeren Vdrieh = Inst + StapTellen 'bepalen van de te vergelijken waarde Else 'na te bootsen Vdrieh = Inst - StapTellen 'bepalen van de te vergelijken waarde EndIf Return '========================================================================== 'Starten van temperatuurmeting '========================================================================== Get_temp: Temp = 0 CHS1 = 0 : CHS0 = 0 ' selecteren van de ingang GPIO.0 ADON = 1 ' enable de ADC DelayUS 10 ' wachten op het opladen van de capaciteiten GO_DONE = 1 'start de conversie While GO_DONE = 1 : Wend 'Wacht tot de conversie heeft plaatsgevonden ADON = 0 ' ADC uitschakelen Temp = AD_result Temp = Temp / 10 Return '========================================================================== 'Starten van meten temperatuurinstelling '========================================================================== Get_inst: Inst = 0 CHS1 = 0 : CHS0 = 1 ' selecteren van de ingang GPIO.1 ADON = 1 ' enable de ADC DelayUS 10 ' wachten op het opladen van de capaciteiten GO_DONE = 1 'start de conversie While GO_DONE = 1 : Wend 'Wacht tot de conversie heeft plaatsgevonden ADON = 0 ' ADC uitschakelen Inst = AD_result Inst = Inst /10 If Inst < VtopTop Then Inst = VtopTop Return '========================================================================== 'Project : 9000024 'Beschrijving : 'Opmerking : '==========================================================================