Forum: Mikrocontroller und Digitale Elektronik Output Compare - ATMega32 - Falsche Konfig?


von Oliver W. (oliver_w49)


Lesenswert?

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

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>Das Ganze sollte also passen, leider hängt es irgendwo und ich steh hier
>auf dem schlauch :(

Macht es nicht. Das ist Phase Correct PWM mit ICR1 als Top. ICR1 
bestimmt die Frequenz der PWM. Wenn du die vollen 16-Bit haben willt 
sollte ICR1 = 65535 sein.

MfG Spess

von Oliver W. (oliver_w49)


Lesenswert?

testen geh
Danke schonmal!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.