schnasemann
Geocacher
Hallo, Ihr besser im Bascom vertrauten, was ist an untenstehendem Programm falsch? Mein RL blinkt schön kurz über den gesamten Tag, entscheidet dann irgendwann, dass es nun Nacht sei (der Wert stimmt also), um danach quasi dauernd hintereinander auszulösen. Ohne dass da was wäre.
$regfile = "ATtiny13.DAT"
$crystal = 128000 'Reale Frequenz des internen 128kHz-Oszillators
$hwstack = 10 ' default use 32 for the hardware stack
$swstack = 10 'default use 10 for the SW stack
$framesize = 10 'default use 40 for the frame
Stop Ac
Config Portb = &B11101111 'Portb.4 auf 'Eingang' schalten
Portb = &B00000000 'keine Pullups zuschalten
Wdtcr = &B11010100 'Watchdog auf 250ms einstellen
Enable Interrupts
Config Adc = Single , Prescaler = Auto , Reference = Internal 'referenzspannung Des Adc Auf "Internal" = 1,1 V
Dim Wert1 As Word
Dim Wert2 As Word
Dim Schwelle As Word
Dim Anzahl As Byte
Dim Impuls As Byte
Const Dunkelwert = 20 ' Wert, ab dem Nacht erkannt wird
Const Hub = 20
Wert1 = 800 'Wert 1 vor der ersten Messung definieren
Do
Wdtcr = &B11010100 'Watchdog auf 250ms einstellen
Reset Watchdog
Powerdown
Start Adc
Config Portb.4 = Output 'LED "entladen"
Portb.4 = 0
Waitus 1500
Config Portb.4 = Input
Portb.4 = 0
cbi adcsra,7 'ADEN = 0
Wdtcr = &B11010000 'Watchdog auf 16ms einstellen
Reset Watchdog
Powerdown
sbi adcsra,7 'ADEN = 1
Wert2 = Getadc(2) 'Spannung der LED messen
Stop Adc
Schwelle = Wert1 + Hub 'Schwelle (10 heller als Signal)festlegen, je kleiner so empfindlicher
If Wert1 < Dunkelwert And Wert2 >= Schwelle Then 'Dunkelschwelle (30) festlegen, je kleiner umso dunkler
Gosub Blitz
End If
If Wert1 >= Dunkelwert And Wert2 >= Dunkelwert Then 'bei Tag oder Dauerlicht Watchdog x n aktivieren
Config Portb.4 = Output
Portb.4 = 1 ' einmal blitzen als Anzeige für Tag
Waitms 2
Portb.4 = 0
Wdtcr = &B11110001 'Watchdog auf 8s einstellen
Reset Watchdog
Powerdown
End If
Wert1 = Wert2 'Wert2 nach Wert1 verschieben
Loop
Blitz: 'LED getaktet blinken lassen
Config Portb.4 = Output
Portb.4 = 0
For Anzahl = 1 To 20
'For Impuls = 1 To 20
Portb.4 = 1
Waitms 10
Portb.4 = 0
Waitms 240
Next Anzahl
Return
End
$regfile = "ATtiny13.DAT"
$crystal = 128000 'Reale Frequenz des internen 128kHz-Oszillators
$hwstack = 10 ' default use 32 for the hardware stack
$swstack = 10 'default use 10 for the SW stack
$framesize = 10 'default use 40 for the frame
Stop Ac
Config Portb = &B11101111 'Portb.4 auf 'Eingang' schalten
Portb = &B00000000 'keine Pullups zuschalten
Wdtcr = &B11010100 'Watchdog auf 250ms einstellen
Enable Interrupts
Config Adc = Single , Prescaler = Auto , Reference = Internal 'referenzspannung Des Adc Auf "Internal" = 1,1 V
Dim Wert1 As Word
Dim Wert2 As Word
Dim Schwelle As Word
Dim Anzahl As Byte
Dim Impuls As Byte
Const Dunkelwert = 20 ' Wert, ab dem Nacht erkannt wird
Const Hub = 20
Wert1 = 800 'Wert 1 vor der ersten Messung definieren
Do
Wdtcr = &B11010100 'Watchdog auf 250ms einstellen
Reset Watchdog
Powerdown
Start Adc
Config Portb.4 = Output 'LED "entladen"
Portb.4 = 0
Waitus 1500
Config Portb.4 = Input
Portb.4 = 0
cbi adcsra,7 'ADEN = 0
Wdtcr = &B11010000 'Watchdog auf 16ms einstellen
Reset Watchdog
Powerdown
sbi adcsra,7 'ADEN = 1
Wert2 = Getadc(2) 'Spannung der LED messen
Stop Adc
Schwelle = Wert1 + Hub 'Schwelle (10 heller als Signal)festlegen, je kleiner so empfindlicher
If Wert1 < Dunkelwert And Wert2 >= Schwelle Then 'Dunkelschwelle (30) festlegen, je kleiner umso dunkler
Gosub Blitz
End If
If Wert1 >= Dunkelwert And Wert2 >= Dunkelwert Then 'bei Tag oder Dauerlicht Watchdog x n aktivieren
Config Portb.4 = Output
Portb.4 = 1 ' einmal blitzen als Anzeige für Tag
Waitms 2
Portb.4 = 0
Wdtcr = &B11110001 'Watchdog auf 8s einstellen
Reset Watchdog
Powerdown
End If
Wert1 = Wert2 'Wert2 nach Wert1 verschieben
Loop
Blitz: 'LED getaktet blinken lassen
Config Portb.4 = Output
Portb.4 = 0
For Anzahl = 1 To 20
'For Impuls = 1 To 20
Portb.4 = 1
Waitms 10
Portb.4 = 0
Waitms 240
Next Anzahl
Return
End