Hallo Zusammen ich habe eine Frage bezüglich meines Vorhabens eine 16x10
RGB Matrix mittels eines AVRs anzusteuern (8-Bit Auflösung).
Habe mir schon diverse Beiträge zu dem Thema durchgelesen und auch die
Soft-PWM und LED-Fading Artikel implementiert.
Im Soft-PWM Artikel ist mir sogar ein Fehler aufgefallen:
Im Versuch 2 werden die Ausgänge nicht zurück gesetzt,
so dass die Rechenzeit doch höher ist als angegeben.
Nun zu meiner Frage:
Um ein Bild mit 200 Hz (100 würden reichen aber nicht bewegt)
darzustellen,
benötige ich für jede Spalte eine PWM-Frequenz von 2kHz?
Um jede Farbe noch einzeln zu steuern ergeben sich 6 kHz.
Oder habe ich hier einen Denkfehler?
Leider lässt sich mit der Variante aus dem Soft-PWM Artikel nur eine
PWM-Frequenz von ca. 600Hz realisieren.
Kennt ihr eine andere Lösung per Software-PWM eine solch hohe
PWM-Frequenz zu realisieren?
Sonst bleibt mir nur die Möglichkeit auf PWM Module umzusteigen,
da ich eine Lösung mit mehreren AVRs vermeiden möchte.
Oder gibt es einen bezahlbaren AVR, der mir 10/16 HW-PWM-Channels zu
Verfügung stellt?
Vielen Dank für eure Antworten.
(Bitte um ernstgemeinte Antworten und nicht nur "sinnfreie" Verlinkungen
auf ähnliche Beiträge, da ich hier schon sehr viele durchforstet habe
hier aber nicht wirklich eine Lösung präsentiert wird.)
Viele Grüße,
Peter
Evtl. wäre es praktikabel eine Subframe-Ansteuerung zu verwenden so wie
es beispielsweise bei der Ansteuerung eines Plasma Displays gemacht
wird.
Es wäre müßig das verfahren hier noch mal im einzelnen darzulegen. Im
Netz gibt es genug Quellen wo das gut erklärt ist. Einfach mal nach
"plasma subframe" suchen.
Peter schrieb:> Um ein Bild mit 200 Hz (100 würden reichen aber nicht bewegt)> darzustellen,> benötige ich für jede Spalte eine PWM-Frequenz von 2kHz?> Um jede Farbe noch einzeln zu steuern ergeben sich 6 kHz.> Oder habe ich hier einen Denkfehler?
Du meinst also, jede Spalte wird 10x so häufig angesteuert, wie jede LED
..!?
Da liegt eindeutig ein Denkfehler vor.
Gruß
Jobst
@ Lisa: Danke für die Info den Chip hab ich mir schon mal angeschaut,
werd wohl darauf oder PCA 9532 zurückgreifen falls sich keine
Software-PWM Lösung findet.
@Kai: Der 2560 ist bezahlbahr aber auch nicht günstig
und die 100 Pins sind mir fast schon wieder zuviel.
Muss mir das aber nocheinmal überlegen.
@Oliver: Kannst du das mit der Subframe-Ansteuerung etwas genauer
erleutern?
Meinst du damit Bit Angle Modulation?
Falss ja ist es ein Ansatz habe aber immer noch Probleme auf die
gewünschte PWM Frequenz zu kommen.
@Jobst
Meine Matrix besteht aus 10 Spalten mit 16 Zeilen zu drei Farben.
Die 16 Zeilen werden über 2 Ports angesteuert und die Spalten
durchgeschalten (Multiplex).
Um nun für das Gesamtbild 200 Herz zu bekommen muss ich doch jede Zeile
in einem Zehntel der Zeit ansprechen.
=> 2 kHz bzw 6 für RGB betrieb.
Falls du denkst ich irre mich bitte um genaue Erklärung.
Viele Grüße,
Peter
Peter schrieb:> Um nun für das Gesamtbild 200 Herz zu bekommen muss ich doch jede Zeile> in einem Zehntel der Zeit ansprechen.
Korrekt.
> => 2 kHz bzw 6 für RGB betrieb.
Nein, die Frequenz ändert sich dadurch nicht. Du hast nur 1/10 der Zeit,
aber es wird nicht 10x so häufig wiederholt.
Gruß
Jobst
Ich habe vor kurzem eine 16x16 RGB Matrix gemacht:
4 Einzelmatritzen 8 Anoden 24 Kathoden (8*RGB) verschaltet als Multiplex
1:8 (insgesamt 8 Anoden und 96 Kathoden)
Transistoren für die 8 Anoden
12 * TLC5916 an die 96 Kathoden
Atmega1284 per HW SPI an die TLC, ein Port an Transis.
BAM, 8 Bit / Farbe, 5 Bit nach Korrektur.
IIRC 1khz Update @ 20mhz, dh 1000 ganze Multiplexzyklen
Ich habe nochmal nachgeschaut, es sind doch nur ca. 150 Hz, weil ich die
Prozessorlast minimieren wollte, sodass noch eine kleine Grafik - Engine
drauf läuft.
Jobst M. schrieb:> Nein, die Frequenz ändert sich dadurch nicht. Du hast nur 1/10 der Zeit,
Um in einem 1/10 der Zeit einen kompletten PWM Zyklus unterzubringen
muss die PWM höher takten, sonst wird sie abgeschnitten, oder etwa
nicht.
Daraus folgt, dass die PWM-Frequenz bei 2/6 kHz liegt.
Würde ich die Multiplexfrequenz stark hochsetzen, folgt dadurch ein
erheblicher Daten-Umladeaufwand, der mir meiner jetzigen Überlegung nach
das ganze zu sehr bremst bzw. unmöglich macht.
Falls ich dennoch falsch liege, würde ich mich freuen wenn du es mir
bitte genauer erklären würdest warum.
@Sean: Hast du ein Bild davon?
Viele Grüße,
Peter
Peter schrieb:> @Sean: Hast du ein Bild davon?
Im Moment läuft es leider nicht, habe gerade keine Zeit es wieder in
Betrieb zu nehmen. Ich habe aber noch ein Video, mit einer einfachen
Endlosschleife, die etwa so aussieht:
while(1)
{
drawRectangle(rand() % 16, rand() % 16, rand() % 32, rand() % 32,
rand() % 32);
_delay_ms(300);
}
http://www.youtube.com/watch?v=PLY8A_yAaQs
Peter schrieb:> Daraus folgt, dass die PWM-Frequenz bei 2/6 kHz liegt.
Ach, das meinst Du. Ja.
Dann brauchst Du nur noch 16 PWMs, die einen Zyklus von 6kHz haben -
also 6kHz * 256 = 1,5MHz Takt.
Als Hardware schwer zu syncronisieren, in Software bekommst Du
vielleicht 4 Stück davon hin.
Gruß
Jobst