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