Forum: Mikrocontroller und Digitale Elektronik LED über einen PORT mit ATMEGA 8 ansteuern?


von Korbinian G. (c4orbi)


Lesenswert?

Servus,


ich möchte gerne mehr als 8 LED's über einen PORT des ATMEGA 8 direkt 
ansteuern. Ist sowas überhaupt möglich?

Ein 8 Bit Register kann ja 256 verschiedene Werte annehmen. Ich bräuchte 
da irgendeinen IC dem ich eine Adresse schicke (BITMUSTER) und der 
schaltet dann eine LED an seinem Ausgang ein. Der IC sollte quasi so um 
die 40 Ausgänge besitzen. Gibt es sowas oder muss ich mir da was anderes 
überlegen mit Schieberegistern etc?

gruß

von Karl H. (kbuchegg)


Lesenswert?

Da dieser Spezial-IC dieselbe Menge an Ausgängen benötigt wie ein 
Schieberegister, eine Schieberegisterkette aber nur 3 Pins am µC belegt, 
die Frage:
Was ist falsch an einer Schieberegisterkette?
(Ausser, dass du möglicherweise mit dem Strom für die LED nicht 
hinkommst. Aber man kann da ja auch Low-Current LED nehmen)

von Korbinian G. (c4orbi)


Lesenswert?

Jede einzelne LED soll aber direkt ansteuerbar sein. Das ganze soll für 
eine Modelleisenbahnanlage die Beleuchtung für Häuser, Laternen etc sein 
und man soll vom PC aus die einzelnen LED's direkt ansteuern können.

von micha (Gast)


Lesenswert?

Du kannst auch eine Matrix aufbauen. Duch Multiplexing und die Trägheit 
des Auges entsteht dann der Eindruck von dauerhaft leuchtenden LEDs. 
Siehe: LED-Matrix

von Peter (Gast)


Lesenswert?

oder jedem Haus sein eingen Tiny spendieren und diese über einen Bus 
verbindenen, dann hat mein ein schönes modulares System.

von Karl H. (kbuchegg)


Lesenswert?

Korbinian G. schrieb:
> Jede einzelne LED soll aber direkt ansteuerbar sein.

Ja, und?

Das Schieberegister, selbst wenn es 200 Stufen hat, kann so schnell neu 
beschrieben werden, dass es überhaupt kein Problem ist, alle 200 LED im 
Schieberegister neu auszugeben, selbst wenn nur 1 umgesetzt werden soll.

> Das ganze soll für
> eine Modelleisenbahnanlage die Beleuchtung für Häuser, Laternen etc sein
> und man soll vom PC aus die einzelnen LED's direkt ansteuern können.

D.h. du hast alle Zeit der Welt.

von Korbinian G. (c4orbi)


Lesenswert?

dazu brauche ich dann aber schon einige schieberegister. damit muss ich 
mich erstmal genau auseinandersetzen wie ich die dann zusammenschalten 
muss.

von Karl H. (kbuchegg)


Lesenswert?

Korbinian G. schrieb:
> dazu brauche ich dann aber schon einige schieberegister. damit muss ich
> mich erstmal genau auseinandersetzen wie ich die dann zusammenschalten
> muss.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister#Kaskadieren_von_Schieberegistern

Ist ganz simpel :-)

Und: Im Laufe der Zeit erweiterbar.

von Oliver (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister

>Der IC sollte quasi so um die 40 Ausgänge besitzen.

Alternative wäre ein größerer Mega. Die gibt es auch mit 40 Ausgänge, 
wenn auch nicht im DIP-Gehäuse.

Oliver

von Korbinian G. (c4orbi)


Lesenswert?

auf jeden fall schon mal danke für die schnellen hilfreichen antworten.
ich schau mir die verschiedenen möglichkeiten mal genau an und 
entscheide mich dann.

von Korbinian G. (c4orbi)


Lesenswert?

wenn ich das mit den schieberegistern richtig verstehe, schiebe ich bei 
jeder led änderung immer den zustand für alle leds in das 
schieberegister, was wohl so schnell geht dass man es nicht mit dem auge 
wahrnimmt ;)

von Conlost (Gast)


Lesenswert?

Ich hatte mal eine Mehrzugsteuerung für eine LGB entworfen
und gebaut.

Da wurden aber noch 87c52 OTP Mikrocontroller benutzt.
Heute würde ich auch entsprechende Atmel Controller nehmen.

Bei diesem Projekt hatte jede Lock einen Controller und
es gab noch Bausteine für Weichen, Beleuchtung und Signale mit
jeweils 8 Ausgängen, die man auf der Anlage beliebig verteilen
konnte, weil die Information einfach von den Schienen abgenommen
wurden und jeder Baustein seine eigene Adresse hatte.

Allerdings wurde dabei kein PC zur Ansteuerung genommen,
sondern die Befehle kamen vom Fahrpult oder von den Handreglern,
die dort angeschlossen wurden, damit man mit mehreren Personen
die Anlage bedienen konnte ohne sich immer auf den Füßen zu stehen
am Fahrpult.

Also ich würde für den geforderten Zweck auch Atmel Tinys nehmen
und die über einen Bus steuern.

von Peter (Gast)


Lesenswert?

> was wohl so schnell geht dass man es nicht mit dem auge
> wahrnimmt ;)
ja, oder noch besser ein Schieberegister mit Latch nehmen. Damit wird es 
intern in ein puffer geschoben und auf ein Signal werden alle ausgänge 
übernommen.

von Matthias L. (Gast)


Lesenswert?

>wenn ich das mit den schieberegistern richtig verstehe, schiebe ich bei
>jeder led änderung immer den zustand für alle leds in das

Ja.


>schieberegister, was wohl so schnell geht dass man es nicht mit dem auge
>wahrnimmt ;)

Nicht unbedingt. Du kannst auch gaaaanz langsam schieben. Erst wenn du 
den Schieberegistern "fertig_geschoben" sagst, kommt die Information an 
den Ausgang.

von Karl H. (kbuchegg)


Lesenswert?

Korbinian G. schrieb:
> wenn ich das mit den schieberegistern richtig verstehe, schiebe ich bei
> jeder led änderung immer den zustand für alle leds in das
> schieberegister,

Ganz genau

> was wohl so schnell geht dass man es nicht mit dem auge
> wahrnimmt ;)

Darum gehts bei dir gar nicht.
So ein 595 Schieberegister besteht aus 2 Teilen. Der Schiebekette und 
dem Ausgangsregister. An den Ausgängen siehst du immer nur den aktuellen 
Zustand des Ausgangsregisters. Du kannst an der Schiebekette 
rumschieben, solange du lustig bist, das interessiert die 
Ausgangsregister herzlich wenig. Die zeigen nach wie vor immer noch den 
letzten Zustand an. Erst wenn die Schiebekette wieder in Position ist, 
kommt ein Signal an die Schieberegister, den Inhalt der Schiebekette in 
die Ausgangsregister zu übernehmen. Und erst dann macht es an den 
Ausgängen flutsch.

von Korbinian G. (c4orbi)


Lesenswert?

ich denke ich werde dann wohl mehrere atmel µCs nehmen und über die UART 
ansteuern, jedem eine feste adresse geben und gut is ;)

von Matthias L. (Gast)


Lesenswert?

>ich denke ich werde dann wohl mehrere atmel µCs nehmen und über die UART
>ansteuern, jedem eine feste adresse geben und gut is ;)


Viel Spaß!

von Korbinian G. (c4orbi)


Lesenswert?

ach ja stimmt mit dem schiebe und ausgangsregister hab ich grade erst 
gelesen ;)

von Karl H. (kbuchegg)


Lesenswert?

Korbinian G. schrieb:
> ich denke ich werde dann wohl mehrere atmel µCs nehmen und über die UART
> ansteuern, jedem eine feste adresse geben und gut is ;)

Na denn.
Jetzt schon mal: willkommen in 1 Monat, mit deiner ersten Frage, wie man 
denn die Kommunikation 'am besten' macht.

von Korbinian G. (c4orbi)


Lesenswert?

na die kommunikation werd ich über die serielle schnittstelle mit der 
uart machen. protokoll hab ich mir schon überlegt. weiß nur noch nicht 
ob ich polling oder interrupts benutze wobei polling vollkommen 
ausreichen sollte bei dieser anwendung.

von Karl H. (kbuchegg)


Lesenswert?

Korbinian G. schrieb:
> na die kommunikation werd ich über die serielle schnittstelle mit der
> uart machen.

Du brauchst also mindestens
  einen µC
  Quarz (sonst kanns passieren, dass die Hälfte der Knoten im Winter
         nicht mehr reagiert)
  Mäuseklavier (zur Adresseinstellung)
pro Knoten. Dazu noch eine 3-Draht Verbindung zwischen den Modulen, oder 
willst du das Signal über die Schienen schicken?

Was ist jetzt der Vorteil dieser Lösung gegenüber Schieberegister?

von Peter (Gast)


Lesenswert?

> Du brauchst also mindestens
so schlimm ist es nun auch nicht.

>   einen µC
einen µC oder ein schieberegister ist zum schluss egal, dabei kann der 
µC sogar die LEDs direkt treiben, das register nicht.

>   Quarz
wenn er auf 1200 baud geht ist er nicht notwendig

>  Mäuseklavier (zur Adresseinstellung)
kann man per software machen, einfach auf eine broadcast adresse 
regieren und ihn darüber programmieren. (alternativ noch mit einem 
Taster den Programmiermodus starten, damit muss man die anderen 
Teilnehmer nicht vom bus trennen)

Der Vorteil ist die Flexibilität, man kan sehr schnell einige lampen per 
PWM-Dimmen, auch mal schnell eine LED mehr in ein Haus hängen usw.

Ich finde es sinnvoll.

von Korbinian G. (c4orbi)


Lesenswert?

ob dabei ein vorteil ist spielt für mich keine rolle. ich kann mich mit 
meinem wissen mit der lösung ohne schieberegister momentan noch besser 
anfreunden.

bei den schieberegistern muss ich mir nämlich noch überlegen wie ich 
programmiertechnisch über einen pin des µCs das komplette bitmuster 
rüberschiebe bzw wie ich es bei jeder kleinen änderung jedesmal neu 
erzeuge.

damit wäre die schieberegisterlösung natürlich überschaubarer ;)

von Conlost (Gast)


Lesenswert?

Beim Schieberigister hat man für jede LED eine Leitung,
welche auch mal über die ganze Anlage geführt werden muss,
da kommt ganz schön was zusammen an Leitungslänge.

von Name (Gast)


Lesenswert?

Geht das nicht ganz einfach mit einem (De-) Multiplexer?

2 zu 4
3 zu 8
4 zu 16
5 zu 32
-----------  hier irgendwo ist 40
6 zu 64

also 6 bit

von Korbinian G. (c4orbi)


Lesenswert?

wie gesagt daran dachte ich auch schon, nur eine genaue lösung dazu wäre 
für mich hilfreich ;)

von Matthias L. (Gast)


Lesenswert?

>ich kann mich mit meinem wissen mit der lösung ohne schieberegister >momentan 
noch besser anfreunden.

Glaub ich dir. Weil du, mangels Erfahrung, nicht abschätzen kannst, was 
eine Kommunikation für Aufwand ist.


>nämlich noch überlegen wie ich programmiertechnisch über einen pin des µCs

Hardware-SPI macht das alleine. Wichtig ist nur, die Information als 
Byte(array) vorrätig zu halten.


>Der Vorteil ist die Flexibilität

Flexibilität erkauft man sich immer mit Mehraufwand.


>dabei kann der µC sogar die LEDs direkt treiben, das register nicht.

Das Register auch.

von Peter (Gast)


Lesenswert?

@Matthias Lipinsky

als ersten schritt kann er ja die tinys als Schieberegister 
progammieren.

von Korbinian G. (c4orbi)


Lesenswert?

mit der spi hatte ich bisher noch nicht das vergnügen ;) ich programmier 
jetzt auch ca erst seit 1,5monaten mit mikrocontrollern, aber ich werd 
es mir mal im datenblatt durchlesen.

von Barny (Gast)


Lesenswert?

Bei den Schieberegistern ist man meißtens auf <5mA pro Ausgang 
beschränkt.
Die AVR's können doch 20 bis 30mA verkraften.

Außerdem hat ein Bussystem den Vorteil dass nicht gleich alles ausfällt 
wenn ein Teilnehmer sich verabschiedet.
Dass erleichtert die Fehlersuche ungemein.

Und dass man bei neu hinzugefügten Modulen die Daten einfach nur an eine 
neue Adresse schicken muß ist für den Programmierer viel einfacher als 
wenn er mitten im Bittmuster einen Abschnitt einflicken muß.
Dass herumfurwerken im Bitmuster führt mit Sicherheit früher oder später 
zu einem Durcheinander.

Ich würde die Signale übrigens mittels Stromschleife übertragen.
Da geht nicht so viel kaputt wenn einmal ein Kurzer ist und die 
Komunikation ist nicht so anfällig gegenüber Stöhrungen.

Ein Bussystem mit AVR's hat eigentlich nur Vorteile gegenüber von 
Schieberegistern.

von Karl H. (kbuchegg)


Lesenswert?

Barny schrieb:
> Bei den Schieberegistern ist man meißtens auf <5mA pro Ausgang
> beschränkt.
> Die AVR's können doch 20 bis 30mA verkraften.

Eine einzelne LED an einem 595 ist überhaupt kein Problem.
Und sowohl beim 595 als auch bei einem µC hast du das Problem, dass du 
den Maximalstrom des IC nicht überschreiten darfst.
Wie gesagt, mit Low Current LED ist das überhaupt kein Problem und für 
595 (als auch natürlich für Tiny) gibt es immer noch die Lösung des 
abwechselnd nach GND und nach Vcc schaltens.

Dein 'Vorteil' ist in Wirklichkeit keiner.

>
> Außerdem hat ein Bussystem den Vorteil dass nicht gleich alles ausfällt
> wenn ein Teilnehmer sich verabschiedet.#

Das ist wahr.

> Dass erleichtert die Fehlersuche ungemein.

Nicht wirklich.
Wenn ein Schieberegister ausfällt, ist alles dahinter dunkel. Das fällt 
viel eher auf, als wenn irgendwo ein paar einzelne LED nicht 
funktionieren :-)
Allso einfach dem Strang nachgehen, bis man zum ersten dunklen Modul 
kommt und voila. da ist der Übeltäter. Ersatzplatine aus dem Vorrat 
rausnehmen, Alte aus dem Strang ausstöpseln, neue einstöpseln und 
fertig.
Da muss nichts programmiert oder eingestellt werden.

> Und dass man bei neu hinzugefügten Modulen die Daten einfach nur an eine
> neue Adresse schicken muß ist für den Programmierer viel einfacher als
> wenn er mitten im Bittmuster einen Abschnitt einflicken muß.

Da ist was drann.
Auf der anderen Seite ist das ein Problem, welches man auch in Software 
wunderbar lösen kann. Kommando einfügen, Angeben wieviele Led in der 
Kette wo neu dazugekommen sind, und die Id's aller nachfolgenden Led 
werden um die entsprechende Anzahl erhöht.

> Dass herumfurwerken im Bitmuster führt mit Sicherheit früher oder später
> zu einem Durcheinander.

Seh ich eigentlich umgekehrt.
Wenn man dem Benutzer erlaubt, Ids frei zu vergeben, ist da immer noch 
irgendwann Chaos rausgekommen :-) Bis hin zu doppelt vergebgenen Ids :-)

Aber wie gesagt: Alles eine Frage der SW, mit der der Benutzer arbeitet.

> Ein Bussystem mit AVR's hat eigentlich nur Vorteile gegenüber von
> Schieberegistern.

Ein Vorteil:
Man kann den einzelnen Knoten 'autonome Funktionen' geben. Lagerfeuer 
oder Blinklicht oder Ampelphasen. Auf der anderen Seite kann man sich 
für solche Sachen immer noch spezielle Knoten-Tiny bauen.

> Beim Schieberigister hat man für jede LED eine Leitung,
> welche auch mal über die ganze Anlage geführt werden muss,
> da kommt ganz schön was zusammen an Leitungslänge.

Du setzt natürlich die einzelnen SR-Module in unmittelbare Nähe der zu 
versorgenden LED. Quer über die Anlage geht ein 3-adriges 
Flachbandkabel, welches die Module verbindet. Von den Modulen hat man 
dann kurze Wege zu den LED.

Was anderes machst du doch mit den Tinys auch nicht.

Und da du nicht auf den Schienen überträgst, hast du auch keine Probleme 
mit Motoren, die dir die Versorgungsspannung versauen oder Wagons, die 
dir einen kurzen auf den Schienen bauen, etc.

>   Quarz
> wenn er auf 1200 baud geht ist er nicht notwendig

Sagt dir der Begriff 'relativer Fehler' etwas?

von MaWin (Gast)


Lesenswert?

Hat eigentlich schon mal einer die Frage gelesen ?

Er möchte EINE von ca. 40 LEDs einschalten können, über 8 Portleitungen.

Und dann raten hier die Leute zu Schieberegistern, Stromschleifen und 
Demultiplexern.

War Don Lancaster wirklich so patenttauglich genial, dass hier niemand
auf die Methode des Charlyplexing kommt, um die LEDs ohne weitere 
Zwischenbauteile anzusteuern?

http://ww1.microchip.com/downloads/en/AppNotes/91029a.pdf
http://www.maxim-ic.com/appnotes.cfm/appnote_number/1880

1 von 56 LEDs ist durch 8 Portleitungen aufleuchtbar.

von Peter (Gast)


Lesenswert?

@MaWin
weiter unten stellt sich aber raus das er 40Leds in alle Möglichen 
kombinationen ein und aus schalten will.

von Karl H. (kbuchegg)


Lesenswert?

:-)
Gerade bei Eisenbahnfreunden kommt der Appetit mit dem Essen.
Aus den 40 LED können ganz schnell 100 oder 200 werden.

Wohl dem, der ein einfach erweiterbares System hat.

:-)

von Wolfgang S. (wsm)


Lesenswert?

Mit 3 Bit lassen sich über einen einfachen Demultiplexer 8 
Schieberegister auswählen. Bei jeweils 8 Bit pro Schieberegister ergeben 
sich 64 Ausgänge.
Zwei Bit des Ports stehen noch für Daten und Takt zur Verfügung.

In der 74HC-Serie findet man entsprechende Bausteine.

Wo

von Karl H. (kbuchegg)


Lesenswert?

Wolfgang Schmidt schrieb:
> Mit 3 Bit lassen sich über einen einfachen Demultiplexer 8
> Schieberegister auswählen. Bei jeweils 8 Bit pro Schieberegister ergeben
> sich 64 Ausgänge.
> Zwei Bit des Ports stehen noch für Daten und Takt zur Verfügung.

Das klingt jetzt interessant.
Warum möchte ich das so machen, wenn ich die SR auch kaskadieren kann?

von Wolfgang S. (wsm)


Lesenswert?

Wenn die SR kaskadiert werden, dann müssen immer alle Bits ausgegeben 
werden. Geht natürlich auch.

Bei meinem Prinzip werden jeweils 8 Bits geschoben. Dies bleibt 
übersichtlicher, ist etwas mehr an Hardware, dafür wird die Software 
etwas einfacher.

Das Prinzip wurde bereits für eine 128 x 8 LED-Matrix (1024 LEDs) bei 
einem Schrift-Laufband benutzt. Die Ansteuerung erfolgte über einen 
Parallelport.

Wo

von Korbinian G. (c4orbi)


Lesenswert?

da hat sich ja viel getan von gestern auf heute ;)
viele interessante vorschläge!

ich hab mir jetzt eh noch was überlegt. also die 40leds waren ja nur so 
ein wert um das problem zu schildern. natürlich wird sich die anzahl 
irgendwann erhöhen. aber die leds sollen auch blinken können bzw. würde 
ich auch gern die weichen mit dem pc steuern  oder den bahnübergang auf 
und zu machen.
da komm ich eh nicht um treiberschaltungen herum.

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.