[Fischertechnik] Taster schicken Störsignale und gehen in Interruptfunktion(Arduino)

Gast #5628546
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
Angehängte Dateien:
Moderator Persönliche Seite #5628617
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.
Gast #5628640
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.
Gast #5628642
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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren