Hallo,
ich versuche derzeit 6 PWMs auf einem ATMega128 ins laufen zu kriegen.
Aber egal was ich auch mache, tue, setze. Entweder habe ich 100% oder
garnichts.
Also ich habe am PWM PIN einen Transistor, der widerrum betreibt einen
Lüfter. Mit I/O lässt sich der Lüfter ein und ausschalten. Perfekt
Nun will ich aber mittels PWM die Geschwindigkeit steuern...
Ich habe die ganze Nacht nun alle ermöglichen Varianten probiert.. Die
PWM will einfach nicht laufen...
1 | // TCCR0 = (1<<WGM01); // CTC Modus
|
2 | // TCCR0 = (1<<CS02); // Prescaler 64
|
3 | // ((1200000/64)/1000) = 187,5
|
4 | // OCR0 = 187-1;
|
5 |
|
6 | // Timer 1 PWM
|
7 | DDRB |= (1<<PB5);
|
8 | ICR1 = 0xFFFF;
|
9 | // set TOP to 16bit
|
10 | OCR1A = 0x3FFF;
|
11 | TCCR1A |= (1 << COM1A1)|(1 << COM1B1);
|
12 | TCCR1A |= (1<<WGM12) | (1 << WGM11);
|
13 | TCCR1B |= (1 << WGM13);
|
14 | TCCR1B |= (1 << CS10);
|
15 | // TCCR1A |= (1<<WGM10) | (1<<COM1A1);
|
16 | // TCCR1B |= (1<<CS11) | (1<<CS10);
|
17 |
|
18 | // Timer 3 PWM
|
19 | // TCCR3A = (1<<COM3A1) | (1<<COM3B1) | (1<<COM3C1) | (1<<WGM31) | (1<<WGM30);
|
20 | // TCCR3B = (1<<WGM32) | (1<<CS30);
|
21 |
|
22 | // OCR1A = 180;
|
23 | // OCR1B = 1000;
|
24 | // OCR1C = 1000;
|
25 |
|
26 | // OCR3A = 1000;
|
27 | // OCR3B = 1000;
|
28 | // OCR3C = 1000;
|
29 |
|
30 | // Compare Interrupt erlauben
|
Das ist jetzt mein letzter Test gewesen...
Egal auf welchen Wert ist OCR1A auch setze... der Lüfter "piept" oder
"summt" nur so ganz komisch. Setzte ich den PWM Wert also OCR1A aber auf
254 oder in anderen versuchen auf 1023 dann dreht der Lüfter mit voller
Geschwindigkeit.
Setze ich den Wert auf darunter geht nichts mehr...
Ich verzweifel langsam.
Es ist ein ATMega128 mit 12Mhz externem Quarz.
Ich hoffe ihr könnt mir weiter helfen.