ATMega16 und PWM

OP #2276832
Lesenswert?
• ▲
▼
Hallo zusammen,
ich habe hier einen Mega16 den ich mit den internen 8MHz takte.
Nun möchte ich  an den Pins C7 und C7 PWM-Signal erzeugen. Da Timer 1 ja 
zwei Compareregister hat, würde ich das gerne damit machen. Jedesmal 
wenn ein CompareMatch auftritt, dann soll im Interrupt ein Ausgang 
gesetzt werden, wenn ein Overflow eintritt sollen beide Ausgänge 
gelöscht werden.
Timer2 benutze ich für andere Zwecke. Nun habe ihn das Ganze soweit, 
dass an C7 Impulse mit f=63,... Hz ausgegeben werden. Der 
CompareMatch-Interrupt wird aufgerufen (da ich in der Routine den 
Ausgang toggle). Ein Oveflow wird nicht ausgelöst. Solbald ich von einer 
der Zeilen
//  TIMSK |= (1<<OCIE1B);
//  TIMSK |= (1<<TOIE1);
den Kommentar wegmache, blinkt die Led vom Timer 2 nicht mehr. Wo ist da 
der Zusammenhang ?
Und wie kriege ich den OverflowInterrupt zum Laufen ?


Greets
Karlheinz
Angehängte Dateien:
#2276851
Lesenswert?
• ▲
▼
Karlheinz Druschel schrieb:
> Solbald ich von einer
> der Zeilen
> //  TIMSK |= (1<<OCIE1B);
> //  TIMSK |= (1<<TOIE1);
> den Kommentar wegmache, blinkt die Led vom Timer 2 nicht mehr.

Weil du für beides keine ISR hast.

Karlheinz Druschel schrieb:
> Und wie kriege ich den OverflowInterrupt zum Laufen ?

Als ersten Schritt, indem du die Warnungen des Compilers nicht 
ignorierst.

Karlheinz Druschel schrieb:
> Egal wie ich den Wert für OCR1a ändere, die Frequenz ändert sich nicht.
> Sollte sie aber doch nach meinem Verständnis

Warum sollte sie. Der Abstand zwischen den Interrupts (und damit die 
Frequenz) ist doch immer der gleiche.
OP #2276957
Lesenswert?
• ▲
▼
und was ist das:
ISR(TIMER1_COMPA_vect)
{
//  PORTC ^= (1<<PC7);
  PORTC ^= (1<<PC7);
}

?
na ich den timer im normalen modus betreibe, zählt er doch von bottmom 
bis top. wenn er de den wert von ocr1a erreicht, dann ruft er den 
interrupt auf. aber wenn ich den wert von ocr1a ändere, ist die zeit die 
er braucht um von 0 an bis zu diesem wert zu zählen ja unterschiedlich. 
ergo müßte sich die frequenz ändern
#2276975
Lesenswert?
• ▲
▼
Karlheinz Druschel schrieb:
> und was ist das:
> ISR(TIMER1_COMPA_vect)
> {
> //  PORTC ^= (1<<PC7);
>   PORTC ^= (1<<PC7);
> }

Das ist weder eine ISR für OCIE1B, noch für TOIE1. Wenn du einen der 
beiden Interrupts freischaltest, ohne eine ISR dafür zu haben, gibt es 
einen Software-Reset, sobald der jeweilige Interrupt passiert.
Daher:
Stefan Ernst schrieb:
> Karlheinz Druschel schrieb:
>> Solbald ich von einer
>> der Zeilen
>> //  TIMSK |= (1<<OCIE1B);
>> //  TIMSK |= (1<<TOIE1);
>> den Kommentar wegmache, blinkt die Led vom Timer 2 nicht mehr.
>
> Weil du für beides keine ISR hast.


Karlheinz Druschel schrieb:
> na ich den timer im normalen modus betreibe, zählt er doch von bottmom
> bis top. wenn er de den wert von ocr1a erreicht, dann ruft er den
> interrupt auf.

Richtig.

Karlheinz Druschel schrieb:
> aber wenn ich den wert von ocr1a ändere, ist die zeit die
> er braucht um von 0 an bis zu diesem wert zu zählen ja unterschiedlich.

Ja, das ist also der Teilabschnitt "BOTTOM bis OCR1A". Und was ist mit 
dem anderen Abschnitt, "OCR1A bis TOP"?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 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.