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?
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.
Timer 1 müsste auch beim Mega32 einen PWM-Modus haben, der bis ICR1 zählt.
aber wohl nicht bei dem Fast Mode den ich benötige um nach jeder Periode die pulsweite zu verstellen
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.
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?
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.