2 PWM Signale mit Atmega 32 / Timer 1

OP #1051196
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
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.
#1051238
hans wrote:
> @Johannes:
>>Überflüssiger Hinweis, da der OP das Datenblatt nach eigenen Angaben
>>bereits besitzt!
>
> Besitzen reicht nicht!!
Stimmt zwar im Prinzip, aber warum soll er es sich nochmal runterladen? 
Das bringt dann auch nicht weiter.
Gast #1053342
Das Datenblatt zu besitzen heißt nicht, dass man alles auf Anhieb 
versteht.
Ich hab da auch öfters Probleme und muss hier im Forum nachfragen. Ist 
doch was ganz normales
#1083890
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
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

Eine eigene Frage? Dieser Thread ist über 17 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.