mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fast PWM Mode Atmega32


Autor: Till (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.
Ich will ein sehr spezielles Bussystem nachbilden:
1.2 KHz, die länge des Low level bestimmt ob es sich um eine 0,1 oder 
syncbit handelt. Ich hab ein Atmega32 auf einem STK500 (3,686MHz).
ich wollte den Fast pwm Mode verwenden damit ich nach jeder Periode 
(also jedes Bit) die Pulsweite verändern kann über das OCR0 register.

Aber wie komm ich auf meine Frequenz ? kann ich was unternehmen damit er 
nicht bis 256 hochzählt da ich mit den prescaler nicht hinkomm?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du könntest ihn durch einen ATmega324P upgraden, der besitzt die
Möglichkeit, als Alternative zu TOP = 0xFF im Fast PWM mode noch
TOP = OCR0A zu benutzen.  Damit kann man die Frequenz einstellen.

Beim ATmega32 bliebe höchstens die Möglichkeit, den Timer mit
dem Overflow vorzubelegen, um so die Zählweite zu verkürzen, und
die Impulsgenerierung dann nicht als Fast PWM, sondern als normale
Pinfunktion des OC0-Pins vorzunehmen.  Das leidet aber unter einem
Jitter, der durch mögliche Verzögerungen in der Interruptannahme
bedingt ist.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timer 1 müsste auch beim Mega32 einen PWM-Modus haben, der bis ICR1 
zählt.

Autor: Till (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber wohl nicht bei dem Fast Mode den ich benötige um nach jeder Periode 
die pulsweite zu verstellen

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Doch, er hat. Du müsstest bloss mal ins Datasheet reinschauen.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Kaiser wrote:
> Doch, er hat. Du müsstest bloss mal ins Datasheet reinschauen.

Sogar 2.  Ich war nur davon ausgegangen, dass Timer 0 aus irgendwelchen
Gründen bereits gesetzt ist.

Autor: Till (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank
Das hört sich gut an aber ich kanns nicht trotz datasheet.

DDRB = 0xff;  // ausgang
TCCR0 = 0x7a; // Fast mode, clk/8
OCR0 = 0x80; // verhältnis HIGH/LOW 1:1

Welchen Modus bzw. Register muss ich nun noch setzen?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ging um Timer 1, du bist immer noch bei Timer 0.

Der PWM beim Timer 0 im ATmega32 kann nur als 8-bit-PWM betrieben
werden.  Wenn Timer 0 und ATmega32 für dich gesetzt sind, kannst
du das bestenfalls in Software emulieren, siehe oben.

Wenn Timer 0 gesetzt ist, es aber ein pinkompatibler AVR sein darf,
dann kannst du einen ATmega324P nehmen.  Er hat einen Mode 7, bei
dem er als Fast PWM arbeitet und die Zählweite mit OCR0A begrenzt
wird.  Der PWM-Ausgang ist dann OC0B.

Wenn der ATmega32 gesetzt ist, es aber auch Timer 1 sein darf, dann
guck dir die Modes 14 und 15 im Timer 1 an.

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.