www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer0 Overflow Problem Atmega16


Autor: Vladimir (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwie kriege ich es nicht hin ein den Timer0 Overflow richtig zu 
benutzen mit einen Atmega8 funktionierte es. Mit mega16 nicht mehr.

Ich habe jetzt das Programm auf den Timer0 reduziert und sehe den Fehler 
immer noch nicht.
Der Timer zählt hoch bis 255 und fängt wieder von vorne an aber 
ISR(TIMER0_OVF_vect) wird nicht ausgeführt. Die Variablen lass ich am 
Display anzeigen.

Am PB0 liegt ein Rechtecksignal von ca. 60 kHz an den der Timer auch 
zählt.

Kann jemand bitte kurz drüberschauen.

STK500, Quarz intern 8MHz schein alles in Ordnung eingestellt zu sein.
#include <avr/io.h>
#include "lcd.h"
#include <avr/interrupt.h>
#include <stdlib.h>

char Buffer[20];
volatile unsigned char x = 0;

ISR(TIMER0_OVF_vect) //Timer0 Interrupt
{
    x++;
}

int main(void)
{
    lcd_init(LCD_DISP_ON);  
  lcd_clrscr();

  TCCR0 |= (1<<CS00 | 1<<CS01 | 1<<CS02); 
  TCNT0 = 0; 
  TIMSK |= (1 << TOIE0);
  sei();

    while(1)
    {
    itoa( TCNT0, Buffer, 10 ); 
    lcd_gotoxy(0,0);
    lcd_puts(Buffer);
    
    itoa( x, Buffer, 10 ); 
    lcd_gotoxy(0,2);
    lcd_puts(Buffer);
  }
}


Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
>TCCR0 |= (1<<CS00 | 1<<CS01 | 1<<CS02);
= External Clock Source on T0 Pin, Clock on rising edge
So gewollt und Clock angelegt?

Viel Erfolg, Uwe

Autor: Vladimir (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, am Display sehe ich ja dass TCNT0 hoch zählt. Das ist ja was ich 
nicht verstehe obwohl Timer läuft wird ISR ignoriert.

Autor: Edi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am Code habe ich auch nichts Ungewöhnliches entdeckt. Aber wenn Du mit 
60 kHz taktest, kannst Du den Timer (bzw. den Wert von TCNT0 am LCD) 
nicht mehr hochzählen sehen. x müsste mit einer Frequenz von 234 Hz 
hochgezählt werden, das könnte man noch sehen (fast 1 Durchlauf pro 
Sekunde). Kann es nicht sein, dass Du am LCD x anschaust und für TCNT0 
hältst? Schreib doch mal x-- in die ISR, nur zum Ausprobieren.

Autor: Vladimir (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Edi,

Hast natürlich recht, TCNT0 läuft so schnell das man es kaum sieht, 
außer man drückt reset und das Display friert ein, dann kann mans 
ablesen. Nur var. „x“ ist immer gleich null.

Ich lass beides gleichzeitig anzeigen:
    while(1)
    {
    itoa( TCNT0, Buffer, 10 ); 
    lcd_gotoxy(0,0);
    lcd_puts(Buffer);
    
    itoa( x, Buffer, 10 ); 
    lcd_gotoxy(0,1);
    lcd_puts(Buffer);
  }

Gruß Vladimir

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vladimir schrieb:
> Irgendwie kriege ich es nicht hin ein den Timer0 Overflow richtig zu
> benutzen mit einen Atmega8 funktionierte es. Mit mega16 nicht mehr.

Und übersetzt und linkst du den Code jetzt auch wirklich für den Mega16? 
Die verwendeten Register liegen nämlich auf den gleichen Adressen, so 
dass der Zähler trotzdem laufen sollte, auch wenn du weiterhin den Mega8 
eingestellt hast. Der Interrupt würde aber nicht gehen, weil der Mega16 
2-Word-Vektoren hat (der Mega8 nur 1-Word-Vektoren).

Autor: Vladimir (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist es!

Project Configuration war natürlich die alte (von atmega8)

Vielen Dank Stefan, und alle anderen.

In solchen Momenten könn’t ich mich ohrfeigen.


Gruß Vladimir

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.