ATMega8 CTC funktioniert nicht

Gast #1231826
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
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
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
>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
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

Eine eigene Frage? Dieser Thread ist über 17 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.