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
Peter schrieb: > Oder gibt es einen bezahlbaren AVR... Bezahlbar sind die alle... ATmega2560: 4x 8-bit PWM, 12x 2 bis 16-bit PWM
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
Sean Goff schrieb: > 8 Bit / Farbe, 5 Bit nach Korrektur 8 Bit / Farbe verstehe ich. Aber was heißt "5 Bit nach Korrektur"?
Mit Korrektur meine ich Anpassung an die Nichtlinearität des Auges. Hier ein guter Artikel dazu: http://www.mikrocontroller.net/articles/LED-Fading Von dort kommt auch die Tabelle, die ich verwende:
1 | const uint16_t pwmtable_8D[32] PROGMEM = |
2 | {
|
3 | 0, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 10, 11, 13, 16, 19, 23, |
4 | 27, 32, 38, 45, 54, 64, 76, 91, 108, 128, 152, 181, 215, 255 |
5 | };
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.