Hallöchen
Ich habe ein bisschen Probleme mit meiner RGB Matrix ich hatte die
letztens so zum Spaß aufgebaut. Doch jetzt habe ich das Problem, das ich
nicht weis wie ich am besten die LED´s dimme und mische. Ich bekomme es
zwar teilweise hin doch ist das recht aufwendig. ich hatte mir letztens
ein Programm geschrieben um Bilder zu erzeugen. Doch kann das Programm
nur die einfachen Töne Blau,Rot und Grün erzeugen. Ich habe mal ein
Prinziepschaltbild hoch geladen das Bild zeigt zwar nur eine 3x3 Matrix
und ich habe aber 8x8 Matrix, aber zum verdeutlichen müsste es reichen.
Ich steuere alle Transistoren direkt von einem Arduino Mega 2560 Board
an, da es sich ja nur um 36 Pins handelt. Hier ist mal ein Beispiel wie
ich 3 LED´s in reihe schalten würde.
Die Variable "Hilfe" Dient zum Zählen der erzeugten Bilder.
Die Variable "ausgleich" dient dazu, dass ein Bild welches nur 1 Pixel
zeigt genau so lange dauert wie ein Bild was 64 Pixel zeigt.
Die Variable "Zwischenzeit" dient dazu, dass ich die LED´s nicht mit
System Takt schalte.
Kann mir vielleicht eine Helfen wie ich die Farben am besten mischen und
dimmen kann. Weil in meinem Fall geht es ja nicht das ich auf einen Pin
ein PWM Signal gebe wenn ich die Pins alle 550 µS schalte.
Es wäre hilfreich, wenn du den gesamten Schaltplan posten würdest oder
zumindest bei deinem die Pinnummern hinzufügst.
Ich vermute etwas bei deine Hardware ist suboptimal. Für eine 8x8
RBG-Matrix reichen meiner Meinung nach 24 Pins nicht. Eine 8x8 RGB
Matrix ist elektrisch meist eine 8x24 Matrix.
Um + zu schalten verendet man normalerweise PNP-Transistoren.
Gibts Ne schrieb:> Genau, die sind nämlich falschrum drinne;)
Nicht nur das, wenn das jeweils R G B nebeneinander sind, verwenden die
deselben Vorwiderstand und sind parallelgeschaltet - da leuchtet nur die
rote.
Es ist immer wieder erstaunlich, warum Leute das Rad jedesmal falsch
erfinden müssen, und sich weigern, vorher nachzugucken, wie andere das
erfolgreich aufgebaut haben.
Gibts Ne schrieb:> Genau, die sind nämlich falschrum drinne;)MaWin schrieb:> und sind parallelgeschaltetMichele S. schrieb:> Hier ist mal ein Beispiel wie> ich 3 LED´s in reihe schalten würde.
Wenn er mal den gesamten Schaltplan posten würde, würden wir Wissen
welche dieser Fehler er wirklich gemacht hat...
Ach habe den schaltplan gerade nur erstellt um euch zu zeigen wie es
aufgebaut ist. Habe die LED´s ausversehen falsch herum eingezeichnet.
Die Schaltung funktioniert das ist nicht das Problem es geht nur darum
faben zu mischen. Das ist schon die ganze Schaltung ich könnte höchstens
noch an die Transistoren Zahlen von von 1-32 Schreiben ich habe mich
oben verschrieben ich brauche natürlich keine 36Pins sondern nur 32.
8xAnode
8xKathode Blau
8xKathode Rot
8xKathode Grün
Wie schon gesagt würde ich es auch an sich hinbekommen die Farben zu
dimmen. Nur wäre es dan sehr aufwändig weil ich dan in manchen Frames ab
und zu die LED länger dunkel lassen müsste was keine schöne Lösung wäre.
Michele S. schrieb:> Die Schaltung funktioniert das ist nicht das Problem es geht nur darum> faben zu mischen.
Was ist dein Problem beim Mischen? Hättest du auch ein Problem, wenn du
z.B. Magenta ( R 100%, G 100%, B 0%); mischen willst? Oder geht es dir
dabei auch ums dimmen?
Michele S. schrieb:> digitalWrite(9, LOW);> digitalWrite(36, LOW);> digitalWrite(8, HIGH);> digitalWrite(36, HIGH);
Wieso schaltest du Pin 36 immer wieder von '1' auf '0' und dann wider
auf '1'?
Wenn Pin 36 die Anoden steuert würde man das so machen:
Alles Kathoden ein-/ausschalten
Anode1 auf '1'
Delay
Anode1 auf '0'
Alles Kathoden ein-/ausschalten
Anode2 auf '1'
Delay
Anode2 auf '0'
Alles Kathoden ein-/ausschalten
Anode3 auf '1'
Delay
Anode3 auf '0'
Alles Kathoden ein-/ausschalten
Anode4 auf '1'
...
Normalerweise schaltet man nicht jede LEDs einzeln, sondern Zeilenweise.
Hier eine kurze Animation dazu:
http://www.franksworkshop.com.au/Electronics/RGB/multiplex_ani/multiplex.gif
Ja das mit dem Zeilenweise schalten stimmt dadurch könnte ich die
Leistung etwas verbessern und den Quelcode verkürzen.
Mangan wäre jetzt kein Problem einfach 2 LEDs anzumachen aber z.b.
R 70%, G 50%, B 20%
Weil der PWM Ausgang Des Arduino Funktioniert ja mit 490HZ das bedeutet
ja eine Periode dauert 2,04x10Hoch-3 Sekunden. Bei mir dauert ein
Schaltvorgang der LED ja aber nur ca 500x10Hoch-6 Sekunden.
Das Dimmen würde ich mit bit angle Modulation machen.
Für 8bit BAM musst du jeden Frame 8-mal ausgeben.
Jedes bit des PWNM-Registers wir einmal ausgegeben. Das MSb wird
8-mal so lange wie das LSb ausgegeben.
In Anhang eine kurze Erklärung.
Michele S. schrieb:> Das hört sich sehr gut an es erinnert mich auch an eine Sache die ich> bereits ausprobiert hatte. Danke
Es hat den Vorteil gegenüber normalem PWM, dass man viel weniger CPU
Auslastung hat. Ich einem 10bit PWM mit 100Hz zum Vergleich mit beiden
Methoden auf einem PIC24 (@32MHz) gemacht:
PWM: ~11% CPU Auslastung
BAM: ~0.18% CPU Auslastung
Beides in Software natürlich.