www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega: Timer in FastPWM (Periodenlaenge, externe Interrupts)


Autor: Someone (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich moechte den FastPWM Modus des AtMega16 nutzen. Nur wie kann ich dort 
die Periode einstellen? Es sind ja nur Frequenzen moeglich, die sich aus 
Prozessor-Takt und Prescaler errechnen lassen.

Hat jemand vielleicht ein Beispiel in C-Code fuer eine Periodenlaenge 
von 50Hz? Achtung: Ich moechte keinen CTC/Normal Modus verwenden, 
sondern am OCn Port ueber den PWM Modus die Welle anlegen! Im CTC Modus 
bekomme ich das auch alleine hin.

Warum ich das eigentlich tun will:
Eleganterer Code und kleinerer Code, da kein unnoetiger ISR-Handler und 
keine unnoetigen Hilfsvariablen nach dem Timer-Setup noetig ist.



Frage 2:
Warum kann ich in einem ISR-Handler fuer INTx nicht OCRn fuer einen 
Timer in FastPWM Modus neu setzen? Das sollte doch funktionieren, oder?

Hoffe jemand kann mir helfen,
Someone

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>ich moechte den FastPWM Modus des AtMega16 nutzen. Nur wie kann ich dort
>die Periode einstellen? Es sind ja nur Frequenzen moeglich, die sich aus
>Prozessor-Takt und Prescaler errechnen lassen.

Welcher Timer? Es gibt PWM-Modi bei denen ein OC-Register oder das 
IC-Register als Top fungiert. Damit sind fast beliebige Frequenzen 
möglich.

>Hat jemand vielleicht ein Beispiel in C-Code fuer eine Periodenlaenge
>von 50Hz? Achtung: Ich moechte keinen CTC/Normal Modus verwenden,
>sondern am OCn Port ueber den PWM Modus die Welle anlegen! Im CTC Modus
>bekomme ich das auch alleine hin.

Bin notorischer Assemblerprogrammierer. Aber das Datenblatt gibt 
hinreichend Auskunft.

>Warum ich das eigentlich tun will:
>Eleganterer Code und kleinerer Code, da kein unnoetiger ISR-Handler und
>keine unnoetigen Hilfsvariablen nach dem Timer-Setup noetig ist.

??????

>Warum kann ich in einem ISR-Handler fuer INTx nicht OCRn fuer einen
>Timer in FastPWM Modus neu setzen? Das sollte doch funktionieren, oder?

Welches ist die nun eigentliche Frage?

MfG Spess

Autor: Someone (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> i
>
>>ich moechte den FastPWM Modus des AtMega16 nutzen. Nur wie kann ich dort
>>die Periode einstellen? Es sind ja nur Frequenzen moeglich, die sich aus
>>Prozessor-Takt und Prescaler errechnen lassen.
>
> Welcher Timer? Es gibt PWM-Modi bei denen ein OC-Register oder das
> IC-Register als Top fungiert. Damit sind fast beliebige Frequenzen
> möglich.

Timer 0

>
>>Hat jemand vielleicht ein Beispiel in C-Code fuer eine Periodenlaenge
>>von 50Hz? Achtung: Ich moechte keinen CTC/Normal Modus verwenden,
>>sondern am OCn Port ueber den PWM Modus die Welle anlegen! Im CTC Modus
>>bekomme ich das auch alleine hin.
>
> Bin notorischer Assemblerprogrammierer. Aber das Datenblatt gibt
> hinreichend Auskunft.

Im Datenblatt steht fuer mich, dass ich eben im FastPWM Modus nur 
Frequenzen gemaess der Formel

frequenz = clock / (prescaler * 256)

nutzen kann. Ich denke aber, dass ich da was falsch verstanden habe.


>>Warum kann ich in einem ISR-Handler fuer INTx nicht OCRn fuer einen
>>Timer in FastPWM Modus neu setzen? Das sollte doch funktionieren, oder?
>
> Welches ist die nun eigentliche Frage?
>

Das ist Frage 2. Ich frage mich naemlich, warum das nicht funktioniert!

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hat das Datenblatt recht!

Topwert bei Timer0 (und Timer2) ist 0xFF. Nur bei Timer1 kann der
Topwert im ICR1 oder OCR1B stehen.
Also Timer wechseln oder mit der Frequenz leben ober mit
dem Quarz spielen.

avr

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Someone schrieb:

> Timer 0

Das wurde ja schon geklärt.
Timer 1 verwenden. Der kann das

> Das ist Frage 2. Ich frage mich naemlich, warum das nicht funktioniert!

Gibt keinen Grund dafür. Wenn es also nicht funktioniert, dann hast du 
irgendwo einen Fehler gemacht.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Im Datenblatt steht fuer mich, dass ich eben im FastPWM Modus nur
> Frequenzen gemaess der Formel
>
> frequenz = clock / (prescaler * 256)
>
> nutzen kann. Ich denke aber, dass ich da was falsch verstanden habe.

Nein, das hast Du nicht falsch verstanden.  Schau Dir das 
Blockschaltbild von Timer 0 an und Du wirst schnell verstehen, warum für 
andere Frequenzen nur CTC bleibt.  Aber den schließt Du ja (aus mir 
nicht verständlichen Gründen) aus.

>>Warum kann ich in einem ISR-Handler fuer INTx nicht OCRn fuer einen
>>Timer in FastPWM Modus neu setzen? Das sollte doch funktionieren, oder?

Natürlich kannst Du OCR0 aus beliebigen Stellen im Programm beschreiben. 
Ob diese Stelle zufällig in einer Interruptroutine ist, spielt keine 
Rolle.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Timer 0

>Im Datenblatt steht fuer mich, dass ich eben im FastPWM Modus nur
>Frequenzen gemaess der Formel
>frequenz = clock / (prescaler * 256)
>nutzen kann. Ich denke aber, dass ich da was falsch verstanden habe.

Beim ATMega16 ist das so. Neuere AVRs haben auch bei 8-Bit Timern mehr 
Möglichkeiten.

>Ich frage mich naemlich, warum das nicht funktioniert!

Warum sollte das nicht funktionieren?

MfG Spess

Autor: Someone (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal danke fuer eure Hilfe!

spess53 schrieb:
> Beim ATMega16 ist das so. Neuere AVRs haben auch bei 8-Bit Timern mehr
> Möglichkeiten.

Welche waeren das denn?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Z.B. ATMega164. Ist grundsätzlich pinkompatibel zum ATMega16 und hat 
noch den Vorteil das es kompatible AVRs mit 32, 64 und 128 kB Flash (und 
auch mehr RAM/EEPROM) gibt.

MfG Spess

Autor: Someone (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Spess, du hast mir sehr geholfen!

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.