Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

01/04/2010 #1


¿Cómo se usa el módulo TIMER del PIC en PICBasic?
Hola:

Bueno, como lo dice el título del tema: ¿Cómo utilizo el módulo TIMER de cualquier PIC que lo tenga utilizando lenguaje PICBasic?

Gracias.
29/12/2011 #2


tambien estoy interesado en el tema, al parecer nadie aporta
29/12/2011 #3


Si necesitas mucha exactitud, no te va a servir en picbasic. Pero sería algo así...


Código:
goto INITIALIZE
DEFINE INTHAND Int_Vector   ' Handler de Interrupcion

;disable
ASM
Int_Vector
    MOVWF wsave             ; Guardamos el registro W
    MOVF STATUS,W
    CLRF STATUS             ; Guardamos el registro STATUS
    MOVWF ssave
    MOVF PCLATH,W           ; Guardamos el registro PCLATH
    MOVWF psave
    CLRF PCLATH
ENDASM
;############ INTERRUPT CODE ###############
if INTCON.2 = 1 then   ;######## TIMER ########
 INTCON.2 = 0           ;Borra la bandera TMR0
 TMR0 = 226             ;(226) cada 100us a 20mhz y con 1/16     227
 ;Hace lo ke kieras
 RESUME
endif

Resume


ASM   ;****** Fin de Interrupcion ***********
End_Int
    CLRF STATUS
    MOVF psave,W
    MOVWF PCLATH                     ; Restauramos el registro PCLATH
    MOVF ssave,W
    MOVWF STATUS                     ; Restauramos el registro STATUS
    SWAPF wsave,F
    SWAPF wsave,W                    ; Restauramos el registro W
    RETFIE
ENDASM

;################ REGISTROS ######################
INITIALIZE:


OPTION_REG = %10000011  ;pull-up off    ;flanco descendente ; temporizador ;inc flanco ascendente
                        ;Divisor TMR0   ;1/16 
INTCON = %10100000      ;Activa interrupcion Global, y TMR0
05/01/2012 #4


Qué es eso?...en pic basic debe ser mas sencillo, asembler muy complicado y extenso
06/01/2012 #5


Eso es pic basic pero tiene unas lineas de assembler
07/01/2012 #6


Si bueno me iluminaste, ASM y ENDASM....pero sigo pensando, no habrá algo mas sencillo sin usar asembler?....
07/01/2012 #7

Avatar de reyvilla

baterod3 dijo: Ver Mensaje
Si bueno me iluminaste, ASM y ENDASM....pero sigo pensando, no habrá algo mas sencillo sin usar asembler?....
Hola te mencione en el post http://www.forosdeelectronica.com/f2...tml#post598247 ,como podrías hacer, si me comentas que es lo que quieres hacer con el TMR0 puedo ver si te ayudo, pero si te sigues quejando de que nadie aporta creo que no conseguirás mucho con eso...saludosss
08/01/2012 #8


baterod3 dijo: Ver Mensaje
Si bueno me iluminaste, ASM y ENDASM....pero sigo pensando, no habrá algo mas sencillo sin usar asembler?....
Si, entra en la carpeta "Samples" de pic basic pro y mira y abri el archivo timer.bas

sino podes buscar en el foro y en google, y si necesitas un buen manejo de interrupciones, pic basic pro no te sirve porque no tiene interrupciones por hardware. Lo mas cercano es poniendo algunas instrucciones en asm
09/01/2012 #9
Moderador

Avatar de D@rkbytes

Un pequeño ejemplo de interrupción externa por Hardware (PBP) con un 16F628A
Y otro de un reloj usando el TMR0 (Nada preciso pero sirve de ejemplo) 16F877A
Archivos Adjuntos
Tipo de Archivo: rar LED_INT.rar (14,0 KB (Kilobytes), 504 visitas)
Tipo de Archivo: rar Reloj INT LCD.rar (14,3 KB (Kilobytes), 330 visitas)
Tipo de Archivo: rar Reloj INT LCD Corregido.rar (1,7 KB (Kilobytes), 185 visitas)
09/01/2012 #10


Darkbytes dijo: Ver Mensaje
Un pequeño ejemplo de interrupción externa por Hardware (PBP) con un 16F628A
Y otro de un reloj usando el TMR0 (Nada preciso pero sirve de ejemplo) 16F877A
Esa es una interrupcion por "Hardware" porque se activa con un boton, pero internamente el pic no la realiza por hardware porque por ejemplo si pones una pausa de 5 segundos y apretas el boton de la interrupcion, esta no se va a ejecutar inmediatamente, sino hasta que pasen los 5 segundos de la pausa. En proton o ASM esto no pasa, se ejecuta inmediatamente.
09/01/2012 #11

Avatar de reyvilla

Hace tiempo yo comente algo al respecto en el foro, hay un fulano llamado "DARREL TAYLOR" el cual realizo unas librerías para manejar interrupciones, muy sencillas supuestamente yo aun no me he puesto en eso ya que se manejan una cabecera en asm de 3 lineas les dejo la pagina para que vean de que se trata...saludosss

http://darreltaylor.com/DT_INTS-14/intro.html

y

http://darreltaylor.com/DT_INTS-18/home.html
10/01/2012 #12


Darkbytes deberías darle precisión a los segundos, o está bien?
11/01/2012 #13
Moderador

Avatar de D@rkbytes

Darkbytes dijo: Ver Mensaje
(Nada preciso pero sirve de ejemplo) 16F877A
Si note que no tenia precisión el ejemplo.

baterod3 dijo: Ver Mensaje
Darkbytes deberías darle precisión a los segundos, o está bien?
No lo escribi yo.
Si te fijas en la cabecera del programa esta el nombre del autor.
Que es mas que nada el nombre de la pagina en donde estaba ese ejemplo.
Yo solo lo edite porque estaba en Ingles.

biker2k3 dijo: Ver Mensaje
Esa es una interrupcion por "Hardware" porque se activa con un boton, pero internamente el pic no la realiza por hardware porque por ejemplo si pones una pausa de 5 segundos y apretas el boton de la interrupcion, esta no se va a ejecutar inmediatamente, sino hasta que pasen los 5 segundos de la pausa. En proton o ASM esto no pasa, se ejecuta inmediatamente.
Si, efectivamente tienes razón. Yo no suelo trabajar con interrupciones,
por eso no lo habia notado.
09/11/2012 #14


alguien tiene un tutorial en español sobre el uso de timer 0 en pic basic, le agradecería mucho si lo comparte
09/11/2012 #15
Moderador

Avatar de D@rkbytes

baterod3 dijo: Ver Mensaje
alguien tiene un tutorial en español sobre el uso de timer 0 en pic basic, le agradecería mucho si lo comparte
Saludos.
Espero que estos tutoriales sobre el uso de los timers sean de ayuda.

Nota: La información no está en lenguaje PICBasic. Es solo información de su uso.

Suerte.
Archivos Adjuntos
Tipo de Archivo: pdf Tutorial TMR0.pdf (81,9 KB (Kilobytes), 450 visitas)
Tipo de Archivo: rar Los Timers del PIC16F84A.rar (585,9 KB (Kilobytes), 305 visitas)
11/11/2013 #16


hola a todos, me acoplo al tema, estoy tratando de hacer un tacometro, no tiene que ser extremadamente preciso.

ahora necesitaria saber lo siguiente que explica este texto

Para que el TMR0 funcione como contador de impulsos aplicados a la patita
T0CKI hay que poner a 1 el bit T0CS, que es el que ocupa la posición 5 del
registro OPTION. En esta situación, el registro TMR0, que es el ubicado en la
dirección 1 del banco 0 de la memoria de datos, se incrementa con cada flanco
activo aplicado en la patita T0CKI
. El tipo de flanco activo se elige programando
el bit T0SE, que es el que ocupa la posición 4 del registro OPTION. Si T0SE =
1, el flanco activo es el descendente, y si T0SE=0, es el ascendente. Cuando
se desea que TMR0 funcione como temporizador el bit T0CS=0.


pregunto de ignorante, ¿ese registro de la memoria lo guarda en al eprom y lo puedo leer con el comando READ?
11/11/2013 #17

Avatar de ByAxel

jorgenuviola dijo: Ver Mensaje
pregunto de ignorante, ¿ese registro de la memoria lo guarda en al eprom y lo puedo leer con el comando READ?
El registro TMR0 almacena el conteo, este registro está en la memoria RAM y no tiene ninguna relación con la EEPROM. El TMR0 es un registro de 8 bits por lo que la cuenta va de 0 a 255 y vuelve a empezar.
Para un tacómetro es necesario iniciar este registro en cero e iniciar una base de tiempo de por ejemplo 1 segundo/minuto, de ese modo cuenta los pulsos en 1 segundo/minuto y luego calculas la velocidad... en rpm por ejemplo.
Más recomendable es hacer el conteo manualmente mientraz dura la base de tiempo ya que puede que el registro no alcance puesto que solo es hasta 255.
El TMR0 es un registro de conteo y en OPTION_REG se configura.
11/11/2013 #18


Axel, diste en el clavo de lo que estoy tratando de hacer hace varios días, entiendo perfectamente el funcionamiento del TMR0 según los manuales y alguna prueba con el timer interno en proteus, mi pregunta que no la hice en este post pero la vengo haciendo en distintos lugares hace bastante tiempo y nadie me la sabe responder, es......


¿como leo el conteo del TMR0 y lo paso a una variable en pic basic pro? Así puedo hacer lo que yo quiera con esos datos, sea multiplicar, restar etc.

te muestro mi programación que no tengo lista la rutina de interrupción porque no se como hacerla y no logro encontrar un solo ejemplo en pic basic que me permita conocer la mecánica de esta técnica.

Mi intención con el siguiente programa es mostrar lo que sea que lee del TMR0 pero no funciona.

use un prescaler 1:256 para que desborde en el conteo y active el TOCK para que el port A4 tome la señal de pulsos.

Código:
define osc 10
define lcd_dreg porta
define lcd_bits 4
define lcd_dbit 0
define lcd_rsreg portb
define lcd_rsbit 1
define lcd_ereg portb
define lcd_ebit 3
TOCK var byte
X var byte
on interrupt goto rpm
symbol toif = intcon.2
symbol gie = intcon.7
symbol B = tmr0
option_reg = %00110111
intcon = %10100100
a:
high porta.2
pause 500 
low porta.2
pause 500
goto a
rpm:
disable

lcdout $fe,1
lcdout $fe,2
lcdout B
toif = 0
gie = 1
tmr0 = 0
enable
resume
end

¿alguna ayuda?

---------- Actualizado después de 13 minutos ----------

y si es necesario hacerlo mas facil se lo asiganmos al perro guardian en modod 1:1 para hacer numeros redondos, pero necesito aprender como hacer para leer la informacion almacenada en TMR0
11/11/2013 #19

Avatar de ByAxel

bueno...
que PIC estas usando?
1ro. Si el bit 6 del INTCON dice PEIE, entonces falta activar. Con eso permites las interrupciones de periféricos como el Timer0.

cuanto seria la velocidad máxima que deberia medir el PIC?
2do. El Timer0 solo produce una interrupción cuando el registro TMR0 se desborda (de 255 a 0), si haces 1:256 y el conteo desde cero, va a necesitar 65535 pulsos para que proboque la interrupción... Solo como prueba, configura que use el reloj interno y verifica que se produzca la interrupción junto con la respectiva lectura del conteo del TMR0.

- Solo como sugerencia, el TMR0 solo es contador y se supone que el que manda es el tiempo de 1s o 1minuto, es decir que va a contar pulsos durante 1 segundo para luego determinar la velocidad, así que usar el Timer0 en modo interrupción no lo veo práctico para el tacómetro.
13/11/2013 #20


hola axel, esoty usando un 16f84.

¿entoces lo que yo contaria serian la cantidad de interrupciones? ¿no?
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.