- UNI-T-Messgeraete    Werbung      
Ergebnis 1 bis 10 von 13

Thema: PWM mit ATmega644

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.739
    .. ich stehe auf dem Schlauch .. F_CPU = 20 MHz .. Timer 1: PWM Mode 14 (Fast PWM, TOP ICR1, Prescaler 8 ) ..
    Hmmm, zuerst mal nur so: die Nullen werden üblicherweise nicht geschrieben; zum Start sind die Register genullt und meist schaltet man zur Laufzeit nicht dauernd um . . . WENN Du etwas explizit löschen möchtest dann ist dies üblich:
    Code:
      TCCR1A &= ~(1<<COM1A1)|(1<<COM1B1);   // Clear/set OC1A/OC1B on Cmp Match   S132
    So. Deine Timer1-initialisierung, modifiziert (und jedenfalls für MICH übersichtlicher und informativer - NUR Befehle machen selbst Profis nicht oft)
    Code:
         TCCR1A |=  (1<<COM1A1)|(1<<COM1B1);  // Clear/set OC1A/OC1B on Cmp Match
         TCCR1A |=  (1<<WGM11);               // Mode Fast PWM, TOP ICRn, 1. Teil
         TCCR1B |=  (1<<WGM13)|(1<<WGM12);    // Mode Fast PWM, TOP ICRn, 2. Teil
         TCCR1B |=  (1<<CS11);                // clkI/O/8 (From prescaler)
                                              //   => 20e6/8 = 2 500 000
         TCCR1C  =     0;                     // Wo in Deinem Code wird denn
                                              //   IRGENDEIN Bit auf 1 gesetzt ??
                                              // Würde ich nicht coden
         ICR1    = 249;               // 10kHz (F_CPU / (Prescaler * (ICR1 + 1)))
                                      // Die 10k sind ein netter Wunsch aber ..
                                      // .. das Timing Diagramm auf S 121 des
                                      //    ATmega164A-PA_bis_1284-P_8272G_01-15
                                      //    erklärt, dass es doch 20 kHz sind.
                                      //    Daher der Name "FAST"-PWM
    Anmerkung: Fehler vorbehalten, ich habs ja nicht getestet Bild  )

    Bei mir wird z.B. so initialisiert
    Code:
    // =====        s. Dokument ATmega164A-PA_bis_1284-P_8272G_01-15
    // ============================================================================= =
    // ==  PWM-Routinen zur Motoransteuerung
     void TC1PWM_init(void)         //Init Timer/Counter1 f Erzeugung des PWM-Signals
     {                              //
      TCCR1A &= ~(1<<COM1A1)|(1<<COM1B1);   // Clear/set OC1A/OC1B on Cmp Match   S132
                    // DISABLED OC1A/OC1B bzw Port PB1/B2, ERST mit Motorstart enablen
      TCCR1A |=  (1<<WGM10);                // Dazu noch 
      TCCR1B |=  (1<<WGM12);                // Fast PWM, 8 Bit TOP=0xFF=dez255     133
      TCCR1B |=  (1<<CS11);         // Prescaler ist clk/8 =>  9,8 kHz             135
            // theoretisch: 20 MHz / 8 / 255  =>  9,803922 kHz, DMM-Messung 9,78 kHz
      TIMSK1 &= ~(1<<OCIE1A)|(1<<OCIE1B);   // T/C1 Oput CmpA+B Match intrrpt dsabld
      TIMSK1 &= ~(1<<TOIE1);                // T/C1 Ovrflw intrrpt dsabled       ~S137
      OCPWM1    = 0;                        // PWM auf Null setzen
      OCPWM4    = 0;                        // PWM auf Null setzen
      isum12    =  isum34    = 0;
      ie_mot12  =  ie_mot34  = 0;
      ie_alt12  =  ie_alt34  = 0;
     }              // Ende void TC1PWM_init(void)
    // ============================================================================= =
    PS: Kleine Erkläuterung zum Nullen eines Bits
    Code:
      TCCR1A &= ~(1<<COM1A1);
      TCCR1A      ...    Ziel
      &           ...    UND-Operator
      &=          ...    das UND als Zuweisungsoperator,
                         => weist das Ziel als Parameter zu
      ~           ...    der unäre Operator bildet das
                         Bit-Komplement => "1" (in 1<<COM1A1)
                         wird zur "0"
    Geändert von oberallgeier (02.09.2015 um 09:32 Uhr) Grund: PS: Kleine Erläuterung
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi oberallgeier,

    danke für deine schnelle Antwort!
    Die 10k sind ein netter Wunsch aber ..
    .. das Timing Diagramm auf S 121 des
    ATmega164A-PA_bis_1284-P_8272G_01-15
    erklärt, dass es doch 20 kHz sind.
    Daher der Name "FAST"-PWM
    Ja, aber genau von der Seite 121 stammt ja meine Formel zur Berechnung von TOP (ICR1 = 249):
    f_PWM = f_I/O / (N * (1 + TOP))
    ... also:
    f_PWM = 20000000 / (8 * (1 + 249))
    = 20000000 / 2000
    = 10000 Hz = 10 kHz

    Denkst du, das stimmt so nicht?
    Gruß
    Dirk

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.739
    .. Ja, aber genau von der Seite 121 stammt ja meine Formel zur Berechnung von TOP (ICR1 = 249) .. Denkst du, das stimmt so nicht?
    Hmmmmm, also bei Dokumentationen mit mehr als 500 Seiten denke ich nicht mehr soooo oft, da hilft mir z.B. manchmal der Frequenzanalysator weiter . . .

    Auf Seite 121 der von mir genannten Dokumentation steht keine einzige Formel. Die von Dir zitierte Formel steht in der zitierten Dokumentation auf Seite 122 - und sorry für diese Pingeligkeit. Warum hast Du Dich entschieden, das Clear/Set-Bit zu aktivieren? Was bewirkt das ? Da steht doch im Abschnitt 16.10.3 Fast PWM mode weit unten (S 122) noch ne Anmerkung dazu !? Wie geschrieben - für mich sind die Erklärungen nicht immer soooo verständlich mit all den Flags auf wenn und aber . . . Bild  
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Signalabtastung mit ATMEGA644
    Von blackflame2025 im Forum AVR Hardwarethemen
    Antworten: 7
    Letzter Beitrag: 01.11.2011, 07:43
  2. Atmega644 RC5
    Von dehnelement im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 13
    Letzter Beitrag: 20.03.2010, 10:52
  3. FuseBits am Atmega644
    Von AVR_anfänger im Forum Robby CCRP5
    Antworten: 1
    Letzter Beitrag: 02.09.2008, 11:49
  4. atmega644 und bascom -- ADC_REFMODEL
    Von kolisson im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 27
    Letzter Beitrag: 13.03.2008, 23:27
  5. ATMEGA644 Programmieren
    Von Elektronik303 im Forum AVR Hardwarethemen
    Antworten: 49
    Letzter Beitrag: 30.03.2007, 18:36

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

    Werbung      Labornetzteil AliExpress