www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Timer2 und Uhrequarz


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Mein C Code schaut so aus: ( Verwendet wird ein ATMega8L8 )

#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>

uint8_t foo;

SIGNAL (SIG_OUTPUT_COMPARE2A)
{
        foo++;
        if ( foo == 255 )
               {PORTB--;foo=0;}
        if ( PORTB == 0 )
               PORTB = 0xff;
}

int main(void){
        ASSR  |= (1<<AS2);
        TCCR2 |= (1<<CS22);
        TIMSK |= (1<<OCIE2);
        TIFR  |= (1<<OCF2);
        OCR2 = 230;
        TCNT2  = 0x00;
        DDRB=0xff;
        PORTB=0xff;
        foo=0;
        sei();

}

An TOSC1/2 hängt ein 0,032768MhZ Uhrenquarz und CKLOPT Fuse ist
aktiviert. Bewirken soll der Code, dass von PORTB nach einer gewissen
Zeit immer 1 abgezogen wird. Das Uhrenquarz ist wie in Fig11 im atmega
8 Datenblatt angeschlossen. Als System Clock verwende ich den
Calibrated Internal RC Oscillator mit 4MhZ. Geb ich der Schaltung strom
funktioniert auch alles, aber es funktioniert auch, wenn das Uhrenquarz
nicht angeschlossen ist :-) . Deshalb denk ich, dass die Timer/Couter
Clock Source des Timer2 nicht das Uhrenquarz ist. Ich hab schon im
Datenblatt nachgeschaut ob ich irgendwelche Register falsch gesetzt
habe, habe aber nichts gefunden.

Danke im Voraus!

Ralf

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei ATmega8 und "Uhrenquarz" auch das Errata am Ende des Datenblatts
beachten. Weiterhin ist die Initialsierung nicht ganz ok. Ist im
Datenblatt als "Checkliste" beschrieben. Vielleicht hilft der Code
von http://www.siwawi.arubi.uni-kl.de/avr_projects/lcd...
etwas weiter, ist zwar fuer ATmega16 aber zeigt hoffentlich "die
Idee".
Martin

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erst mal für die schnelle Antwort!

Ich geh mal deinen Code durch und versuch aus diesen schlau zu werden.

Ralf

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab anscheinend deinen Code richtig interpretiert. Es scheint jetzt
richtig zu funktionieren. Ich hab mal den µc 10 Minuten mitgemessen und
es gibt "keine" Abweichungen.

Danke!

Ralf

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.