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
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/lcdclock/index.html etwas weiter, ist zwar fuer ATmega16 aber zeigt hoffentlich "die Idee". Martin
Danke erst mal für die schnelle Antwort! Ich geh mal deinen Code durch und versuch aus diesen schlau zu werden. Ralf
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.