Forum: Mikrocontroller und Digitale Elektronik Atmega88 Timer1 PWM COM1A0 Problem Initialwert


von Hans Dieter (Gast)


Lesenswert?

Hallo,

ich arbeite zur Zeit an Code zu einer Ansteuerung einer 
Treiber-Schaltung. Dabei hängen an den beiden OC1A und OC1B ein Treiber 
bei dem je nach Typ kein, ein oder beide Eingänge invertiert sind.
Zur Ansteuerung verwendete ich den PWM Mode 8. Die Register sind so 
gesetzt:
1
TCNT1 = 0;
2
  // Duty-Cycle
3
  OCR1A = 0x10;
4
  OCR1B = 0x10;
5
  // Periodendauer
6
  ICR1 = 0xFF;
7
  // keine Ausgabe
8
  TCCR1A = 0;
9
  // Phase and Freq. Correct PWM, Prescaler = 1
10
  TCCR1B = (1 << WGM13) | (1 << CS10);
11
  TCCR1C = 0;

Das Problem ist, dass im Datenblatt steht, wenn COM1A0 oder COM1B0 
gesetzt ist (dies soll in einer boot-sequenz geschehen, die den 
treiber-typ erkennt), eigentlich der PORT normal funktionieren soll, 
aber er da nicht tut.
Was passiert ist, dass beim Debuggen der Port beim nachträglichen setzen 
des COM1A0 Bits invertiert wird. (Das erste was komsich ist)
Wenn das Programm läuft wird zwischendrin die Richtung umgeschalten 
(durch setzen und löschen der COM1x1 Bits).
1
  TCCR1A = (TCCR1A & ~(1 << COM1A1)) | (1 << COM1B1);
irgendwann gibt es aber einen Kurzschluß, weil der Timer nicht macht was 
er soll und der Port nicht den Wert vorgibt, sondern der Timer.

Ist das Problem bekannt?
Wie kann es umgangen (also der Initiale Wert festgelegt werden)?
Gibt es vllt. eine Lösung, die so funktioniert, wie das im Datenblatt 
steht?

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.