mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2 PWM Signale mit Atmega 32 / Timer 1


Autor: Axel Leibold (axelleibold)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hans wrote:
> Atmel kann helfen:
>
> http://www.atmel.com/dyn/resources/prod_documents/...
Überflüssiger Hinweis, da der OP das Datenblatt nach eigenen Angaben 
bereits besitzt!

Autor: Axel Leibold (axelleibold)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DAnke schonmal
Ich kann mit dem Timer1 aber auf jeden Fall 2 PWM Signale erzeugen, 
ODER??

Autor: Christoph S. (mixer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Johannes:
>Überflüssiger Hinweis, da der OP das Datenblatt nach eigenen Angaben
>bereits besitzt!

Besitzen reicht nicht!!

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Markus W. (mark-169)
Datum:

Bewertung
0 lesenswert
nicht 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:

TCCR1A =    (1 << COM1A1)
         |  (0 << COM1A0)
         |  (1 << COM1B1)
         |  (0 << COM1B0)   //Fast-PWM: Compare Mode set (non-inverting) A+B
         |  (1 << WGM11)    //--> Waveform Generation Mode: 5
         |  (0 << WGM10);
     
TCCR1B =    (1 << WGM13)
         |  (1 << WGM12)
         |  (0 << CS12)    //clk/256
         |  (0 << CS11)
         |  (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

Autor: Markus W. (mark-169)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Mark Walter (mark-169)

Poste mal VOLLSTÄNDIGEN Quelltext als Anhang.

MFG
Falk

Autor: Markus W. (mark-169)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  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.

Autor: Markus W. (mark-169)
Datum:

Bewertung
0 lesenswert
nicht 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!!!

Autor: Markus W. (mark-169)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

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.