www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LED Matrix PWM, Verständnisfrage


Autor: Johannes G. (johannesg00)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich weiß, zu diesem Thema gibt es viele Beiträge, jedoch habe ich nun 
mal eine Frage dazu...
Ich will eine einfache 8x8 LED Matrix bauen, die voll dimmbar ist.
Nun die Frage: Wie regel ich das mit dem dimmen? Lege ich die PWM 
Signale an die Zeilen an, wenn die Spalte eingeschalten ist, oder erhöhe 
ich die Multiplexfrequenz so, dass ich bei z.b. 256 "Spalten 
durchläufen" eine LED dann z.B. nur 128 mal einschalte?
Ich hoffe ihr versteht, was ich meine.. Ich wusste nicht, wie ich das am 
besten formulieren kann..

Viele Grüße,
   Johannes

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes G. schrieb:
> Nun die Frage: Wie regel ich das mit dem dimmen? Lege ich die PWM
> Signale an die Zeilen an, wenn die Spalte eingeschalten ist...

Hallo,

ungefähr so, aber die Takte müssen synchron sein: wenn die LED per 
Spaltensignal für x µs angeschaltet wird, soll das entsprechende 
Zeilensignal 0..x µs bzw. etwas weniger dauern. Oder umgekehrt.

Dazu müsste man einen IRQ für jeden PWM-Zyklus haben, und wenns mehrere 
PWMs mit verschiedenen Werten sein sollen, müssen die auch synchron 
laufen. Ich denke, mit einem schnellen Prozessor geht das in Software 
leichter als mit HW-PWMs.

Bei 8 Spalten, 256 Stufen und 100 Hz Flimmerfrequenz kommt man auf rund 
200 kHz für den Time Interrupt. Anspruchsvoll aber möglich.

Gruss Reinhard

Autor: Jürgen W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warscheinlich wirst du Schieberegister benutzen, oder ?

Einfach mal eine PWM ca.2Khz an die Enable-Eingänge des Schieberegister 
legen.
Funktioniert bei mir bei einer 24*8 Matrix.

Grüsse Jürgen

Autor: Christian T. (shuzz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damit kannst Du die Matrix aber nur global dimmen.

Der TE schreibt ja was von "voll dimmbar", ich nehme an er will die LEDs 
einzeln in der Helligkeit steuern können.

Reinhard Kern hat mit seiner Rechnung recht, es läuft auf einen 
Timer-Interrupt mit 200kHz raus. D.h. bei einem Prozessortakt von z.B. 
16MHz bleiben ganze 80 Takte pro ISR Aufruf. Dann macht das Teil aber 
auch nix anderes mehr...

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man wird zumindest kaum drum herumkommen in ASM zu programmieren. Dann 
sind 80 Zyklen für die ISR aber nicht so wenig. Da könnte noch fast die 
halbe Rechenzeit übrig bleiben.

Autor: Johannes G. (johannesg00)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für eure Antworten... ;)
ASM hab ich noch nie verwendet, bis jetzt immer nur C, und da bin ich 
auch nicht sooo fit..
Ich überlege das ganze nun erstmal als 4x4 Matrix aufzubaun, damit ich 
mehr Zeit/Takte pro ISR habe.
Mal sehn ob das so klappt wie ich will... Ich halt mich einfach ran ;)

Viele Grüße


Edit:
Um das zu realisieren brauche ich ja dann 2 Timer, oder?
Eine ISR, die aufgerufen wird um die Spalte umzuschalten, und eine ISR, 
die in dieser zeit 256 mal aufgerufen wird?
Oder nehme ich einfach nur eine, und habe in dieser ISR einen Zähler, 
der bei 256 die nächste Spalte einschaltet?
Was haltet ihr für sinnvoller?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Johannes G. (johannesg00)

>Ich überlege das ganze nun erstmal als 4x4 Matrix aufzubaun, damit ich
>mehr Zeit/Takte pro ISR habe.

Lohnt sich nicht wirklich. 4x4=16 LEDs kann man prblemlos direkt per 
Soft-PWM steuern.

>Um das zu realisieren brauche ich ja dann 2 Timer, oder?

Nö, einer reicht locker.

MfG
Falk

Autor: Johannes G. (johannesg00)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab nun mal auf die schnelle probiert ein Programm dafür zu 
schreiben... (mit Hilfe des Soft PWM Artikels im Wiki)
Die Initialisierung für den Timer fehlt noch und die Ausgabe an den 
Ports.
Sieht jemand grobe Denk-Fehler, oder könnte das so klappen?

Viele Grüße

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im prinzip könnte das so gehen.
Es fehlt allerdings noch das Einschalten der LEDs. Außerdem sollte man 
beim Zeilenwechsel die LEDs kurz aus haben.

Ich vermute es wird günstiger, wenn man die LEDs nacheinander 
einschaltet und dann gemeinsam aus. So kann man besser den Fall ganz aus 
berücksichtigen.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ulrich schrieb:
> Man wird zumindest kaum drum herumkommen in ASM zu programmieren. Dann
> sind 80 Zyklen für die ISR aber nicht so wenig. Da könnte noch fast die
> halbe Rechenzeit übrig bleiben.

Hallo,

da könnte man ja noch ein nettes Load Balancing einbauen, damit nicht am 
Anfang alle LEDs ein und am Ende alle aus sind, sondern sich ein 
möglichst gleichmässiger Stromverbrauch ergibt...

Gruss Reinhard

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.