16 Bit PWM mit ATMEGA32

Gast #2649272
Hi,
ich versuche mit einem ATMEGA32 eine LED Lampe zu dimmen. Mit 8-Bit PWM 
habe ich es schon versucht, das funktioniert auch wunderbar. Jetzt 
wollte ich das selbe mit 16 - Bit realisieren. Sollte mit dem Timer 1 ja 
funktionieren.

Realisiert habe ich es folgendermaßen:
1
ICR1 = 65535;
2
TCCR1A |= (1<<COM1A0);          
3
TCCR1B |=(1<<WGM13) | (1<<CS10);
Das sollte doch für ein Phase Correct PWM ohne Prescaler reichen oder?
Meiner Rechnung nach komme ich auf eine PWM Frequenz von 122Hz (mit 
16MHz Takt)

Allerdings blinkt die LED Lampe nur alle paar Sekunden. Bei der 
Konstantstromquelle heißt es ich bräuchte eine PWM Frequenz zwischen 
100Hz und 1kHz. Also sollte ich gerade noch drinliegen.

Mache ich da irgendwo einen Denkfehler?

Schonmal Danke und Viele Grüße

Matthias
Gast
Bist du dir mit der Frequenz sicher? Bin der Meinung ( ohne ins 
Datenblatt geschaut zu haben ) das Phase Correct PWM ne ecke Langsamer 
ist als Fast PWM.
Gast
Hi

>Meiner Rechnung nach komme ich auf eine PWM Frequenz von 122Hz (mit
>16MHz Takt).

Stimmt. Aber wozu braucht man für LEDS Phase-Correct-PWM?

MfG Spess
Gast
Also im Datenblatt steht
und mit f = 16 000 000, TOP = 65535 und N=1 komme ich da auf 122Hz.

Die Frequenz bei Fast PWM ist soweit ich weiß gleich, habe ich auch 
schon versucht. Einziger unterschied ist, das die an und aus Phase nicht 
gleich lang ist.

Viele Grüße

Matthias
Gast
Hallo Spees,

im Prinzip sollte es ja egal sein, ich habe es auch mit Fast PWM 
versucht, allerdings war es der selbe Effekt. Auch die Berechnung der 
Frequenz ist ja gleich.

Viele Grüße

Matthias
Gast
Hi

> Auch die Berechnung der Frequenz ist ja gleich.

Nein. Fast PWM ist doppelt so schnell wie Phase Correct bzw. 
Phase&Frequency Correct PWM.

MfG Spess
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 16000,000 kHz
// Mode: Ph. correct PWM top=ICR1
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA2;
TCCR1B=0x11;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0xFF;
ICR1L=0xFF;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

Weils kaum lesbar ist, nehme ich den Codegenerator nie...
Aber richtig ist i.a.
Kanns ja mal nachschauen, was das die Bits in TCCR1A bzw. B bedeuten.
Gast
Hi,

nochmal Danke für die ganzen Tipps. Habe es jetzt hinbekommen. War 
eigentlich ein dummer Fehler. Ich habe es auf einem AVR NET - IO Board 
von Pollin getestet. Der Timer 1 war nur dummerweise vom System mit 1024 
als Prescaler konfiguriert. Da ich TCCR1A nicht überschrieben habe, 
hatte ich dann eine Frequenz von 0,fastnichts.

Viele Grüße

Matthias

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.