Forum: Compiler & IDEs PWM-Pin auf definiertes Potential setzen


von Visitor (Gast)


Lesenswert?

Mikrocontroller: Atmega2561
Programmierung: AVR-Studio 4.19, Build 730 mit AVR Toolchain

Ich erzeuge mit dem Timer0 ein PWM-Signal, das am OC0B-Pin ausgegeben 
wird. Initialisiert wird das TCC0RA-Register wie folgt

TCCR0A |= ((1<<COM0B1)|(0<<COM0B0)|(0<<WGM01)|(1<<WGM00));

Das PWM-Signal wird über Int0 gestartet:

ISR(INT0_vect)
{  TCCR0B |= ((0<<CS02)|(0<<CS01)|(1<<CS00));
  return;
}

Und mit Int1 beendet:

ISR(INT1_vect)
{  TCCR0A = 0;   ??????
  TCCR0B = 0;
  OCR0B = 0;
  PORTG = 0;
  return;
}

Nach dem Stoppen des PWM-Signals soll der PWM-Ausgabe-Pin definiert auf 
LOW liegen, daher wird der G-Port insgesamt auf 0 gesetzt. In der 
Simulation funktioniert das Ganze problemlos.
In der Schaltung tritt das Problem auf, daß der OC0B-Pin nach Verlassen 
des Interrupt1 ständig auf HIGH liegt. Erst wenn ich die Zeile
„TCCR0A = 0“ in INT1_vect einfüge funktioniert das auch in der Realität.
Ist das Verhalten normal, oder muß ich mich auf intensivere Fehlersuche 
begeben?

von Falk B. (falk)


Lesenswert?

@  Visitor (Gast)

>In der Schaltung tritt das Problem auf, daß der OC0B-Pin nach Verlassen
>des Interrupt1 ständig auf HIGH liegt. Erst wenn ich die Zeile
>„TCCR0A = 0“ in INT1_vect einfüge funktioniert das auch in der Realität.
>Ist das Verhalten normal,

Ja. Denn damit wir das Pin wieder von der PWM abgekoppelt und als 
normaler IO-Pin steuerbar.

>oder muß ich mich auf intensivere Fehlersuche
>begeben?

Nö.

von Visitor (Gast)


Lesenswert?

OK, vielen Dank.

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.