ATMega2560, zwei Timer gleichzeitig starten

Gast #5751898
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
#5751906
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.
#5752048
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.