mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega328 Timer Mode 5 + 7


Autor: Werner B. (cyrano1960)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

irgendwie steh ich hier wie ein Ochse vorm Berg und komme einfach nicht 
dahinter, wie der Timer Modus 5 + 7 beim Atmega328 ablaufen soll. Die 
anderen Modi sind mir absolut klar und einleuchtend.

Aber laut Datenblatt ist im Mode 7 z. B. bei Timer2 OCR2A das Maximum. 
Jetzt zähle ich bis zu diesem Wert hoch, erhalte einen Compare Match, 
toggel den Pin und beginne von vorn. Dann erhalte ich doch immer nur ein 
Tastverhältnis von 50:50 mit unterschiedlicher Frequenz, denn die Zeiten 
0 bis OCR2A sind ja immer gleich. Klar, ich kann sie ändern, aber das 
wäre ja extrem umständlich, bei jedem Zählertakt einen neuen Wert ins 
OCR2A zu schreiben.

Im Mode 1 ist es logisch, da wird die Einschaltzeit (im nicht 
invertierenden Modus) ja durch 0 bis OCR2A bestimmt und die 
Ausschaltzeit durch OCR2A bis MAXIMUM (0xff).

Ich hatte auch schon vermutet, dass OCR2B noch mit ins Spiel kommt, aber 
ich finde im Datenblatt nichts entsprechendes. Die Modi sind zwar 
prinzipiell erklärt, aber im Detail ja nur für die Nutzung von 0xFF als 
Maximum.

Könnte mir hier mal jemand bitte auf die Sprünge helfen?

: Bearbeitet durch User
Autor: Stefanus F. (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OCR2A bestimmt die PWM Frequenz. Du hast vielleicht übersehen, dass Dir 
immer noch das OCR2B Register übrig bleibt, um die Pulsbreite 
festzulegen.

Die Beschreibung der Modi sagt nur, dass die Pulsbreite vom OCR Register 
bestimmt wird. Damit sind prinzipiell beide gemeint, aber in den Modi 5 
und 7 ist OCR2A schon für die Festlegung von TOP reserviert.

: Bearbeitet durch User
Autor: Werner B. (cyrano1960)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefanus,

herzlichen Dank für die schnelle Antwort. Wie ich in meiner Frage 
schrieb, hatte ich das auch vermutet, aber ich habe nirgendwo einen 
konkreten Hinweis im Datenblatt darauf gefunden.

Wenn ich OCRA als TOP Wert nutze und OCRB als Vergleichsregister, gehe 
ich dann recht in der Annahem, dass ich nur Pin OC2B nutzen kann und 
OC2A nicht verfügbar ist?

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Werner B. schrieb:
> Wenn ich OCRA als TOP Wert nutze und OCRB als Vergleichsregister, gehe
> ich dann recht in der Annahem, dass ich nur Pin OC2B nutzen kann und
> OC2A nicht verfügbar ist?

Ja, so verstehe ich das Datenblatt jedenfalls. Ich habe diese Modi noch 
nicht ausprobiert.

: Bearbeitet durch User
Autor: Veit D. (devil-elec)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

fast alle Timer Modi bieten für das TOP-Wert Register entweder ICRn oder 
OCRnA an. Timer 2 nun ausgerechnet nur OCR2A. Abgesehen von den anderen. 
Da TOP das Frequenz bestimmte Register ist, kann man damit weniger 
anstellen. Aber ganz unnütz ist es auch nicht. Man kann den Compare 
Match einschalten und irgendeinen Pin in dessen ISR zum Bsp. toggeln 
lassen. Damit hat dieser Pin die halbe Taktfrequenz vom eigentlichen PWM 
Takt der auf OCR2B abläuft.

Bsp. auf Mega2560 getestet
/*
Arduino Mega2560 (16MHz)
 
 Timer 2: Phase Correct, Mode 5
 TOP:  OCR2A     (Takt-Frequenz)
 Pulsweite: OCR2B  (<= TOP)
*/


int main(void) { 

  DDRB = (1<<4);      
  DDRH = (1<<6);       
  set_Timer2();
  
  while(1) {           
                       
  } 
}    


// ****** Funktionen ******* //
    
void set_Timer2()       // Phase Correct, Mode 5
{
  cli();         
  TIMSK2 = (1<<OCIE2A);   // Compare Match A
  TCNT2  = 0;             // Reset Start-Counter
  TCCR2A = (1<<COM2B1) | (1<<WGM20);        // non invert, set Mode
  TCCR2B = (1<<CS21) | (1<<WGM22);          // Prescaler 8 
  OCR2A = 128;            // TOP, zusammen mit Prescaler 8 >> 7,8kHz
  OCR2B = 32;             // Pulsweite 25%
  sei();                  
}  


ISR(TIMER2_COMPA_vect) {        // Timer 2 Interrupt 
  PINB = _BV(PB4);              // 3,9kHz                    
}

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Veit D. schrieb:

> fast alle Timer Modi bieten für das TOP-Wert Register entweder ICRn oder
> OCRnA an.

Das ist natürlich nur bei bei Timern so, die überhaupt über ein 
ICR-Register verfügen.

> Timer 2 nun ausgerechnet nur OCR2A.

Der hat halt dieses Register typischerweise garnicht. Timer0 übrigens 
meist ebenfalls nicht. Der Normalfall ist: ICR gibt's nur bei den 
16Bit-Timern.

Bei einigen Tiny-Exoten gibts allerdings was ähnliches bei 8Bit-Timern: 
OCRnC. Bezüglich der Beschränkung des Zählumfangs zu verwenden wie ICR 
bei den 16Bit-Timern, aber eine Input Capture Funktionalität ist halt 
nicht vorhanden. Dafür kann bei unbeschränktem Zählumfang damit ein 
dritter PWM-Kanal bereitgestellt werden, was wiederum mit den 
ICP-Dingern nicht geht.

Letztlich sind das alles aber Details, die man einfach dem DB entnehmen 
kann.

> Da TOP das Frequenz bestimmte Register ist, kann man damit weniger
> anstellen. Aber ganz unnütz ist es auch nicht. Man kann den Compare
> Match einschalten

Nicht wirklich ein nützliches Feature. Denn der OVF-Interrupt steht ja 
ebenfalls zur Verfügung und wird im gleichen Moment ausgelöst (oder 
maximal einen Timertakt früher oder später, das weiß ich jetzt nicht so 
genau und bin zu faul zum Nachschlagen).

Autor: Veit D. (devil-elec)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es steht jedem frei meinen Text im Gesamten zu betrachten. Wenn man ihn 
zerpflückt kann man natürlich alles zerreißen und umdrehen was man 
möchte. Ist nicht schön. Ergänzen und noch mehr Möglichkeiten aufzeigen 
wäre besser gewesen.

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Veit D. schrieb:

> Ergänzen und noch mehr Möglichkeiten aufzeigen
> wäre besser gewesen.

Mich deucht, genau das hätte ich getan... Kannst du nicht lesen?

Autor: Veit D. (devil-elec)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja okay, hatte es falsch verstanden, alles gut

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.

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