Forum: Mikrocontroller und Digitale Elektronik ATMega2560, zwei Timer gleichzeitig starten


von AutoBrummBrumm (Gast)


Lesenswert?

Hallo
ich würde gerne wissen ob ich bei einem ATMega2560 zwei timer 
gleichzeitig starten kann? (fast gleichzeitig)
ich gehe dafon aus, dass dies möglich ist da zb. timer0 und timer2 nicht 
über die gleichen Ports gesteuert werden und sie eigene Register haben.

Nun wie geht das ?

ich denke das man die Registr wie üblich initialisiert und sie im main 
untereinander auflistet.

in etwa so: (soll nur ein beispiel sein)
1
int main(void)
2
{
3
  // Timer 0 konfigurieren
4
  TCCR0A = (1<<WGM01); // CTC Modus
5
  TCCR0B |= (1<<CS01); // Prescaler 8, ((1000000/8)/1000) = 125
6
  OCR0A = 125-1;
7
  // Compare Interrupt enable
8
  TIMSK |= (1<<OCIE0A);
9
10
 // Timer 2 konfigurieren
11
  GTCCR |= (1 << TSM) | (1 << PSRASY);  //Timer anhalten, Prescaler Reset
12
  ASSR |= (1 << AS2);                   //Asynchron Mode einschalten
13
  TCCR2A = (1 << WGM21);                //CTC Modus
14
  TCCR2B |= (1 << CS22) | (1 << CS21);  //Prescaler 256
15
  // 32768 / 256 / 1 = 128                Intervall = 1s
16
  OCR2A = 128 - 1;
17
  TIMSK2 |= (1<<OCIE2A);                //Enable Compare Interrupt
18
  GTCCR &= ~(1 << TSM);                 //Timer starten
19
20
  // Global Interrupts aktivieren
21
  sei();
22
23
  while(1)
24
  {
25
    /*Hier könnte dein Code stehen*/
26
  }

kann man das so machen ? Es geht mir nicht um den Code sondern mehr um 
die Struktur. Also wenn ich im Code was falsch hab ist es egal, das 
finde ich schon noch selber heraus.

ah und noch was..timer0 ist 8bit und timer2 16bit..spielt das ne rolle ?

Besten Dank
AutoBrummBrumm

von K. S. (the_yrr)


Lesenswert?

dazu ist dieses Register zuständig:

GTCCR – General Timer/Counter Control Register

sieht so aus als würdest du es richtig machen laut Datenblatt, sonst 
nimm nen Oszi und teste falls du eins hast, andernfalls schalte zwei 
Timer so dass sie exakt gleich laufen (als PWM) und häng eine LED 
(+Widerstand) zwischen die Pins, die dürfte nicht leuchten/flackern wenn 
alles passt.

AutoBrummBrumm schrieb:
> ah und noch was..timer0 ist 8bit und timer2 16bit..spielt das ne rolle ?

sollte nicht, die laufen halt anfangs synchron und dann so wie 
konfiguriert, im CTC Modus können sie falls Top/Prescaler nicht gleich 
sind auseinander laufen.


edit:
PSRASY ist nur für Timer2, wenn du Timer0 (und 1,3,4,5) auch 
synchronisieren willst musst du auch PSRSYNC setzen.

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Genau gleichzeitig geht übers GTCCR, fast gleichzeitig geht einfach 
einer nach dem anderen. Das ergibt maximal 2 Prozessortakte Unterschied.

Kommt halt drauf an, was du brauchst.

Oliver

von Veit D. (devil-elec)


Lesenswert?

Hallo,

ich würde die Timer soweit konfigurieren wie benötigt und die Prescaler 
beider Timer am Schluss der Init-Sequence hintereinander setzen. Mit 
setzen der Prescaler wird im Normalfall (ohne GTCCR) der Timer gestartet 
und mit löschen wieder gestoppt.

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.