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):
Code:
Runden_Spur_x = Runden_Spur_x + 1
Oder wenn du einen Pin Change Interrupt hast und beide Spuren in einem Interrupt verarbeitest:
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
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)
Z.B. so
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
Wenn du Interrupts verwendest, dann musst du den Code, den ich in der Hauptschleife geschrieben habe, in den Interrupt geben.
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:
Code:
if blinken = 1 then
blinken = 0
else
blinken = 1
endif
einfacher wäre:
Code:
blinken = nicht blinken
MfG Hannes
Lesezeichen