Problem mit PWM Initialisierung

OP #2510105
Lesenswert?
• ▲
▼
Hallo Forum und einen schönen Gruß ins bevorstehede Wochenende!

Mit meiner PWM eines ATMega2560 möchte ich ein Netzteil programmieren, 
dessen Ausgangsspannung einen Elektromotor antreibt. Soweit so gut, es 
funktioniert auch. Lediglich bei der Initialisierung des Programms wird 
der PWM-Wert anscheinend auf Maximum gesetzt, was zu maximaler 
Ausgangsspannung am Netzteil führt. Das dauert aufgrund der Trägheit des 
Netzteils 1-2 Sekunden und führt zu Dampf in den Leitungen :) Deswegen 
würde ich das gerne abschalten respektive den PWM-Wert mit 0 anfangen 
lassen, scheitere daran aber.
Hier ein Code-Schnipsel:
1
 
2

3
/* Hier Definition der PWM*/ 
4
  DDRB = (1 << PB5);        //Ausgangspin in PWM Modus setzen
5
  PORTB = (0 << PB5);       //Abschalten des PWM-Pins bis zur vollständigen Initialisierung
6
  
7
/*Setzen der nötigen Reister, vgl. Datenblatt 136-189*/
8
  TCCR1A = (1 << COM1A1) | (1 << WGM11);
9
  TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10);
10
  
11
/*Zählerwert, bis zu dem der PWM-Zähler zählt*/
12
  //OCR1A = 2001;
13
  ICR1 = 2000;          //1 MHz Clock-Time, kein Prescaler, 500 Hz = 2000 Schritte
14
  
15
/*Schwelle des Zählerwertes, bei dem der Ausgang geschalten wird*/
16
  OCR1A = 2000;            //Initialisierungswert

Laut Debugger passiert die maximale Ansteuerung, wenn die Zeile ICR1 = 
2000; ausgeführt wird. Versuche, OCR1A vor ICR1 zu setzen ändern nichts, 
auch verschiedene Werte für OCR0A (0x0000, 2000, 0xffff) bringen keinen 
Unterschied. Kann mir jemand sagen wo mein Fehler liegt?

Danke im Voraus

Andreas
#2510126
Lesenswert?
• ▲
▼
Setz halt deine Compare-Werte BEVOR du den Timer aktivierst.

(Ein Timer fängt zu laufen an, sobald er einen Vorteiler zugewiesen 
bekommt)
1
  
2
/*Zählerwert, bis zu dem der PWM-Zähler zählt*/
3
  //OCR1A = 2001;
4
  ICR1 = 2000;          //1 MHz Clock-Time, kein Prescaler, 500 Hz = 2000 Schritte
5
  
6
/*Schwelle des Zählerwertes, bei dem der Ausgang geschalten wird*/
7
  OCR1A = 2000;            //Initialisierungswert
8

9

10
/*Setzen der nötigen Reister, vgl. Datenblatt 136-189*/
11
  TCCR1A = (1 << COM1A1) | (1 << WGM11);
12
  TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10);

Ist doch ganz einfach: erst fertig konfigurieren, dann einschalten.

Antwort schreiben

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.

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.