So also ich habe das ganze jetzt mal mit dem Debounce befehl gemacht bin mir aber immernoch nicht sicher ob das so hinhaut. Ausprobieren kann ichs momentan nicht weil ich meinen MC geschrottet habe... (Programmer war im eimer). Kann mir eventuell noch mal jemand auf die Sprünge helfen ob das so geht und falls nicht was ich für fehler gemacht habe? Ich bin mir nicht sicher ob ich nicht in der SUB "Eingangerkannt" bereits wieder prüfen muss ob der Eingang wieder auf high steht.
Hier mein Code:
Code:
$regfile = "2313def.dat" 'ATtiny2313 Definitionen laden
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000 '8MHZ Systemtakt einstellen
$baud = 9600
Config Portb.0 = Output 'PortB.0 ist mein Ausgang an dem die LED hängt
Config Pind.5 = Input 'PIND.5 ist mein Signaleingang
Portd.5 = 1 'Internen Pullup Widerstand aktivieren
Config Timer1 = Timer , Prescale = 256 'Timer einstellen
Enable Timer1 'Timer starten
On Timer1 Isr_von_timer1 'Sprungmarke bei Overflow einstellen
Enable Interrupts 'Interrupts aktivieren
Timer1 = 34285 'Timer auf 34285 einstellen damit eine Sekunde realisiert ist
Dim Signale As Integer 'Meine Zählervariable in der die Signale pro Sekunde gezählt werden
Signale = 0 ' Signale erst mal auf 0 setzen
Do
Debounce Pind.5 , 0 , Eingangerkannt 'Überprüfen ob PIND.5 auf low gezogen wurde
Debounce Pind.5 , 1 , Leer 'Überprüfen ob PIND.5 wieder auf high steht um doppeltzählen zu vermeiden
Loop
End
Eingangerkannt:
Incr Signale 'Die Sinale Variable wird um 1 erhöht
Return
Leer:
'Hier passiert nichts. Nur zum Sicherstellen das nicht doppelt gezählt wird
Return
Isr_von_timer1:
If Signale > 3 Then 'Überprüfen ob mehr als 3 Signale in der Sekunde angekommen sind
Portb.0 = 1 'Falls ja wird PORTB.0 auf High gesetzt (LED geht an)
Else
Portb.0 = 0 'Falls nicht wird PORTB.0 auf Low gesetzt (LED geht aus bzw. bleibt aus)
End If
Wait 1 'Eine Sekunde Pause damit man das Leuchten der LED sehen kann
Signale = 0 'Zählervariable wieder auf 0 setzen um eine neue Messung zu veranlassen
Timer1 = 34285 'Timer wieder auf 34285 vorstellen um wieder eine Sekunde zu messen
Return
Lesezeichen