'**************************************************************** '* Name : * '* Author : * '* Notice : * '* : * '* : * '* Date : * '* Version : * '**************************************************************** ; HBusOut %10000100, %01010000,[00] ' BitWizard I2C DIO. pin 3, IO 0, 8E, 50, 00 PWM1 ; HBusOut %10000100, %01010001,[00] ' BitWizard I2C DIO. pin 4, IO 1, 8E, 51, 00 PWM2 ; HBusOut %10000100, %01010010,[00] ' BitWizard I2C DIO. pin 5, IO 2, 8E, 52, 00 PWM3 ; HBusOut %10000100, %01010011,[00] ' BitWizard I2C DIO. pin 6, IO 3, 8E, 53, 00 PWM4 ;********************** ;Device 16F877A ' HS_OSC, BOREN_ON, INTRC_OSC_NOCLKOUT ' Config HS_OSC, BOREN_ON, PWRTE_ON, WDT_OFF, LVP_OFF, MCLRE_OFF, CP_OFF, DATA_CP_OFF ;Config WDT_OFF, PWRTE_ON, HS_OSC, LVP_OFF ;Declare Xtal = 20 ;*********************** Device 18F45K22 Config_Start FOSC = INTIO67 ;Internal oscillator block, port function on RA6 and RA7 FCMEN = Off ;Fail-Safe Clock Monitor disabled IESO = Off ;internal external switchover mode ;PWRT = On ;power-up timer For 18F25K20 PWRTEN = On ;power-up timer For 18F25K22 BOREN = On ;brown-out reset ;BORV = 27 ;brown-out reset value (2,7V) For 18F25K20 BORV = 285 ;brown-out reset value (2,85V) for 18F25K22 WDTEN = Off ;watchdog timer WDTPS = 128 ;1:128 WDT prescalar PBADEN = Off ;analog port B<4:0> STVREN = On ;stack overflow reset LVP = Off ;LET OP ivm. MicroPog7 low voltage programming XINST = Off ;Instruction set extension and Indexed Addressing mode disabled (Legacy mode) Debug = Off ;no debug MCLRE = EXTMCLR ; MCLR pin enabled, RE3 input pin disabled 45K22!!!!!!!!!!! CCP2MX = PORTC1 ; CCP2 input/output is multiplexed with RC1 45K22!!!!!!!!!!! Config_End ; Xtal 64 ; Many I/O troubles, DIO, HPWM 1+2 DHT11(?) Xtal 16 ; OKE! '****************************************************** ;All_Digital TRUE 'Set the default data in the eeprom at programming EData Byte 1, Word 500, Float 0, Float 0, Byte 10, Byte 90 ; traysbit, teller, weekteller, wekenteller ; byte=0 , Word=1-2,Float=3-6,Float=7-10,byte=11,byte=12 Byte's positie's 'On-chip pull-up resistors active ; Declare PortB_Pullups On ' Declare MOET ervoor staan NODIG?? ; On_Hardware_Interrupt GoTo ENCODER_INTERRUPT_HANDLER ' Waar heen te gaan bij interrupt. '**************************************************************** ; 877A 'In and outputs 'Tris registers '76543210 ; TRISA = %111111 ; 6 A poorten A.0 ADIn1=LDR; A.1 DHT11; A.2 Vocht.Sensor 1; A.3 V.S 2; A.4 V.S 3; A.5 V.S 4 ; TRISB = %10001111 ; TRISC = %00000000 ; TRISD = %00000000 ; TRISE = %000 ; %111 dan is het oke! Maar %11111111 maar dan start de PIC niet meer op! '****************************************************** ; 45K22 OSCCON = %01110000 ; 16Mhz intern osc, OKE OSCTUNE= %00000000 ; %01000000 = 4x PLL aan geeft 64Mhz, 64MHz geeft I/O problemen, zie hierboven (Xtal=64)! 'Tris registers '76543210 TRISA = %111101 ; 1e BCD CD4051 A0-A2 ; Was, A3 Rot.SW, A4 knop TRISB = %10001111 'NW PORTB.0 IR. PORTB.1 RotA, PORTB.2 RotB, PORTB.3 RotSW ; B4-B7 Input IO TASCAM TRISC = %00000000 TRISD = %00000000 ; D0-D3 Output IO TASCAM TRISE = %000 ; 2e BCD CD4051 E0-E2 All_Digital TRUE ; PMD2 = %00001110 ' Enable / disable peripheral modules ENABLE Bit 0 ADC ' Bit 0 = ADC module ' Bit 1 = Comparator 1 module ' Bit 2 = Comparator 2 module ' Bit 3 = CTMU module ' Bit 4 - 7 = Unimplemented ; VREFCON0 = %00000000 ' Turn OFF VREF ; Vref Disabeld ; CTMUCONH = %00000000 ' Turn OFF CTMU ; Charge Time Measurement OFF ; HLVDCON = %00000000 ' Turn OFF HLVD ; High/Low Voltage Detection OFF ; LATA = 0 ' Turn OFF PORTA ; LATB = 0 ' Turn OFF PORTB ; LATC = 0 ' Turn OFF PORTC ;Aanpassen '****************************************************** ; Uitzoeken 877A ; ADIn ;76543210 ; Hulp regel analoog ; ADCON0 = %00000001 ; LDR Analoge ingang 0 Pin2 ;****************************************************** '****************************************************** ; Uitzoeken 45K22 ADCON0 = %00000001 ' Disable analog on startup and select analog pins ADCON1 = %10000000 ' Was "0" Select VREF; Connected to internal signal AVDD / AVSS ADCON2 = %10000011 ' Select FRC and right justify analog result CM1CON0 = %00000000 ' Turn OFF comparators CM2CON0 = %00000000 ' Turn OFF comparators ANSELA = %00000001 ' Configure RA0 pin as analog ANSELB = %00000000 ; 18F25K22 poort B digitaal ANSELC = %00000000 ; (was 00000111) 18F25K22 Poort C RX,TX,C5,SCL en SDA digitaal ANSELD = %00000000 ; ANSELE = %00000000 ;****************************************************** PORTA = 0 ' Set PORTC to all zeros PORTB = 0 ' Set PORTD to all zeros PORTC = 0 ' Set PORTC to all zeros PORTD = 0 ' Set PORTD to all zeros ;****************************************************** ; I2C Symbol SDA = PORTC.4 ' pin 23 Symbol SCL = PORTC.3 ' pin 18 'LCD ***** Connectie als bij de Reflow-oven ****** Declare LCD_DTPin PORTD.4 ' pin 27-30 Declare LCD_ENPin PORTC.7 ' pin 26 Declare LCD_RSPin PORTC.6 ' pin 25 Declare LCD_Interface 4 Declare LCD_Lines 2 Declare CCP1_Pin PORTC.2 ' pin 17 Declare CCP2_Pin PORTC.1 ' pin 16 Declare PortB_Pullups On ' Declare MOET ervoor staan NODIG?? ; ADC, ADIn 0 ; NIET NODIG! ; Declare Adin_Res = 10 ; resolutie ALTIJD 10 bits ; Declare Adin_Tad = FRC ; Set rc osc ; Declare Adin_Stime = 50 ; sample tijd 5 Declare LCD_DataUs 75 'voor de wat langzamere LCD schermpjes. Declare Hbus_Bitrate 100 ' Constant 100 '**************************************************************** ; Poort configuratie Symbol OzonGen PORTE.0 ' pin 8 Ozon, Circ.Pomp 220Volt; UV-LED's 12Volt of via 220Volt trafo! Symbol Fans PORTE.1 ' pin 9 Beide Ventilatoren Symbol peltier PORTE.2 ' pin 10 Verwarmingsmat, nodig ?? ; ; PORTD.0 ' pin 19 Aan/Afvoer pomp Symbol DQ = PORTD.1 ' pin 20 Data-port DS18B20 Symbol LEDRed = PORTD.2 ; pin 21 Rotary LED's High is ON Low is OFF Symbol LEDGreen = PORTD.3 ; pin 22 Idem ; de rest van PORTD.4-7 ; pin 27-30 -->> LCD ; Symbol Speaker = PORTC.0 ; pin 15 Buzzer ; CCP2 = PORTC.1 ; Pin 16 PWM Pomp1 52% ; CCP1 = PORTC.2 ; Pin 17 PWM LED-Verlichting ; I2C PORTC.3-4 ; 18en23 I2C Klok IC ; PORTC.5 ; pin 24 VRIJ ; PORTC.6-7 ; 25en26 LCD ; PORTB PULL-UP !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Symbol RotaryB = PORTB.0 ' pin 33 Rotary A; nu B Symbol RotaryA = PORTB.1 ' pin 34 Rotary B; nu A Symbol RotarySw = PORTB.2 ' pin 35 Rotary Encoder Switch. Symbol spanning = PORTB.3 ' pin 36 Flowmeter ;************************************************************************ ; Pompen en Vocht ;************************************************************************ ; Aanvoer/Afvoer pomp = PORTC.1 ; Pin 16 1e Pomp 1 aan PWM kanaal CCP2 Pin 16 Symbol pomp1 = PORTD.0 ' pin 19 Symbol pomp2 = PORTB.4 ; Pin 37 2e Pomp enz; Symbol pomp3 = PORTB.5 ; Pin 38 3e Symbol pomp4 = PORTB.6 ; Pin 39 4e Symbol niveau = PORTB.7 ; Pin 40 Beide Niveau Schakelaars, voorraadvat en Jerrycan afvoer; IN SERIE!!! ; ;analoog = ADIn 0 = PORTA.0 ' Zie ADC routine; analoog = ADIn 0 = PORTA.0 ' Zie ADC routine ;DHT11 Input = PORTA.1 ; = DHT11 Input pin 5 WAS A.3 Zie DHT11 routine. Symbol vocht1 = PORTA.2 ; Vochtsensor1 Symbol vocht2 = PORTA.3 ; " 2 Symbol vocht3 = PORTA.4 ; " 3 Symbol vocht4 = PORTA.5 ; " 4 ; Einde Poort I/O configuratie ; ' ******* voor Rotary ;877A ;Symbol INTEDG = OPTION_REG.6 ; blz. 2.2.2.2 en 2.2.2.3 ;Symbol INTE = INTCON.4 ;Symbol INTF = INTCON.1 ; RB0/INT External Interrupt Flag bit ;Symbol GIE = INTCON.7 ; Bit 7 van INTCON register heet: Global Interrupt Enable ; INTEDG = 0 ' Interrupt op neergaande flank ; INTE = 1 ' External Interrupt Enable bit ; INTF = 0 ; GIE = 1 ;************************************************************************************* ; 45K22 Symbol IPEN = RCON.7 ' IPEN : Disable Interrupt PRIORITY HANDLING Symbol GIE = INTCON.7 ' GIE : enable interrupts Symbol INT1IE = INTCON3.3 ' PORTB.1 (INT1) interrupt enable bit Symbol INTEDG1 = INTCON2.5 ' Op (1) of neergaande (0) flank PORTB.1 interrupt select Symbol INT1IF = INTCON3.0 ' PORTB.1 (INT1) interrupt flag INTEDG1 = 0 ' INT1 interrupt op neergaande flank IPEN = 0 ' Interrupt priority uitzetten (PIC16F compatability mode) ; TRISB = %10001111 ; tester.0 = PORTB.0 'Read PORTB (nodig om actuele status te verkrijgen, zie datasheet) ?? FOUTMELDING ??? INT1IE = 1 ' PORTB.1 interrupts aanzetten INT1IF = 0 ' Clear the PORTB.1 Interrupt FLAG GIE = 1 ' Interrupts activeren On_Hardware_Interrupt GoTo ENCODER_INTERRUPT_HANDLER ' Waar heen te gaan bij interrupt. ; Tot zover ' *************************************************************** 'Ram registers Symbol Reg_Seconden = $00 Symbol Reg_Minuten = $01 Symbol Reg_Uren = $02 Symbol Reg_Dag = $04 ' Date = Datum 1-31 Ivm. opname's Symbol Reg_Maand = $05 Symbol Reg_Jaar = $06 ' DS1307 ' *************************************************************** ' DHT11 '**************************************************************** Dim Tempie As Word ; Blijkbaar is dit NOODZAKELIJK voor PIC18F45K22; Word werkt bij 877A Dim Humpie As Word ; Blijkbaar is dit NOODZAKELIJK voor PIC18F45K22; Word werkt bij 877A Dim Temp As Word Dim Hum As Word Dim DataIn As Byte 'hi pulse from sensor Dim ChkSum As Byte Dim Index As Byte Dim vocht As Byte Dim vochta As Byte '**************************************************************** Dim lopen As Word ' Interval meting DHT11 Dim teller As Word ' Flowsensor pulsen; 500 = 1000mL Dim deciliter As Float ; dag debiet, 100 = 200mL, 10 = 20mL, 5 = 10mL 50 = 100mL Dim Weekteller As Float ; wekelijks debiet Dim Wekenteller As Float ; 2 weken debiet Dim schemer As Byte ; Licht donker afgeleid van analoog = LDR Adin, ipv. WORD!!! Dim dobit As Byte ' Sensor ready or not Dim telbit As Byte ' 2-deler voor 1 periode, Flowsensor. Dim telbit_old As Byte ' Voorwaarde <> telbit _old welke programma delen voorrang hebben in Main! Dim vertraging As Byte ' Inc. vertraging, wachtijd voordat telbit_old = telbit uit te voeren. Dim boot As Byte ' Tijdens opstarten NIET 1 puls vooraf tellen. Flowsensor Dim trays1_4 As Byte ' Enable/Disable de Trays, per Tray eerst 1, dan 2, enz. Dim traysbit As Byte ' Bit settings welke tray(s) irrigeren Dim analoog As Byte ' A/D waarde poort A.0 pin2 Dim menu_waarde As Byte ' Onthoudt case select in Hoofdmenu Dim Do_dagen As Byte ; Voorwaarde 1 malig weekteller per dag, dagverbruik bijtellen Dim Do_weken As Byte ; Voorwaarde 1 malig wekenteller per dag, dagverbruik gedurende 2 weken bijtellen. '***************************************************************** ' DS18B20 Dim Temperatuur As Word ' van DS3232 en DS1307---> DS18B20 Dim Verwarming As Word ' van DS18B20 Sensor, met; Dim Decimalen As Byte ' temperatuur achter de comma Dim Remain As Byte ' Tbv. 1 decimaal voor DS1820 Dim Slope As Byte ' idem Dim BD1 As Byte ' idem 'Rotary Decoder ************************************************* Dim lussen As Byte ; Als index teller voor pompen_pwm = 131 - 254 vanaf 52% PWM Dim lus1 As Byte ; Mbv. Rotary instellen tbv. vetraging 52-100% PWM pompen_pwm Dim waarde As Byte ' Nu in Bytes (signed bytes om ook met negatieve getallen te kunnen werken.) ; Dim waardeMode1 As SByte Dim test As Byte ; Eens in x mSec DS1307 inlezen. Dim change As Byte Dim loopCounter As Byte Dim modeTimer As Byte Dim keuze As Byte 'was "mode Dim ButtonUp As Byte Dim ButtonLow As Byte Dim geensensor As Byte ' 18B20 comm. fout Dim aanuit As Byte Dim tester As Byte ; nodig vor PORTB 45K22? ' **************************************************************** ' Menu ' **************************************************************** Dim menuteller As Byte Dim Menu_item As Byte '***************************************************************** ' DS1307 '***************************************************************** Dim lezen_reg As Byte Dim lezen_uit As Byte Dim schrv_reg As Byte Dim schrv_in As Byte Dim BCD_In As Byte Dim Byte_Uit As Byte Dim Hbits As Byte Dim Lbits As Byte Dim BCD_Uit As Byte Dim Byte_In As Byte Dim temp13_32 As Byte ' DS1307+DS18B20 of DS3232 Dim Seconden As Byte Dim Seconden1 As Byte ; Vergelijk met de verstreken seconden Dim Minuten As Byte Dim Minuut As Byte ' Als er 1 minuut is verstreken, dan pas weer 'verwarming' temp. meten Dim Uren As Byte Dim Dag As Byte 'Ivm. opname's Dim Maand As Byte Dim Jaar As Byte Dim Lezen As Byte '$D0 (Bit's 8421) Dim Schrijven As Byte '$D1 ;****************************************** Dim done1 As Byte Dim done2 As Byte Dim done3 As Byte Dim done4 As Byte Dim extra_uur As Byte ' extra uren verlengtijd instellen. Dim extra_uur1 As Byte ' per pomp afzonderlijk, tray's verdampings processen zijn ongelijk! Dim extra_uur2 As Byte ; moeten worden gereset, na het pompen.... Dim extra_uur3 As Byte Dim extra_uur4 As Byte Dim index5 As Byte ; als index tbv. pomp-tijden uitlezen menu-punt 6 Dim index1 As Byte ; tussen resultaat voor extra_uur 1-4 Dim index2 As Byte Dim index3 As Byte Dim index4 As Byte Dim teller1 As Byte ; lus teller voor gemiddelde tijdsduur calculatie tbv. verdampings tijd, bv, Dim teller2 As Byte ; extra_uur1 = index1 + Uren Dim teller3 As Byte ; extra_uur1 = extra_uur1 + extra_uur Dim teller4 As Byte ; en dat 4x Dim spanning_high As Byte ; extra togle functie voor 'spanning' Flowsensor Dim spanning_low As Byte ; idem Dim pompen_pwm As Byte ; Pompen 52% = 132 tot 254 PWM waarde met lus en lus1 als teller/voorwaarde. Dim pompen_pwm1 As Byte ; PWM Duty-Cycle % instellen met rotary. ; Dim x As Byte Dim dagen_week As Byte ; 7 dagen voorbij clear weekdebiet Dim dagen_weken As Byte ; 14 dagen voorbij clear wekendebiet Dim pomp_aan1 As Byte ; Pomp1 Aan, dan Fowteller enabled. 1=aan 0=uit Dim pomp_aan2 As Byte ; idem 3x Dim pomp_aan3 As Byte Dim pomp_aan4 As Byte Dim pompen_aanuit As Byte ; 1 = aan, 0 = uit; Een van de pompen aan? Hiermee voorkom je doortellen Flowsensor! Dim ozon As Byte ; Tijd in uren voor Ozon Generator Dim fan As Byte ; Tijd in uren voor de Ventilatoren Dim huidig As Byte ; Dag/Nacht temperatuur resp. 16 en 20 graden. Zie Sub. ADC. ' *********************************************************************** Clear Cls High LEDGreen ; Low pomp1 ; deze pomp slaat wel eens aan. ; Init BitWizard DIO ; HBusOut %10000100, %00110000,[ %11111111] ' BitWizard I2C DIO. all pin's output 8E, 30, FF ; DelayMS 100 ; HBusOut %10000100, %01011111,[ %11111111] ' BitWizard I2C DIO. 7 pin's PWM 8E, 5F, FF-7F Print At 1,1, " Sprouter V 1.0 " ; Print At 2,1, " Versie 1 " traysbit = ERead 0 ; Byte 1 positie teller = ERead 1 ; Word 2 positie's Weekteller = ERead 3 ; Float 4 positie's Wekenteller = ERead 7 ; Float 4 positie's lus1 = ERead 11 ; Byte 1 positie pompen_pwm1 = ERead 12 ; Byte 1 positie ; GoSub pauze pompen_pwm = pompen_pwm1 ; pompen_pwm = 90 '**************************************************** keuze = 1 ' Voor Rotary-code change = 1 '**************************************************** ;GoSub Minuut1 ;************ ;Repeat ; Blijkbaar is in Minuut1; = 0 fout en moet het <> 0 zijn, ;GoSub pauze ;GoSub pauze ; maar dan krijg je last van de opstarttijd van DS18B20 en verschijnt 85.0 op LCD. ;GoSub Minuut1 ; Dit wordt voorkomen door dit stukje software ;Until Verwarming <> 85 ; Voordeel is nl. dat het inlezen van de temperatuur voortaan sneller gaat, getest!! ;********************* GoTo main '****************************************************************************************************** ENCODER_INTERRUPT_HANDLER: 'Verandering van PORTB.1 gedetecteerd Context Save ' Start interrupt (opslaan van het punt waar interrupt plaatsvond) DelayUS 500 ' contact dender filter If RotaryA = 0 And RotaryB = 0 Then ; Bij 45K22, was 0 bij 877A! ; RoteryA = 0 houdt in; de neergaande flank If waarde < 254 Then waarde = waarde + 1 ; grenswaarde 99 kan tot max 127 verschoven worden bij SByte change = 1 ; NU in Byte!!!! ButtonUp = 0 ; test ButtonLow = 1 ; test End If If RotaryA = 0 And RotaryB = 1 Then ; Bij 45K22, was 1 bij 877A If waarde > 0 Then waarde = waarde - 1 ; NU in Byte!!!! // -99 Bij SByte change = 1 ; NU in Byte!!!! ButtonUp = 1 ; test ButtonLow = 0 ; test End If INT1IF = 0 'Clear the PORTB.1 Interrupt FLAG -> voor 45K22 ; INTF = 0 'voor 16F877A en andere 16F's Context Restore ' Eind interrupt (teruggaan naar het punt waar Interrupt plaatsvond) '**************************************************************** 'Subroutine's ' ******************************************************************** ' DHT11_Begin '**************************************************************** DHT11: Temp=0:Hum = 0:ChkSum=0 ; Werkt ' LATA.1 = 0 ' load LAT '0' TRISA.1 = 0 ' PORTA.1 output PORTA.1 = 1 ' High make high DelayMS 50 ' wait for a while, send Start-sequence PORTA.1 = 0 ; Low DelayMS 18 ' send 18ms low PORTA.1 = 1 ; High DelayUS 30 'send 30us of 40 uSec hi TRISA.1 = 1 ' PORTA.1 input; Vraagt PULLUP, standaard ingebouwd bij de DHT11 DataIn = PulsIn PORTA.1,1 'wait for hi If DataIn < 33 Then Print At 2,4, "!" ' if < 80us loop; Sensor not ready!!!!!!!!!!!!! GoSub pauze ; was 10mSec dobit = 0 GoTo main EndIf For Index = 15 To 0 Step -1 DataIn = PulsIn PORTA.1,High 'recieve pulses from sensor If DataIn > 18 Then SetBit Hum,Index Next Index For Index = 15 To 0 Step -1 DataIn = PulsIn PORTA.1,High 'recieve pulses from sensor If DataIn > 18 Then SetBit Temp,Index Next Index For Index = 7 To 0 Step -1 DataIn = PulsIn PORTA.1,High If DataIn > 18 Then SetBit ChkSum,Index Next Index dobit = 1 Return '**************************************************************** ' DHT11_einde '**************************************************************** ; Bereken de Vochtindex in uren '*********************** bereken_vocht: Tempie = Temp.HighByte ; >> 1 ' Bereken wanneer water irigatie nodig is Humpie = Hum.HighByte ; >> 1 ' 2x H2 / T2 ( H2 en T2 is quadrateren) Tempie = Tempie * Tempie Humpie = Humpie * Humpie Humpie = Humpie * 2 vocht = Humpie / Tempie Return ; ************************************************************** ;********************************************************************************* ;Delay 250msec. pauze: DelayMS 250 Return ;********************************************************************************* ;****************Einde Subroutines************************************************ HoofdMenu: ' Rotary Switch Cls While RotarySw = 0 : Wend GoSub pauze waarde = menu_waarde menuteller = 0 Menu_item = 1 ' als herkenning voor dit eerste blok hoofdmenu While 1 = 1 'Tekst op lcd display zetten menu_waarde = waarde ; Onthouden menu positie terughalen Select waarde Case 0 '1234567890123456 Print At 1,1, "-> Tijd " ; Bij de tijd blijven Print At 2,1, "- Pompen 1-4A/U" ; Case 1 '1234567890123456 Print At 1,1, "-> Pompen 1-4A/U" ; Manueel water geven, bv. de eerste keer of vor reiniging Print At 2,1, "- Set Trays 1-4" ' Case 2 '1234567890123456 Print At 1,1, "-> Set Trays 1-4" ' Selecteer de Tray's die voorzien zijn van zaden Print At 2,1, "- ADC " ; Case 3 '1234567890123456 Print At 1,1, "-> ADC " ; LDR naar PWM LEDs omzetting Print At 2,1, "- Debiet Totals" ; Counts & Liters & Liter verbruik per week of 2 weken TODO Case 4 '1234567890123456 Print At 1,1, "-> Debiet Totals" ; Counts & Liters & Liter verbruik per week of 2 weken TODO Print At 2,1, "- Instellingen " ' UrenExtra, Delay, PWM gebied Case 5 '1234567890123456 Print At 1,1, "-> Instellingen " ' UrenExtra, Delay, PWM gebied Print At 2,1, "- Pompen Info " ' Case 6 '1234567890123456 Print At 1,1, "-> Pompen Info " ' Lees de Pomptijden uit. Print At 2,1, "- Reset Counter" Case 7 '1234567890123456 Print At 1,1, "-> Reset Counter" ; Reset de count's en dus ook de Liters Print At 2,1, "- Vul/Leeg Pomp" ; Test pomp Case 8 Print At 1,1, "-> Vul/Leeg Pomp" ; Test pomp Print At 2,1, "- Reset Timers " ; Case 9 Print At 1,1, "-> Reset Timers " ; Resét de Timers voor pompen aan tijd Print At 2,1, "- Save Settings" ; EWrite Case 10 Print At 1,1, "-> Save Settings" ; Print At 2,1, "- Exit " Case 11 Print At 1,1, "-> Exit " ; Naar main Print At 2,1, "- " EndSelect If waarde > 11 Then ' ipv.3 of 4 waarde = 11 EndIf If RotarySw = 0 Then Menu_item = 0 menuteller = 0 ; Blijf nog 10 seconden in Menu. Select waarde ' ************************************** Case 0 ; Tijd instellen dobit = 1 GoTo main ' ************************************** Case 1 ; Pompen 1-4 Aan/Uit dobit = 1 GoTo main ' ************************************** Case 2 ; Set Trays 1-4 dobit = 1 GoTo main ' ************************************** Case 3 ; ADC, LDR, LED Licht dobit = 1 GoTo main ' ************************************** Case 4 ; Debiet Totals dobit = 1 GoTo main ' ************************************** Case 5 ; Verleng Tijd dobit = 1 GoTo main ' ************************************** Case 6 ; Pomp Info dobit = 1 GoTo main ' ************************************** Case 7 ; Reset Counter(s) dobit = 1 GoTo main ; *********************************************************************** Case 8 ; Pomp1 PWM 52%, nodig omdat Flowmeter output "hoog" kan blijven! dobit = 1 GoTo main ' ************************************** Case 9 ; Reset Timers dobit = 1 GoTo main ' ************************************** Case 10 ; Save Settings dobit = 1 GoTo main ' ************************************** Case 11 ; Exit dobit = 1 GoTo main EndSelect EndIf GoSub pauze Inc menuteller ; test If menuteller = 100 Then ; Na 10 seconden via Display_IR naar main_loop menuteller = 0 menu_waarde = waarde ; Onthoud menu positie dobit = 1 GoTo main EndIf ; Wend ;**************************************************************** ;Einde HoofdMenu '**************************************************************** main: ; Cls telbit_old = telbit ; nodig vertraging = 0 ; idem spanning_high = 0 spanning_low = 0 lopen = 999 ; Beter dan een leeg display, want voordat DHT11 gestart wordt... test = 19 ; minder vaak de klok uitlezen. lussen = 0 While 1 = 1 ;**************************************************************** ;GoSub FlowMeter '*********************************EINDE FlowMeter**************** ;RotarySwitch ;**************************************************************** If RotarySw = 0 Then 'rotary encoder ingedrukt. Sound Speaker, [115,20] For loopCounter = 0 To 20 DelayMS 25 If RotarySw = 1 Then 'rotary encoder losgelaten GoTo HoofdMenu ' Eerste probeersel ' GoTo changeMode1 ' Even in de wacht EndIf Next loopCounter Sound Speaker, [95,50] 'rotary encoder nog steeds (lang) ingedrukt. GoTo main ' Naar "long(er) press" Rotary Switch routine EndIf ' ********************************************************************************** ; Quasi interupt als er pulsen komen van de Flowmeter 1e deel ;**************************************************************** If spanning_low = 1 And spanning_high = 1 Then telbit_old = 1 Inc vertraging ; EndIf If vertraging >= 1 Then GoTo verder EndIf '**************************************************************** Inc lopen If lopen < 1000 Then ' ca. 4 sec interval GoTo verder EndIf If lopen = 1000 Then lopen = 0 EndIf ' *********18B20****************************************************** ; GoSub Minuut1 ; Hier naar toe verplaatst ' ******************************************************************** GoSub DHT11 ' DHT11_Begin ' DHT11_einde '**************************************************************** ; Gosub bereken_vocht ; Bereken de Vochtindex in uren, naar beneden ; ************************************************************** ; GoSub ADC ; werkt niet hier, Nu net na vervolgens: LABEL verder: ; Quasi interupt als er pulsen komen van de Flowmeter 2e deel ; If vertraging > 250 Then ; Voorlopig 50, of > 250 telbit_old = telbit ; vertraging = 0 Inc teller ; Verloren telpuls herstellen, komt door de voorwaarde vooraf (spanning_high, _low) spanning_high = 0 ; Na telronde (bv. 1 Liter) de Flowsensor voorwaarden clearen, spanning_low = 0 ; zie Flowsensor routine. EndIf 'LCD Display en Tijd Uitlezen DS1307 ******************************************* Inc test If test = 20 Then test = 0 ; GoSub Inlezen ; GoSub Omzetten ;1234567890123456 If vertraging >= 1 Then ; komt van interupt 2e deel Print At 1,1, Dec2 Uren, ":", Dec2 Minuten, " " , Dec4 teller Else lussen = 0 pompen_pwm = pompen_pwm1 ; pompen_pwm = 90 Print At 1,1, Dec2 Uren, ":", Dec2 Minuten, ":", Dec2 Seconden, " " ;Print At 2,9, Dec2 Verwarming, ".", Dec1 Decimalen, "C " ; DS18B20 EndIf EndIf ;********************************************************************************* If ChkSum <> (Temp.HighByte + Hum.HighByte) Then ; Zijn er geen goeie DHT11 metingen vericht? Dan; '67890123456 Print At 2,4,"~" ; CRC fout dobit = 0 ; EndIf ; If dobit = 1 Then ; metingen oke GoSub bereken_vocht ; Bereken de Vochtindex in uren Print At 2,1, Dec2 Hum.HighByte,"% ", At 2,5, Dec2 Temp.HighByte,"C ", At 2,15, Dec2 vocht ; Hum. DHT11 en ' Temp. DHT11 ; Print At 2,1, Dec Humpie, " ", Dec Tempie, " ", Dec2 vocht EndIf '********************************************************************************** ' ***** deca Liter readout** ; GoSub DecaLiter ;********************************************************************************* ;Dag- Week- en 2 Wekenteller in liters ;********************************************************************************* If Uren = 00 And Minuten = 01 And Do_dagen = 0 Then Weekteller = Weekteller + deciliter ; FLOAT Do_dagen = 1 Inc dagen_week ; Inc tot 7 en clear weekteller FLOAT ; GoSub bewaar_instellingen EndIf If Uren = 00 And Minuten = 01 And Do_weken = 0 Then Wekenteller = Wekenteller + deciliter ; FLOAT Do_weken = 1 Inc dagen_weken ; Inc tot 14 en clear dan wekenteller FLOAT EndIf If Uren = 00 And Minuten = 02 Then Do_dagen = 0 Do_weken = 0 teller = 5 ; vergeten deciliter = 0 ; wordt dan 0,01 L EndIf ;********************************************************************************* If dagen_week = 7 Then ; Verbruik over 7 dagen bijhouden, handig bij het afvullen. Weekteller = 0 ; FLOAT EndIf If dagen_weken = 14 Then ; Idem over 14 dagen Wekenteller = 0 ; FLOAT EndIf ;*********************** ; Waterniveau te laag ; While niveau = 0 ; -->> Symbol niveau ; If RotarySw = 0 Then 'rotary encoder ingedrukt. ; Sound Speaker, [115,20] ; GoTo HoofdMenu ; EndIf ; '1234567890123456 AANPASSEN ****** ; Print At 2,1, "Water-Level-Warn" ; Low OzonGen ; Low Fans ;HBusOut %10000100, %01010000,[00] ' BitWizard I2C DIO. pin 3 IO 0 50 8E, 50, 00 PWM1 ;HBusOut %10000100, %01010001,[00] ' BitWizard I2C DIO. pin 4 IO 1 51 8E, 51, 00 PWM2 ;HBusOut %10000100, %01010010,[00] ' BitWizard I2C DIO. pin 5 IO 2 52 8E, 52, 7F PWM3 ;HBusOut %10000100, %01010011,[00] ' BitWizard I2C DIO. pin 6 IO 3 53 8E, 53, 7F PWM4 ; Low pomp1 ; HPWM 2, 0, 2000 ; Enz. ' Port RC1=CCP2, Pin 16, 2kHz. ; Low peltier ; High LEDRed ; Low LEDGreen ; DelayMS 1000 ; Wend ;************************* ;If vertraging >= 1 Then ;GoTo vervolgens ;EndIf ;************************* ;If Seconden = 59 Then ; Nieuwe positie, want net onder 'Humpie-Dumpie' werkte het niet, nu wel!!!! ;GoSub ADC ;EndIf ;************************************************************** ;GoSub pomptijd ; Verplaatst naar beneden ;************************* ;GoSub Pompen_aan ; Is Pomptijd bereikt? Start dan de resp. Pompen 1-4 ;GoSub Ozon_Fan ; Ozon en Fan aan/uit voor-tijdens-na pompen ;GoSub Dagelijks ; Vaste tijden voor Ozon en Fan. ;GoSub bodemverwarming ; Tempereatuur hoger of lager dan de deault waarde. '************************* vervolgens: ;GoSub Pompen_uit ;************************* ; Low LEDRed ; GoSub pompenactie ; Vanuit Flowmeter aangeroepen. idem ; GoSub auto_pwm ; Routine die zorgt voor pomp-snelheids verhoging High LEDGreen ; DelayMS 1 ;************************************************************** ;If Seconden = 01 Then ;If Minuten = 00 Or Minuten = 10 Or Minuten = 20 Or Minuten = 30 Or Minuten = 40 Or Minuten = 50 Then ;GoSub pomptijd ; Pomptijden 1-4 berekenen als vochtsensor droog is, vocht1-4 = 1 ;EndIf ;EndIf ;************************* Wend '**************************************************************** End