Button EXTI nicht zuverlässig STM32

Gast #6115048
Lesenswert?

Hallo,

ich habe am STM32F429 Board an Pin PB4 einen Schalter angeschlossen der 
über einen Interrupt eine Funktion ausführen soll.

Besagt Funktion befindet sich in
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
funktion();
HAL_GPIO_TogglePin(...);
}

Zum Testen toggle ich eine der USER-LEDs am Board. Jetzt ist es so, dass 
der Interrupt teilweise mehrfach ausgeführt wird oder erst garnicht 
stattfindet. Im NVIC ist der EXTI4 aktiviert, sonst würde sich ja 
garnichts tun. Der Schalter ist auch ordentlich entprellt und der 
Interne Pull-Up des STM32 auch aktiviert, weil der Schalter eine 
fallende Flanke verursacht, die auch zum triggern des Interrups 
konfiguriert ist.

Ist das so wie ich es mache nicht eigentlich in Ordnung?

Direkt am Nachbarpin wird ein PWM-Signal ausgegeben. Könnte das da 
gewissermaßen reinstreuen? Wäre doch eigentlich komisch. Verwende aber 
vielleicht mal zum Ausprobieren einen anderen PIN.

Hat jemand eine Idee woran es liegen könnte?

Danke!
Moderator Persönliche Seite #6115268
Lesenswert?

Larry schrieb:
> Oh.. der Schalter hat denke ich auch einen Pullup... Ich steh gerade auf
> dem Schlauch... brauche ich den internen Pullup überhaupt oder ist das
> eher hinderlich?

Dein interner Pullup treibt mit 3,3V gegen die 5V - nicht schlimm, wenn 
der Schalter tatsächlich nur über einen hochohmigen Widerstand an 5V 
hängt und nicht über einen Draht. Ich würde den Pullup jedoch besser 
abschalten.

Wie wärs mal mit einem Schaltplan? Warum hängt der Taster/Schalter an 5V 
und nicht 3,3V? Wie sieht die Innenbeschaltung Deines Tasters/Schalters 
aus?

PB4 hat übrigens auch eine JTAG-Funktion, nämlich NJTRST.

Deinen Code zu sehen wäre auch nicht von Nachteil...
Moderator (Firma: Titel) Persönliche Seite #6115336
Lesenswert?

Frank M. schrieb:
> Dein interner Pullup treibt mit 3,3V gegen die 5V - nicht schlimm
Mich wundert, dass da überhaupt 5V am Portpin zusammenkommen. Ich hätte 
da wegen irgendwelchen Schutzdioden eher auf 3,5..4V getippt. Könnte 
natürlich auch sein, dass über eine solche Schutzdiode die Vcc des 
gesamten Controllers bei unbetätigter Taste auf unerlaubte 4,7V 
angehoben wird (weil der Taster nämlich eigentlich gar kein Taster ist, 
sondern irgendeine elektronische Schaltung, die locker 20mA ausgeben 
kann...).

Larry schrieb:
> Oh.. der Schalter hat denke ich auch einen Pullup...
Welcher Taster ist das denn, der da einen eingebauten Pullup hat? Dafür 
muss der Taster ja 3 Anschlüsse haben...

> Ich steh gerade auf dem Schlauch...
Schaltpläne mit Bauteilnamen und Batueeilbezeichnungen sind echt total 
gut, um zu kapieren, was man da wie verschaltet hat.

> brauche ich den internen Pullup überhaupt oder ist das
> eher hinderlich?
Du brauchst im Prinzip den externen Pullup nicht.
Moderator (Firma: Titel) Persönliche Seite #6115362
Lesenswert?

Frank M. schrieb:
> Der TO spricht auch immer von einem "Schalter" und nicht von einem "Taster"
Dann kann man sich den Pullup komplett sparen.
Trotzdem ist es keine gute Idee, an einen 3V3 Controller 5V anzulegen... 
;-)

Larry schrieb:
> einen Schalter angeschlossen der über einen Interrupt
Einen mechanischen Taster oder Schalter schließen nur Anfänger und 
Profis an eine Interruptleitung an. Die Einen, weil sie wissen, was sie 
tun. Die Anderen weil sie es nicht wissen.
(Firma: Raich Gerätebau & Entwicklung) #6115419
Lesenswert?

Ich würde mal statt dem Taster ein Rechtecksignal an den Pin legen, und 
in der Interruptroutine einen weiteren Pin toggeln.Diesen dann mit einem 
Oszilloskope beobachten. Dann siehst du, ob das Problem vom Taster oder 
von deiner Software herrührt.

Grüsse
#6115447
Lesenswert?

Larry schrieb:
> Direkt am Nachbarpin wird ein PWM-Signal ausgegeben.

Versuche doch einfach mal den Pin mit einem eigenen Tiefpass (100nF + 
100kOhm) zu entprellen. Die kapazitive Kopplung der Leiterbahnen 
zueinander wird deutlich geringer sein als 100nF.

Vielleicht ist deine Verdrahtung auch sehr weitläufig, so dass du dir 
Magnetfelder von Leuchtstoffröhren einfängst.

Zeig mal deinen Aufbau!

Larry schrieb:
> Genau, er ist hardwareseitig entprellt. Mit was für Kondensatoren weiß
> ich leider nicht.
>
> Die fallende Flanke sieht man im Anhang. 1µs/DIV und 1V/DIV...

Mit einer Hardware-Entprellung würdest du nicht solche Flanken sehen 
können.
Ein Taster prellt immer, es sei denn er ist ein Leitgummi-Taster. Bei 
deinem Oszi-Bild bin ich daher sehr skeptisch.
Gast #6115495
Lesenswert?

PB4 ist 5V tolerant.

Wenn du mit Flanken arbeitest, ist es wichtig, während der 
Initialisierung und in der ISR das entsprechende Bit im Register EXT->PR 
mit 1 zu beschreiben, um dem Status zurückzusetzen. Ansonsten wird die 
nächste Flanke nicht erkannt.

Prüfe mal, ob das in deinem Code bzw. der HAL enthalten ist. Wenn es bei 
der Initialisierung fehlt, funktioniert die ISR manchmal gar nicht.

Wenn der Interrupt bei einem Tastendruck trotz Entprellung mehrfach 
ausgeführt wird, dann hast du vermutlich vergessen, die 
Flankentriggerung im Register EXTI->FTSR einzuschalten, so dass der 
Interrupt auf Pegel triggert.
Gast #6115525
Lesenswert?

Larry schrieb:
> Genau, er ist hardwareseitig entprellt. Mit was für Kondensatoren weiß
> ich leider nicht.
>
> Die fallende Flanke sieht man im Anhang. 1µs/DIV und 1V/DIV...

Ich kenne überhaupt keinen Schalter, der auf Zeitskalen von 10µs prellt.

Wie willst du mit dieser Zeitbasis vom Oszi feststellen können, ob deine 
Entprellung funktioniert?
Gast #6115844
Lesenswert?

erstmal Entschuldigung für die späte Antwort und danke für die 
zahlreichen Kommentare...

Also es handelt sich um irgendeinen China Encoder mit Taster verbaut. 
Die Bezeichnung "Schalter" war inkorrekt das stimmt!

Ich kann morgen nochmal mit einer gröberen Zeitauflösung aufzeichnen und 
schauen obs wirklich nicht prellt. Wie schließe ich einen Taster denn am 
besten an?

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