Hallo meine Damen und Herren, :)
ich hoffe Ihr könnt mir weiterhelfen. Sitze schon seit mehreren Stunden
dran und komme nicht weiter.
Undzwar bin ich gerade dabei von Fischertechnik das Hochregal mit einem
Arduino zu steuern.
Ich habe leider ein großes Problem mit den Tastern(meiner Meinung nach).
Wenn diese betätigt werden sollen sie durch Interruptfunktionen bestimme
Aufgaben bewältigen. Dazu gehört eigentlich nur das diese die jeweiligen
Motoren abschalten sollen und dann ein Stück vorfahren, damit der Taster
dann nichtmehr betätigt ist. Jedoch beim Starten des Programms und auch
wenn ich die Motoren einschalte springt es manchmal automatisch(ohne das
die Taster betätigt werden) in die Interruptfunktion.
Ich habe die Taster über ein Active-Low mit dem internen
Pullup-widerstand geschalten. Außerdem habe ich Softwaretechnisch
entprellt und auch Doppelprüfungen eingebaut.
Trotz dieser Maßnahmen springt das Programm in die Interruptfunktion und
stoppt den Motor ohne das dieser z.B zurück gefahren ist(taster wurde
auch nicht betätigt).
Kommt das Problem überhaupt von meinen Tastern?
Mir gehen echt die Ideen aus.
Ich hoffe Ihr könnt mir helfen
Warum schaltest Du den Pullup nur für "rechts" und "hoch", aber nicht
für "links" und "runter" ein? Ohne Pullup floaten solche Inputs, d.h. Du
hast sie nicht auf definiertem Pegel.
Eine Korrektur könnte schon das Problem lösen. Allerdings sollte man
generell nicht Taster über Interrupts behandeln. Wenn sie prellen, löst
der Interrupt mehrfach aus, was u.U. schwierig zu behandeln ist.
Besser ist es, die Taster zu pollen, siehe auch Entprellung.
P.S.
Ich habe den Thread von "Projekte & Code" nach "µC & Elektronik"
geschoben. Threads unter "Projekte & Code" dienen der Vorstellung von
fertigen/lauffähigen Projekten und sind nicht für Fragen gedacht.
Drei Fehler:
1) Die internen Pull-Up Widerstände sind zu hochohmig. Verwende externe
mit weniger als 10k Ohm. Kann ruhig 1k Ohm sein.
2) Störimpulse können immer vorkommen, jede Leitung zugleich eine
Antenne ist. Das trifft ganz besonders auf Leitungen zu, die in der Nähe
von Motoren liegen. Die Software sollte das Signal von den Tastern
entprellen, dabei kann sie es auch gleich entstören (sehr kurze Impulse
ignorieren). Alternativ: Mit R/C Filtern entstören.
3) Der Ablauf einer Steuerung sollte nicht in Interrupt-Handlern
stecken. Das ist Aufgabe des Hauptprogrammes, typischerweise in Form
eines oder mehrerer quasi-parallel laufender Zustandsautomaten.
Interrupthandler sollten höchsten Ereignisse (Tastendruck) erfassen und
in eine Variable oder Warteschlange ablegen. Die Reaktion darauf gehört
nicht in den Interrupthandler.