LED+Taster unabhängig an einem µC-Pin

  • Neulich (ich find's nicht mehr, wo) war hier mal das Problem (bei dem 30-Kanal-DMX-Receiver), dass nur noch ein Pin am µC frei ist, aber eine LED und ein Taster an's Gerät sollten - Idee war dann, beide zusammen an den Pin anzuschließen, damit die LED zu steuern (leuchten, blinken bei Fehler etc.) und immer kurz mal auf Abfrage umzuschalten für den Taster.


    Problem war dabei, wie das ganze "entkoppeln" - also im Prinzip hätte das schon funktioniert, nur die LED hätte dann dauernd geleuchtet während man die Taste drückt, hier etwas ungünstig, weil man da zum Einstellen die Taste so lange gedrückt halten muss, bis eben eine Rückmeldung kommt (die SW von jens_n und mir mit "Autoconfig"). Es wurde etwas spekuliert, Ergebnis war, das geht nicht, dass der µC die LED weiter unabhängig steuern kann, während die Taste gedrückt ist.


    Jetzt bin ich drauf gekommen - Neni hatte mir vor längerer Zeit schon so Gummi-Tasten geschenkt, ich hatte Bedenken ob die überhaupt direkt am AVR funktionieren, weil der Leitgummi schon so um die 300 Ohm hat. Neni meinte, das geht problemlos, und *natürlich* hat er Recht - die 300 Ohm bilden zusammen mit den 50 k Pullup im AVR einen Spannungsteiler, macht bei gedrückter Taste 0,03 Volt am Eingang, das ist definitiv "low" - bei 1 k auch noch leicht (0,1 Volt).


    Das ist mir heute wieder eingefallen - mit einem Widerstand in Serie zum Taster kann man diesen "entkoppeln" - das sieht so aus:



    Ganz einfach eigentlich, aber vorher nicht drauf gekommen... Der Port-Pin steht auf Ausgang, um die LED zu steuern - bei "low" ist sie aus, bei "high" an (leuchtet mit den 1 k hell genug für ne Anzeige) - drückt man nun den Taster, geht die LED aber nicht aus, weil die Spannung am Pin auf 5 Volt bleibt, die fallen halt an dem 1 k - Widerstand auch ab - nochmal 5 mA für den µC, das ist aber kein Problem


    zum Abfragen stellt man nun den Pin auf Eingang und schaltet den Pullup ein - dann kurz warten (ca. 1 µs) bis stabile Verhältnisse anliegen, Pin abfragen - wie schon gesagt, trotz dem 1k-Widerstand in Serie zieht der Taster den Pin zuverlässig auf "low".


    Die LED jedoch nicht (das *wäre* das nächste Problem, dass die ja immer nach GND anliegt), die hat trotz des äußerst geringen Stroms durch den 51-k-"Vorwiderstand" noch genügend hohe Vf (habe ne grüne benutzt), dass der Pin auf "high" bleibt - bei Problemen hier kann man (wie rechts im Bild) noch ein, zwei normale Dioden dazuschalten, dann reicht's auf jeden Fall für "high".


    nach der Abfrage den Pin wieder auf Ausgang, und den vorherigen Zustand wieder herstellen* (das Bit für Pullup ist ja das selbe wie für LED an/aus) - während der Taster-Abfrage ist die LED natürlich kurz (ca. 1,2 µs) aus, das geht aber so schnell, dass man es nicht sieht.


    Das alles ist nicht nur Theorie, heute abend ausprobiert, funktioniert.


    *EDIT: es empfiehlt sich auch, während der Abfrage die Interrupts zu deaktivieren - wenn nun in irgendner ISR die LED an- oder ausgeschaltet wird, wäre es natürlich schlecht, wenn die zufällig genau da zwischen rein kommt, und dann nachher evtl. ein falscher Zustand "wiederhergestellt" wird... dieser Hinweis entfällt natürlich, wenn die Abfrage selbst in ner ISR stattfindet...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

    Einmal editiert, zuletzt von Pesi ()

  • ach, genau, da war's... ;)


    änder' doch mal - ist doch nur ne LED, ein Taster und 2 Widerstände - ich würde, wenn das nun schon so geht, doch gleich Taste und LED so anklemmen und das Teil dann gleich auf 30 Kanäle auslegen... Du benutzt doch wieder die ULN2803 oder...? - brauchst also für Deine 27 Kanäle eh' 4 Stück, die reichen dann für 30 Kanäle auch...


    morgen kommt dann noch ne Version mit 2 Tastern und 1 LED, sowie eine mit 1 Taster und 2 LEDs, eine davon leider nicht unabhängig... über 2 Taster und 2 LEDs zerbreche ich mir noch den Kopf, aber *das* geht dann wohl doch nicht...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Ich hab noch ne Frage: Kann man die Led bei dieser Schaltung an ne Treiberstufe hängen? Ich hab bei mir bei dem Darlington eh noch nen Port frei und hatte die dadran - warum auch nicht. Dann hab ich angefangen, sowohl eine Led auf die Platine zu packen, als auch eine an Pins abgreifbar zu machen (fürs Gehäuse, für den Taster hab ich das gleiche gemacht), und das gefällt mir eigentlich :)


    Natürlich könnte man vorschreiben, dass nur eine bestückt werden darf, aber schöner wäre es, wenn beliebige Kombinationen möglich wären. Ich hab z.B. zum testen gerne eine direkt auf dem Board, und fürs Gehäuse habe ich zusätzlich nochmal entsprechende Led-Verschraubungen (keine Ahnung, wie die offiziell heißen ^^). Wäre doof, dann die auf dem Board ablöten zu müssen.

  • LED an Treiberstufe geht auch - der "Witz" an der Schaltung ist ja, dass der Taster die LED nicht beeinflusst (eben durch den Widerstand) - die LED beeinflusst den Taster nicht, eine Treiberstufe erst recht nicht - zuerst war ja sogar ein Transistor an der LED vorgesehen, bis ich dann gemerkt habe, dass es zum Glück auch ohne geht... ;)


    Und für je zwei an zwei Pins kannst du auch einfach deine vorhandene Schaltung doppelt nehmen ;)

    Ja - aber Du hast ja bei dem 30-Kanal-Receiver nur noch eine Leitung frei... ;)


    also hier mal die Schaltung für 2 Taster und eine LED an einem Port:



    selbes Prinzip wie oben, nur wird hier bei der Abfrage erst mal der Pullup aus gelassen, dadurch liegt der Pin auf low (leider nicht immer zuverlässig, daher der Pulldown-Widerstand) - ein Druck auf Taster 1 zieht ihn auf High, das kann ausgewertet werden - dann wie vorher, Pullup an, Leitung ist auf High, Druck auf Taster 2 zieht sie auf low...


    die Wartezeit auf stabile Verhältnisse musste hier leider etwas verlängert werden - aber macht ja nix, man fragt so nen Taster ja auch nicht so oft ab...


    damit kann man nun schon einiges anstellen - man kann ja z.B. noch auf kurzer Klick/langer Klick unterscheiden, das sind schon 4 Eingabemöglichkeiten - bei Deinem Receiver könnte man damit leicht noch standalone-Programme durchschalten.. ;) - auch die LED kann ja mehrere Sachen signalisieren, z.B. an, aus, langsam blinken, schnell blinken, doppelblinken...


    hier noch ein Demo-Programm, die Status-LED (ebenso wie die Taster an PB1) blinkt stur vor sich hin, die LED an PB0 kann mit Taster 1 ein- und mit Taster 2 ausgeschaltet werden:



    Mit der 2-Taster-2-LEDs-Version kämpfe ich noch, das Problem sind unerwarteter Weise die 2 LEDs, 2 Taster gehen hier auch problemlos, ich hätte eher da Schwierigkeiten befürchtet...


    P.S.: sorry, immer wenn ich Text aus dem AVR-Studio hier reinkopiere, dann haut's den so durcheinander - also anbei noch als Datei....


    P.P.S.: Hier ist bei der Verwendung einer Treiberstufe die LED aber nicht mehr unabhängig von Taster 1 - weil der den Pin auf High zieht, also schaltet die Treiberstufe die LED an - ohne Treiber geht das, weil die LED beim Drücken von Taster 1 über 48 k an Vcc hängt, da glimmt sie nur ganz leicht (ne superhelle, eine normale wohl gar nicht) EDIT: sorry, das ist Quatsch - der Pin auf Low bleibt auf low, auch wenn der 47 k nach Vcc dazugeschaltet wird - also weiterhin LED von allen Tastendrücken unabhängig, ausser im extrem kurzen Moment der Taster-Abfrage... ich geh' jetzt wohl doch lieber in's Bett... :whistling:

    Dateien

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

    Einmal editiert, zuletzt von Pesi ()

  • Ja - "not connected" wäre Pin auf Eingang und Pullup aus - dann hängen beide LEDs in Serie zwischen Vcc und GND, 2x 3 Volt Vf (man muss dann halt grüne oder blaue nehmen, oder die Vf wieder mit Dioden "höher legen") macht 6 Volt, also kein Leuchten bei 5 Volt - in der Praxis nur ein leichtes glimmen...


    das funktioniert auch einwandfrei, das Problem ist "beide LEDs an" - das geht ja nicht, also muss ich sie schnell abwechselnd anschalten, wenn "beide an" sein sollen (Mutliplex) - und da gibt's wohl timing-Probleme, also die Leitung wechselt wohl nicht schnell genug, jedenfalls gibt's da immer unschönes rumflackern...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • hat natürlich dann auch den Vorteil, dass man so ne stabile Zeit bekommt um den Schalter abzufragen

    naja, hat eigentlich eher den Nachteil, dass man die Routine auch regelmäßig aufrufen muss - wenn man die in die PWM-ISR mit reinpackt, wird's schon wieder arg knapp, weil die Abfrage durch die Pausen schon ganz schön viele Takte braucht...


    ja, ich kapier's ehrlich gesagt auch nicht - liegt evtl. daran, dass ich die Routine recht oft aufrufe (sonst flimmern die LEDs wegen zu niedriger Multiplex-Frequenz), andererseits die selbst aber recht lang braucht - also im Endeffekt die Zeit, in der die LEDs überhaupt angesteuert werden, recht kurz ist...


    anbei mal die Test-SW dazu, vielleicht fällt Dir ja was auf...


    P.S.: ich hab's ja schon mal gesagt :D - aber jetzt wirklich in's Bett - Gute Nacht!

    Dateien

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!