Hallo ich versuche an einem Atmega32 mit 16 MHz einen 16-bit-Timer zu benutzen, aber irgend etwas ist nicht richtig, nach 100ms gibt es gerade mal 97 Counts, wo doch ca 6250 zu erwarten wären. // 16-bit-Zähler testen TIFR1 |= 1<<TOV1 ; // Rücksetzen nach vorangegangenem Überlauf // (1 schreiben, keine 0!) TCCR1B |= (1<<CS12) ; // Timerstart mit 1/256 CPU TCNT1 = 0; // Timer auf Null _delay_ms(100); return (TCNT1); } Es soll kein Interrupt ausgelöst, sondern einfach nur gezählt werden, demzufolge ist allein TCCR1B gesetzt. Was kann man tun, daß er funktioniert? mfg Erich
Stand vielleicht vorher schon was im TCCR1B? Mit "TCCR1B |= (1<<CS12)" wird ja nur das Bit CS12 zusätzlich gesetzt. Sicherer wäre hier: TCCR1B = (1<<CS12);
>Was kann man tun,
Den ganzen Code zeigen? Ist vielleicht die Funktion als unsigned char
definiert?
Oliver
Erich Meißner schrieb:
> mal 97 Counts, wo doch ca 6250 zu erwarten wären.
Scheint, Du gibst nur das Low-Byte aus.
Peter
Hallo, vielen Dank; ich habe mit Euren Empfehlungen die Sache noch mal durchprobiert, also bei TCCR1B = 5; jetzt ein einfaches = -Zeichen, dann versuchsweise bei TCNT1 Low- u. Highbyte getrennt und auch die Definitionen getestet. Bei der Variation der Prescalerwerte und Vergleich mit den gezählten Counts bin ich darauf gekommen, das der Prozessor mit nur 1 MHz getaktet sein muß. Es handelt sich hier um Uli Radigs Webservermodul, das um zusätzliche Module erweitert werden soll und das, soweit ich das gelesen habe, den externen 16-MHz-Quarz nicht nur zur Zierde hat. Aber die Timer scheinen davon nichts zu sehen. Frage nebenbei: wie schaffen das die Leute, ihre Programmcodes und Textstellen so schön zu formatieren? Ich sehe keine passenden Buttons. Bye Erich
Erich Meißner schrieb: > Es handelt sich hier um Uli Radigs Webservermodul, das um zusätzliche > Module erweitert werden soll und das, soweit ich das gelesen habe, den > externen 16-MHz-Quarz nicht nur zur Zierde hat. Aber die Timer scheinen > davon nichts zu sehen. Der Quarz alleine machts noch nicht. Man muss dem Prozessor auch per Fuses mitteilen, dass er den benutzen soll. > > Frage nebenbei: > wie schaffen das die Leute, ihre Programmcodes und Textstellen so schön > zu formatieren? Ich sehe keine passenden Buttons. Schreib am Anfang vom Code [ C ] (ohne die Leerzeichen) und am Ende vom Code [ / C ] (ebenfalls wieder ohne Leerzeichen) (Geh mal auf "Antwort mit Zitat", dort siehst du es auch)
1 | int main() |
2 | {
|
3 | }
|
Wenn nur der falsche Takt anliegt, würde sich die Anzahl der Zählerschritte nicht ändern, weil _delay_ms(100) in diesem Fall im gleichen Verhältnis zu langsam "zählt". Oliver
> Frage nebenbei: > wie schaffen das die Leute, ihre Programmcodes und Textstellen so schön > zu formatieren? Sie lesen den Text direkt über dem Bereich, wo sie ihre Antwort eingeben, da wo groß "Formatierung" steht. Gegebenenfalls noch das, was sich hinter dem Link daneben mit dem Titel "mehr Informationen..." verbirgt.
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.