Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
y si te olvidas del timer si no lo comprendes muy bien e intentas hacerlo con la funcion COUNT
COUNT Pin,Period,Var
Count the number of pulses that occur on Pin during the Period and stores the result in Var.
Mira este sencillo ejemplo, te puede servir para lo que deseas entender.El funcionamiento del timer lo entiendo objetivamente, lo que necesito saber es como leo lo que cuenta el timer cuando esta entrando una frecuencia externa, que es justamente lo que nadie me a podido responder aun, en todos los manuales dice que se puede leer el TMR0 en cualquier momento pero nadie lo explica en la forma de hacerlo.
Device = 16F84A
Main:
OPTION_REG = %00100000
TRISA = %00010000
TRISB = 0
TMR0 = 0
Bucle:
DelayMS 100
PORTB = TMR0
GoTo Bucle
Mira este sencillo ejemplo, te puede servir para lo que deseas entender.
Suerte.
no tiene tanta magia, se lee igual en cualquier lenguaje... igual como configuras puertos, igual se puede leer y escribir el TMR0 que es un registro de 8 bits.
Ejemplo en ProtonBasic
Código:Device = 16F84A Main: OPTION_REG = %00100000 TRISA = %00010000 TRISB = 0 TMR0 = 0 Bucle: DelayMS 100 PORTB = TMR0 GoTo Bucle
es que quiero comprender su funcionamiento al 100% porque las interrupciones son extremadamente utiles en todo, mas alla que yo quiera hacer un tacometro
Varia var Byte
Varia=tmr0
¿entonces conviene asignar por ejemplo el puerto A4 al tmr0 como lo hago con una variable y despues leer ese puerto asignandole a su vez una variable?
perdon por preguntar, es que quiero comprender su funcionamiento al 100% porque las interrupciones son extremadamente utiles en todo, mas alla que yo quiera hacer un tacometro
El ejemplo está escrito en PICBasic Pro, No está en lenguaje ensamblador.excelente el ejemplo solo que justo ese idioma de asm no lo comprendo, igual mil gracias fue lo mas concreto hasta ahora, voy a ver como puedo interpretarlo y replicarlo en pic basic pro.
En el archivo que te mencioné "T0CKI_Cnt.pbp" está la configuración de los registros INTCON y OPTION_REG.D@rkbytes, acá está incluyendo un archivo
INCLUDE "T0CKI_~1.MAC"
¿Ahí esta la configuración del tmr0? en este tipo de programación digo en PBP también se puede hacer, por eso te pregunto porque podría agregarlo a mi programación y solamente hacer las cuentas matemáticas leyendo el tmr0
si lo quieres comprender al 100% empieza por diferenciar lo que es un modulo de un pic y una interrupcion. los modulos son como el timer1, timer2, CCP, Comparadores, USART, etc. etc segun cada pic.
esos modulos necesitan configurarse mediante registros y pueden la mayoría, cierto pre-diseñadas situaciones generar una interrrupcion, una interrupcion que genera el modulo significa que "pare" lo que esta haciendo por hacer lo que le digas dentro de la rutina de interrupción, normalmente se tiene que borrar una bandera(flag) que se genera al interrumpirse el programa, para que se vuelva a habilitar la interrupcion.
para leer los registros (que son totalmente independientes y diferentes a una interrupcion), solamente pones en cualquier parte de tu codigo ya sea el bucle principal, una sub-rutina o la rutina de interrupcion:
tmr0 es un registro y varia es una variable de 8 bits igual que el registro.Código:Varia var Byte Varia=tmr0
Edito:
y yo tambien pienso que no es necesario utilizar la interrupcion del timer0 para hacer un tacometro.![]()
- Buscas que el Timer0 trabaje como contador de pulsos externos? si, entonces se configura el RA4 como entrada, en OPTION_REG se indica que los pulsos de conteo para el Timer0 provienen del pin RA4.
- Sin pre-divisores, por cada pulso en RA4 se incrementa +1 el valor del registro TMR0.
- Se puede leer el valor TMR0 en cualquier momento, sea o no interrupción como el ejemplo que planteo.
- El registro TMR0 se puede leer y escribir en cualquier momento.
En resumen, basta con leer el valor del TMR0 y asignarlo a otra variable para luego hacer operaciones.
El ejemplo está escrito en PICBasic Pro, No está en lenguaje ensamblador.
El archivo del programa en PBP se llama T0CKI_Cnt.pbp (*.pbp = PIC BASIC PROJECT)
Los otros archivos que están en la carpeta son los que genera el compilador y los de simulación en ISIS.
También se le puede cambiar la extensión a *.bas. Pero yo Utilicé MicroCode Studio para escribir el programa y *.pbp es la extensión que MCS usa por defecto para sus proyectos.
En el archivo que te mencioné "T0CKI_Cnt.pbp" está la configuración de los registros INTCON y OPTION_REG.
Ese archivo es el del programa en PICBasic Pro que debes abrir con MicroCode Studio.
Suerte.
;************************************************* ******************************
; Programa: T0CKI_Cnt.pbp
; Versión: 1.0
; Autor: D@rkbytes
; Compañia: Digitek
; Fecha: 08/16/2013
; Hora: 01:34:17 p.m.
; Notas:
; Contador por T0CKI
;************************************************* ******************************
@ DEVICE PIC16F628A ; Microcontrolador utilizado
; Palabra de configuración
@ DEVICE INTRC_OSC_NOCLKOUT,WDT_OFF,MCLR_ON,PWRT_ON,BOD_OFF ,LVP_OFF
;************************************************* ******************************
DEFINE OSC 4 ; Definir que se trabajará con 4MHz. (Osc. Interno)
; Definición de pines para la pantalla.
Define LCD_DREG PORTB ; Puerto de datos.
Define LCD_DBIT 4 ; Bit de inicio de datos.
Define LCD_RSREG PORTA ; Puerto de RS (Register Select)
Define LCD_RSBIT 1 ; Pin para RS
Define LCD_EREG PORTA ; Puerto de E (Enable)
Define LCD_EBIT 0 ; Pin para E
CMCON = 7 ; Comparadores analógicos OFF
; Declaración de variables
Contador Var Word
Inicio:
INTCON = %11100000 ; Habilitar interrupciones
OPTION_REG = %10100011 ; Habilitar conteo por T0CKI (Div/16)
TMR0 = 0 ; Limpiar TMR0
LCDOut $FE,1," Contador T0CKI"
Programa:
Contador = TMR0 ; Cargar el valor de TM0 en Contador
Contador = Contador *100
LCDOut $FE,$C0,"Frec: ",Dec Contador
TMR0 = 0 ; Resetear el TMR0
Pause 160 ; Contar durante 160Ms.(Prescaler 1:16)
GoTo Programa ; Crear un bucle infinito
End
; __________________________________________________ ____________
; /\ Código generado con PIC16F628A Config v1.4 - By D@rkbytes \
; \_| **************************************** |
; | / Descárgalo gratuitamente desde... / |
; | / [URL="http://www.galeon.com/exodusklient"]www.galeon.com/exodusklient[/URL] / |
; | **************************************** |
; | |
; | Visita: [URL="http://www.forosdeelectronica.com"]www.forosdeelectronica.com[/URL] |
; | |
; | \|||/ |
; | (o o) |
; | ________________________ooO-(_)-Ooo________________________|__
; \_/__________________________________________________ ___________/
De nada.pucha, no lo abri con el microcode, lo abri con la vista rapida, ahi lo abro y lo leo, muchas gracias!!!!
---------- Actualizado después de 1 hora ----------
Gracias D@rkbytes