XMEGA256 Timer0 Compare Match Berechnung

Gast #5519649
Lesenswert?

32 MHz ist 32 Millionen Mal jede Sekunde.
Alle 250 ms ist 4 Mal jede Sekunde.
Dazwischen liegt also Faktor 8 Millionen.
Diese 8.000.000 musst Du aufteilen auf irgendwelche Teiler zwischen 
Quarztakt und Peripherietakt, auf den Vorteiler vom Zähler und auf den 
Zähler selber.
Du kannst bestimmt irgendwie den Wert, bis zu dem der Zähler zählt 
begrenzen. Vorsicht : da der Zähler von 0 los zählt, teilt er durch 10, 
wenn er bis 9 zählt. Also immer einmal mehr wie Du, würde Mundstuhl 
sagen.
Da die meisten Vorteiler nur 2er Potenzen können, musst Du schauen, wie 
Du das Verhältnis ganzzahlig hin bekommst.
In Primfaktoren zerlegt ist Deine 8.000.000 immerhin 2^9 * 5^6.
Wenn Du einen 16-Bit-Timer hast ist das vermutlich kein Problem.
Gast #5520120
Lesenswert?

Danke für die Hilfestellung.
Gibt es hier jemand der mir einen Code Snippet zeigen kann, wie man den 
Timer auf Compare Match konfiguriert? Im Datenblatt gibt es zig Bits um 
irgendwas mit Compare Match einzustellen..
Gast #5520755
Lesenswert?

Danke für eure Mühen.

Sehe ich das richtig? Für einen Compare Match, muss ich es wie folgt 
konfigurieren?
1
6.4 Using a Timer/Counter for PWM Generation
2
Task: Configure TCC0 for pulse width modulation output with varying duty cycle on
3
channel A.
4
1. Configure PC0 for output by setting bit 0 in PORTC.DIR.
5
2. Select the timer period by setting the PER[H:L] register.
6
3. Select a waveform generation mode by setting the WGMODE[2:0] bits in
7
4. Enable Compare Channel A by setting the CCAEN bit in CTRLB.
8
5. Start the TC by selecting a clock source (CLKSEL[3:0] in CTRLA).
9
6. Calculate the desired compare value.
10
7. Write the new compare value to CCA[H:L].
11
8. Wait for the TC Overflow Flag to be set. (OVFIF in INTFLAGS).
12
9. Clear the TC Overflow flag.
13
10. Go to step 6.
Gast #5520771
Lesenswert?

Das will nicht so ganz.. Was mache ich falsch?
1
void timerCMPInit( TC0_t *tim )
2
{
3
  LED_DIR = 1<<0;
4
    
5
  // set up compare matching in the middle of the period
6
    TCC0.CCA    = 10;          // Compare Match Wert
7
  TCC0.PER    = 65535;
8
  TCC0.CTRLA    = TIMER_PRESCALER_gc;    
9
  TCC0.CTRLB    = TC0_CCAEN_bm;         // Compare Match 'A' aktivieren
10
    TCC0.INTCTRLB  = TC_CCAINTLVL_HI_gc;   // Interrupt bei Compare Match 'A' aktivieren
11
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren