Hallo zusammen, ich hab da ein "kleines" Problem:
Ich versuche für einen Motor eine PhaseCorrect PWM zu erzeugen. Stelle
ich alles für einen 8Bit PWM ein, klappt auch alles.
Da ich aber gerne 16Bit Auflösung hätte, würde ich auch gerne den 16Bit
Timer1 nutzen.
Leider führt aber alles was nicht 0 ist in OCR1A dazu, das OC1A
dauerhaft High ist :(
Hier mal meine init, ich hoffe das es "Forenkonform" geschrieben ist:
1 | int motor_init(void)
|
2 | {
|
3 | uint8_t temp_sreg = SREG;
|
4 | cli(); //Interrupts aus
|
5 | DDRD |= (1 << Mr_1) | (1 << Mr_2) | (1 << Ml_1) | (1 << Ml_2); //DDRD passend setzen
|
6 | TCCR1A = (1 << COM1A1) | (1 << COM1B1) | (1 << COM1B0) | (1 << COM1A0) | (1 << WGM11); //Phase Correct PWM 16 Bit
|
7 | TCCR1B = (1 << CS10) | (1 << WGM13); //Kein Prescaler, clk 20MHz / (2*65k) = 400Hz
|
8 | SREG = temp_sreg;
|
9 | return 0;
|
10 | }
|
Mr_1 usw sind nur PinNummern, das macht er auch passend.
Das Ganze sollte also passen, leider hängt es irgendwo und ich steh hier
auf dem schlauch :(
Danke schonmal, Olli