www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM Pin entkoppeln und wieder ankoppeln


Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe hier auf einem AT90CAN128 eine PWM als Fast-PWM (Mode 14) 
laufen.
Alles wunderbar.
Nun möchte ich periodisch für eine sehr kurze Zeit (ca 400us was kleiner 
als die PWM Frequenz ist (1000Hz bzw 250Hz) gerne den PWM Pin auf high 
legen, damit ich einen definierten high Pegel für eine bestimmte Aktion 
habe. Wenn ich den Dutycycle auf 100% setze bekomme ich ein 
unregelmäßiges Verhalten, da ich ja schneller als die PWM Frequenz sein 
will und der Wert für den Dutycycle ja immer erst nach Ablauf einer 
Periode umgeladen wird.

Meine Idee war nun den Portpin zu entkoppeln. Was ich mit dem Umschalten 
auf Mode 0 mit folgender Funktion beabsichtige.
void setPWM1mode(u08 channel, u08 mode) {
  //activates a PWM channel and sets Compare Output Mode
  //channel 1: A  |  mode 0: normal port operation, OCnx disconnected
  //        2: B  |       1,2,3: depends on PWM mode (CTC, fastPWM,phasefrequency correct), see datasheet page 136f
  //        3: C  |
  if (channel == CHANNEL_A) {
    //channel A
    TCCR1A &= ~( (1 << COM1A0) | ((1 << COM1A1)) ); //clear COM
    TCCR1A |= (mode << COM1A0);                     //set new COM
  }
  else if (channel == CHANNEL_B) {
    //channel B
    TCCR1A &= ~( (1 << COM1B0) | ((1 << COM1B1)) ); //clear COM
    TCCR1A |= (mode << COM1B0);                     //set new COM
  }
  else if (channel == CHANNEL_C) {
    //channel C
    TCCR1A &= ~( (1 << COM1C0) | ((1 << COM1C1)) ); //clear COM
    TCCR1A |= (mode << COM1C0);                     //set new COM
  }
}

Dann setze ich den Pin auf high (Ausgang ist er ja bereits).
Scheint alles auch zu klappen.

Wie bekomme ich nun wieder das PWM Signal?
Ich habe gedacht, ich muss nur den Pin wieder an den Timer koppeln und 
dafür den Mode mit obiger Funktion wieder auf 2 stellen, so wie er 
vorher war. Aber das scheint nicht zu klappen.
Vorm Funktionsaufruf setze ich den Pin wieder auf low und erhalte nun 
nur noch einen kurzen Puls entsprechend meines periodischen Aufrufs.
Muss ich die PWM komplett neu initialisieren?
Eigentlich habe ich das so verstanden, dass die PWM bzw. der Timer im 
Hintergrund einfach weiter läuft. Das Neuinitialisieren würde ja auch 
relativ lange dauern. Ich möchte den normalen PWM Ablauf so kurz wie 
möglich stören.

Über Hilfe wäre ich sehr dankbar, da ich jetzt hier schon einige Zeit 
rumprobiere.
Danke.

Gruß
Max

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach Mist, ich habe beim Funktionsaufruf beim Wiederankoppeln nur den 
falschen Channel übergeben. Jetzt geht es.

Autor: I. L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm... Was willst du denn eigentlich machen damit?
Scheint mir etwas umstädlich dein Vorhaben.


Gruß Knut

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte periodisch den Status eines BTS HS-Treibers auswerten.
Dieser zeigt immer einen Fehler an, wenn er den gleichen Zustand wie der 
Treiber-Eingang hat. Scheint so zu funktionieren...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.