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
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?
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 :-)
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.
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 ...
µ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.
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
Immer der gleiche Mist: Der sinnlose Versuch Taster mit Interruptroutinen einzulesen, und dann noch behaupten sie wären entprellt. Mann!
>Peter Dannegger schrieb ...
und wahrscheinlich auch: "Taster und Unterbrechungen mögen sich nicht".
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...
@ 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.
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
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
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.
@ 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."
>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.
@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.
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
@ 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.