Forum: Mikrocontroller und Digitale Elektronik M328 - PWM abschalten


von FlorianB (Gast)


Lesenswert?

Hallo,

bei einem Programm, dass ich weiterführen muss, funktioniert etwas mit 
der PWM-Abschaltung nicht.

So ist es initialisiert:
1
  DDRB |= (1<<PB1) | (1<<PB2);    //OCR1A/B-Ports auf Ausgang
2
  
3
  ICR1 = 0x620;
4
5
  TCCR1A |= (1<<COM1A1)|(0<<COM1A0); //PWM-Ausgabe einschalten       
6
  TCCR1A |= (1<<COM1B1)|(1<<COM1B0);
7
  TCCR1A |= (1<<WGM11);
8
  TCCR1B |= (1<<WGM13)|(1<<WGM12);
9
  TCCR1B |= (1<<CS10);               // prescaler = 1

Die PWM-Ausgabe/Dimmung an OC1A funktioniert auch.


Im weiteren Programmverlauf soll dann die PWM-Ausgabe mit
1
TCCR1A &= ~((1<<COM1A1)|(1<<COM1A0))
an PinB1/OC1A abgeschaltet werden.

Das funktioniert leider nicht. Statt dessen steigt der PWM-Wert etwa 
aufs Maximum.

Kann jemand sagen warum?

von FlorianB (Gast)


Lesenswert?

TCCR1A &= ~((1<<COM1A1)|(1<<COM1A0))

löscht ja COM1A1 und COM1A0.

(siehe Datenblatt)


COM1A1  COM1A0       Description
------  ------       -----------
   0       0         Normal port operation,
                     OC1A disconnected.


Oder ist irgendwo ein Denkfehler?

von ich (Gast)


Lesenswert?

Hi
Vll. noch den PB1 und PB2 auf 0 Setzten, damit du 0 Treibst und nicht 1?
MfG
ich

von FlorianB (Gast)


Lesenswert?

Danke für die schnelle Antwort!

Hatte es eben schon ausprobiert, aber irgendwie war der Ausgabepin immer 
noch auf Hi.
Werde das gleich noch mal in Ruhe überprüfen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Am einfachsten ist es, die PWM einfach weiterlaufen zu lassen, aber den 
Ausgangsport auf Eingang umzuschalten, natürlich ohne Pullup, sondern 
eher mit externem Pulldown:
1
DDRB &= ~((1<<PB1) | (1<<PB2));    //OCR1A/B-Ports auf Eingang

von Felix P. (fixxl)


Lesenswert?

Bei Deaktivierung der PWM behält der Pin seinen aktuellen 
Ausgangszustand bei, das Problem hatte ich auch schon mal.

Mit einem Zugriff übers PORT-Register holt man sich die Kontrolle wieder 
zurück.

von M. K. (sylaina)


Lesenswert?

Und alternativ könnte man auch OCR1A auf 0 setzen oder den Timer 
stoppen…hach, da gibts sooo viele Möglichkeiten was man machen könnte.
Was genau soll denn gemacht werden?

von FlorianB (Gast)


Lesenswert?

Danke für die Antworten und Ideen!

War heute Nachmittag leider doch nicht mehr zum Testen gekommen.

Morgen gehts weiter, dann poste ich ein Feedback.

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.