Problem mit PWM Initialisierung

OP #2510105
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
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.
Gast
Hi

>Laut Debugger passiert die maximale Ansteuerung, wenn die Zeile ICR1 =

Simulator oder ICE?

Der Simulator kann keine PWM mit variablen Top simulieren.

MfG Spess
OP
@Karl Heinz: Danke für den Denkanstoß. Dachte nicht, dass das so 
gravierende Unterschiede macht... Dein Tipp hat geholfen.

@Spess: ICE. Das war auch ein realer Effekt, den ich vom Display des 
Netzteils ablesen konnte.

Danke für die Hilfe!

Antwort schreiben

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