mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega8 CTC funktioniert nicht


Autor: Elektron (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: Elektron (Gast)
Datum:

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

Autor: Wolfgang Schmidt (wsm)
Datum:

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

Autor: Oliver (Gast)
Datum:

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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver wrote:

> Dein Code ist richtig.

Nö.

WGM12 liegt nicht in TCCR1A.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
arrghh....

:-)

Oliver

Autor: Elektron (Gast)
Datum:

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

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Elektron wrote:

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

laut Datenblatt gehört WGM12 ins TCCR1B...

Autor: Elektron (Gast)
Datum:

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.