-         

Ergebnis 1 bis 5 von 5

Thema: 16Bit Software PWM XMEGA

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356

    16Bit Software PWM XMEGA

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo,
    Ich plane aktuell einen RGB LED Kontroller auf Basis eines Xmegas.
    Konkret geht es um einen Xmega32A4.
    Dieser besitzt zwar 16 Hardware PWM, Da ich jedoch 14 Leds ansteuern will (Also 42 Kanäle) bräuchte ich dann 3 Xmegas.
    Da ich an jedem der Xmegas noch 12 Pins (PORTa und B) freihab dachte ich an eine Software PWM.
    In dem Fall hätte ich pro Kontroller 28 Kanäle und bräuchte somit nurnoch 2, bei denen ich auch noch jede Menge frei hab.
    Jetzt stellen sich allerdings einige Probleme:
    Zum einen möchte ich die Komplette 24bit Farbpalette möglichst Fehlerfrei darstellen können, weshalb ich aufgrund der Gammakorrektur mind. 16 bit brauch, zum anderen möchte ich schnelle Farbänderungen möglich machen, weshalb die Frequenz mind. 50Hz betragen sollte.
    Ist das mit den 32MHz des Xmegas machbar oder fordere ich zuviel ?
    Der xmega hat ja 5 16bit Timer. Könnte man nicht die 28 Kanäle aufteilen, sodass jeder Timer einen Port behandelt ?
    Ich habe nochnicht damit gearbeitet, aber währe es nicht irgendwie möglich den DMA für sowas zu verwenden ?

    MFG Thalhammer

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451
    Wird nicht funktionieren, denn du hast nur 10 Takte Zeit Pro PWM Wert. Im worstcase (Werte gleich an verschiedenen Ports und nächster Wert +1) wird es nichts.

    Selbst mit Assembler wird es nichts, gerade wegen dem worst case. (kam auf ca. 10 Takte pro Port) für die ISR des Timers du hast aber wie gesagt nur 10 Takte Zeit, dann ist der Wert falsch.

    DMA sollte auch nicht gehen, da nicht zuverlässig genug (CPU ist vorrangig auf dem BUS)

    Abhilfe könnte ein externer I2C 16bit LED Controller schaffen.
    - leider nur 12bit http://www.ti.com/lit/ds/symlink/tlc5946.pdf sollte es aber auch mit 16bit geben

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356
    Was externes mit 16bit hab ich nicht gefunden, und schon garnichts was erschwinglich ist.
    Grundsätzlich muss man aber nicht 16 bit erzeugen, sondern nur 8 bit mit 16 bit abstufung.
    Was ich damit meine ist folgendes:
    Wenn man im Speicher ein Array mit 256 Elementen anlegt, das den Status der Ports enthält, und dann den DMA per Timerauslösen lässt (falls das geht),der die vorbereiteten Daten dann in den IO Bereich kopiert sollte das doch gehen oder ?

    //EDIT:
    Anscheinend giebts sowas ähnliches (für standard avr) schon:
    http://www.mikrocontroller.net/topic/149701
    Habs zwar noch nicht getestet, aber die Idee klingt gut.

    //EDIT2:
    Grundsätzlich sollten auch 25hz reichen (das auge "kann" ja ohnehin nur um die 15)
    In dem Fall sollte aber dann Scrambled PWM drin sein, damit kein Flackern entsteht.
    Dann hätte man 20 Takte in der ISR.
    Geändert von Thalhammer (07.02.2013 um 19:36 Uhr)

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451
    was meinst du mit 8 Bit mit 16 Bit Abstufung?

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356
    Nun ja ich brauche eine 16bit pwm, einstellbar müssen aber nur die 256 gammakorrigierten werte sein.
    Wodurch man die Bitmuster für die Ports im Speicher halten kann.
    Am Anfang setzt man einen Pointer auf Null und erstellt ein Array mit 256Elementen im RAM. In der ISR muss man dann nur den Wert an der Zeigerposition ausgeben und den Zeiger erhöhen. Ich blick durch diesen ganzen DMA Zeug noch nicht durch, aber der DMA erzeugt ja einen Interrupt sobald er fertig kopiert hat.
    In dieser ISR lädt man dann den neuen Wert als Source und wartet darauf, das der DMA wieder durch den Timerinterrupt gestartet wird.
    Das ganze sollte doch in 10-15 Takten machbar sein oder ?

Ähnliche Themen

  1. AVR mit 4 16Bit-Pwm
    Von Che Guevara im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 15.07.2011, 15:51
  2. 2x 16bit PWM ATMega32 @16MHz
    Von deko im Forum C - Programmierung (GCC u.a.)
    Antworten: 10
    Letzter Beitrag: 24.05.2011, 20:11
  3. ATMEGA64 PWM Mode 16bit
    Von Franz_vm im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 16.05.2007, 14:26
  4. 4x 16Bit-Hardware-PWM mit Bascom
    Von Goblin im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 01.07.2006, 17:25
  5. ATmega 16Bit PWM?
    Von cshansolo im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 13.09.2005, 14:11

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •