CTC Modus abschalten..

OP #2610698
Guten Abend,
ich betreibe Timer1 eines Atmega32 im CTC Modus und variiere die 
Pulsweite mit OCR1A. Klappt!
Wenn ich die PWM aber ausschalten will, so bleibt der Ausgang manchmal 
auf High hängen, nicht immer.
Meine Stopfunktion sieht so aus:

int main (void)
...
TCCR1A |= (1<<COM1A1) | (1<< WGM11); //Set up timermode  CTC
TCCR1B |= (1<<CS10) |(1<<CS11) | (1<<WGM13) | (1<<WGM12);    //Prescaler 
64
...
void Stop_PWM (void)
{
  unsigned char sreg = SREG;
  cli();
  TCCR1B &= 0xF8;    //stop PWM
  OCR1A = 0;
  PORTD &= 0xDF;  //turn PWM off
  TCNT1=0;
  SREG = sreg;
}

Wenn ich Stop_PWM aufrufe so stoppt der Timer, aber der Ausgang bleibt 
hin und wieder auf 1 und nicht auf 0 hängen. Selbst das Nullsetzen des 
Bits hilft nicht, oder ist der Zugriff durch den CTC Modus da nicht 
möglich?
Wie kann ich sicherstellen, dass der PWM Ausgang beim Stop auf Null ist?
Besten Dank für eure Meinungen,
Thomas
#2610781
Tach Thomas,

dein Problem ist folgendes:

Du hast dein OCM im toggle Modus stehen. Das heißt jedes mal, wenn ein 
OC auftritt wird dein output getoggelt. Wenn du jetzt asynchron den 
timer anhältst hast du eine 50:50 Chance, dass er bei high hängen 
bleibt. Du musst also das ganze OCM abschalten, damit du einen 
definierten Zustand an dem Pin hast. Versuchst du das so wie in deinem 
code wird zwar das Port Register auf einen defineirten Zustand gesetzt 
aber das OC Modul überschreibt noch die Portfunktion. Du musst noch das 
entsprechende COM bit im TCCRxA aus machen. In deinem speziellen Falle 
ist das COM1A in TCCR1A.

Thor

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.