PWM mit ATMega8

Gast #1689108
Lesenswert?

Hallo
Will mit meinem Atmega8 PWM verwenden! Nur funktioniert das bis jetzt 
nicht... Kann mir jemand sagen was ich hier falsch mache?
1
#include <avr/io.h>
2

3
int main(){
4
  DDRB = (1<<PB1);
5
  TCCR1A = (1<<COM1A1) | (0<<COM1A0) | (1<<WGM11) | (1<<WGM10); 
6
  TCCR1B = (1<<WGM12) | (1<<WGM13) | (1<<CS12);
7
  OCR1A = 0x00FF;  
8
  while(1){}
9
}
Was ich mir dabei denke:
-WGM müsste denn PWM mode auswählen
-COM ob das Signal inverted wird oder nicht
-CS den Prescaler
-OCR den TOP value
Falls etwas nicht stimmt verbessert mich bitte!
Hoffe ihr könnt mir helfen!
Gast #1689145
Lesenswert?

Hi

>ich hab gedacht für Channel A ist das OCR1A!?

Du hast im Mode15 nur einen PWM-Kanal. Dabei ist OCR1A der Höchstwert 
des Zählers (Top) und OCR1B der Compare-Wert. Wenn du 2 Kanäle haben 
willst, solltest du Mode14 nehmen.

MfG Spess
Gast #1691553
Lesenswert?

OK aber was ist dann der Unterschied zwischen TOP und Compare value? ich 
hab gedacht beim TOP value wird immer die Spannung an OC1 gändert? 
Welcher Pin wird dann eig bei Mode 15 verwendet? OC1A oder OC1B?
Gast #1691566
Lesenswert?

Ich habs jetzt auch mal so versucht:
1
#include <avr/io.h>
2

3
int main(){
4
  DDRB = (1<<PB1);
5
  TCCR1A = (1<<COM1A1) | (0<<COM1A0) | (1<<WGM11) | (1<<WGM10);
6
  TCCR1B = (1<<WGM12) | (1<<WGM13) | (1<<CS12);
7
  OCR1A = 0xFFFF;  
8
  OCR1B = 0x00FF;
9

10
  while(1){}
11
}
funktioniert aber auch nicht...
#1691572
Lesenswert?

einsteiger schrieb:
> OK aber was ist dann der Unterschied zwischen TOP und Compare value? ich
> hab gedacht beim TOP value wird immer die Spannung an OC1 gändert?


Der TOP Wert (Top = Obergrenze) ist der Wert, bis zu dem der Timer 
zählt.

Für eine PWM brauchst du 2 spezielle Zählerstände. Bei einem der beiden 
wird der Pin auf 1 geschaltet, beim anderen auf 0.

Bei allen Fast-PWM Modi ist es so, das der eine spezielle Zählerstand 
der Übergang vom höchsten möglichen Timerwert auf 0 ist. Den andern 
speziellen Zählerstand gibst du in einem Register vor.

Der Timer zählt also laufend (jetzt nur als Beispiel)
1
  0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, ...

und während der Timer zählt, sorgt die PWM Logik dafür, dass der Pin 
entsprechend dem Zählerstand auf 0 oder 1 gesetzt wird. Hat dein 
Verrgl4eichsregister den zb den Wert 3, dann ergibt sich
1
  Timer: 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, ...
2
  Pin:   1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, ...

steht das Vergleichsregister auf 7, dann hast du
1
  Timer: 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, ...
2
  Pin:   1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, ...

wie du siehst, ist der Ausgang jetzt länger auf 1 als zuvor.
Mit dem Vergleichsregister legst du also fest, wie lange der AUsgang auf 
1 geht und wie lange auf 0.

Aber wer sagt eigentlich, dass der Timer immer nur bis 8 zählen soll? 
Niemand. Und genau da kommt der TOP Wert ins Spiel. In diesem Beispiel 
wäre der TOP Wert 8 gewesen. Du kannst ihn aber auch auf von mir aus 12 
setzen. Mit einem Vergleichswert von wieder 3, ergibt sich dann
1
  Timer: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 1, 2, 3, 4, 5, ...
2
  Pin:   1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  0,  0,  0, 1, 1, 1, 1, 0, 0, ...

> Welcher Pin wird dann eig bei Mode 15 verwendet? OC1A oder OC1B?

Steht alles im Datenblatt.
#1691646
Lesenswert?

Du hast gesetzt WGM10, WGM11, WGM12, WGM13

Laut Datenblatt ist das Modus 15

Modus 15 bedeutet:
  TOP Wert:        OCR1A
  Vergleichswert:  OCR1B   (muss so sein, weil A ja schon für TOP
                            gebraucht wird)

OCR1A setzt du.
Aber wo setzt du OCR1B?
Wo schaltest du den OC1B Pin auf Ausgang?
Wo teilst du dem Timer mit, dass der den OC1B Pin ansteuern soll?

Falls du es jetzt immer noch nicht begriffen hast:
Du kannst nicht den A-Kanal nehmen. OCR1A fungiert als TOP Wert und ist 
damit automatisch aus dem Rennen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren