Forum: Mikrocontroller und Digitale Elektronik ATMega8 CTC funktioniert nicht


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Elektron (Gast)


Bewertung
0 lesenswert
nicht 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?
//erzeugt einen Comparematch Init alle 1/4000 S
void timer1_init(void){
    TCCR1A |= (1<<WGM12);  //CTC
    TCCR1B |= (1<<CS10);  //Kein Vorteiler
    OCR1A = 3686;
    TIMSK = (1<<OCIE1A);
  }


ISR(TIMER1_COMPA_vect){
  static unsigned int zaehler = 0;
  zaehler++;
    if(zaehler == 4000){
      zaehler = 0;
      uart_putc(0x31);
    }
  }

int main (void)
{
  unsigned char Buffer[512];
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
  timer1_init();
  timer2_init();
  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

von Gast (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wo der TOP Wert hin sollte steht im Datenblatt, OCR1A scheint es nicht 
zu sein.

von Elektron (Gast)


Bewertung
0 lesenswert
nicht 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

von Wolfgang S. (wsm)


Bewertung
0 lesenswert
nicht 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

von Oliver (Gast)


Bewertung
0 lesenswert
nicht 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

von Stefan E. (sternst)


Bewertung
0 lesenswert
nicht lesenswert
Oliver wrote:

> Dein Code ist richtig.

Nö.

WGM12 liegt nicht in TCCR1A.

von Oliver (Gast)


Bewertung
0 lesenswert
nicht lesenswert
arrghh....

:-)

Oliver

von Elektron (Gast)


Bewertung
0 lesenswert
nicht 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

von Justus S. (jussa)


Bewertung
0 lesenswert
nicht lesenswert
Elektron wrote:

> @Stefan Kannst du mir bitte deine Aussage etwas erläutern?

laut Datenblatt gehört WGM12 ins TCCR1B...

von Elektron (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Aja. Vielen dank. Das habe ich im Eifer des Gefechts übersehn.
Gruß
Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.