Forum: Mikrocontroller und Digitale Elektronik XMEGA256 Timer0 Compare Match Berechnung


von xmega_looser (Gast)


Lesenswert?

Hallo,

 stehe gerade total neben der Spur.
 Ich betreibe einen XMEGA256A3BU mit einem 32MHz Oszillator.
 Nun möchte ich "TIMER0" alle 250ms triggern lassen.

 Wie berechne ich das ganze? Formel?

von fop (Gast)


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.

von mega_looser (Gast)


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..

von xmega suchmaschine (Gast)


Lesenswert?


von Dieter F. (Gast)


Lesenswert?

mega_looser schrieb:
> mega_looser (Gast)

Nomen est omen? Google ist Dir bekannt? Troll ... :-)

von xmega suchmaschine (Gast)


Lesenswert?

Hilfe zur Selbsthilfe reicht einfach nicht.

Es müssen gebratene Tauben in den Mund geflogen kommen.

von xmega_looser (Gast)


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.

von xmega_looser (Gast)


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
}

von Horst S. (Gast)


Lesenswert?

PMIC initialisiert? (Sonst kommt kein Interrupt!)
ISR vergessen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.