-         

Ergebnis 1 bis 3 von 3

Thema: Phase correct mode Fragen

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.02.2007
    Beiträge
    139

    Phase correct mode Fragen

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo

    Also ich habe gerade den Quellcode von oberallgeier(siehe ganz unten), und dabei haben sich einige Frage aufgetan.

    Nun er schreibt:
    TCCR1A |= (1<<COM1A1); //Clear/set OC1A on Compare Match doc S132

    Aber müsste er nicht auch noch COM1A0 löschen um wirklich sicher zu gehen das "Clear/set OC1A..." eintritt?

    Das nächste wäre das er mit folgendem Code den Phase correct mode Aktiviert.
    TCCR1B |= (1<<WGM13);

    Nun das leuchtet mir auch ein nur im Daten Blatt steht:
    In phase correct PWM mode the counter is incremented until the counter value matches either
    one of the fixed values 0x00FF, 0x01FF, or 0x03FF (WGM13:0 = 1, 2, or 3), the value in ICR1
    (WGM13:0 = 10), or the value in OCR1A (WGM13:0 = 11).
    Nun WIE bringt man WGM13:0 auf "10" damit zB. ICR1 schluss ist? (finde das nicht im Quellcode)

    Hoffe ihr könnt mir helfen.

    Danke schon mal dafür.

    lg Manhunt




    Code:
    /* ============================================================================== */
    /* ==  PWM-Routinen zur IRLED-ansteuerung auf OC1A/PB1    ======================= */
      void TC1PWM_init(void)   //Init Timer/Counter 1, PWM-Signal
    {                               //       PWM aktivieren
       TCCR1A |= (1<<COM1A1);       //Clear/set OC1A on Compare Match           doc S132
                //   also Port PB3, vgl. auch PWM-routine unten
       TCCR1B |= (1<<CS10);         // cs10 <=> clk/1 => no prescaling         doc S 134
       TCCR1B |= (1<<WGM13);        // PWM, Phase+Frequency correct            doc S 134
       ICR1    = 278;               // =>PWM-Frequenz 20MHz/(2*278) => 36,0kHz/27,8µs
    /* Interrupts deaktivieren. Siehe Registerbelegung :
    mega168   Bit7       6        5         4         3         2        1        0
    TIMSK1      –        –      ICIE1        –         –       OCIE1B   OCIE1A   TOIE1
    im m168     ?        ?        ?         ?         ?         ?        ?        ?   */
    //
       TIMSK1 &= ~(1<<OCIE1A);      // Tmr/Cntr1 Oput CompA/B Mtch intrrpt disab
       TIMSK1 &= ~(1<<OCIE1B);      // Tmr/Cntr1 Oput CompA/B Mtch intrrpt disab
       TIMSK1 &= ~(1<<TOIE1);   // Tmr/Cntr1 Overflow interrupt disabled
    }
    /* ============================================================================== */
      void setSRV1(uint16_t speed1)         //Relative Pulslänge auf OC1A/PB1
    {OCR1A = speed1;}                       //  z.B. für SFH5110
    /* ============================================================================== */

    Ah zu Frage 2 bin ich schon fündig geworden, mit "10" meinen Die modus "10" (Atmega datenblatt 133) und der Quellcode von oberallgeier läuft allso im Modus 8.

    So nun bleibt nur mehr Frage 1.

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    ne Angabe zum Controller währe nett.
    Da die Funktion init im Namen trägt, wird sie wohl nur einmal nach einem Reset ausgeführt. Warum willst du ein Register auf Null setzen, dass bei einem ordentlichen Reset eh Null ist? Im Datenblatt findest du bei der Beschreibung der Register immer die Angaben, ob sie lesbar oder schreibbar (r/w) sind und wie sie initialisiert werden.

    Gruß

    Jens

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.02.2007
    Beiträge
    139
    Controller ist Atmega168

    Thx is mir jetzt auch klar.

    Lg manhunt

Berechtigungen

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