ATMega8 CTC funktioniert nicht

Gast #1231826
Lesenswert?
• ▲
▼
Hallo,
bei meinen ATMega 8 funktioniert beim Timer 1 leider das Automatische 
löschen nach dem Comparematch nicht. Sieht hier irgendjemand einen 
Fehler in dem Code?
1
//erzeugt einen Comparematch Init alle 1/4000 S
2
void timer1_init(void){
3
    TCCR1A |= (1<<WGM12);  //CTC
4
    TCCR1B |= (1<<CS10);  //Kein Vorteiler
5
    OCR1A = 3686;
6
    TIMSK = (1<<OCIE1A);
7
  }
8

9

10
ISR(TIMER1_COMPA_vect){
11
  static unsigned int zaehler = 0;
12
  zaehler++;
13
    if(zaehler == 4000){
14
      zaehler = 0;
15
      uart_putc(0x31);
16
    }
17
  }
18

19
int main (void)
20
{
21
  unsigned char Buffer[512];
22
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
23
  timer1_init();
24
  timer2_init();
25
  sei();
Das ist nur ein Auschnitt aus der Main. Wenn ich in die ISR TCNT1 = 0; 
einfüge geht es. Es liegt also ziemlich sicher am CTC.
Gruß
Peter
Gast #1231867
Lesenswert?
• ▲
▼
Hallo,
Laut Datenblatt ist wenn WGM12 = 1 und Alle anderen WGM Bits null sind 
OCR1A der Top Wert. (S98, Mode 4).
Ich habe WGM 13 ja nicht 1 weil dann wäre es ja laut DB ICR1 (S99, Mode 
12).
Gruß
Peter
#1232020
Lesenswert?
• ▲
▼
Ich habe vor kurzem eine PLL programmiert und alles Bits für CTC 
gesetzt.

Siehe:

Controllregister für Timer1 = Counter1
Controllregister für Timer1

Tccr1a.7 = 0 : Tccr1a.6 = 1      'für Toggle OC1A = PB1
Tccr1a.5 = 0 : Tccr1a.4 = 0      'für Toggle OC1B = PB2 = disconnected
Tccr1a.3 = 0 : Tccr1a.2 = 0      'unbenutzt
Tccr1a.1 = 0 : Tccr1a.0 = 0      'WGM11=0, WGM10=0
Tccr1b.7 = 0 : Tccr1b.6 = 0 : Tccr1b.5 = 0  'unbenutzt
Tccr1b.4 = 0 : Tccr1b.3 = 1      'WGM13=0, WGM12=1 für CTC-Mode mit 
OCR1A
Tccr1b.2 = 1 : Tccr1b.1 = 1 : Tccr1b.0 = 0  'T1-Pin, falling edge

In Kurzschreibweise:

Tccr1a = &B01000000
Tccr1b = &B00001110
Ddrb = &B00011111                'Output OC1A/B, OC2 , Teilerausgang

Wolfgang
Gast #1232057
Lesenswert?
• ▲
▼
>Es liegt also ziemlich sicher am CTC.

Es liegt sehr sicher nicht am CTC. Der funktioniert, auch beim Mega8. 
AVRStudio simuliert nicht in alle Betriebsarten der 16-Bit-Timer 
richtig, aber davon sprichst du ja nicht, oder?

Dein Code ist richtig.

Oliver
Gast #1232175
Lesenswert?
• ▲
▼
Hallo,
@Oliver
der Fehler tritt real auf.
@Stefan Kannst du mir bitte deine Aussage etwas erläutern? Was habe ich 
beim DB falsch gelesen? Auf welches Register bezieht sich denn der 
Comparmatch.
Gruß
Peter

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.