Ich versuche zu verwenden , um Überläufe TMR1
zu zählen . TMR0
Dazu verwende ich TMR1
Gate aktiviert und TMR0
Überlauf als Gate-Quelle.
Mit MPLAB SIM kann ich sehen, dass TMR0
es zählt und überläuft. Das TMROIF
Bit in INTCON
wird korrekt gesetzt.
TMR1
zählt ohne aktiviertes Gate korrekt und stoppt, wenn ich die Gate-Steuerung aktiviere - so weit, so gut.
Das TMR0
Überlaufen scheint jedoch das Tor nicht auszulösen. Das T1GVAL
Bit von T1GCON
wird nie gesetzt.
Ich TMR1
laufe bei Fosc und das Tor läuft nicht im Toggle-Modus oder im Einzelpulsmodus ... TMR0
läuft bei instruction clock / 256
, obwohl ich vermute, dass dies keine Rolle spielt ...
Hier sind meine Konfigurationsbits:
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF</code>
__CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_OFF
und hier sind die relevanten Zeilen, in denen ich konfiguriereTMR1
banksel T1CON
movlw b'01000001' ; source = Fosc, prescale 1:1, LP osc - no, Timer on
movwf T1CON
banksel T1GCON
movlw b'11000001' ; gate enabled, active high, toggle no, pulse mode no, source TMR0
movwf T1GCON
Ich denke, Ihr Problem beruht auf Verwirrung darüber, was das TMR1-Gate-Signal tatsächlich tut. Es bewirkt nicht von sich aus, dass der Zeitgeber zählt, sondern ermöglicht ihm lediglich zu zählen, wenn geeignete Ereignisse an seinem Takteingang auftreten.
Es ist subtil, aber wenn Sie sich „ABBILDUNG 21-1: TIMER1-BLOCKDIAGRAMM“ im Datenblatt (S. 179) ansehen, sehen Sie das TMR1H/TMR1L-Register in der Mitte. Die gesamte Logik darüber bezieht sich auf das Gating, und die gesamte Logik darunter bezieht sich auf das Takten. Alles läuft am Flip-Flop direkt rechts neben dem TMR1-Register zusammen, wo das Gate-Signal den EN-Eingang (Enable) dieses Flip-Flops und das Taktsignal den D-Eingang (Daten) ansteuert.
Dies bedeutet, dass der Ausgang des Flip-Flops nur umschaltet (und TMR1 zum Inkrementieren veranlasst), wenn das Gate-Signal hoch ist und das Taktsignal umschaltet.
Es gibt einfach keine Möglichkeit, Überlaufereignisse von TMR0 an die Taktlogik von TMR1 zu leiten , weder innerhalb noch außerhalb des Chips.
BEARBEITEN: OK, etwas tiefer graben (aufgefordert durch die Kommentare unten), stelle ich fest, dass Sie das T1SYNC-Bit im T1CON-Register auf Null gesetzt haben. Dadurch wird die Taktquelle auf Fosc synchronisiert. Wenn diese Taktquelle tatsächlich Fosc selbst ist, hat der Ausgang des Synchronizers einen konstanten Pegel – immer hoch oder immer niedrig, aber nicht umschaltend.
Ich glaube, das ist die Ursache deines Problems. Versuchen Sie, T1CON auf einzustellen b'01000101'
. Dies sollte das erreichen, was Sie wollen, vorausgesetzt, dass der Überlaufimpuls von TMR0 genau eine Fosc-Periode lang ist.
Olin Lathrop
ziflana
Olin Lathrop
ziflana
Olin Lathrop
ziflana
hli
hli
Apalopohapa
Apalopohapa
Apalopohapa
Benutzer17592