Zwei Led`s-ein Pin?

Hallochen. Die Uhr tickt, der Segway balanciert (ab und zu, an dem sitz ich derzeit nicht täglich, bin da momentan bisschen betriebsblind), und ich hab noch mehr Baustellen.

Eine davon benötigt das Motorshield -ich hab das "alte"-Version 1. Das, was die meisten Pins frisst... Ein Sensor frisst weiterte zwei Pins weg, viel bleibt nicht mehr übrig. Nun möchte ich da aber noch zwei LED`s rantüdeln, die ich aber unabhängig voneinander betreiben will. Heisst: zwischen "beide AN" und "beide AUS" will ich jede Kombi haben: D1 AN, D2 AUS, D2 AN, D1 AUS.. Das ganze möglichst an nem Digitalpin, da ich die übrigen analogen vermutlich noch brauchen werd.

Der erste Plan sah vor, die einfach antiparallel anzuschliessen. Wurde schnell klar: das klappt nicht so ganz..(oder doch, gibts nen Trick?): nach meinem Verständnis isses dann nicht möglich, beide AUS zumachen.

ODER geht das, indem ich den Pin dazu als Input deklariere und dann auf High setze? Angeblich glimmt eine angeschlossene LED dann nur-wenns wenig genug wäre, dass man es eindeutig von AN unterscheiden kann, wäre das eventuell ne Lösung. Und: Portexpander und ähnliches fällt weg- es ist kein Platz für irgendwelches Drumherum. LED`s und Vorwiderstände, viel mehr krieg ich nicht unter.

Jemand ne Idee?

PS: ich weiss, dass noch zwei digitale Pins ungenutzt sind, aber an die komm ich auch nicht wirklich ran, ohne das Motorshield halb umzubauen..

Ja, Input sollte beide Aus machen.

Wenn man das dann um weiteren Pins und mehr LEDs erweitern würde, nennt sich das Charlieplexing:

EDIT:
Nur INPUT machen! Input und High aktiviert den Pullup. Das ist wieder nicht gut. Du willst nur dass der Pin im Tristate-Modus ist, d.h. hochohmig.

Hallo, der DigiPin gibt ja HIGH-NULL-LOW her. Dann könnte man eine LED fest mit Minus verbinden, die andere fest mit Plus verbinden. bekommt eine LED(A) plus-HIGH, leuchtet sie nicht bekommt eine LED(A) plus-LOW, leuchtet sie bekommt eine LED(B) minus-HIGH, leuchtet sie bekommt eine LED(B) minus-LOW, leuchtet sie nicht bekommt eine LED(A) plus-0, sollte sie nicht leuchten bekommt eine LED(B) minus-0, sollte sie nicht leuchten kann sein, das Du noch ne´ Diode brauchst. Gruß und Spaß Andreas

Alternativ WS2811 ICs + Leds oder die integrierte Version nehmen. Vorteil, du musst die ICs nicht dauerhaft beschreiben, lediglich sobald eine Änderung stattfindet.

Hm, ich hab eben mal diese Antiparallel-Schaltung versucht: von jeder LED ein Bein (über nen Widerstand natürlich) an nen Digitalpin, und die beiden übrigen Beine jeweils an Masse bzw. 5V.
Funktioniert weitgehend- man kann beide Led`s anschalten, oder nur eine.

Wenn man den Pin als Ausgang definiert und High setzt, leuchtet nur eine, deutlich schwächer. Die andere ist natürlich aus.

Nicht gerade ein perfektes Ergebnis, aber immerhin…morgen mal weiter dazu. Da probier ich noch bisschen rum.

SkobyMobil: der DigiPin gibt ja HIGH-NULL-LOW her. Dann könnte man eine LED fest mit Minus verbinden, die andere fest mit Plus verbinden.

Hm, und was ist, wenn die Summe der Flusspanungen kleiner Ub ist? - rrrrichtig, beide LEDs leuchten, wenn der Ausgang hochohmig ist ]:) Funktioniert also nur, wenn man mit der Summe beider Uf unter Ub bleibt - oder wenn man mit der Flusstannung ein- oder mehrerer Si Dioden so nachhilft, das 1x Uf kleiner Ub, Summe Uf größer Ub ist ;) Die angesprochene Rainbow-LED wäre natürlich auch ein cleverer Schachzug 8)

Gruß Gerald

Gruß Gerald

Hallo,

mit Widerstand vorne und hinten, LEDs davor und dahinter und + und - an einer Seite hat man nichts weiter wie eine Reihenschaltung. In der Mitte der µC Pin. Das ist nicht die saubere Lösung.

Hab mir mal Gedanken gemacht. Um je einen NPN und PNP Transistor kommt man wohl nicht drum herum. Siehe Schaltung. Je nachdem ob der µC Pin Ausgang 0 oder 5V hat, sperrt der eine und leitet der andere und umgekehrt.

Das sollte so funktionieren :) Mit einer entsprechenden Anzahl an Ausgängen ein Problem "erschlagen" ist keine große Kunst. Diese kleinen Kniffe machen für mich eigentlich Elektronik aus. Vor 30 Jahren hatte ich mal in einem schon damals alten elektronischen Jahrbuch eine Batteriezustandsanzeige für eine KFZ Batterie gesehen. Aber nicht mit einem Bandanzeige-IC, oder einer Handvoll Operationsverstärker - nein, es waren 1 oder 2 Transistoren und 2 oder 3 Z-Dioden und 3 LEDs. Mühsam abzugleichen, da viele Flusspannungen pro LED zusammenspielten, aber es war mit einem absoluten Minimum an aktiven Bauelementen gelöst 8)

Hm, so der Elektronikprofi bin ich auch nicht, aber wie krieg ich in der gezeigten Schaltung (die gefällt mir, die würd ich schon bauen können) denn beide AUS?

Theoretisch wenn der Pin auf Input ohne Pullup geschaltet wird. Mein Bauch sagt, das reicht um die Transistoren zu sperren.

digitalWrite(p, LOW); pinMode(p, INPUT); // beide Aus
pinMode(p, OUTPUT); digitalWrite(p,LOW); // P an
pinMode(p, OUTPUT); digitalWrite(p,HIGH); // N an
analogWrite(p,128); // beide an ( mehr oder weniger, falls p ein PWM Pin ist. )

du hast doch sowieso I2C drauf nutzt doch einen PCF8574 damit ist dein Problem der Pins weg (Bekommst 8 zusüatzlich I/o Ports). Du kannst auch kombinieren (Eingänge und Ausgänge).

Gruß DerDani

Dani: das Ganze ist mehr oder weniger ein Wegwerf-Projekt.

Für alle mal den Hintergrund: ich hab unlängst im Keller nen alten Spielzeug-Buggy gefunden (wirklich Spielzeug), und da ich den nicht wegwerfen wollte (abgesehen davon, dass die Fernsteuerung nich mehr da ist, ist das Ding voll funktionsfähig), hab ich den kurzerhand mal mit nem Arduino ausgerüstet. Motorshield obendrauf für fahren und "lenken", dann ein Servo dazu, was nen billigen Ultraschall-Sensor schwenken kann und fertig. Das Ganze wird nie was vernünftiges, da die Karre zum einen nicht so toll ist(kann draussen zwar fahren, aber eben wie Spielzeug), und zum anderen das Ding etwas exotisch gelenkt wird: als Lenkung ist nen Getriebemotor verbaut, der die ganze Vorderachse quasi dreht, und zwar so, dass jeweils eins der Räder angehoben wird (durch die, pendenld gelagerte Hinterachse ergibt sich dann ne Art Trapez der Räder und das Teil fährt wirklich Kurven, mit Vollgas auf der Lenkung kann man die ganze Kiste sich um die Längsachse überschlagen lassen). Dadurch ergiobt sich aber ein Wendekreis von 2m Durchmesser oder mehr. Um das zu ändern müsste man ne komplett neue Vorderachse anbauen und- neee, das ist die Karre nich wert.

Der Plan ist, das Ding, so guts eben geht, bisschen autonom herumfahren zu lassen, weiter nix. Alles andere ist bei dem Ding mehr Aufwand, als ich treiben will (früher oder später kommt sowieso nen richtiger outdoortauglicher Roboter, plane da schon dran).

Die beiden LED`s möchte ich einfach dran haben, um zu sehen, was der US-Sensor wirklich detektiert, die lassen sich hübsch in die Karosserie integrieren, und sollen dann sowas visualisieren wie: Weg frei, Links ist was im Weg, rechts ist was im weg, ich weiss einfach nich mehr weiter....mehr nicht!

Vielleicht frickle ich noch nen OLED-Display an die Kiste, weil ich da sowieso demnächst mal wieder eins bestellen muss, aber momentan will ich die Dinger einfach als nen simplen Monitor haben.

So, nun zum aktuellen Stand: ich hab die gezeigte Schaltung mal aufm Steckbrett aufgebaut: das Ergebnis ist das selbe wie ohne Transistoren. Basiswiderstände hab ich mal jeweils 10k genommen, aber es ist nicht möglich, beide LED`s auszuschalten damit. Je eine an, die andere Aus klappt, beide an klappt auch, aber aus bekomme ich sie nicht beide. Mein Bauch sagt mir, dass es mit höheren Basiswiderständen womöglich doch noch gehn würde...?

Rabenauge: Mein Bauch sagt mir, dass es mit höheren Basiswiderständen womöglich doch noch gehn würde...?

Dein Bauch täuscht sich. Das geht nicht, es werden immer beide leuchten, es sei denn du wirst extrem hochohmig, dann aber leuchten sie aber auch wieder nicht richtig wenn sie hell sind. Der Grund ist, dass die Summe der beiden Uf den Basis-Emitter Dioden deutlich kleiner ist als 5V. Du könntest nun natürlich jeweils noch eine Z-Diode in Reihe schalten.

Aber es spricht auch wirklich nichts dagegen, die LEDs direkt an den Pin zu hängen. Im ATMega sind letztlich auch nur Transistoren drin, die kann man Nutzen. Also: +5V --- LED >| -- 150R -- Pin -- 150R -- LED >| -- GND Wenn die LEDs eine Flußspannung > 2,5V haben, dann funktioniert das hervorragend.

Hallo,

ich dachte Du möchtest nur beide abwechselnd einschalten. Dafür war die saubere Schaltung gedacht. Beide aus sollte mit den Pin als Input funktionieren. Das ist der im Tristate Modus.

Das müßte dann auch noch mit Deiner einfacheren Schaltung ohne Transistoren funktionieren. So hatte ich die verstanden.

(+) ---R---|> ---- |>---R--- (-) | µC

Und dann wie Michael schon schrieb, mit High, Low, jeweils eine an, mit PWM beide an (otisch für's Auge), mit Tristate beide aus. Sollte funktionieren. Mittels PWM kannste dann auch faden. ;)

Upp's, hat sich mit guntherb überschnitten. :)

Bei der Version krieg ich nicht beide LED`s wirklich aus…

So ie ich den Pin als Input deklariere (ist Wurst ob er dann HIGH ist oder LOW), ist eine LED aus, und die andere funzelt mit halber Helligkeit vor sich hin.
Hab mal ein Progrämmchen gebastelt, mit dem dann wenigstens beide “funzeln”.
Das Programm ist schnell zusammengestümpert, schaltet aber alle vier Möglichen Zustände durch:

-Led1 an, Led2 aus
-Led1 aus, Led2 an
-beide Leds "aus" (zumindest sichtbar verminderte Helligkeit, wirklich aus ist nicht) -beide Leds richtig an

int ledPin = 2;                 

void setup()
{
  
}

void loop()
{
  pinMode(ledPin,OUTPUT);
  digitalWrite(ledPin, HIGH);
 delay(1000);           
 digitalWrite(ledPin, LOW);   
  delay(1000);      
for (int i=0;i<100; i++)  
{
 pinMode(ledPin,INPUT_PULLUP);
 digitalWrite(ledPin,HIGH);
 delay(20);
 pinMode(ledPin,OUTPUT);
 delay(2);
}
pinMode(ledPin,OUTPUT);
for (int j=0; j<100; j++)
{
 digitalWrite(ledPin,HIGH);
 delay(10);
 digitalWrite(ledPin,LOW);
 delay(10);
}
}

Die Leds sind wirklich nur mit Vorwiderständen angeschlossen, ohne weitere Beschaltung, wie von Doc skizziert.

Versuche doch mal blaue oder weiße LEDs für den Versuch zu nehmen und hänge die ohne die Transis an den Pin. bl & ws haben Flusspannungen von um die 3,5V. Das in Summe sollte wohl langen, um unter 5V zu bleiben, damit bei Input beide LEDs aus sind. Ok, bei sehr geringen Strömen im µA Bereich ist Uf bedeutend kleiner und ein ganz, ganz schwaches Glimmen ist eventuell in einem dunklen Raum noch sichtbar. Eventuell kann man mit 1-2 Si Dioden in Reihe zu jeder LED das noch optimieren. Das das mit den Transistoren nicht funktioniert, überrascht mich. Die BE Diode wird doch beim jeweils nicht angesteuerten Transistor in Sperrichtung betrieben. Und Die Durchbruchspannung sollte über 5V sein. Dran gedacht hatte ich, nur nicht damit gerechnet, das es da ein Problem gibt. Den PCF8574 kann meines Wissens nach nicht gemischt betreiben. Der geht nur als Input oder Output. Wechselweise schon, aber pro Befehlssatz eben nicht gleichzeitig.

Gruß Gerald

Es sind weisse LED`s.. Da ich vor hab, die fest in dem Auto zu verbauen, kommen nämlich orange Kappen drüber(lag beides entbehrlich hie rum), da machen andere Farben nicht so viel Sinn. Werd noch mal mit anderen Vorwiderständen probieren, und ggf. auch mal gucken, ob mans im Freien überhaupt sieht (ich habs ziemlich dunkel hier in meiner Bastelbude), aber für das Miniprojekt wirds so oder so genügen.

Grad eben haben die Chinesen meinen Zweitsatz Motortreiber ausm Flieger geworfen (das "Päckchen" sah echt so aus...), jetzt werd ich mal das Motorshield aufrüsten und dann kommen die LED`s ins Auto.. Will da echt nicht allzu viel Zauber veranstalten, denn ein vernünftiger Roboter wird das eh nie..

Hallo,

schalte mal den µC Pin als Eingang ohne den Pullup zu aktivieren. Normaler Eingang. Das muß der Tristate Zustand sein. Der aktivierte Pullup zieht wieder den Eingang auf +5V. Ein reiner Tristate wirkt wie abgetrennt.

Und wenn man pinMode(…, INPUT) macht und danach digitalWrite(…, HIGH) wird der Pullup glaube ich ebenfalls aktiviert.