Timer 1 Como Contador (PIC16F1826)

#1
Buenos dias ! tengo una consulta, estoy aprendiendo a programar el timer 1 del pic16f1826 como un contador. Por lo que vi, debo manipular los registros para habilitar un pin especifico (T1CKI) y enviarle pulsos de manera que incremente el contador del timer 1. Mi consulta es, como calculo cuantas unidades aumenta el timer durante la duracion del pulso?? Generalmente uso frecuencia de 4Mhz y prescalador en 1 para trabajar.
 
#2
El contador solo aumenta en 1 durante el pulso (el temporizador está funcionando en modo contador):
When enabled to count, Timer1 is incremented on the rising edge of the external clock input T1CKI or the capacitive sensing oscillator signal.
Si necesitas una medida de tiempo (por ejemplo, un segundo), puedes probar a usar el temporizador 0 para que obtenga el valor del temporizador 1 pasado un segundo de tiempo, y luego lo ponga a 0 para el siguiente periodo. Es una manera de contar pulsos externos usando periodos concretos de tiempo.
 
#4
El temporizador tiene cuatro fuentes de reloj distintas. Una de ellas es igual a la velocidad del sistema (Fosc) y otra es la cuarta parte de ese valor (Fosc/4). Entonces, si está funcionando a 4 Mhz, con un reloj Fosc, tenemos: 1 s/4×10⁶ = 0,25 µs

Entonces, 20 000 * 0,25 µs = 5 ms

Necesitas 4 veces más.

O usar la frecuencia de reloj Fosc/4, con lo que entonces ya tienes 1 µs
 
#7
Los temporizadores cuentan por si solos en función del reloj escogido. Si ese reloj es externo, lo que hace es contar pulsos externos. Lo que nunca hace es incrementar n unidades por pulso. Si quieres contar pulsos externos, tal y como lo planteas en el primer mensaje (definir el reloj como externo en la patilla T1CKI), pues entonces ya los estás contando. El problema es ahora que necesitas otra base de tiempos (interna o externa al microcontrolador) que diga que ha pasado 1 segundo, y así leer el número de pulsos contados en el temporizador 1.

Hay otra opción. Este microcontrolador también puede funcionar en como Capture. En este modo, el temporizador 1 está contando por sí solo, y cuando se produce un evento, el valor del temporizador se copia a los registros CCPRx. Puedes indicar que se active la interrupción CCPxIF y de esa manera reiniciar el temporizador 1, para la siguiente vez que se produzca el evento.

De esta manera, el temporizador 1 está "contando" el tiempo que pasa entre cada par de eventos externos en los pines CCPx.
 
#9
No, no se incrementa en 8000. Ya te hemos dicho que los temporizadores en modo contador siempre van de uno en uno.

El montaje propuesto que nos has enlazado es muy curioso: para mostrar cómo usar el temporizador 1 en modo contador, usa un LED externo para provocar la señal cuadrada que entra en T1CKI.

El funcionamiento es así:
· Se pone el temporizador en modo contador y se entra en el bucle sin fin.
· Dentro del bucle, se mira qué valor tiene el temporizador. Si coincide con alguno de los valores del switch-case, se iluminan los LED externos.
· Y luego, se invierte el valor de RD1, provocando el apagado/encendido del LED puesto encima de la LDR, que a su vez provoca el flanco de subida/bajada en T1CKI.
· Finalmente, una espera de 20 ms antes de repetir el bucle.

Tenemos entonces un bucle que se repite cada 20 ms, generando una señal cuadrada en RD1, que provoca otra señal cuadrada en T1CKI, y eso es lo que cuenta TMR1. El resultado será que TMR1 se incrementa cada 40 ms. Y si el primer LED de PORTB se enciende al llegar a 8000, eso significa que lo hará en 8000 * 40 ms = 320 s. Y sabiendo que TMR1 desborda a los 65535, los LED se apagan al volver a 0 (al cabo de casi 44 minutos).
 
#10
Perfecto, gracias por sus respuestas, me han sacado las dudas que tenia con el mismo, intentare hacer un codigo en XC8 para probar el mismo y comprobare el resultado!
 
Arriba