mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega - nur ein PWM möglich


Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte zwei PWM-Signale mit dem ATmega3290p erzeugen. (Sollen zwei 
Motoren steuern) Dazu verwende ich den "Phase and Frequency Correct PWM 
Mode" und den Counter1.

Wenn ich nur ein Signal Erzeuge (OCR1A), funktionier mein Programm mit 
dieser Einstellung super:
    // Bit 7:6 - COM1A1:0: Compare Output Mode for Unit A
    TCCR1A &= ~(1<<COM1A1);     // Toggle OC1A on Compare Match
    TCCR1A |=  (1<<COM1A0);     // Toggle OC1A on Compare Match
Jedoch steht im Datenblatt, dass dann der zweite Counter (OCR1B) nicht 
verwendet werden kann.

Ändere ich diese Einstellung nun also um, funktioniert leider gar nichts 
mehr:
    // Bit 7:6 - COM1A1:0: Compare Output Mode for Unit A
    TCCR1A |=  (1<<COM1A1);     // Clear OC1A/OC1B on Compare Match when upcounting
    TCCR1A &= ~(1<<COM1A0);     // Clear OC1A/OC1B on Compare Match when upcounting


Kann mir vielleicht jemand sagen was ich falsch mache?
Ich habe mal meinen Code, der für einen Counter funktioniert mit 
eingefügt:
    // PRR-Power Reduction Register: PRTIM1 = 0
    // Power Reduction Timer/Counter1 = off
    PRR &= ~(1<<PRTIM1);

    // TCCR1A-Timer/Counter1 Control Register A
    // Bit 7:6 - COM1A1:0: Compare Output Mode for Unit A
    TCCR1A &= ~(1<<COM1A1);     // Toggle OC1A on Compare Match
    TCCR1A |=  (1<<COM1A0);     // Toggle OC1A on Compare Match

    // Bit 1:0 - WGM11:0: Waveform Generation Mode
    TCCR1A &= ~(1<<WGM11);      // PWM, Phase and Frequency Correct
    TCCR1A |=  (1<<WGM10);      // PWM, Phase and Frequency Correct

    // TCCR1B - Timer/Counter1 Control Register B
    // Bit 4:3 - WGM13:2: Waveform Generation Mode
    TCCR1B |=  (1<<WGM13);      // PWM, Phase and Frequency Correct
    TCCR1B &= ~(1<<WGM12);      // PWM, Phase and Frequency Correct


    // TCNT1H and TCNT1L - Timer/Counter1
    TCNT1H =  0x00;             // set counter to 0
    TCNT1L =  0x00;             // set counter to 0
    
    // TCCR1B - Timer/Counter1 Control Register B
    // Bit 2:0 - CS12:0: Clock Select
    TCCR1B &= ~07;              // clear settings before
    //---------------------------------------------------------
    // OCR1AH and OCR1AL - Output Compare Register 1 A
    OCR1AH = 0xFF;              // continuously compared with value TCNT1
    OCR1AL = 0x00;              // continuously compared with value TCNT1
    //---------------------------------------------------------
    TCCR1B |=  0x01;            // clk_IO/1     (No prescaling)
//  TCCR1B |=  0x02;            // clk_IO/8    (From prescaler)
//  TCCR1B |=  0x03;            // clk_IO/64   (From prescaler)
//  TCCR1B |=  0x04;            // clk_IO/256  (From prescaler)
//  TCCR1B |=  0x05;            // clk_IO/1024 (From prescaler)

    // TCCR1C-Timer/Counter1 Control Register C
    // only active when the WGM13:0 bits specifies a non-PWM mode
    TCCR1C =  0x00;             // for compatibility with future devices
    
    //Set Bit5 of PortB as output
    DDRB |= 0x20;

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.