TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: virolay en 18 de Abril de 2016, 14:11:06
-
Hola a todos:
Soy un tipo muy mayor y a veces mis neuronas se bloquean. Me he metido en un programa que ahora trato de mejorar con interrupciones. Se trata de una interrupción que me permita parpadear un carácter, más o menos 1 seg., en una LCD que no tiene esa prestación. Simultáneamente, otra interrupción, debe capturar la señal de varios pulsadores, cada uno a una entrada del puerto B con capacidad de interrupción.
Os agradeceré cualquier cosa que me permita desbloquearme, desde un simple guión de lo que debo hacer hasta un ejemplo (eso ya sería la leche!). Obviamente, prefiero en Proton, pero cualquier otro PICbasic, seguramente podré adaptarlo y lo que es más importante, aprenderé a usar un par de interrupciones de manera más racional de lo que yo soy capaz.
Gracias por vuestro tiempo y atención,
-
Parece que no hay nadie de Proton que te pueda ayudar con el tema, no uso proton pero mi lenguaje tiene una gran similitud con el tuyo.
Lo primero es ordenar un poco las ideas, los pic trabajan a nivel de uSeg. y nosotros trabajamos a varias docenas de mSeg., esto quiere decir que para pulsar una tecla somos muy lentos, por muy rápido que lo intentemos siempre tardaremos varias docenas o centenares de mSeg., con esto quiero decir que no es necesario usar un modulo hardware para leer teclas. Estos módulos se utilizan para capturar eventos muy rápidos o para despertar el pic de forma externa cuando está en modo de bajo consumo. Recomiendo centrarse en los timer que posiblemente sean los primeros módulos que se incorporaron a los micros, también posiblemente sean de los más útiles.
Los timer fundamentalmente se utilizan para contar tiempo y si subimos un poco más de nivel, pues, para distribuir el tiempo entre nuestras subrutinas o funciones. Con los timer se puede hacer que parpadee un texto en el Lcd cada 500mSeg. y que se lea un teclado cada 1mSeg. o parpadee un led con la cadencia deseada e incluso podamos controlar un servomotor.
Si vamos un paso más, esto es, subimos un poco más de nivel, nos encontramos con las bases de tiempos. Las bases de tiempos no son más que una serie de contadores independientes que al terminar su contaje nos avisan activando un bit (flag o bandera) predeterminado, tantos bit como bases de tiempos necesitemos. Para que las bases de tiempos funcionen y tengan exactitud necesitamos una base patrón (contador maestro) con la que se sincronizan todos sus contadores. Esta base patrón se consigue utilizando el registro contador de un timer, cuando el timer se desborda, por ejemplo cada 1mSeg, se genera una interrupción que ejecuta el código que incrementa los contadores de las bases de tiempos y activa el bit de los que llegaron al fin del contaje.
El código o algoritmo de una base de tiempos es realmente simple:
Programa
flag1=0 'Activa la base de tiempos
contador1=500 'Carga la base de tiempos en mSeg.
flag2=0 'Activa la base de tiempos
contador2=10 'Carga la base de tiempos en mSeg.
Bucle:
'Base de tiempos 1
if flag1=1 then
ejecuta código parpadeo texto Lcd
contador1=500mSeg. 'Recarga base de tiempos
flag1=0 'Activa la base de tiempos
endif
'Base de tiempos 2
if flag2=1 then
ejecuta código lee teclado
contador2=10mSeg. 'Recarga base de tiempos
flag2 =0 'Activa la base de tiempos
endif
goto bucle
End
Subrutina interrupciones
If bandera interrupción timer then
Se recarga el timer para que cuente de nuevo 1mSeg.
'Base de tiempos 1
contador1 = contador1 - 1
if contador1 = 0 then flag1=1
'Base de tiempos 2
contador2 = contador2 - 1
if contador 2 = 0 then flag2=1
Borra bandera interrupción timer
endif
Fin rutina interrupciones
La configuración de las interrupciones para el modulo TMR basicaménte:
Se configura el Timer, normalmente el Timer1
Se carga el Timer para que cuente 1mSeg.
Se activa
Se activa la interrupción del Tmr1
Se activa la interrupción de periféricos
Se activa la interrupción general
En mi lenguaje el nombre de la subrutina de interrupciones esta creada pero en el tuyo a lo mejor tienes que definirlo con algún comando.
-
Un ejemplo de interrupciones con proton lo puedes ver aqui:
https://www.youtube.com/watch?v=wwyFFICwpAw (https://www.youtube.com/watch?v=wwyFFICwpAw)
Espero te sea util! :mrgreen:
Saludos
-
Amigos..........disculpen...............he buscado en el foro como hacer que el Proton Basic funcione Con el MPLAB....................saben como hacerlo??? tengo el mplab 8.92, el proton ide 2.0.3.3 y el proton compiler 3.5.7.1 gracias de ante mano
-
Saludos,
Hay una explicación de lo que quieres (proton+mplab) en el foro oficial de proton, está en inglés y ahí se complica un poco la cosa, claro todo depende de cómo te manejes con el idioma de los gringos. Suerte!
http://www.protonbasic.co.uk/showthread.php/65812-Setting-up-the-Proton-Compiler-with-MPLAB-IDE
-
Ok mi pregunta es que se puede hacer despues que se puede usar pic basic con mplab???se puede simular o solo editar??