12x5 LED Matrix mit low current LEDs ansteuern(atmega8)

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 29 11 2024  05:40:32      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Gehe zu Seite ( 1 | 2 Nächste Seite )      


Autor
12x5 LED Matrix mit low current LEDs ansteuern(atmega8)
Suche nach: led (32581)

    







BID = 794506

Jawaiica

Gerade angekommen


Beiträge: 8
Wohnort: Hannover
 

  


Hallo Leute,

ich bin noch sehr frisch in diesem Thema drin und habe deswegen eine kleine Frage. Ich habe mich schon ein wenig bei Google ausgetobt und gesucht, wie man eine LED Matrix baut( das kann ich ) mein Problem jetzt ist aber, dass ich nicht weiß, wie man die einzelnen LEDs ansteuern kann.

Ich habe einen Atmel Atmega8 und würde das gerne mit diesem umsetzen. Außerdem habe ich irgendwo gelesen, dass man die LEDs, solang es low current LEDs sind, direkt ansteuern kann, ohne Transistoren benutzen zu müssen. Meine Frage lautet also wie folgt:

1) Wie steuer ich mit einem Atmega8 die LEDs an?

Ich Programmiere mit Bascom und möchte hier nicht nach einer fertigen Lösung suchen, sondern nach Vorschlägen, wie man das umsetzt.


MfG Jawaiica'

BID = 794507

Kleinspannung

Urgestein



Beiträge: 13360
Wohnort: Tal der Ahnungslosen

 

  


Zitat :
Jawaiica hat am 29 Okt 2011 20:26 geschrieben :

Ich habe einen Atmel Atmega8 und würde das gerne mit diesem umsetzen. A

Vom Prinzip etwa so...


_________________
Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.
(Albert Einstein)

BID = 794511

Jawaiica

Gerade angekommen


Beiträge: 8
Wohnort: Hannover

Naja aber bei dem Vorschlag hätte ich ja wieder Transistoren dabei, mit denen ich schalten muss. Auf dieser Seite hier steht, dass man die LEDs direkt ansteuern kann, wenn es low current LEDs sind: http://www.mikrocontroller.net/articles/LED-Matrix#Direkt

Meine nächste Frage wäre dann aber auch, wie sieht das mit dem Code aus? Wie sage ich dann zum Beispiel, dass Led 0|5 leuchten soll?


BID = 794518

Kleinspannung

Urgestein



Beiträge: 13360
Wohnort: Tal der Ahnungslosen


Zitat :
Jawaiica hat am 29 Okt 2011 21:03 geschrieben :

Wie sage ich dann zum Beispiel, dass Led 0|5 leuchten soll?

Na in dem du die entsprechenden Portpins setzt oder eben nicht setzt...

_________________
Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.
(Albert Einstein)

BID = 794522

Jawaiica

Gerade angekommen


Beiträge: 8
Wohnort: Hannover

also zum Beispiel
PORTB.6 = 1
PORTC.6 = 1

?

BID = 794631

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
solang es low current LEDs sind, direkt ansteuern kann, ohne Transistoren benutzen zu müssen
Vergiss die Sache mit Low-Current, das ist eine veraltete Spezifikation, und verwende normale moderne ultrahelle LED.
Deren Wirkungsgrad ist genau so gut oder besser als der der ehemaligen Low-Current Typen, aber sie halten mehr aus.

Den Vorwiderstand wählst du so, dass der gewöhnlich zulässige Dauerstrom von 20mA nicht mehr als um 50% überschritten wird; dann werden sie auch nicht gleich beschädigt, wenn beim Experimentieren der Multiplex mal stehen bleibt.

Die Ausgangsströme für die Ports des µC dürfen natürlich auch nicht überschritten werden.
M.W. sind bei Atmels meist 80mA Dauerstrom zulässig, impulsmäßig evtl. etwas mehr. ---> Datenblatt.
Bei so hohen Strömen sollte man bei der Berechnung der Vorwiderständes auch den Spannungabfall im Ausgangstreiber des µC berücksichtigen.
Evtl. ist das in positiver und negativer Richtung verschieden, und dementsprechend ordnet man dann die Polarität der von einem gemeinsamen Ausgang zu treibenden LED an.


BID = 794666

Jawaiica

Gerade angekommen


Beiträge: 8
Wohnort: Hannover

das Ding ist nur, dass ich die low current LEDs schon länger besitze und nicht weiß was ich damit machen soll^^ Da dachte ich mir, dass ich ne LED Matrix daraus baue, um mal ein wenig in dem Gebiet rum zu forschen.

Ich dachte jetzt an sowas:
Bild eingefügt

So würde das doch dann mit low current LEDs funktionieren, wenn ich gescheite Widerstände benutze oder?

BID = 794676

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Softwareseitig macht man das mit einem Puffer, wie der organisiert ist, ist im Prinzip abhängig davon, wie die Matrix angesteuert wird, also entweder 12 Byte, wobei dann drei Bits ungenutzt sind, oder 5 Words (10 Byte), wovon pro Word vier Bits ungenutzt sind.

Immer dann, wenn die nächste Zeile aktiviert wird, holt man sich aus dem Speicher das entsprechende Bitmuster, gibt es aus und erhüht den Zähler.

Will man eine bestimmte LED an- oder ausschalten, dann manipuliert man bloß das entsprechende Bit im Puffer, fertig.

Keine Ahnung, ob die Syntax jetzt so 100% ist, aber das könnte etwa so aussehen:

' Puffer
Dim framebuff(12) As Byte
Dim row           As Byte = 0


' Interrupt des Timers
gebeAus(framebuffer(row))

row = row + 1
If row = 12 Then row = 0 '

Return

' Manipulieren der LEDs:
Function setLED(row As Byte, mask As Byte)
   framebuff(row) = framebuff(row) Or mask
End Function

Function clearLED(row As Byte, mask As Byte)
   framebuff(row) = framebuff(row) And (Not mask) 'oder so, auf jeden Fall mit dem Einerkomplement verUndden
End Function

Function clearMatrix()

    Dim i as Byte
    For i = 0 to 11
        framebuff(i) = 0
    Next
End Function




gebeAus() ist ein Platzhalter für ein Statement wie z.B. PortC = ... .

_________________

BID = 794689

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
dass ich die low current LEDs schon länger besitze und nicht weiß was ich damit machen soll
Jedenfalls nicht für Neuentwicklungen verwenden, das wäre vergebene Liebesmüh.
Setze sie sie für stromsparende Kontrollämpchen ein, aber nicht für Zwecke, bei denen das ganze Projekt den Bach runter geht, nur weil ein paar nicht mehr beschaffbare Lämpchen den Geist aufgeben.



Zitat :
So würde das doch dann mit low current LEDs funktionieren, wenn ich gescheite Widerstände benutze oder?
Schau lieber ins Datenblatt, wieviel Impulstrom diese Dinger vertragen und für welche Impulsdauern.
Wenn du das übertreibst, wirst du bald weniger von diesen ehedem teuren Teilen haben.


P.S.:

Zitat :
Ich dachte jetzt an sowas:

Das würde funktionieren, wenn dein µC soviele freie Ausgänge hat.
Das ist aber selten der Fall, und wenn, dann können die meist nur geringe Ströme schalten.
Die Verwendung von Schieberegistern zur Porterweiterung hat auch einen Haken.
Die von Bastlern gut und preisgünstig zu verwendeten Typen der 4000er oder 74C- auch noch 74HC-Serie haben nicht so kräftige Ausgangsstufen um LEDs im Multiplex zu betreiben, so daß man dann doch zusätzliche Treibertransistoren benötigt.
74AC könnten es schaffen, aber da warten wegen der sehr hohen Schaltgeschwindigkeit einige Probleme, die dem Gelegenheitsbastler erhebliche Schwierigkeiten bereiten dürften.
Von den durch das schnelle Schalten hoher Ströme hervorgerufenen Störungen in Rundfunk, Fernsehen und anderen Funkdiensten mal ganz abgesehen.

[ Diese Nachricht wurde geändert von: perl am 30 Okt 2011 21:00 ]

BID = 794727

Jawaiica

Gerade angekommen


Beiträge: 8
Wohnort: Hannover

Ok, also ich habe mir jetzt ein paar ultra helle LEDs bestellt mit denen ich das ganze testen werde(so kann ich auch eine 20x5 Matrix bauen).
Die low current LEDs als Kontrollleuchten zu benutzen finde ich gut und werde das jetzt auch so machen.

Ich benutze einen Atmel Atmega8 und dachte jetzt eigentlich, dass jeder Port 40mA ausgibt. Ist das denn nicht der Fall?

@DonComi:
Vielen Dank, ich werde das sofort ausprobieren, sobald ich die Matrix gebaut habe!


MfG Jawaiica

BID = 794736

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
Ich benutze einen Atmel Atmega8 und dachte jetzt eigentlich, dass jeder Port 40mA ausgibt. Ist das denn nicht der Fall?
Um solche Fragen zu beantworten gibt es Datenblätter, in die man ruhig einmal hineinschauen sollte, wenn man vorhat die Chips an der Grenze ihrer Leistungsfähigkeit zu betreiben.
http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf

Dort steht, dass jeder beliebige Portpin mit bis zu 40mA Gleichstrom belastet werden kann.
Wenn es möglich ist, dass gleichzeitig alle LEDs der Matrix angezündet werden (z.B. nicht bei der Darstellung von Texten) wäre das auch der Impulsstrom, den der Port liefern darf.
Wieviel die einzelne LED davon abbekommt, richtet sich nach der Anzahl, die gleichzeitig von einem Portpin angesteuert werden (können).

Aus Bild 147 geht hervor, dass bei einer Betriebsspannung von 5V aus dem Pin etwa 60mA herauskommen können, wobei der Spannungsabfall am "oberen" Treibertransistor aber schon 2V beträgt.
Die Leistungsfähigkeit des "unteren" Treibers ist nach Bild 149 etwa ebenso groß, sodaß zum Betrieb der LED mit diesem Strom nur 1V verfügbar wäre.
Das reicht nicht einmal für rote LEDs.

Im Übrigen sollte der Spannungsabfall an den Treibertransistoren überhaupt möglichst gering sein, weil sich dadurch sonst, je nach Anzeigemuster sichtbar unterschiedliche Helligkeiten der LED ergeben.
Deshalb wollen einmal annehmen, dass an den beiden Treibertransistoren zusammen nur 1V verlorengehen dürfen.
Des weiteren wollen wir annehmen, dass wir eine Matrix aus 8 Zeilen und 10 Spalten, also 80 LED multiplexen wollen.

Da ein Ausgang dann stets 8 LEDs einer Spalte bestromen muss, während der andere nacheinander nur jeweils 1 LED einer Zeile versorgt, wird der grösste Spannungsabfall an dem Spaltentreiber auftreten.
Angenommen dies sei der N-kanal-FET (weil die generell etwas bessere Eigenschaften haben als ihre komplementären Geschwister), können wir aus Bild 149 einen Strom von etwa 35mA bei knapp 1V Spannungsabfall entnehmen
Diese 35ma müssen sich auf 8 LED verteilen, und demnach steht für die einzelne LED ein Impulsstrom von 35/8= 4,4mA zur Verfügung.
Diesen Strom muß auch der Zeilentreiber (in den Vorwiderstand) liefern.
Dafür ermitteln wir aus Bild 147 einen Spannungsabafall am Treibertransistor von lediglich ca. 100mV.
Da die einzelne LED nur für 1/10 der Zeit eingeschaltet ist, wird sie im Mittel nur mit einem Strom von 4,4/10=0,44mA betrieben.
Damit erzeugen moderne LED aber schon eine sehr ordentliche Helligkeit, auch wenn nicht Low-Current draufsteht.

Da z.B. eine blaue LED etwa 3V braucht und von den 5V Versorgungsspannung schon 1V auf den Treibertransistoren der Portpins verloren gehen, müssen wir jetzt noch 1V auf den Vorwiderständen "verheizen" und dies bei einem Strom von 4,4mA.
Daraus errechnet sich die Größe des Vorwiderstandes beim Zeilentreiber(!) zu 1V/4,4mA=227 Ohm.
220 ist der nächste Normwert, 240 oder 270 geht aber auch.
Passt.

Für grüne LED mit einer Spannung von vielleicht 2,4V käme ein Vorwiderstand von (4-2,4)/4,4= 360 Ohm (Normwerte auch 330 oder 390), für rote LED mit 1,8V ein Vorwiderstand von (4-1,8)/4,4= 489 Ohm (Normwerte 470 oder 510) in Frage.
Ich würde generell den größeren der in Frage kommenden Werte vorziehen.
Zwar kann man mit dem kleineren Wert noch etwas mehr Helligkeit herausquetschen, läuft aber dann aber zunehmend Gefahr, dass sich eine unterschiedlicher Belastung der Spaltentreiber durch sichtbare Helligkeitsschwankungen bemerktbar macht.


Für deine 5x12 Matrix kannst du dieses Rechenbeispiel nun ja sicherlich leicht selbst modifizieren.

BID = 794875

Jawaiica

Gerade angekommen


Beiträge: 8
Wohnort: Hannover

Vielen Dank für die Hilfe! Verstanden habe ich jetzt fast alles, eine Frage bleibt mir dennoch:

Die Treibertransistoren dienen ja dazu eine Signal zu verstärken richtig? Wenn ich jetzt eine 12x5 bzw 20x5 Matrix machen würde, gäbe es dann eine Möglichkeit aus den 20 Aus/Eingängen weniger zu machen? Ich weiß, dass es dann schwieriger mit der Programmierung wird, aber möglich wäre es doch? Ich hatte mal gesehen, wie jemand mehrere Transistoren so geschaltet hat, dass nur noch 7 Anschlüsse da waren(weiß leider nicht mehr wie genau bzw. wie viele Transistoren es waren).

Eine Frage die mir dazu dann noch einfällt: Wie muss man die Transistoren dann verbinden?


MfG Jawaiica

BID = 794892

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Hallo,

Ja, das geht, hat aber nichts mit den Treibertransistoren zu tun.

Im Prinzip taktest du ja ja die N Spalten alle einmal durch, bis du wieder vorne anfängst. Da kann man dann statt N Ausgangspins bloß einen verwenden, der einen Dezimalzähler wie den CD4017 immer weitertakten lässt. Zu Beginn muss der Zähler allerdings einmal zurückgesetzt werden, damit Programm und Hardwarezähler wirklich synchron sind.

Alternativ dazu kann man selbstverständlich auch für Zeilen und Spalten Schieberegister benutzen, die Frage ist halt, ob es sich lohnt und ob du dann noch durchsteigst.
Damit käme man mit sehr wenigen IO-Ressourcen aus, allerdings erhöht das den Anspruch, denn die Daten müssen ja auch schnell genug geladen werden.

_________________

BID = 794899

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
Die Treibertransistoren dienen ja dazu eine Signal zu verstärken richtig?
Die Treibertransistoren, von denen ich schrieb, sind im µC enthalten.
Es ging also um die Ansteuerung der Matrix ohne externe Treibertransistoren.

Da wir aber gesehen haben, dass insbesondere die Spaltentreiber hohe Ströme liefern müssen, von denen im Mittel nur ein kleiner Bruchteil der einzelnen LED zugute kommt, ist es sinnvoll an dieser Stelle besonders stromstarke externe Transistoren einzusetzen.

Besonders bei der Ansteuerung der Spalten kann man I/O-Pins sparen, weil dort ja immer nur ein ganz bestimmtes Muster, eine einzige durchlaufende 1, gebraucht wird.
Meist erzeugt man das mit einem prinzipiell beliebig langem Schieberegister, in das eine 1 eingetaktet wird und dann nur noch Nullen, bis die 1 am Ende wieder herausfällt.
Dazu braucht man nur zwei Steuerleitungen.

Die Daten für eine Zeile könnte man grundsätzlich auch auf diese Art über nur drei Pins in ein Schieberegister mit Latches laden, aber da gewöhnlich für jede Spalte ein völlig anderes Bitmuster benötigt wird, ist es bei nicht zu hohen Zeilenzahlen üblich, dieses direkt über die Portpins auszugeben.
Bei hohen Zeilenzahlen kann man hier auch mehrere kurze Schieberegister mit wenigen Takten über einige Portpins gleichzeitig laden.

Das sind aber Optimierungsaspekte, über die du dir jetzt nicht allzusehr den Kopf zerbrechen solltest.




BID = 795674

Jawaiica

Gerade angekommen


Beiträge: 8
Wohnort: Hannover

Hallo Leute,

ich habe mir jetzt mal eine kleine 2x2 Matrix zusammen gelötet um ein wenig zu testen, bevor ich mich an die größere Variante ranwage.
Eigentlich klappt alles sehr gut, nur ich weiß leider nicht, wie ich jetzt zum Beispiel die LED oben links ansteuern kann. Ich weiß, dass ich einen Port vom atmega8 öffnen muss, aber wie schließe ich jetzt die Minuspole an, damit ich nur eine LED zum leuchten bekomme? Wenn ich beide direkt zu GND stecke, dann leuchtet ja eine Reihe.
Ich habe das mal getestet und nur eine LED an GND gelegt und dann hat auch nur eine geleuchtet(was ja auch eigentlich logisch ist). aber dann kann ich die anderen ja nicht ansteuern, ich muss dann also die Minuspole mit dem µC verbinden. Nur wie?


MfG Jawaiica


      Nächste Seite
Gehe zu Seite ( 1 | 2 Nächste Seite )
Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 19 Beiträge im Durchschnitt pro Tag       heute wurden bisher 3 Beiträge verfasst
© x sparkkelsputz        Besucher : 182421498   Heute : 537    Gestern : 5459    Online : 193        29.11.2024    5:40
1 Besucher in den letzten 60 Sekunden        alle 60.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0858149528503