Ich glaube ich steh auf dem Schlauch. ich versuch gerade die Timer vom mega8 zu verstehen. ... Und moechte das diese tun was ich programmiere. (warscheinlich tun sie das, aber ich hab irgendwo ein Denkfehler und weiss nicht wo) => kein konkretes Projekt nur sehen was geschieht Nach allem was ich im DB und hier im Forum gelesen habe sollte es wie folgt gehen. Hardware: Grundschaltung mit 16Mhz Crystal und 2x22pF nach Grund #include <avr/io.h> #include <avr/interrupt.h> ISR(TIMER0_OVF_vect){ PORTD ^= (1<<PD1); } int main(){ DDRD |= (1 << PD0) | (1 << PD1) ; TCCR0 |= (1<<CS01); // prescaling 8 TIMSK |= (1<<TOIE0); PORTD |= (1<<PD2); PORTD |= (1<<PD3); sei(); for (;;) { /* loop forever */ } } Erwartet: 16MHz/8 = 2MHz am Pin PD1 Ergebnis: (an XTAL2 liegen 15.997 MHz) an PD1 3.90kHz Zu naiv? Nicht verstanden was da passiert? DB nicht verstanden? Der AVR hat sein eigenes Leben? Vielleicht kann mir jemand auf die Spruenge helfen. Danke
JG wrote: > Erwartet: > 16MHz/8 = 2MHz am Pin PD1 Falsch. Der Prescaler ist nur dafür zuständig, wie schnell der Timer zählt. Der Timer zählt mit 16/8 = 2Mhz Er zählt also laufend 0, 1, 2, 3, 4, 5, 6, 7, 8 ..... Und wenn es keine Beschränkungen geben würde, würde er in einer Sekunde bis 2000000 zählen. Aber es gibt Beschränkungen. Der Timer kann physikalisch bedingt nur bis 255 zählen. Danach löst er einen Overflow aus und fängt wieder bei 0 an. Wie oft passiert denn das daher? (Die Frage ist also: Wenn er in 1 Sekunde bis 2000000 zählen kann, wie oft schafft er es dann in 1 Sekunde von 0 bis 255 zu zählen?) 2000000 / 256 = 7812.5 In einer Sekunde werden also 7812.5 mal die Timerobergrenze von 255 erreicht. Und jedesmal wenn das passiert, wird ein Overflow Interrupt ausgelöst. Als Folge davon wird in deinem Programm die ISR aufgerufen. Und da du bei jedem Overflow den Pin nur toggelst, braucht es zwei Overflow Interrupts, bis eine komplette 'Welle' fertig ist. 7812.5 / 2 = 3906.25 Hz
so rein überschlagsmäßig: 16 mhz quarz. 2 mhz pinwackeln. heißt alle 8 zyklen ein interrupt. wie soll sich das ausgehen ?
@Karl heinz Buchegger Spitzenklasse Deine Erklaerung. Jetzt hab ich es verstanden. Herzlichen Dank
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.