3Phasen PWM mit Atmega48

OP #4250724
Lesenswert?
• ▲
▼
Hallo zusammen

Ich würde gerne mit dem Atmega48 (Hardware ist gesetzt, da bereits 
vorhanden!) 3 Phasen PWM zur Dimmung von einer RGB Led erzeugen.

Leider hat der Mega nur einen Counter mit 16bit und dieser hat nur 2 
OutputCompares.

8bit PWM genügt mir leider nicht.
12bit wäre das minimum und 16bit wäre perfekt.

In Software könnte man dies ja mittels Intterupt machen.
PWM Frequenz: 100HZ = T = 10ms

Bei 16bit
10ms/65535 = 0.000152ms = 152nS = 6.57MHz ist für einen Interrupt viiiel 
zu schnell!

Bei 12bit
10ms/4096 = 0.00244ms = 2.44uS = 409kHz immer noch sehr schnell für 
einen Interrupt.

Die eigentlichen PWM Werte (DutyCycle) werden in der Anwendung 
kontinuierlich angepasst. Die LED soll ständig ändernde Farbverläufe 
anzeigen.

Wie würdet ihr dieses Problem lösen?
Danke schonmal!
Gast #4252472
Lesenswert?
• ▲
▼
Wenn genug 8-Bit PWM vorhanden sind, würd ich die nehmen und die 
Zwischenwerte über eine Umschaltung der PWM-Werte machen. Dann musst Du 
nur alle 256 Zyklen in den Intterrupt. Gegenüber der reinen 16-Bit PWM 
hast Du sogar noch den Vorteil, daß das z.B. 16 MHz / 65536 = 244 Hz 
Flimmern nur noch 1/256 der Helligkeit beträgt. Und wenn Du es noch 
glatter brauchst, berechnest Du die Software-Bits nach dem 
Delta-Sigma-Prinzip.
Gast #4252481
Lesenswert?
• ▲
▼
Holger K. schrieb:
> Bei 16bit
> 10ms/65535 = 0.000152ms = 152nS = 6.57MHz ist für einen Interrupt viiiel
> zu schnell!
>
> Bei 12bit
> 10ms/4096 = 0.00244ms = 2.44uS = 409kHz immer noch sehr schnell für
> einen Interrupt.

Ober, da du nur einen PWM-Kanal in Software machen musst, brauchst du 
nur 2 Interrupts pro Periode, eins fürs Ein- und das Andere fürs 
ausschalten und nich 2^16.
#4254221
Lesenswert?
• ▲
▼
Holger K. schrieb:
> Ich würde gerne mit dem Atmega48 (Hardware ist gesetzt, da bereits
> vorhanden!) 3 Phasen PWM zur Dimmung von einer RGB Led erzeugen.
> Leider hat der Mega nur einen Counter mit 16bit und dieser hat nur 2
> OutputCompares.
> 8bit PWM genügt mir leider nicht.
> 12bit wäre das minimum und 16bit wäre perfekt.

Für ein RGB-Moodlight reicht Soft-PWM mit ca. 12 Bit. Ca. deswegen, weil 
man sowieso keine lineare Auflösung braucht und die Dimmstufen besser 
gleich in exponentieller Abstufung auslegt. Wenn man noch mehr Auflösung 
braucht, dann BAM in Software.

> Wie würdet ihr dieses Problem lösen?

Hab schon: Beitrag "noch ein AVR Moodlight"

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.