Forum: Mikrocontroller und Digitale Elektronik Led Matrix BCM Dimmen


von Florian H. (invaderzz)


Lesenswert?

Hallo,

Also ich steuere eine 32x32-RGB-LED Matrix (Adafruit) mittels dem 
BeagleBone Black und dessen PRU's an. Hierbei nutze ich eine BCM, welche 
ich jedoch noch zusätzlich dimmen möchte.

Leider stellt sich ein Flackern ein, welches ich nicht weg bekomme, auch 
nicht im 400Hz betrieb (!?!).
Der Ablauf ist wie folgt:

1) n-Bit setzen
2) n-Zeit warten
3) Ausgang auf 0 setzen

4) n-Zeit warten
5) erhöhen der Bit-Wertigkeit (n+n)

Also pro Bit wird die LED n-Zeit eingeschaltet und auch wieder n-Zeit 
ausgeschaltet. -Kann das so funktionieren oder sollte ich die 
Ausschaltzeit fixieren ?

Der Quellcode dazu sieht folgendermaßen aus:
1
DELAY2:                          // illuminate loop
2
    SUB    regIll, regIll, 0x1   
3
    QBNE   DELAY2, regIll, 0x0
4
    MOV    regIll, regCILLU
5
6
    SUB    regBit, regBit, 0x1  
7
    QBNE   DELAY2, regBit, 0x0  // wait time = regIll * bit-valence
8
    MOV    regBit, regOff
9
    MOV    regMask, V_BLANK     // blank the display!
10
    MOV    r30, regMask
11
    MOV    regIll, regCWAIT
12
13
WAIT:                           // blank-loop
14
    SUB    regIll, regIll, 0x1
15
    QBNE   WAIT, regIll, 0x0
16
    MOV    regIll, regCWAIT
17
18
    SUB    regBit, regBit, 0x1  
19
    QBNE   WAIT, regBit, 0x0    // wait time = regIll * bit-valence
20
    MOV    regBit, regOff
21
    MOV    regIll, regCILLU
22
    JMP    POLL

: Bearbeitet durch User
von Kevin (Gast)


Lesenswert?

Florian H. schrieb:
> Also pro Bit wird die LED n-Zeit eingeschaltet und auch wieder n-Zeit
> ausgeschaltet.

Hast du dann nicht eine fixe 50% PWM? Oder verstehe ich was falsch?

von Eric B. (beric)


Lesenswert?

Florian H. schrieb:
> Leider stellt sich ein Flackern ein, welches ich nicht weg bekomme, auch
> nicht im 400Hz betrieb (!?!).

Resetet sich der Knochen vielleicht ständig?

von Florian H. (invaderzz)


Lesenswert?

Kevin schrieb:
> Hast du dann nicht eine fixe 50% PWM? Oder verstehe ich was falsch?

Ja das ist meine Frage, ob ich mir die BCM mit der darüberliegenden PWM 
"zerstöre".

Am Anfang jeder Loop (DELAY, WAIT) zähle ich einen counter herunter den 
ich mit
berechne.
Die PRU's laufen auf 200MHz-> 5ns Periodendauer.
16 mal soll das ganze in einer Sekunde passieren und 2 hoch 'bit' zum 
einberechnen der BCM.
Die Berechnung ist zwar etwas ungenau da ich die Zeit für den restlichen 
Programmablauf nicht mit ein berechnet habe, aber ich glaube nicht dass 
diese Ungenauigkeit solche Auswirkungen haben, denn das Problem tritt 
vor allem bei kleinen Frequenzen deutlich auf.

Diese Zeit wird dann entsprechend dem gewünschten Duty-Cycle aufgeteilt 
und dann in die Register 'regCILLU' und 'regCWAIT' geladen, diese werden 
auch während des programmes nicht mehr verändert.

Diese 'ILLU' schleife wird dann entsprechend der Wertigkeit des Bits 
wiederhohlt. Danach passiert das Gleiche in der 'WAIT'-Schleife, mit der 
Ausnahme dass diese ja entsprechend dem Duty-Cycle öfter oder weniger 
durchgelaufen wird, bzw. bei 50% duty-Cycle gleich oft wiederholt 
werden.

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.