Hallo,
so vielleicht. Ungetestet und ist bestimmt noch +- 1Sekunde Toleranz im Timing.
Meine Änderungen in Grün. Hoffenlich hab ich alles erwischt.
Gruß
Searcher
Code:$regfile = "m48def.dat" $crystal = 12000000 $framesize = 32 $swstack = 32 $hwstack = 34 Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc Dim Light As Word Dim Bright As Word Dim Dark As Word Ldr Alias Getadc(0) Licht Alias Portb.0 Config Licht = Output Reset Licht Light = 0 Dark = 400 Bright = 600 Dim Sekundenzaehler As Word ocr1a = 11718 'OCR1A Wert für Interrupt nach ca. 1,00002133 Sekunden Config Timer1 = Timer , Prescale = 1024 , Clear_timer = 1 'startet Timer1 im CTC Modus mit OCR1A as Top On compare1a Isr_sekundeninterrupt 'ISR wird jede Sekunde aufgerufen wenn ICP interrupt enabled ist Enable Interrupts 'Interrupts global zulassen Do 'Nacht If Ldr < Dark Then Wait 2 If Ldr < Dark Then 'Light = 1 'wird in ISR gesetzt Enable compare1a 'Sekundenzaehler laufen lassen wenn es dunkel ist End If End If 'Tag If Ldr > Bright Then Wait 2 If Ldr > Bright Then Disable compare1a 'Sekundenzaehler stoppen wenn es hell ist Sekundenzaehler = 0 'initialisieren Light = 0 End If End If If Light = 1 Then Licht = 1 Else Licht = 0 End If Loop Isr_sekundeninterrupt: If Sekundenzaehler < 30 Then Light = 1 Else Light = 0 '30 Sekunden Licht/Sirene an danach aus If Sekundenzaehler = 3600 Then Sekundenzaehler = 0 'Sekundenzaeler nach einer Stunde wieder bei 0 beginnen lassen Incr Sekundenzaehler Return End






Hoffentlich liegt das Ziel auch am Weg
Zitieren

Lesezeichen