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.
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.
hans wrote: > Atmel kann helfen: > > http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf Überflüssiger Hinweis, da der OP das Datenblatt nach eigenen Angaben bereits besitzt!
DAnke schonmal Ich kann mit dem Timer1 aber auf jeden Fall 2 PWM Signale erzeugen, ODER??
Axel Leibold wrote: > DAnke schonmal > Ich kann mit dem Timer1 aber auf jeden Fall 2 PWM Signale erzeugen, > ODER?? Man kann mit dem Timer1 2 PWM Signale hardwaremässig erzeugen! Ob du zu den Auserwählten zählst wo das können kann ich von hier nicht sagen!
@Johannes: >Überflüssiger Hinweis, da der OP das Datenblatt nach eigenen Angaben >bereits besitzt! Besitzen reicht nicht!!
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.
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
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
Hallo Hat den niemand eine Idee oder einen Tip??? Bin über jede Hilfe dankbar, denn ich bin hier am Verzweifeln!!! Die Hardware ist schon fertig und auf 2 Kanäle ausgelegt...und nun geht der eine nicht!!!! Also bitte helft mir!
@ Mark Walter (mark-169) Poste mal VOLLSTÄNDIGEN Quelltext als Anhang. MFG Falk
hallo falk, Danke für die Antwort! Hier mal die Dateien. PWM wird in pwm.c initialisiert Die Ansteuerung findet in der while-Schleife in main.c statt gruß markus
> DDRD = (1<<PD5); > [...] > DDRD = (1<<PD4); Das tut schon fast weh. Die zweite Zeile überschreibt das, was Du in der ersten gemacht hast! Danach ist der OC1A-Pin wieder als Eingang konfiguriert.
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!!!
Habs ja grad gemerkt Aber auf so was "einfaches" achtet man dann halt leider nicht mehr... Wie oft bin ich die Tabellen von TCRN1A/B durchgegangen!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.