Hallo Naubaddi und Willkommen im Forum
Sorry für die späte Antwort. Ich würde dein Programm ein bisschen ändern.
Ich kenne mich mit Bascom nicht aus, dadurch kann ich dir keinen Code zur Verfügung stellen.
Ich kann es aber als Pseudocode schreiben, den du in Bascom ändern kannst.
Ich weiß nicht ob Bascom Interrupts unterstützt, wenn ja, dann würde ich diese verwenden.
In den Interrupt schreibst du (wenn du pro Spur einen Interrupt hast, "x" ist deine Spur):
Oder wenn du einen Pin Change Interrupt hast und beide Spuren in einem Interrupt verarbeitest:Code:Runden_Spur_x = Runden_Spur_x + 1
Wenn du die Eingänge per Sorftware entprellen willst, dann würde ich eine kurze Zeit wählen (z.B. 1ms) und zum Entprellen zählen. Den Hilfsmerker verknüpfst du mit dem Eingang für die Spur, mit dem du dann den Rundenzähler erhöhst. (Also z.B. Spur1 und nicht Hilfsmerker1 => Rundenzähler + 1)Code:Spur_1_Flanke = Spur_1 und nicht Flankenmerker_Spur_1 Spur_2_Flanke = Spur_2 und nicht Flankenmerker_Spur_2 if Spur_1_Flanke then Runden_Spur_1 = Runden_Spur_1 +1 endif if Spur_2_Flanke then Runden_Spur_2 = Runden_Spur_2 +1 endif Flankenmerker_Spur_1 = Spur_1 Flankenmerker_Spur_2 = Spur_2
Z.B. so
Wenn du Interrupts verwendest, dann musst du den Code, den ich in der Hauptschleife geschrieben habe, in den Interrupt geben.Code:Hauptschleife: ... ... ... ... ... ... if Spur_1_Flanke then Hilfsmerker_Spur_1 = 1 Entprellung_Spur_1 = 0 endif if Hilfsmerker_Spur_1 = 1 then if Entprellung_Spur_1 < 50 then Entprellung_Spur_1 = Entprellung_Spur_1 + 1 else Hilfsmerker_Spur_1 = 0 endif Gleicher Ablauf für Spur 2 Warte 1ms
Solltest du keinen Interrupt verwenden können, dann musst du den gesamten Teil in die Hauptschleife geben.
Schöner Aufbau, sehr gut.
edit: Was mir noch aufgefallen ist, ist die Variable "Blinken..." in Timer 0. Dort schreibst du:
einfacher wäre:Code:if blinken = 1 then blinken = 0 else blinken = 1 endif
MfG HannesCode:blinken = nicht blinken







Zitieren

Lesezeichen