7 votos

El uso de desbordamiento del Timer0 a la puerta de Timer1 en PIC12F1822

Estoy tratando de usar TMR1 a recuento TMR0 desbordamientos. Para ello estoy usando TMR1 con puerta habilitada, y el uso de TMR0 de desbordamiento como la puerta de entrada de la fuente.

Usando el MPLAB SIM, puedo ver que TMR0 está contando y desbordante. El TMROIF bits en INTCON se está establecida correctamente.

TMR1 cuenta correctamente sin la puerta habilitada, y se detiene cuando puedo habilitar el control de la puerta - hasta ahora tan bueno.

Sin embargo, TMR0 desbordante no parece ser la activación de la puerta. El T1GVAL poco T1GCON nunca conjunto.

Estoy corriendo TMR1 en Fosc y tengo la puerta de ejecución , no en el modo de alternancia o de un solo modo de pulso... TMR0 está ejecutando en instruction clock / 256, aunque supongo que esto no importa...

Aquí están mis config bits:

__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

y aquí están las correspondientes líneas donde puedo configurar TMR1

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

8voto

GSerg Puntos 33571

Yo creo que tu problema se basa en la confusión sobre exactamente lo que el TMR1 señal de Puerta en realidad tiene. No es, por sí misma, causa el temporizador de cuenta, simplemente permite contar si hay eventos que ocurren en su entrada de reloj.

Es sutil, pero si nos fijamos en la "FIGURA 21-1: TIMER1 DIAGRAMA de BLOQUES" en la hoja de datos (p. 179), verá la TMR1H/TMR1L registrar en el medio. Toda la lógica por encima de que está relacionado con la compuerta, y toda la lógica de abajo que está relacionado con el reloj. Todo se junta en el flip-flop justo a la derecha del registro TMR1, donde la señal de puerta unidades de la EN (enable) de entrada de flip-flop, y la señal de reloj de las unidades de la D (datos de entrada).

Lo que esto significa es que la salida del flip-flop cambiará (y causa TMR1 a incremento) sólo si la puerta de la señal es alta y la señal de reloj es la alternancia.

Simplemente no hay manera de enrutar el desbordamiento de los eventos de TMR0 el reloj de la lógica de TMR1, ya sea dentro o fuera del chip.

EDIT: OK, cavar un poco más profundo (pregunte por los comentarios de abajo), me doy cuenta de que usted tiene el bit T1SYNC en el registro T1CON a cero. Esto hace que la fuente de reloj para sincronizar el Fosc. Si la fuente de reloj es de hecho Fosc sí, la salida de la sincronizador será una constante a nivel de siempre de alta o baja, pero no de cambiar de estado.

Creo que esta es la causa raíz de su problema. Pruebe a establecer T1CON a b'01000101'. Esto debería lograr lo que desea, suponiendo que el desbordamiento del pulso de TMR0 es exactamente un Fosc período de tiempo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X