Forum: Mikrocontroller und Digitale Elektronik [Fischertechnik] Taster schicken Störsignale und gehen in Interruptfunktion(Arduino)


von Myrtol (Gast)


Angehängte Dateien:

Lesenswert?

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

: Verschoben durch Moderator
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

1
  pinMode(input_links,INPUT);
2
  pinMode(input_rechts,INPUT_PULLUP);
3
  pinMode(input_hoch,INPUT_PULLUP);
4
  pinMode(input_runter,INPUT);

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.

: Bearbeitet durch Moderator
von Stefan F. (Gast)


Lesenswert?

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.

von ÄXl (Gast)


Lesenswert?

Welche PINs können bei deinem Board als Interruptquelle verwendet 
werden?
https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
1
Board   Digital Pins Usable For Interrupts
2
3
Uno, Nano, Mini, other 328-based
4
  
5
6
2, 3
7
8
Uno WiFi Rev.2
9
  
10
11
all digital pins
12
13
Mega, Mega2560, MegaADK
14
  
15
16
2, 3, 18, 19, 20, 21
17
18
Micro, Leonardo, other 32u4-based
19
  
20
21
0, 1, 2, 3, 7
22
23
Zero
24
  
25
26
all digital pins, except 4
27
28
MKR Family boards
29
  
30
31
0, 1, 4, 5, 6, 7, 8, 9, A1, A2
32
33
Due
34
  
35
36
all digital pins
37
38
101
39
  
40
41
all digital pins (Only pins 2, 5, 7, 8, 10, 11, 12, 13 work with CHANGE)

von ÄXl (Gast)


Lesenswert?

da hat die Forensoft ja was tolles aus der Tabelle gemacht...
Nun, siehe Link.
Was für einen Arduino verwendest Du?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.