Hi, hab da mal ne frage bezüglich des Timer1: ich habe an meinem µc einen externen Oszillator mit 8MHz angeschlossen. Die beiden Timer 0 und 2 laufen auch einwandfrei damit ... der Timer1 allerdings nicht. Der läuft rein rechnerisch mit einem Takt von 1Mhz. Hat evtl wer Ahnung wie das zustande kommt? der interne Takt des µc is ja auch bei 8MHz ...
Wie hast du den Prescaler gesetzt?? Den IOtakt (IOclock) kannst du teilen, um damit die Teiler anzusteuern.. Gruss
also externer takt von 8 MHz mit einem Prescaler von 1024 = 7812/sec (sofern ich noch richtig rechnen kann ... einstellen wollte ich den timer (testweise) auf eine sec und komme da mit den werten im register TCNT H: E1 L: 7C auf 7811 ... die LED geht aber erst nach ca 8 sec an und durch rückrechnen bin ich darauf gekommen das der timer mit 1MHz laufen muss (klar) - erklären kann ich mir dies jedoch nicht. Auch mit den werten bei angenommenen 1MHz H: FC L: 30 klappt es dann tadellos und die LED geht nach 1 sec an
Morgen. Ich denke da könnte noch die DIV/8 Fuse programmiert sein. Oder greift diese nur, wenn man den internen Oszillator benutzt? mfg
kann ja eigentlich nicht sein da die anderen timer mit den 8 MHz einwandfrei funktionieren - es sei denn der timer1 nutzt den internen während die timer 0 und 2 den externen oszillator nutzen aber ich schau das nochmal nach, danke
Kann vor allem aber deshalb nicht sein, weil der 8535 keine Div8-Fuse hat. War nämlich auch mein erster Gedanke, aber dann hab ich im Datenblatt nachgesehen.
Wenn du den OVF-Int nimmst, musst du den Timer nicht auf 7812 voreinstellen, sondern auf 65536-7812. Denn der Timer zählt aufwärts und nicht abwärts. Besser ist aber die Nutzung des OCR-Interrupts. Da liest du in der ISR den Wert des OCR1A(H/L) aus, addierst dein Intervall (die 7812) dazu und schreibst den Wert nach OCR1A(H/L) zurück. Auf diese Art läuft Timer1 durch und du kannst auch noch OCR1B und ICP benutzen, ohne dass die sich gegenseitig stören. ...
naja ich habe das vlt ein bisschen umständlich formuliert: ich habe natürlich einen wert von 65536 - 7812 eingestellt bzw hat mit iccavr diese 'arbeit' abgenommen und dennoch komme ich auf 8 sec ... auch wenn ich den ocr1 bzw den compare interupt verwende komme ich auf 8 sec ... zur not muss ich halt für den timer umrechnen und mit 1MHz rechnen anstelle von 8 ... die div8 fuse gibts im übrigen nicht wie oben schon steht --------- Computer lösen Probleme, die man ohne sie nicht hätte ...
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.