grindstone

Ruhrpott, 20.12.2025, 12:05 (editiert von grindstone am 20.12.2025 um 12:07)
@ Offroad GTI
|
Arduino Programmierung "speciale" |
» Für den Automatik-Modus ist zwar der Kommentartext vorhanden, aber sonst
» nichts.
Ich dachte, das hättest du schon selber programmiert. Ist aber keine große Sache, das kann ich noch dazuschreiben.
» Irgendwie muss dort ja noch sinnvoll das Auslesen des MCP23017 und
» die Verrechnung mit einem noch zu bestimmenden Faktor integriert werden. Da
» stellt sich mir die Frage, ob man das alles innerhalb von loop() macht,
» oder übergeordnet. Letzteres erachte ich für sinnvoller, da der BCD
» Schalter nicht pausenlos umgestellt wird 
Das Auslesen der Schalter und Umrechnen auf einen Binärwert dauert nur ein paar Mikrosekunden, das lässt sich problemlos in der Schleife erledigen, direkt vor Beginn der Bewegung. Dann ist der Wert auf jeden Fall aktuell. Ansonsten würde der Wert nur einmal beim Einschalten der Apparatur ausgelesen, das wäre wohl nicht sehr zielführend.
» Der Binärausgang für die Quittierung fehlt auch, aber das bekomme ich
» bestimmt selbst dazu programmiert.
Stimmt, du hattest ja geschrieben, dass du so ein Signal haben wolltest. Das kann ich auch noch dazuschreiben. Hast du irgendwelche Wünsche bezüglich der Impulslänge, oder reicht einmal "H" und sofort wieder "L" (oder umgekehrt)?
Eine Sache, die ich ebenfalls noch implementieren werde, ist das Abfangen des Überlaufs des millis() - Wertes alle 49,71 Tage. Der Wert springt dann von 4294967295 auf 0, und wenn das während der Torzeit passiert, wird die Torzeit seeeeehr lang. In dieser Anwendung ist es zwar mehr als unwahrscheinlich, dass das jemals auftritt, aber sauber programmieren ist nie ein Fehler.  -- Es ist unter der Würde eines Technikers, die Gebrauchsanweisung zu lesen! |
Offroad GTI
06.01.2026, 18:43
@ grindstone
|
Arduino Programmierung "speciale" |
» » Für den Automatik-Modus ist zwar der Kommentartext vorhanden, aber
» sonst
» » nichts.
» Ich dachte, das hättest du schon selber programmiert. Ist aber keine
» große Sache, das kann ich noch dazuschreiben.
Hab ich nicht. Aber dafür die SPS schon so umprogrammiert, dass alle Befehle über einen Kanal ausgegeben werden, wie von dir vorgeschlagen.
» Das Auslesen der Schalter und Umrechnen auf einen Binärwert dauert nur ein
» paar Mikrosekunden, das lässt sich problemlos in der Schleife erledigen,
» direkt vor Beginn der Bewegung. Dann ist der Wert auf jeden Fall aktuell.
Klingt vernünftig.
» Hast du irgendwelche Wünsche
» bezüglich der Impulslänge, oder reicht einmal "H" und sofort wieder "L"
» (oder umgekehrt)?
100ms Bedenkzeit würde ich der LOGO schon zugestehen wollen
» Eine Sache, die ich ebenfalls noch implementieren werde, ist das Abfangen
» des Überlaufs des millis() - Wertes alle 49,71 Tage. Der Wert springt dann
» von 4294967295 auf 0, und wenn das während der Torzeit passiert, wird die
» Torzeit seeeeehr lang. In dieser Anwendung ist es zwar mehr als
» unwahrscheinlich, dass das jemals auftritt, aber sauber programmieren ist
» nie ein Fehler. 
Richtig, dass dies vorkommen sollte, ist mehr als unwahrscheinlich. |
grindstone

Ruhrpott, 03.02.2026, 17:43
@ Offroad GTI
|
Arduino Programmierung "speciale" |
Entschuldige, es hat etwas gedauert, aber denke, jetzt hab ich's.
Nach bestem Wissen und Gewissen, aber ohne Garantie und ungetestet und bestimmt auch noch nicht fehlerfrei:
https://www.elektronik-kompendium.de/forum/upload/20260203172805.ino
Den Programmschnippsel zum Auslesen der Kodierschalter habe ich von dir übernommen, bei den Stellenwerten der Schalter habe ich einfach mal geraten, die müsstest du dann gegebenenfalls noch korrigieren.
Wenn du das "Hand-"signal der LOGO umprogrammiert hast, müsstest du den Wert der Konstante "handPin" noch auf 9 ändern.
Ich hoffe, ich habe alles ausführlich genug kommentiert, dass sich die Arbeitsweise des Programms nachvollziehen lässt. -- Es ist unter der Würde eines Technikers, die Gebrauchsanweisung zu lesen! |
Offroad GTI
04.02.2026, 15:21
@ grindstone
|
Arduino Programmierung "speciale" |
» Entschuldige, es hat etwas gedauert, aber denke, jetzt hab ich's.
Sieht gut aus, viiiiiiiiiiielen Dank
Die ganze Steuerung hängt inzwischen schon an der Maschine, die wiederum etwas weiter weg steht.
Da werde ich mir einem "Maschinen-Simulator" bauen, um die Steuerung zu Hause testen zu können. |
grindstone

Ruhrpott, 04.02.2026, 18:24
@ Offroad GTI
|
Arduino Programmierung "speciale" |
» Da werde ich mir einem "Maschinen-Simulator" bauen, um die Steuerung zu
» Hause testen zu können.
Mit dem Gedanken hatte ich auch schon gespielt. Einen Arduino Uno habe ich, und als Simulator ein Arduino Nano - kompatibles µC-Board von joy-it, dazu einen Schrittmotor samt Treiberbaustein, und ein paar von den Kodierschaltern habe ich auch noch irgendwo hier rumfliegen.
Aber in der Theorie sieht das Programm für mich eigentlich ganz gut aus, da wollte ich erst einmal abwarten, wie es sich bei dir in der Praxis schlägt. -- Es ist unter der Würde eines Technikers, die Gebrauchsanweisung zu lesen! |
Offroad GTI
07.02.2026, 10:10
@ grindstone
|
Arduino Programmierung "speciale" |
» Einen Arduino Uno habe ich,
» und als Simulator ein Arduino Nano
So kompliziert meinte ich das nicht.
Einfach ein Breadboard mit LEDs und Tastern
» Aber in der Theorie sieht das Programm für mich eigentlich ganz gut aus,
In der Praxis reagiert es aber gar nicht?!
Weder auf kurze Tastimpulse, noch auf lange.
Als 'Sanity-Check' habe ich in void setup() einfach mal alle Ausgangspins nacheinander für jeweils 1s auf HIGH gesetzt. Das funktioniert, also ist das Borad grundsätzlich in Ordnung und das Programm wurde korrekt aufgespielt.
Aber da verließen sie ihn schon...  |
grindstone

Ruhrpott, 07.02.2026, 13:45 (editiert von grindstone am 07.02.2026 um 13:57)
@ Offroad GTI
|
Arduino Programmierung "speciale" |
» » Einen Arduino Uno habe ich,
» » und als Simulator ein Arduino Nano
» So kompliziert meinte ich das nicht.
» Einfach ein Breadboard mit LEDs und Tastern
Die Torzeit ist eine Viertelsekunde lang, die Steuerimpulse ca. eine Zehntelsekunde. Da wirst du mit Tastern wohl kaum ein brauchbares Signal hinbekommen.
» » Aber in der Theorie sieht das Programm für mich eigentlich ganz gut
» aus,
» In der Praxis reagiert es aber gar nicht?!
» Weder auf kurze Tastimpulse, noch auf lange.
Selbst die "kurzen" Impulse dürften viel zu lang sein.
» Als 'Sanity-Check' habe ich in void setup() einfach mal alle Ausgangspins
» nacheinander für jeweils 1s auf HIGH gesetzt. Das funktioniert, also ist
» das Borad grundsätzlich in Ordnung und das Programm wurde korrekt
» aufgespielt.
Na, das ist doch schon mal was.
»
» Aber da verließen sie ihn schon... 
Keine Sorge, die kommen wieder.
Dann such dir jetzt mal einen freien Pin und schließ dort eine LED an. Setze den Pin in der setup() auf Ausgang und das Ausgangssignal so, dass die LED nicht leuchtet. Dann gehe im Programm zu der Stelle, wo der Kommentar "//fehler" steht. An dieser Stelle (zwischen den geschweiften Klammern) füge einen Befehl ein, der die LED einschaltet.
Wenn du jetzt den Eingangsimpuls simulierst (an Pin 9), sollte die LED angehen.
Das Quittierungssignal (an Pin 11) sollte der Arduino dann ebenfalls ausgeben. Da kannst du die Dauer zur besseren Sichtbarkeit auf eine Sekunde hochsetzen.
Hast du einen zweiten Arduino? Oder ein anderes µC-Board mit 5V-Logik? -- Es ist unter der Würde eines Technikers, die Gebrauchsanweisung zu lesen! |
Offroad GTI
07.02.2026, 16:55
@ grindstone
|
Arduino Programmierung "speciale" |
» Die Torzeit ist eine Viertelsekunde lang, die Steuerimpulse ca. eine
» Zehntelsekunde. Da wirst du mit Tastern wohl kaum ein brauchbares Signal
» hinbekommen.
Mit einem 'scharfen' 200ms Impuls vom Funktionsgenerator ist es das gleiche Bild.
» Dann such dir jetzt mal einen freien Pin und schließ dort eine LED an.
» Setze den Pin in der setup() auf Ausgang und das Ausgangssignal so, dass
» die LED nicht leuchtet. Dann gehe im Programm zu der Stelle, wo der
» Kommentar "//fehler" steht. An dieser Stelle (zwischen den geschweiften
» Klammern) füge einen Befehl ein, der die LED einschaltet.
Hob'sch gemacht.
» Wenn du jetzt den Eingangsimpuls simulierst (an Pin 9), sollte die LED
» angehen.
Leider nicht.
» Hast du einen zweiten Arduino? Oder ein anderes µC-Board mit 5V-Logik?
Von den Nanos habe ich einige, die sich auch gleich verhalten. |
grindstone

Ruhrpott, 07.02.2026, 19:07 (editiert von grindstone am 07.02.2026 um 19:40)
@ Offroad GTI
|
Arduino Programmierung "speciale" |
Gut, dann suchen wir weiter. Schreib den Einschaltbefehl für die LED zwischen die Zeilen
while ((digitalRead(signalPin) == 0) && (levelvorhigh == false)) {}
und
torzeit = millis() + 250;
Den Einschaltbefehl bei "//fehler" kommentiere sicherheitshalber mal aus. Nach dem Einschalten sollte die LED aus sein und erst leuchten, sobald Pin 9 den ersten H-Impuls bekommt.
» » Hast du einen zweiten Arduino? Oder ein anderes µC-Board mit 5V-Logik?
» Von den Nanos habe ich einige, die sich auch gleich verhalten.
Das Board soll den Arduino nicht ersetzen -der funktioniert ja offenbar-, sondern als Signalgenerator dienen.
EDIT: Und kontrolliere vorsichtshalber auch in setup(), ob die Kontroll-LED überhaupt leuchtet, wenn sie es soll.
nochmal EDIT: Falls du das nicht sowieso schon gemacht hast: Als Indikator eignet sich am Besten die Onboard-LED an Pin 13 (alternativ Variable LED_BUILTIN). -- Es ist unter der Würde eines Technikers, die Gebrauchsanweisung zu lesen! |
Offroad GTI
08.02.2026, 19:11
@ grindstone
|
Arduino Programmierung "speciale" |
» Gut, dann suchen wir weiter. Schreib den Einschaltbefehl für die LED
» zwischen die Zeilen
»
» while ((digitalRead(signalPin) == 0) && (levelvorhigh == false)) {}
»
» und
»
» torzeit = millis() + 250;
»
» Den Einschaltbefehl bei "//fehler" kommentiere sicherheitshalber mal aus.
» Nach dem Einschalten sollte die LED aus sein und erst leuchten, sobald Pin
» 9 den ersten H-Impuls bekommt.
Das funktioniert, aber nur ein mal. Weitere Impulse werden nicht verarbeitet.
» EDIT: Und kontrolliere vorsichtshalber auch in setup(), ob die Kontroll-LED
» überhaupt leuchtet, wenn sie es soll.
Macht sie. |
grindstone

Ruhrpott, 08.02.2026, 20:25
@ Offroad GTI
|
Arduino Programmierung "speciale" |
» » Den Einschaltbefehl bei "//fehler" kommentiere sicherheitshalber mal
» aus.
» » Nach dem Einschalten sollte die LED aus sein und erst leuchten, sobald
» Pin
» » 9 den ersten H-Impuls bekommt.
» Das funktioniert, aber nur ein mal. Weitere Impulse werden nicht
» verarbeitet.
Genau so soll es auch sein. Das heißt, die Impulserkennung funktioniert schon mal.
Dann nimm den Befehl zum Einschalten der LED wieder raus und füge hinter dem Abschnitt, der die Drehrichtung setzen soll das Stück mit dem "while..." ein. Sag mir dann, wie oft die LED blinkt.
...
else {
// fehler
}
while (flankenzaehler > 0) {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
flankenzaehler--;}
if (digitalRead(handPin) == 0) { // automatik-modus
// kodierschalter auslesen und entsprechende anzahl von impulsen ausgeben
... -- Es ist unter der Würde eines Technikers, die Gebrauchsanweisung zu lesen! |
Offroad GTI
11.02.2026, 18:43
@ grindstone
|
Arduino Programmierung "speciale" |
» Dann nimm den Befehl zum Einschalten der LED wieder raus und füge hinter
» dem Abschnitt, der die Drehrichtung setzen soll das Stück mit dem
» "while..." ein. Sag mir dann, wie oft die LED blinkt.
Bin erst jetzt zum Testen gekommen
Die LED blinkt gar nicht. |
grindstone

Ruhrpott, 11.02.2026, 23:07 (editiert von grindstone am 12.02.2026 um 00:33)
@ Offroad GTI
|
Arduino Programmierung "speciale" |
» » Dann nimm den Befehl zum Einschalten der LED wieder raus und füge
» hinter
» » dem Abschnitt, der die Drehrichtung setzen soll das Stück mit dem
» » "while..." ein. Sag mir dann, wie oft die LED blinkt.
» Bin erst jetzt zum Testen gekommen
» Die LED blinkt gar nicht.
Nur, damit wir nicht aneinader vorbeireden: Ich meinte, wie oft die LED blinkt, nachdem du einen Eingangsimpuls simuliert hast. Die LED sollte für jede registrierte fallende Flanke des Eingangssignals (an Pin 9) einmal blinken.
EDIT: Das Problem könnte auch daher kommen, dass bei der Simulation der Eingangspin "in der Luft hängt", solange der Taster nicht gedrückt ist. Laut meiner Referenz hier hat der Arduino keine softwaremäßig zuschaltbaren pull-down-Widerstände (nur pull up), so dass du den Pin mit einem 10k-Widerstand auf GND legen solltest (falls du das noch nicht getan hast). -- Es ist unter der Würde eines Technikers, die Gebrauchsanweisung zu lesen! |
Offroad GTI
12.02.2026, 10:08
@ grindstone
|
Arduino Programmierung "speciale" |
» Nur, damit wir nicht aneinader vorbeireden: Ich meinte, wie oft die LED
» blinkt, nachdem du einen Eingangsimpuls simuliert hast.
Versteht sich von selbst
» zuschaltbaren pull-down-Widerstände (nur pull up), so dass du den Pin mit
» einem 10k-Widerstand auf GND legen solltest (falls du das noch nicht getan
» hast).
Ein Pull-Down Widerstand habe ich schon in der Schaltung. |
grindstone

Ruhrpott, 12.02.2026, 12:12
@ Offroad GTI
|
Arduino Programmierung "speciale" |
Na, dann muss ich wohl doch meinen Arduino herauskramen und nachsehen, wo es hakt. -- Es ist unter der Würde eines Technikers, die Gebrauchsanweisung zu lesen! |