Probleme mit 8x8RGB Matrix

OP #3536118
Lesenswert?

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.
1
void setup(){
2
pinMode(2, OUTPUT); 
3
pinMode(3, OUTPUT); 
4
pinMode(4, OUTPUT); 
5
pinMode(5, OUTPUT); 
6
pinMode(6, OUTPUT); 
7
pinMode(7, OUTPUT); 
8
pinMode(8, OUTPUT); 
9
pinMode(9, OUTPUT); 
10
pinMode(22, OUTPUT); 
11
pinMode(24, OUTPUT); 
12
pinMode(26, OUTPUT); 
13
pinMode(28, OUTPUT); 
14
pinMode(30, OUTPUT); 
15
pinMode(32, OUTPUT); 
16
pinMode(34, OUTPUT); 
17
pinMode(36, OUTPUT); 
18
pinMode(38, OUTPUT); 
19
pinMode(40, OUTPUT); 
20
pinMode(42, OUTPUT); 
21
pinMode(44, OUTPUT); 
22
pinMode(46, OUTPUT); 
23
pinMode(48, OUTPUT); 
24
pinMode(50, OUTPUT); 
25
pinMode(52, OUTPUT); 
26

27

28
}
29
void loop(){
30
  int Hilfe=1;
31
  int Zwischenzeit =550;
32
  int Frames =0;
33
 int ausgleich=0;
34
 int Framezahl=10;
35
 while(1)
36
 {
37
 
38
ausgleich=16;
39
Frames=ausgleich*Framezahl;
40
while(Hilfe<Frames)
41
{
42
digitalWrite(9, HIGH);
43
digitalWrite(36, HIGH);
44
delayMicroseconds(Zwischenzeit);
45
digitalWrite(9, LOW);
46
digitalWrite(36, LOW);
47
digitalWrite(8, HIGH);
48
digitalWrite(36, HIGH);
49
delayMicroseconds(Zwischenzeit);
50
digitalWrite(8, LOW);
51
digitalWrite(36, LOW);
52
digitalWrite(7, HIGH);
53
digitalWrite(36, HIGH);
54
delayMicroseconds(Zwischenzeit);
55
digitalWrite(7, LOW);
56
digitalWrite(36, LOW);
57
digitalWrite(6, HIGH);
58
digitalWrite(36, HIGH);
59
delayMicroseconds(Zwischenzeit);
60
digitalWrite(6, LOW);
61
digitalWrite(36, LOW); 
62
Hilfe++;
63
}
64
Hilfe=0;
65
 } 
66
 }
Angehängte Dateien:
#3536125
Lesenswert?

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.
Gast #3536225
Lesenswert?

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.
OP #3536262
Lesenswert?

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.
#3536275
Lesenswert?

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
OP #3536466
Lesenswert?

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.
#3536735
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren