Guten Abend, wenn ich einen Timer programmiere, kann ich doch mit Hilfe von CCPRxH und CCPRxL meinen gewünschten Interrupt programmieren. Dass CCPRxL die einzelnen Schritte darstellt(also zB bei 8bit max 255) ist mir mittlerweile bewusst, aber welche Rolle spielt eigentlich dieses High Byte ? Kann man damit die Interrupts verlängern?
Zu einem 16-Bit-Timer passt auch ein 16-bit Capture-Register. Dementsprechend kann dann auch der Zählzyklus von (fast) Null bis auf 64K Takte eingestellt werden. Da ein 8-bit-Kontroller schlecht mit 16 bit umgehen kann, erfolgt die Übergabe der 16 bit aufgeteilt in hibyte und lobyte. Die Reihenfolge von hi und lo ist übrigens beim Schreiben/Lesen vorgeschrieben ( gut aufpassen !)
Danke für die schnelle Antwort! Das verstehe ich nicht ganz. Wie wird das aufgeteilt? Wenn ich zB weiß, dass ein Takt 1us benötigt:
1 | CCPR2H = 0; |
2 | CCPR2L = 255; |
Dann braucht ein Interrupt ungefähr 0,26 ms... Wenn ich jetzt ' CCPR2H = 40 ' schreibe, wie rechnet der uc dann?
ein Bit im hibyte entspricht 256 bits im lobyte. Hibyte 40 + Lobyte 45 = gesamt: 40x 256 + 45 = 10285 Takte, ein Zählzyklus umfasst dann 10,285 ms.
Das "bearbeiten" des Zählers im capture-Int ist allerdings nicht der optimale Weg. Besser ist eine Betriebsart des Zählers, wo beim Überlauf der Inhalt des capture-Registers automatisch an den Zähler übergeben wird. (so etwas kann ein AVR ) also Zählfolge, wenn im cap-reg 2345 steht: ...65534, 65535, 2345, 2345... Die Zählzeit ist dann 65535 - 2345 = 63191 Takte (oder 63192 ?) Dann erspart man sich die ungenauen Zeitverluste beim Übergang in die Int-Routine.
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.