www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM Modus "frequenz correct" Mega8


Autor: Chris J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Ich möchte ein PWM Signal erzeugen mit einer festen Frequenz (feste 
Periodenlänge). Geht das auf diese Weise?

 FastPWM: WGM 12=1 , WGM 10=1
 PWM (Frequenz,Phase Correct): WGM 13=1 , WGM10=1


2. Die Frequenz soll so hoch wie nur möglich sein. (8 Bit Auflösung, 
kein Prescaler)

Bekomme ich dann bei 16MHz @ 8Bit eine PWM Frequenz von (16000000/256=) 
62.5KHz (bei FastPWM) und bei Phase/Frequenz Correct nur 31.25KHz?

3. Ist das so richtig, hab ich etwas vergessen?

Ich will folgendes:
-Wenn der Timer hoch zählt soll so lange der Wert kleiner als der Wert 
in OCR1A/OCR1B ist soll high am Ausgang anliegen, wenn der Timer wert 
größer ist soll der Ausgang auf Low fallen.
void initPWM(void)
{
DDRB = 0xff; // Port B als Ausgang

// beide Kanäle A und B haben die gleiche Frequenz/Taktung
// COM1A , COM1B: Clear wenn down, Set wenn Up Counting
// WGM11,WGM10 (TCCR1A):
// WGM13,WGM12 (TCCR1B):´

// Fast PWM 8-bit (WGM12,10 = Mode 5)
  TCCR1A  = (1<<COM1A1) | (1<<COM1A0) | (1<<COM1B1) | (1<<COM1B0) | (1<<WGM10);
  TCCR1B  = (1<<CS10) | (1<<WGM12); // kein Prescaling + PWM Mode 5
  
// PWM (Frequenz,Phase Correct) (WGM13,10 = Mode 9)
// TCCR1A  = (1<<COM1A1) | (1<<COM1A0) | (1<<COM1B1) | (1<<COM1B0) | (1<<WGM10);
// TCCR1B  = (1<<CS10) | (1<<WGM13); // kein Prescaling + PWM Mode 9

OCR1A   = 0; // initialwert Pulslänge/Takte
OCR1B   = 0; // initialwert Pulslänge/Takte
}

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wenn der Timer hoch zählt soll so lange der Wert kleiner als der Wert
>in OCR1A/OCR1B ist soll high am Ausgang anliegen, wenn der Timer wert
>größer ist soll der Ausgang auf Low fallen.
klingt nach "Clear on Compare match"
// "Clear on Compare" -- nur jeweils Bit x1 setzen
TCCR1A  = (1<<COM1A1) | (1<<COM1B1) | (1<<WGM10);
> The extreme values for the OCR1x Register represents special cases when
> generating a PWM waveform output in the fast PWM mode. If the OCR1x is set
> equal to BOTTOM (0x0000) the output will be a_narrow_spike for each
> TOP+1 timer clock cycle. Setting the OCR1x equal to TOP will result in a
> constant high or low output (depending on the polarity of the output set
> by the COM1x1:0 bits.)
(datenblatt "Modes of operation")
Wenn OCR1x=0 beabsichtigt ist....

Alles andere sieht korrekt aus.

hth.Jörg

Autor: Chris J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf Seite 109 (Mega8 Datenblatt) steht dass man beim CTC Mode die 
Frequenz verändert. Das brauch ich ja gerade nicht, soll schon eine 
feste Periodenlänge haben.
> Wenn OCR1x=0 beabsichtigt ist....
Soll ich dann CS12=0 CS11=0 und CS10=0 setzen um die clock zu 
deaktivieren damit es keine mini Impulse gibt?

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab aber auch "Clear on Compare" (wie in tab. 38 "Compare output 
mode") geschrieben und nicht "Clear TIMER on Compare" (CTC) ;)

> Soll ich dann CS12=0 CS11=0 und CS10=0 setzen um die clock zu
> deaktivieren damit es keine mini Impulse gibt?
Den Timer abzuschalten ist eine Möglichkeit - außer der Timer erzeugt 
Interrupts.
 Aber wenn der Spike nicht stört ist das auch egal, sonst könntest du 
auch die COM1xn-Bits auf "normal operation" und den Output (ab)schalten, 
wenn du kein PWMsignal (also 0% oder 100% Duty-Cycle) brauchst.

hth. Jörg
ps.: die Kapitel 'Modes of Operation' und 'Register description' sind 
die wichtigsten bei den Timern ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.