UPDATE - BAM - Bit-Angle-Modulation - Dimmung vieler LEDs mit einem µC

  • dazu kommt ja noch: auch für das kleinste Segment reicht nicht 1 Takt, man muss ja die Daten holen und ausgeben...


    in Assembler würde das so gehen, dass man die Daten halt vorher in Registern ablegt, und dann nur noch ausgibt - macht jeweils einen Takt, also für bis zu 8 Kanäle so möglich... würde dann z.B. so aussehen:


    out PortA, BCM_Muster_1
    out PortA, BCM_Muster_2 ; macht also 1 Takt für das erste Segment
    nop
    out PortA, BCM_Muster_3 ; macht also 2 Takte für das 2. Segment
    nop
    nop
    nop
    out PortA, BCM_Muster_4; macht also 4 Takte für das 3. Segment


    usw. - statt den 3x nop könnte man hier auch schon das Register aus dem RAM holen, im nächsten Segment sind's schon 8 Takte, da kann man dann z.B. gleich den Timer für den nächsten Durchgang laden o.ä. - und das ganze dann halt so weiter, bis ein Segment mal genug Takte hat, dass man die ISR zwischenzeitlich wieder verlassen kann...


    das wäre dann bei 16 Bit und 20 Mhz eine Frequenz von 305 Hz für einen BCM-Zyklus... in Bascom kannst Du das aber vergessen, da braucht wohl alleine das "PortA = BCM_Muster_1" schon 5-10 Takte... :D


    anderes Problem ist dann noch die tatsächlich erreichbare Auflösung, der kleinste Puls wäre hier 50 ns, das muss die "LED-Endstufe" dann auch noch sauber rüber bringen können - dazu hat Neni ja schon div. Berechnungen gepostet...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Du meinst "BCM-Tiefe"..? ;)


    hm, k.A., geht das, dass man was in asm schreibt, und das selbst in Bascom als neuen Befehl einfügt...? 8|


    da hätte ich aber keine Ahnung, wie man sowas macht - erst recht nicht, wenn man das dann noch konfigurieren können muss, das wäre ja ultra-aufwändig...


    bei mir gibt's ne 12-Bit-BCM in Assembler, und da der Rest meiner Programme auch in Assembler ist, für mich auch keine Notwendigkeit, da irgendwie ne Bascom-Lib davon zu machen... ;)

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Naja, rein Bits rausgeben bringt bei BAM ja auch nichts, den Mirror darfst nicht vergessen. Darüber kann man in vielen Foren lesen warum man bei BAM mit LEDs auf jeden Fall den Mirrorbetrieb nutzen sollte, sonst hat man unschönes Aufblitzen wenn man vom Wert 127 zu 128 schaltet bzw. ein kurzes Abdunkeln vom Wert 128 zu 127. Hab das mal in nem anderen englischen Forum verfolgt und die haben das da so gelöst das die quasi einen Mirror machen, also die Bit-Wertigkeiten von 1 bis 8 hoch und dann wieder von 8 bis 1 zurück und dann wieder hoch usw. Das soll das Problem beseitigen, braucht aber halt auch code.


    Und zum Thema ASM, C und Bascom wurde da auch eingegangen mit dem Ergebnis, entweder wenig Code und langsam oder viel Code und schnell.Wobei sich bei viel Code und schnell nicht mehr viel schenkte in den verschiedenen Sprachen, irgendwann hat man das auch in Bascom so weit ausgeschrieben das der Compiler auch nicht mehr viel mehr machen kann als das fast 1:1 in ASM zu übersetzen, aber das ist alles ne andere Sache.
    Ich denke auch das es hier eher an der Endstufe scheitern wird.
    Aktuell werden LM1117 als KSQs benutzt, die Versorgungsspannung ist so gewählt das nur noch der Minimalteil an den Widerständen bzw. den LMs verbraten wird und da hängen immerhin 18 MC-Es RGBW auf einer Alu-Platine. Auf 100% Dauerbetrieb werden die Chips grad mal 60° warm, passiv. Aktiv gekühlt wirds noch etwas besser.


    Aber 300Hz dürften wohl nicht reichen, das werden die bald nochmals im Labor ausmessen und mit der Videokamera testen.


    Aber mal anders gefragt, welcher µC hat min. 4x 10bit PWM Ausgänge? Ich dachte da an den ATMEGA162 nur kann ich da niegends rauslesen ob der auch bei beiden 16 Bit Timern die 10 Bit PWM hat?


    Gruß, Benny.

  • hm, k.A., geht das, dass man was in asm schreibt, und das selbst in Bascom als neuen Befehl einfügt...? 8|


    da hätte ich aber keine Ahnung, wie man sowas macht - erst recht nicht, wenn man das dann noch konfigurieren können muss, das wäre ja ultra-aufwändig...

    Natürlich geht das, und lustiger Weise sind solche Teile dann sogar sehr schnell weil im Hintergrund reiner ASM Code zur Umsetzung läuft.


    Gruß, Benny.

  • Naja, rein Bits rausgeben bringt bei BAM ja auch nichts, den Mirror darfst nicht vergessen.

    ?( ?( - natürlich bringt das nix, einfach irgendwelche Bits auszugeben :D - das muss wie gesagt vorher "berechnet" (eigentlich nur ein umsortieren) werden, und das macht man im längsten Segment, wo genug Zeit ist - da ist's dann auch egal, ob man das nun jedes 2. Mal andersrum macht ("der Mirror" 8o) oder nicht*...


    für die Wiederholfrequenz entscheidend ist jedoch, wie lange das *kleinste Segment* dauert, und da geht es eben nicht kürzer als "out portx, registerx" (1 Takt) - das ist die Grundlage für meine Rechnung, da spielt's auch keine Rolle, ob die Segmente nun in dieser oder jener Reihenfolge angeordnet sind...


    *hast Du da mal nen Link zu..? - das würde mich schon interessieren, was das bringen soll...

    irgendwann hat man das auch in Bascom so weit ausgeschrieben das der Compiler auch nicht mehr viel mehr machen kann als das fast 1:1 in ASM zu übersetzen, aber das ist alles ne andere Sache.

    Naja, aber einen Wert an einen Port ausgeben, macht Bascom eben nicht in 1 Takt - und das ist der Haken, wenn das kleinste Segment 5 Takte dauert, ist die Frequenz eben nur noch 1/5 - klar kann man diesen zeitkritischen Teil in Inline-Assembler einbauen, aber dann kann ich ja auch gleich die komplette Routine in asm schreiben... ;)


    P.S.: Du bist doch nun schon wirklich lange genug hier, um den Edit-Button zu finden..? :D ;)

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Google mal nach BAM, da gibt es nicht viele sinnvolle Beiträge in Foren bzw. nur ein ein paar Foren wird tiefer drauf eingegangen. Dürftest relativ schnell finden.


    Hintergrund ist der das wenn man z.B. immer vom niederwertigsten zum höchstewertigsten Bitwert durchgehen würde, dann würde man bei Wert 127 z.B. die Bits 01111111 haben und dann zu 128 -> 10000000 umschalten. Das würde dann den Effekt haben das bei 127 die 2. Hälfte der Zeit die LED an wäre und bei 128 die erste Hälfte der Zeit. Mach dann für nen kurzen Augenblick die gleiche Zeit aus wie wenn es 255 wäre -> 11111111. Das kann man dann als "Aufblitzen" erkennen. Das wurde in vielen Videos auf Youtube und in den Foren diskutiert. Deshalb der Mirror ;) Dann ist das wech. Das nannte der "Erfinder" dann BAM-BAM, genau, such mal nach dem Begriff, dann dürftest die entsprechenden Beiträge schneller finden.


    Gruß, Benny.


    EDIT:


    Habs gefunden, hier der Beitrag:


    http://www.picbasic.co.uk/forum/showthread.php?t=7393


    Und hier ne grafische Simulation der Mirrored Bit Angle Modulation:


    http://www.picbasic.co.uk/forum/showthread.php?t=10564

  • Klar, das stimmt natürlich, mit dem kurz mal ganz an bzw. ganz aus beim Übergang - wäre mir jetzt aber noch nicht aufgefallen... also weder bei meinen Versuchen, noch in obigem Video von Stefan


    liegt bei denen evtl. daran, dass die nur 100 Hz benutzen - bei 300 Hz oder noch mehr dürfte das aufblitzen bzw. absacken wohl so kurz sein, dass es nicht mehr auffällt - das ist wohl auch der Grund, warum anderswo eben ne Frequenz von mind. 300 Hz empfohlen wird... das hatte ich nicht kapiert, warum da stand, dass die BCM umso "geschmeidiger" läuft, je höher die Frequenz ist, das wird's wohl sein, was da gemeint war...


    aber einfach jeden 2. Zyklus andersrum zu machen, ist natürlich auch ne gute Idee - und auch nicht direkt kompliziert, halt die Fleißarbeit, das ganze praktisch 2x zu machen... und wie gesagt, auf die Berechnung der maximal möglichen Frequenz hat das auch keinen Einfluss...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Na, wenn Du's konfigurieren kannst, dann mach's doch einfach mal, häng' 4 LEDs dran und probier es aus, dann siehst Du ja, ob's tut oder nicht! :D - hier geht's ja um BAM/BCM, nicht um HW-PWM mit dem Mega162... ;)

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • ja klar, schöner ist das allemale, aber die ON-Time knubbelt sich immer noch mittig

    Jungs, also auch Benny und Pesi, wollte nur kur anmerken, daß ich zwar zwischenzeitlich mit extrem zerfuchter Stirn in der Ecke liege aber weiter dabei bleibe. Mit Hilfe von Onkel Google und zwei, drei mal Lesen raffe ich fast alles.


    Und wenn's knubbelt, hab ich wenigstens mal was zu Lachen. (Verstehen muß ich DAS ja hoffentlich nicht) Ich liebe dieses Forum ;)

  • Mohoin!


    Ich habe gerade meine RGB-Panels aus'm Keller gewühlt und wollte sie mal an nen xMega korken, um z.B. zu sehen, ob ich mit 4 SPI's bzw. mit den USART im SPI-Master mehr erreichen kann als mit som ollen 1284p. Dat löppt auch ganz schick, aber mit PWM is da nix zu wollen, daher bin ich auf diesen Thread hier gestossen.


    Ohne jetzt selber drüber nachgedacht zu haben (schäm), wie bastel ich ne BAM in meine Multiplex-Routine mit rein? Da habe ich ja schon nen Timer-Interrupt, der mir die Rows des Display's scannt und an dem ich auch nicht rumdrehen kann.
    Bin daher für jeden Tipp dankbar :)


    VG Jan


    PS. Meine jetzige ISR-Routine zum Multiplexen der Displays. Im Buffer sind die R/G/B-Values enthalten, sodass ich nur einen SPIOut brauche.