2 PWM Signale mit Atmega 32 / Timer 1

#1051196
Lesenswert?

Guten Tag

ich hätte mal eine Frage da ich irgendwie nicht weiterkomme.

ich will mit dem 16 bit Timer1 des Atmega 32, 2 PWM Signale an den 
Ausgängen 0C1A und OC1B erzeugen.

Der Atmega 32 kann dem Datenblatt zufolge 4 PWMs. 1. PWM mit Timer0, 2. 
PWM mit Timer2 und demzufolge muss ich wohl 2 PWM Signale mit dem 16 Bit 
Timer1 erzeugen.

Die Frage ist welche Bits ( TCCR1A, TCCR1B....???)muss ich setzten, um 
an den genannten Ausgängen 2 PWM Signale zu bekommen???

Wenn mir jemand weiterhelfen könnte wäre ich sehr dankbar.
#1051201
Lesenswert?

Was für eine PWM soll es denn sein? Eigentlich steht alles in der großen 
Tabelle bei der Registerbeschreibung der TCCR1x. Entweder ne PWM mit 
festem TOP-Wert (8-, 9- oder 10-Bit-PWM, Fast {Modus 5, 6 oder 7} oder 
Phase Correct {Modus 1, 2 oder 3}) oder variabel mit ICR1 als TOP (Modus 
8, 10 oder 14, je nachdem ob es Fast, Phase Correct oder Phase and 
Frequency Correct sein soll). Dann noch die COM1nx-Bits entsprechend 
setzen, so dass an den Ausgängen auch die entsprechenden Signale 
ausgegeben werden. Fertig...

Für die meisten Anwendungen ist Fast PWM völlig OK. Die anderen 
braucht's eigentlich hauptsächlich, wenn es um Schalttotzeiten bei 
Halbbrückenansteuerungen o.ä. geht.
#1083890
Lesenswert?

Hallo zusammen,

Ich realisiere gerade das gleiche wie Axel, nur habe ich ein Problem 
damit:
OC1B funktioniert einwandfrei, OC1A jedoch nicht.
Ich habe folgendes gemacht:

1
TCCR1A =    (1 << COM1A1)
2
         |  (0 << COM1A0)
3
         |  (1 << COM1B1)
4
         |  (0 << COM1B0)   //Fast-PWM: Compare Mode set (non-inverting) A+B
5
         |  (1 << WGM11)    //--> Waveform Generation Mode: 5
6
         |  (0 << WGM10);
7
     
8
TCCR1B =    (1 << WGM13)
9
         |  (1 << WGM12)
10
         |  (0 << CS12)    //clk/256
11
         |  (0 << CS11)
12
         |  (1 << CS10);

Außerdem füttere ich OCR1AL/OCR1BL mit Daten von einem DMX-Board!

Ich sitze nun schon ewig davor und komme einfach nicht weiter!
Hat jemand eine Idee was falsch ist?

Danke

gruß Markus
#1084674
Lesenswert?

Oh je!!!

Ich hab endlich den Fehler gefunden!
DDRD von OC1A und OC1B wurden nacheinander gesetzt! Ist natürlich 
blödsinn, da der 2. Befehl den ersten überschrieben hat!

Naja ich hatte mir die PWM-Routine mal hier heraus gesucht...
Wie das jemals funktioniert haben soll ist mir schleierhaft!

frank trotzdem vielen dank, ist dir vielleicht noch was anderes 
aufgefallen?

gruß markus

PS: Glaube nie an die Perfektheit anderer und vorallem nicht an deine 
eigene!!!

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