- 12V Akku mit 280 Ah bauen         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: Timer 2

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    68
    Beiträge
    697

    Timer 2

    Anzeige

    Praxistest und DIY Projekte
    Kann dies bitte mal jemand detailliert erklären, wie es hier durch Setzen der Register TCCR2, OCR2 und TIMSK zu 36 kHz kommt.

    Code:
    /* Timer2, zum Betrieb mit der seriellen Schnittstelle, fuer die IR-Kommunikation auf 36 kHz eingestellt. */
       TCCR2  = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20);
       OCR2   = 0x91;           // duty cycle fuer 36kHz
       TIMSK |= (1 << TOIE2);   // 36kHz counter
    Das gleiche bitte für die Ultraschall-Funktion mit 40 kHz:
    Code:
       // Change Oscillator-frequency of Timer 2
       // to 40kHz, no toggling of IO-pin:
       TCCR2  = (1 << WGM21) | (1 << CS20);
       OCR2   = 100;              // 40kHz @8MHz crystal
       TIMSK |= (1 << OCIE2);     // OCIE2:  Timer/Counter2 Output Compare Match Interrupt Enable

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    68
    Beiträge
    697
    Ich versuche es mal selbst. Bitte korrigieren, falls falsch:

    36 kHz:
    Im Register TCCR2 werden die Bits WGM20, WGM21, COM20, COM21, CS20 auf 1 gesetzt.
    Das Register OCR2 wird auf hexadezimal 91 - dezimal 145 - gesetzt.
    Im Register TIMSK wird das Bit TOIE2 auf 1 gesetzt.

    WGM20 und WGM21 bedeuten Modus "Fast PWM".

    Pin OC2 wird durch COM20 und COM21 auf "Compare Match" gesetzt.

    CS20 bedeutet "No Prescaling".

    OCR2 = x91 = dec145 = b10010001 wird ständig mit TCNT2 verglichen. 36 kHz ergeben sich durch 256 - 145 = 111.

    4000000 / (256 - 145) = 36000

    TOIE2 in TIMSK gesetzt bedeutet "Interrupt Overflow Enabled"

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    der Asuro läuft aber mit 8MHz, deswegen wird für 72000 ausgerechnet, damits nachher wieder passt, also bis $91 zählen ist nur die halbe Frequenz.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    68
    Beiträge
    697
    Verstehe ich leider noch nicht komplett. Kann mal jemand, der zu 100% durchblickt, bitte die kompletten Formeln hinschreiben und begründen, die mit f = 8 MHz und OCR2 = 0x91 als Input beginnt und 36 kHz als Output liefert.

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    die pwmfrequenz hat ja mit dem dutycycle (also wie lange der pin pro durchlauf auf HIGH bleibt) nichts zu tun. bei fast pwm wird nur hochgezählt bis 0xFF. Also:

    f=f(osc)/(prescaler*TOP)=8MHz/(1*256)=31250Hz

    schlagt mich wenns net stimmt -.-

    EDIT: quatsch. sollen ja 36kHz werden. mom, ich guck nochmal ins datenblatt. sry

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Die Initialisierung von oben stammt aus der neuen AsuroLib, bei dieser gehört aber dann auch noch der Teil in der ISR dazu, dort wird zum Timer $25 addiert.

    In der origianl asuro.c wird der CTC-Modus verwendet, und bei jedem Compare der Pin getogglet.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    68
    Beiträge
    697
    Du meinst diesen Teil des Sourcecodes?
    Code:
    SIGNAL (SIG_OVERFLOW2)
    {
      TCNT2 += 0x25; //dezimal 37
      count36kHz ++;
      if (!count36kHz)
        timebase ++;
    
      #ifdef RC5_AVAILABLE
        if (enableRC5 && !(count36kHz % 8)) 
           IsrRC5(); // wird alle 222.2us aufgerufen
      #endif  
    }
    OK, das ist wichtig, weil TCNT2 ja mit OCR2 vergleichen wird.
    Könnte bitte jemand exakt und sequentiell erklären, wie TCNT2 in Bezug auf die Frequenz von 8 MHz zählt, wann und warum diese 37 ($25) addiert werden, wann und wie genau der Vergleich mit OCR2=145 ($91) erfolgt und wie aus diesen Zahlen 36000 Hz entstehen. Ich schaffe es leider noch nicht ganz sicher, würde es aber gerne komplett verstehen. Bitte nur die lib 2.7 beachten.

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    68
    Beiträge
    697
    @robocat:
    8000000 / (1*(256 - 145)) = 2*36036

    Da spielt die Addition von 37 hinein. Diese Anpassung von 36 kHz auf 72 kHz kapiere ich aber leider noch nicht vollends, stehe da auf dem Schlauch.

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    ich gebs auf. sorry für die verwirrung. bin heut wohl noch so im halbschlaf.

    gruesse

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    68
    Beiträge
    697
    Jetzt muss Du noch erklären, warum der Wechsel gerade bei 145 erfolgt?
    37 -> LO -> 145 -> HI -> 256=37 -> ...

    145-37= 108
    256-145=111
    Das ist doch nicht ganz symmetrisch. Da hätte man doch eher 146 oder 147 für OCR2 genommen.

    EDIT: Robocat hat seine Erklärung leider zurück gezogen. Er hatte erklärt, dass beim Overflow der Zähler nicht auf 0, sondern auf 37 gesetzt wird. Bei 145 würde der Ausgang von LO auf HI gesetzt, bei 256 dann wieder von vorne. Das ergibt dann aber mit 8000 kHz / (256-37) = 36,5 kHz und ist vielleicht falsch. Aber wie geht es genau?

    Ist offensichtlich schwierig zu kapieren, selbst für Experten. Jetzt will ich es aber ganz genau wissen.

    Also meine obige Formel scheint mir immer noch der richtige Weg zu 36 kHz. Jetzt muss nur jemand die genaue Abfolge und die Bedeutung der Addition von 37 beim Overflow des Timers erklären.

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen