Offroad GTI
07.07.2025, 20:17 |
Arduino Zähler (mal anders) (Elektronik) |
Hi Leute,
ich möchte einen speziellen Zähler (mit Arduino) programmieren, nur fehlt mir ein guter Ansatz und passende Beispielprogramme habe ich auch nicht gefunden.
Deshalb hier die Hoffnung auf Schwarmwissen
Es soll zwei Tasten geben, welche beide auf einem Pin eine Pulsfolge mit fester Frequenz triggern sollen. Mit dieser Frequenz soll dann, abhängig davon, welche Taste es war, ein Zähler in-/dekrementiert werden. Wird keine Taste mehr gedrückt, soll einmal der Zählerstand auf dem seriellen Port ausgegeben werden. Dass beide Tasten gleichzeitig gedrückt werden könnten, braucht nicht beachtet zu werden.
In Pseudocode:
while (Taster A==high)
Toggle Pin
Zähler++
while (Taster B==high)
Toggle Pin
Zähler--
if (Taster A == low && Taster B == low)
serial.print (Zähler)
Gruß, Mathias |
ModularSynth
07.07.2025, 20:35
@ Offroad GTI
|
Arduino Zähler (mal anders) |
Verstehe ich das richtig? Deine Befehle "Toggle Pin" sollen den Pin mit der von Dir erwähnten "festen Frequenz" toggeln? Wie erzeugst Du diese Frequenz? Mit einem internen Timer?
LG Andreas |
Gast
07.07.2025, 20:48
@ Offroad GTI
|
Arduino Zähler (mal anders) |
» Es soll zwei Tasten geben, welche beide auf einem Pin
Beide Tasten auf getrennten Pins? |
ModularSynth
07.07.2025, 20:59
@ Gast
|
Arduino Zähler (mal anders) |
» » Es soll zwei Tasten geben, welche beide auf einem Pin
» Beide Tasten auf getrennten Pins?
Ich verstehe es so, dass die Impulsfolge auf einem Pin ausgegeben werden soll. Zwei Taster auf einem Pin wäre etwas strange? |
Offroad GTI
07.07.2025, 21:11
@ ModularSynth
|
Arduino Zähler (mal anders) |
» Ich verstehe es so, dass die Impulsfolge auf einem Pin ausgegeben werden
» soll. Zwei Taster auf einem Pin wäre etwas strange?
Genau, getrennte Eingänge für die Taster, ein Pulsausgang.
Die Frequenz braucht nicht supergenau sein. Hauptsache die Impulse werden alle richtig mitgezählt.
Zum toggeln reicht dann z.B. sowas:
digitalWrite(pin, HIGH);
delay(2);
digitalWrite(lpin, LOW);
delay(2); |
ModularSynth
07.07.2025, 21:18
@ Offroad GTI
|
Arduino Zähler (mal anders) |
» Zum toggeln reicht dann z.B. sowas:
» digitalWrite(pin, HIGH);
» delay(2);
» digitalWrite(lpin, LOW);
» delay(2);
Das wären dann 250 Hz. |
ModularSynth
07.07.2025, 21:22
@ ModularSynth
|
Arduino Zähler (mal anders) |
» » Zum toggeln reicht dann z.B. sowas:
» » digitalWrite(pin, HIGH);
» » delay(2);
» » digitalWrite(lpin, LOW);
» » delay(2);
»
» Das wären dann 250 Hz.
Was soll passieren, wenn der Zähler überläuft? |
RR
07.07.2025, 21:26
@ Offroad GTI
|
Arduino Zähler (mal anders) |
» Hi Leute,
» ich möchte einen speziellen Zähler (mit Arduino) programmieren, nur fehlt
» mir ein guter Ansatz und passende Beispielprogramme habe ich auch nicht
» gefunden.
» Deshalb hier die Hoffnung auf Schwarmwissen
»
» Es soll zwei Tasten geben, welche beide auf einem Pin eine Pulsfolge mit
» fester Frequenz triggern sollen. Mit dieser Frequenz soll dann, abhängig
» davon, welche Taste es war, ein Zähler in-/dekrementiert werden. Wird
» keine Taste mehr gedrückt, soll einmal der Zählerstand auf dem seriellen
» Port ausgegeben werden. Dass beide Tasten gleichzeitig gedrückt werden
» könnten, braucht nicht beachtet zu werden.
»
» In Pseudocode:
»
» while (Taster A==high)
» Toggle Pin
» Zähler++
»
» while (Taster B==high)
» Toggle Pin
» Zähler--
»
» if (Taster A == low && Taster B == low)
» serial.print (Zähler)
»
»
» Gruß, Mathias
Hallo Mathias!
Ich würde da so rangehen:
Aus dem ms-Zähler ne passende Fequenz ausrechnen
fallende Flanke detektieren
Taste AUF = Zähler + 1
Taste ab = Zähler - 1
Und dann? Anzeige? Darfs auch negativ werden?
Gruß RR |
ModularSynth
07.07.2025, 21:27
@ ModularSynth
|
Arduino Zähler (mal anders) |
» » » Zum toggeln reicht dann z.B. sowas:
» » » digitalWrite(pin, HIGH);
» » » delay(2);
» » » digitalWrite(lpin, LOW);
» » » delay(2);
» »
» » Das wären dann 250 Hz.
»
» Was soll passieren, wenn der Zähler überläuft?
Und soll der Zähler beim Drücken der Abwärtstaste bei Null stehen bleiben oder einen negativen Zählerstand annehmen? |
ModularSynth
07.07.2025, 21:33 (editiert von ModularSynth am 07.07.2025 um 21:36)
@ RR
|
Arduino Zähler (mal anders) |
Sorry, war ein Missverständnis. |
Offroad GTI
08.07.2025, 08:28
@ ModularSynth
|
Arduino Zähler (mal anders) |
» Das wären dann 250 Hz.
Ja. Kommt wie gesagt nicht so sehr darauf an, und wird eventuell noch angepasst.
» Was soll passieren, wenn der Zähler überläuft?
Darf nicht vorkommen. 16 Bit sollten für die Anwendung schon reichen. Ansonsten hat ein µC ja auch mit einer 32Bit Variable kein Problem.
» Und soll der Zähler beim Drücken der Abwärtstaste bei Null stehen
» bleiben oder einen negativen Zählerstand annehmen?
Werte kleiner Null gibt es in der praktischen Anwendung nicht, der Zähler braucht also nur positiv zählen. |
Offroad GTI
08.07.2025, 08:34
@ RR
|
Arduino Zähler (mal anders) |
» Aus dem ms-Zähler ne passende Fequenz ausrechnen
» fallende Flanke detektieren
» Taste AUF = Zähler + 1
» Taste ab = Zähler - 1
Da kann ich dir leider nicht ganz folgen...
Eine fallende Flanke von den Tastern gibt es ja nicht, da sie gedrückt bleiben sollen. |
bigdie
08.07.2025, 08:51 (editiert von bigdie am 08.07.2025 um 08:53)
@ Offroad GTI
|
Arduino Zähler (mal anders) |
» » Aus dem ms-Zähler ne passende Fequenz ausrechnen
» » fallende Flanke detektieren
» » Taste AUF = Zähler + 1
» » Taste ab = Zähler - 1
» Da kann ich dir leider nicht ganz folgen...
» Eine fallende Flanke von den Tastern gibt es ja nicht, da sie gedrückt
» bleiben sollen.
Wenn ich das richtig verstanden habe, soll ein Ausgang die Frequenz liefern, die du über den Taster auf den Eingang schaltest
Ist aber ehrlich gesagt etwas umständlich.
Normalerweise macht man so etwas doch einfach mit einer programmschleife.
Ist Eingang x= H, dann Variable X = Variable x +1 und bei Eingang y Variable x = Variable x -1
Wie das dann syntax mäßig beim Arduino aussieht, weis ich nicht
So lange die Taste betätigt ist, wird die Variable bei jedem Progamm Durchgang um 1 erhöht.
Ist der Rechner zu schnell, lässt man den Durchlauf eine kurze Pause machen |
bigdie
08.07.2025, 09:26 (editiert von bigdie am 08.07.2025 um 09:29)
@ bigdie
|
Arduino Zähler (mal anders) |
wie geschrieben, hab vom programmieren keine Ahnung, aber beim Picaxe würde ich das so machen

klicke ich auf c.3, dann zählt der Zähler bis 100 und dann nicht weiter und bei C.4 zählt er wieder zurück bis 0
Betätigt man beide bleibt er praktisch gleich immer 1 hoch, 1 runter |
ModularSynth
08.07.2025, 10:08
@ Offroad GTI
|
Arduino Zähler (mal anders) |
Guten Morgen, Mathias,
es wäre hilfreich zu wissen, was Du letztlich mit Deinem Programm vorhast bzw. wie das Ganze eingesetzt werden soll.
Insbesondere wenn es sich nur um den Einstieg in ein komplexeres Projekt mit diversen Erweiterungen handeln sollte, musst Du von Anfang an "zukunftsorientiert" programmieren. Das heißt vor allem, dass Du Schleifen vermeidest, in denen das Programm für eine gewisse Zeit hängt, weil der Controller in dieser Zeit dann definitiv nichts anderes machen kann. Das erfordert einen gewissen Programmierstil, bei dem Du am Ende von loop lediglich ein delay(1) gewissermaßen als Zeitraster vorgibst. Man kann auch mit einem Timer-Interrupt arbeiten, aber das mache ich nur im Notfall.
Eine gute Einstiegsübung ist, zwei einfache "Blinker" zu programmieren, die unabhängig voneinander mit ihrer eigenen Frequenz bzw. Periodendauer blinken. Wenn man diesen Bogen raus hat, dann kann man den Controller wirklich optimal nutzen. Dabei ergibt sich völlig zwanglos auch die Möglichkeit, Taster zu entprellen und zwischen positiven und negativen Flanken zu unterscheiden.
Gruß Andreas |
bigdie
08.07.2025, 10:33
@ ModularSynth
|
Arduino Zähler (mal anders) |
» Guten Morgen, Mathias,
»
» es wäre hilfreich zu wissen, was Du letztlich mit Deinem Programm vorhast
» bzw. wie das Ganze eingesetzt werden soll.
»
» Insbesondere wenn es sich nur um den Einstieg in ein komplexeres Projekt
» mit diversen Erweiterungen handeln sollte, musst Du von Anfang an
» "zukunftsorientiert" programmieren. Das heißt vor allem, dass Du Schleifen
» vermeidest, in denen das Programm für eine gewisse Zeit hängt, weil der
» Controller in dieser Zeit dann definitiv nichts anderes machen kann. Das
» erfordert einen gewissen Programmierstil, bei dem Du am Ende von loop
» lediglich ein delay(1) gewissermaßen als Zeitraster vorgibst. Man kann
» auch mit einem Timer-Interrupt arbeiten, aber das mache ich nur im
» Notfall.
»
Deswegen finde ich den Picaxe so cool, selbst der Kleinste erlaubt 4 parallele Programmschleifen die größeren 8. Man kann also den Teil in eine separate Programmschleife packen und dann stört auch die Pause nicht. Aber wie geschrieben, habe auch keine wirkliche Ahnung. Ist schwierig, wenn man erst mit knapp 60 mit dem Sch.. anfängt. Rein theoretisch kann man aber auch 2 Zähler hintereinander hängen und den Hauptzähler erst dann eins erhöhen, wenn der "vorzähler z.b. den wert 10 hat und sich dann zurück setzt, dann kann man die Pause sicher auch vermeiden |