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
Lesezeichen