Forum: Mikrocontroller und Digitale Elektronik µC active-low Taster Signalprobleme wegen Kabellänge?!


von Daniel D. (__daniel__)


Lesenswert?

Liebes Forum!


Ich habe ein sehr dringendes Anliegen:
Ich habe eine Schaltung erstellt, gelayoutet, ätzen lassen, bestückt, 
Elektronikbox gebaut, Ausgänge mit D-Sub-Steckern nach außen geführt, 
Netzanschluss (12V) + UART-TTL-Wandler. µC: ATmega32

Funktioniert alles einwandfrei bis auf Eines!! : / In meinen Augen ganz 
banal aber scheint es doch nicht zu sein.
Ich habe auf auf meinen µC-Eingängen Taster und Hallsensoren liegen 
(alles active-low). Wenn ich die Taster direkt, mit kurzer Leitung, an 
die Elektronik anschließe, funktioniert alles perfekt. Die internen 
Pullups aktiviert, der Taster schaltet die Eingänge gegen Masse. Jetzt 
möchte ich aber ein Kabel zur Verlängerung dazwischen haben. zwischen 3 
und 5 Meter lang. Und plötzlich funktioniert der Tastendruck nur noch 
scheinbar völlig willkürlich : /. Mal wird der Druck erkannt, mal nicht. 
Ich hab noch keinerlei Regelmäßigkeit feststellen können. An was kann 
sowas denn liegen? Mal den Netzstecker gezogen, alles ausgeschaltet, und 
irgendwie kann es dann, wenn man Glück hat wieder funktionieren.

Im Conrad habe ich jemanden getroffen, der sagte mir, man kann mit dem 
µC direkt keine so langen Leitungen treiben...wieso? Irgendwas von wegen 
Schmitt-Trigger meinte er noch.
Und wieso funktioniert es denn zum Teufel mit den Hallsensoren so 
perfekt dass es den Anschein macht die Kabel könnten 100m lang sein, 
wieso?? Nur die komischen Taster machen Probleme - obwohl sie scheinbar 
so banal sind.

Ich hab jetzt schon vieles versucht. Kürzeres Kabel (ca. 2 Meter - 
weniger geht eigentlich nicht), den Schalter (bzw. Taster) mit eienm 
Koaxialkabel angeschlossen, wobei der Schirm auf Masse gelegt wurde, 
einen Kondensator von 47nF an die Schalterpins angeschlossen...trotzdem 
ist noch diese Willkürlichkeit da. Im Übrigen gehen auf den D-Sub auf 
dem die beiden Pins für den Schalter herausgeführt sind auch noch zwei 
Hallsensoren (+,-, signal), also 8 von 9 Pins belegt. Das Ganze gibt es 
zwei Mal, also 2 D-Sub à 2 Hallsensoren und einem Schalter.

An meiner Schaltung kann ich jetzt leider nichts mehr ändern, muss das 
Problem aber UNBEDINGT lösen. Kann mir irgendwer vielleicht eine 
Erklärung geben an was das liegen kann (oder am besten definitiv liegt), 
wie ich es jetzt kurzfristig lösen kann, und wie ich sowas für die 
Zukunft vermeiden kann?

Vielen lieben Dank im Voraus für hilfreiche Antworten und viele Grüße,

Daniel

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Wie fragst du die Taster ab? Stichwort Entprellung.
                                       ^^^^^^^^^^^
                                        anklicken

von Daniel D. (__daniel__)


Lesenswert?

Der Taster ist entprellt mit der easy-Routine von Peter Dannegger! Aber 
das tut doch nichts zur Sache, oder. Einmal funktioniert es...einmal 
nicht...wieso?

von Karl H. (kbuchegg)


Lesenswert?

Hast du schon probiert einen etwas kleineren Pullup-Widerstand zu 
benutzen.
Ich schlage mal 4k7 vor. Eventuell noch kleiner.



> An meiner Schaltung kann ich jetzt leider nichts mehr ändern
:-)
Hast du eine Ahnung, was man mit einem scharfen Messer und einer Rolle 
Fädeldraht an einer fertigen Platine noch alles ändern kann :-)

von Schlumpf (Gast)


Lesenswert?

Ich tippe auch auf eine Verbesserung durch kleinere Pullup-Widerstände.

Das Problem ist, dass die Pullups im uC recht hochohmig sind. Und lange 
Leitungen wirken dann wie Antennen, mit denen du dir alle möglichen 
Störungen einfängst.
Ist der Pullup zu hochohmig, dann können diese Störungen leichter zu 
Pegeldifferenzen am Pin führen. Allerdings würde dieser Effekt nur bei 
offenem Taster auftreten. Bei geschlossenem sollte dieser Effekt weg 
sein.
Allerdings hast du dann immer noch eine "Ringantenne" an deinem uC 
hängen, welche dir Störungen einfängt.
Daher würde ich neben dem kleineren Pullup noch ein C am Pin spendieren.

von Trollix (Gast)


Lesenswert?

Schlumpf schrieb:
> Allerdings hast du dann immer noch eine "Ringantenne" an deinem uC
> hängen, welche dir Störungen einfängt.

Daniel D. schrieb:
> den Schalter (bzw. Taster) mit eienm Koaxialkabel angeschlossen

Der klassische, einseitig offene Ring halt ...

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

µC-Pins führt man ohne Schutzbeschaltung gar nicht nach draußen, schon 
gar nicht an Taster. Die langen Kabel müssen niederohmig sein, damit das 
überhaupt zuverlässig funktioniert. Am besten baust Du eine 0(4)..20mA 
Stromschleife, so dass kein Draht des Kabels direkt an Masse oder VCC 
der Schaltung liegt. Die Spannung über dem Shunt-Widerstand kannst Du 
dann mit dem Controller über einen Serienwiderstand 100k erfassen. 
Entprellen musst Du aber trotzdem.

von Daniel D. (__daniel__)


Lesenswert?

Hallo an alle!

Erstmal vielen lieben Dank für eure Antworten! Jetzt weiß ich auf jeden 
Fall dass man beim herausführen von Eingängen auf jeden Fall aufpassen 
muss. Schutzbeschaltungen ect. Was ich noch nicht ganz verstehe (weil 
ich mich noch nicht wirklich damit beschäftigt habe) ist die 
Beinflussung durch Störungen bzw. Kapazität von Leitungen 
usw...vielleicht kann mir das jemand anschaulich erklären oder einen 
guten Link posten? Auch verstehe ich das mit dem Zitat: "Die langen 
Kabel müssen niederohmig sein" nicht. Was bedeutet das? Wann ist ein 
langes Kabel niederohmig? Wie würde das genau mit dieser 4..20mA 
Stromschleife genau funktionieren?
Das mit dem niederohmig hat mir der Typ im Conrad auch schon gesagt. Was 
könnte er denn mit dem Schmitt-Trigger gemeint haben?

Jetzt zu meinem Problem, das ich mittlerweile glücklicherweise lösen 
konnte. Vorab: Es war mein eigener Fehler!

Meine Schaltung sieht so aus: (Alle Pins mit aktivierten Pullups)

                   _PINA1
                  |
Hallsensor1-------|----------_
                            / \ Diode 1
                   _PINA2    |
                  |  Diode 2 |
Hallsensor2-------'----<|----|----- INT0 (PIND2)
                            \_/ Diode3
                   _PINA3    |
                  |          |
Taster1-----------'----------'

Für die Hallsensoren (zueinander versetzt, einer für 
Geschwindigkeitsermittlung, der andere zur Richtungserkennung) 
funktioniert das einwandfrei. Die ISR löst bei negativer Flanke aus. 
Wenn jetzt allerdings zufällig das Rad mit dem Magneten vor einem der 
Sensoren steht und man den Knopf drücken möchte passiert nichts. Wieso? 
Weil der Sensor den INT0 Pin schon auf Ground zieht, die negative Flanke 
also schon ausgelöst wurde. Der Tastendruck hat keine Auswirkung mehr. 
Die Schaltung funktioniert also nur bei Signalen die definitiv nicht 
gleichzeitig kommen können.

Jetzt habe ich für den Taster (der sowieso nur ganz selten gedrückt 
wird) die Diode entfernt und ihn nur auf den Eingang PINA2 gelegt, 
natürlich entprellt. Und siehe da, es funktioniert alles. Übrigens mit 
Kabellängen >5 Meter. Heißt, die von euch beschriebenen Problematiken 
müssen nicht zwangsläufig auftreten, hm?
Blöderweise wurde dieser Fehler von einem einem kaputten Taster 
überlagert, der nur in Ausnahmen geschaltet hat. War schwierig für mich 
den Fehler bei so einer Überlagerung auszumachen.

Peter Dannegger schrieb mir mal bei einer anderen Frage:

"Statt irgendwelcher Trickschaltungen einfach wechseln:
ATmega32 -> ATmega324
Und Du hast Interrupts ohne Ende."

Das hätte ich wohl mal machen sollen :) Dann hätte ich mir über 10h 
rumprobieren sparen können und hätte allgemein viel weniger Stress 
gehabt. Beim nächsten Mal! Zumindest habe ich jetzt wieder was 
dazugelernt.

Also nochmal vielen Dank und vielleicht könnt ihr mir ja noch den ein 
oder anderen Tip geben bzw. die Fragen beantworten die ich oben im 
Beitrag gestellt habe.

Daniel

von spontan (Gast)


Lesenswert?

Immer der gleiche Mist: Der sinnlose Versuch Taster mit 
Interruptroutinen einzulesen, und dann noch behaupten sie wären 
entprellt.

Mann!

von amateur (Gast)


Lesenswert?

>Peter Dannegger schrieb ...

und wahrscheinlich auch: "Taster und Unterbrechungen mögen sich nicht".

von Daniel D. (__daniel__)


Lesenswert?

Entspann dich mal :) So wie ich das gemacht habe hat es wunderbar 
funktioniert! Das hat nichts mit Entprellproblemen zu tun. Sobald der 
Taster ausgelöst wurde, habe ich in der ISR ein Flag gesetzt, das 
manuell (per Befehl über die UART) zurückgesetzt werden musste. Heißt: 
Beim ersten Zuckeln nach dem der Taster geschlossen wurde, wurde das 
Flag gesetzt und das hat mir absolut gereicht. Problem war nur die 
besagte Schaltung...

Ohne die ISR und korrigierter Schaltung lese ich den Taster jetzt über 
die Routine aus "Entprellen für Anfänger" im Pollingbetrieb ein und 
setze dort eben das Flag...

von Daniel D. (__daniel__)


Lesenswert?

amateur schrieb:
> "Taster und Unterbrechungen mögen sich nicht".

Was meinst du damit?

von Falk B. (falk)


Lesenswert?

@  Daniel D. (_daniel_)

>muss. Schutzbeschaltungen ect. Was ich noch nicht ganz verstehe (weil
>ich mich noch nicht wirklich damit beschäftigt habe) ist die
>Beinflussung durch Störungen bzw. Kapazität von Leitungen
>usw...vielleicht kann mir das jemand anschaulich erklären oder einen
>guten Link posten? Auch verstehe ich das mit dem Zitat: "Die langen
>Kabel müssen niederohmig sein" nicht. Was bedeutet das?

Sie sollten einen geringen ohmschen Widerstand haben, wobei das alles 
relativ ist. Du musst keine 1,5mm^2 Leitungen ziehen, 0,14mm^2 reicht 
locker, das sind ~250mOhm/m (Hin und Rückleitung), macht selbst bei 100m 
Kabel gerade mal 25 Ohm.

> Wann ist ein
>langes Kabel niederohmig? Wie würde das genau mit dieser 4..20mA
>Stromschleife genau funktionieren?

Man muss es nicht immer übertreiben. Ein vernünftiger Pull-Up Widerstand 
im Bereich 1-5k reicht, dahinter ein RC-Filter mit meinetwegen 
100K/100nF und ab in den AVR.

>Das mit dem niederohmig hat mir der Typ im Conrad auch schon gesagt. Was
>könnte er denn mit dem Schmitt-Trigger gemeint haben?

Der ist im AVR schon drin, siehe Schmitt-Trigger. Dort siehst du 
auch schon die komplette Schaltung, die du brauchst. Ob nur 10K oder 
100K ist Geschmackssache.

(Note: Ich bewundere manchmal die Leute bei Conrad, dass sie immer 
wieder zum 1.000.000 mal den LED Vorwiderstand erklären können)

>Meine Schaltung sieht so aus: (Alle Pins mit aktivierten Pullups)

Die sind zu schwach! Nimm externe! Ausserdem müssen die VOR dem 
RC-Tiefpass sitzen.

D2 ist überflüssig, D3 verpolt in deiner Darstellung.

>funktioniert das einwandfrei. Die ISR löst bei negativer Flanke aus.

Das ist keine saubere Auswertung!

>Jetzt habe ich für den Taster (der sowieso nur ganz selten gedrückt
>wird) die Diode entfernt und ihn nur auf den Eingang PINA2 gelegt,

RC-Filter fehlt!

>Blöderweise wurde dieser Fehler von einem einem kaputten Taster
>überlagert, der nur in Ausnahmen geschaltet hat. War schwierig für mich
>den Fehler bei so einer Überlagerung auszumachen.

Pech gehabt.

>"Statt irgendwelcher Trickschaltungen einfach wechseln:
>ATmega32 -> ATmega324
>Und Du hast Interrupts ohne Ende."

Mit vielen Problemen. Taster werden per Software im Timer entprellt, 
NICHT per Pin Change oder externem Interrupt, siehe Entprellung.

von Dietrich L. (dietrichl)


Lesenswert?

Daniel D. schrieb:
> Jetzt habe ich für den Taster (der sowieso nur ganz selten gedrückt
> wird) die Diode entfernt und ihn nur auf den Eingang PINA2 gelegt,
> natürlich entprellt. Und siehe da, es funktioniert alles.

Ja, die Dioden verschlechtern auch den Low-Pegel erheblich und Du 
brauchst weniger Störspannung, um den INT0-Interrupt auszulösen.

> Übrigens mit
> Kabellängen >5 Meter. Heißt, die von euch beschriebenen Problematiken
> müssen nicht zwangsläufig auftreten, hm?

Das ist kein Fall für "es geht" oder "es geht nicht". Hier musst Du 
analog denken. Ja hochohmiger die Schaltung, je länger die Leitung und 
je mehr Störstrahlung Du in der Umgebung hast, um so öfter hast Du eine 
Fehlfunktion.
Beispiel:
Wenn ein Eimer randvoll mit Wasser ist, reichen kleine Erschütterungen, 
dass Wasser überläuft. Ist er nur halb voll, verträgt er mehr 
"Störungen" von außen.

Gruß Dietrich

von Daniel D. (__daniel__)


Lesenswert?

Hallo Falk!

Danke für deine ausführlichen Antworten.

Falk Brunner schrieb:
> D2 ist überflüssig, D3 verpolt in deiner Darstellung.

Meiner Meinung nach nicht, verpolt. Hallsensor1, 2 und Taster können in 
der Schaltung den INT0-Pin auf Ground ziehen sowie den zusätzlichen 
eigenen Pin (z.B. für Hallsensor1 PinA1)  ohne sich dabei auf die 
anderen Pins auszuwirken (im Beispiel PinA2 oder A3). Im Fall, dass die 
Signale nie Zeitgleich kommen geht das wohl. Aber wie ich beschrieben 
habe war bei mir das Problem, dass zufällig schon ein Sensor den Int0 
auf GND gezogen hat wenn man den Taster drücken wollte..

Den RC-Filter lasse ich jetzt mal weg (da ich nicht mehr wirklich was 
ändern kann) insofern es zuverlässig funktioniert...und das tut es jetzt 
scheinbar. Bin gespannt ob es im Dauerbetrieb auch funktioniert..

Beim nächsten mal werde ich das definitiv bedenken!

Daniel

von Der Rächer der Transistormorde (Gast)


Lesenswert?

Daniel D. schrieb:
> Den RC-Filter lasse ich jetzt mal weg (da ich nicht mehr wirklich was
> ändern kann) insofern es zuverlässig funktioniert...und das tut es jetzt
> scheinbar.

Ein offenes ungeschirmtes Kabel Richtung Elektronik nennt sich Antenne.
Da kannst du dir jede Störung einfangen die sich so rumtreibt.

Wenn schon Taster an langen Kabeln dann als Öffner. Das verrringert jede 
Störeinstrahlung wenn keiner auf die Taste draufdrückt (was ja der 
häufigere Fall ist). Die gesamte Kabelstrecke liegt ja so lange auf 
einem Potential (GND).

Dann noch verdrillte und geschirmt Leitung, das sollte eigentlich 
reichen.

von Falk B. (falk)


Lesenswert?

@  Daniel D. (_daniel_)

>Den RC-Filter lasse ich jetzt mal weg

Keine gute IDee.

> (da ich nicht mehr wirklich was
>ändern kann)

Man kann immer.

>insofern es zuverlässig funktioniert...und das tut es jetzt
>scheinbar. Bin gespannt ob es im Dauerbetrieb auch funktioniert..

"Die schnellste und preiswerteste Art etwas zu machen ist, es gleich 
richtig zu machen."

von spontan (Gast)


Lesenswert?

>Entspann dich mal :) So wie ich das gemacht habe hat es wunderbar
>funktioniert!

Ich bin entspannt, aber sowas von. Aber trotzdem muß ich feststellen, 
daß es eben nicht so funktioniert, wie Du es "gemacht" hast.


Wired-Or ist ja ganz nett, nur bei Signalen die statisch low sein 
können, gehen Dir halt alle andere Signale verloren.

Hättest Du Deinen Aufbau früher beschrieben, so wär das gleich 
aufgeflogen.

Hast Du dies Wired-Or immer noch für die Hallgeber drin? Dann hätten die 
das gleiche Problem mit verlorenen Signalen.

von amateur (Gast)


Lesenswert?

@Daniel

Sorry muss gelegentlich auch mal was tun.

1)
Es klingt vielleicht komisch, aber das Tasten prellen ist normal.

2)
Jeder Abpraller eine Unterbrechung.

3)
Eine Unterbrechung sollte nur dann genutzt werden wenn sie auch nötig 
ist.
Vor allem, da Sie prinzipbedingt, den (zeitlichen) Ablauf eines 
Programms durcheinanderbringt.

4)
Ein extern oder auch per Software entprellter Taster kann somit auch in 
der "üblichen" Hauptschleife abgefragt werden.
Ist dein Rechner nicht total überlastet, ist es praktisch unmöglich, 
"unbemerkt" eine Taste zu betätigen.

von Daniel D. (__daniel__)


Angehängte Dateien:

Lesenswert?

Hello!

Der Rächer der Transistormorde schrieb:
> Dann noch verdrillte und geschirmt Leitung, das sollte eigentlich
> reichen.

Ich hab ein Koaxialkabel (zumindest für den Taster verwendet) dessen 
Schirm auf GND liegt.

Falk Brunner schrieb:
> Man kann immer.

Hab leider die Elektronik nicht mehr bei mir und muss mich deswegen 
damit zufrieden geben, dass es jetzt offensichtlich funktioniert.

Falk Brunner schrieb:
> "Die schnellste und preiswerteste Art etwas zu machen ist, es gleich
> richtig zu machen."

Danke ;)! Mit dem entsprechenden Vorwissen funktioniert das natürlich 
immer.

spontan schrieb:
> Hättest Du Deinen Aufbau früher beschrieben, so wär das gleich
> aufgeflogen.

Früher hatte ich leider keine Ahnung welche Probleme es geben könnte.

spontan schrieb:
> Hast Du dies Wired-Or immer noch für die Hallgeber drin? Dann hätten die
> das gleiche Problem mit verlorenen Signalen.

Das "Wired-Or" habe ich jetzt (nur) noch für die Hallgeber drin, ja. 
Zwei Hallgeber, an einem Rad sind auf einem äußeren und einem inneren 
Kreis jeweils 4 Magnete, die äußeren sind zur inneren 10° versetzt 
(daher niemals zwei Signale gleichzeitig). Angetrieben wird direkt, ohne 
Übersetzung mit den Beinen. Und das eben zwei mal. Wobei die anderen 
beiden Hallgeber natürlich nicht auf Int0 sondern Int1 geführt werden. 
Übrigens ist das dann eine Art Rennspiel für Kinder.

amateur schrieb:
> 3)
> Eine Unterbrechung sollte nur dann genutzt werden wenn sie auch nötig
> ist.
> Vor allem, da Sie prinzipbedingt, den (zeitlichen) Ablauf eines
> Programms durcheinanderbringt.

Das habe ich mir auch schon überlegt. Hätte gerne mal nen Zähler 
eingebaut, der anzeigt wie oft die ISR aufgerufen wird beim einmaligen 
Drücken des Tasters. Aber das habe ich nie getestet. Außerdem wusste 
ich, dass meine Software das prinzipiell nicht stören würde weil ich zum 
Tastendruck keine zeitkritischen Abläufe erwarte.

Falk Brunner schrieb:
> Die sind zu schwach! Nimm externe! Ausserdem müssen die VOR dem
> RC-Tiefpass sitzen.

Was bedeutet "davor"? So wie in dem angehängten Bild? (das ich hieraus 
http://www.mikrocontroller.net/articles/Schmitt-Trigger kopiert und dann 
ausgeschnitten habe) nur wie du geschrieben hast mit 1-5k Pullup und 
evtl eben 100k RC-Widerstand?

Falk Brunner schrieb:
> Die sind zu schwach!

Was bedeutet "schwach" in diesem Fall? Was macht einen kleinerer 
externer Pullup-Widerstand besonders? Kleinerer Pullup (1-5k) = 
stabilerer Highpegel? Wieso dann nicht immer kleinere Pullups? (und 
wieso sind die internen auf 10k dimensioniert (wenn ich micht 
täusche))..


Wie immer ein Dankeschön für eure Beteiligung!

Daniel

von Falk B. (falk)


Lesenswert?

@  Daniel D. (_daniel_)

>Was bedeutet "davor"? So wie in dem angehängten Bild?

Ja.

>ausgeschnitten habe) nur wie du geschrieben hast mit 1-5k Pullup und
>evtl eben 100k RC-Widerstand?

Ja.


>Was bedeutet "schwach" in diesem Fall?

Zu hochohmig. Dadurch kann ein starkes Störsignal "am Pin wackeln".

>externer Pullup-Widerstand besonders? Kleinerer Pullup (1-5k) =
>stabilerer Highpegel?

Ja.

> Wieso dann nicht immer kleinere Pullups?

Weil man sie nicht immer braucht, wie z.B. auf einer Platine. Und weil 
sie deutlich mehr Strom fressen.

> (und
>wieso sind die internen auf 10k dimensioniert (wenn ich micht
>täusche))..

Du täuschst dich, die sind im Bereich 30-50k.

von Daniel D. (__daniel__)


Lesenswert?

Merci!

von fredl (Gast)


Lesenswert?

Hallo,
hatte die gleichen Probleme mit meiner Garagentorsteuerung. Ca. 4m 
Kabellänge zum Außen-Schlüsselschalter.
Z. B. blieb beim Erlöschen der Garagenbeleuchtung, das auf- oder 
abfahrende Tor stehen.
Abhilfe: An den beschalteten Eingängen die integr. Pull-Ups 
eingeschaltet u. jeweils dicht am IC einen 1 µF Elko nach Masse (davon 
hab´ ich gerade genug). Ergebnis: Kalte Schaltleitungen, keine 
Beeinflussung mehr von außen!

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.