12F629 Timer0

Gast #329369
Lesenswert?

Hallo Leute.

Ich muss mit dem PIC12F629 alle 200us einen Interrupt erzeugen. Ich
habe auch schon Interrupts im Abstand von 20us zusammengebaracht,
schaffe es aber nicht, diesen Abstand auszudehnen. Das müsste doch mit
dem Prescaler funktionieren, oder? Hab ich auch schon Probiert, hat
aber nicht funktioniert.

Bitte helft mir

Mfg Flo
Gast #329372
Lesenswert?

4017? Nicht schlecht, 16 Pins zusätzlich zu einem 8-Pinner nur wegen den
200us... :-)
Wenn wir mal von den internen 4MHz ausgehen, mit denen der PIC gerne
mal läuft, dann guggst Du erst mal, wie Du Deinen Prescaler einstellen
musst. Der Timer wird mit 1MHz getaktet, 200us willst, d.h. Du darfst
den Prescaler auf 1:1 stellen. Jetzt kommt das wichtige: Innerhalb der
Interrupt-Service-Routine musst Du den Timer selber neu laden, damit
der Interrupt nicht alle 256us kommt sondern früher. Beachten musst Du
weiterhin, wieviele Takte schon abgearbeitet wurden: Hier ein
Beispiel:

; ****** Interrupt-Service ********************************

           org     4

                                  ; 4
           movwf   IntW           ; 1  ; Register retten!
           movf    STATUS,W       ; 1
           movwf   IntStat        ; 1
           movlw   200-9          ; 1  ; Timer nachladen
           movwf   RTCC           ; 1
                                  ;---
                                  ; 9

           bcf     INTCON,RTIF    ; Interrupt zurücksetzen
Gast #329374
Lesenswert?

Sorry hatte länger keine Zeit zum posten.
Hab meinen Fehler schon gefunden (trotzdem danke!!!). Die Interrupts
hauen jetzt hin. Jetzt hab ich aber schon ein neues Problem.
Wie würdet ihr eine Pulsweitenmodulation ohne CCP durchführen. Kann ich
dazu den zweiten Timer (Timer1) benutzen? Dann müsste ich doch 2 ISR
machen, oder? Geht das überhaupt?

mfg Flo

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren