Compare von Timer verschieben

(Firma: matzetronics) #4254315
Lesenswert?
• ▲
▼
Holger K. schrieb:
> Welcher soll man hier wählen?

Kommt drauf an, wass du willst. Bei PWM Modes passiert ein OCR Update 
bei TOP oder BOTTOM:
Zitat:
"The OCR1x Register is double buffered when using any of the twelve 
Pulse Width Modulation (PWM) modes. For the Normal and Clear Timer on 
Compare (CTC) modes of operation, the double buffering is disabled. The 
double buffering synchronizes the update of the OCR1x Compare Register 
to either TOP or BOTTOM of the counting sequence. The synchronization
prevents the occurrence of odd-length, non-symmetrical PWM pulses, 
thereby making the output glitch-free."
OP #4254334
Lesenswert?
• ▲
▼
Matthias S. schrieb:
> Kommt drauf an, wass du willst.

Folgender Gedanke:

Ich brauche 3 Kanal PWM für RGB.
Der Mega48 hat nur zwei 16bit Compares.

Deshalb folgender Ansatz:

Ich Lasse den 16bit Counter mit prescaler 8 laufen = 200'000KHz (da 
F_CPU = 16MHz)

Nun wähle ich als TOP Value 14bit bzw. 16384
Dies ergibt mir einen overflow bzw PWM Frequenz von ca. 122Hz

Ich habe nun ein Array uint16_t arr[3] mit meinen drei Compare Werten 
für R G und B.

Im Overflow ISR schalte ich alle LEDs aus und setze den Compare auf 
arr[0] sowie eine count Variable auf 0 (damit ich weiss wo ich stehe).

Beim ersten Compare schalte ich die rote LED ein und setze den COMPARE 
auf arr[count+1] sowue count++

dadurch werden die LEDs zu unterschiedlichen Zeiten eingeschaltet und 
haben ihre individuellen PWM DutyCycles.

Der Interrupt wird jedoch nur mit maximal 4x F_PWM = 4x122Hz = 488Hz 
aufgerufen. 4x deshalb weil overflow plus 3 unterschiedliche RGB werte.

Sollten zwei Comparewerte zu nahe oder identisch sein, so wird ein Flag 
gesetzt welches dies azeigt. Dann soll im COMP ISR beide Farben 
eingeschaltet werden und count+=2 gemacht werden.

arr[] wird in einer separaten Funktion befüllt. Idealerweise in der main 
loop, da dies nicht prioritär ist.

Zwischen zwei Counts des Counters liegen 8 CPU Takte, da F_CPU / 8 
eingestellt ist. Da der ISR wohl kaum nach 8 Takten zu ende ist, werden 
zu nahe beienanderliegende compare werte zusammengefasst.

Denkt ihr, das könnte so klappen?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.