TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Cortijero en 21 de Febrero de 2011, 09:22:15
-
Estoy haciendo un programa para cronometrar el tiempo que dura un suceso externo al pic, usando un 16F877. Con el timer contabilizo cada 0.01 segundo. Lo siguiente que quiero hacer es que cuando se detecte un cambio de estado en RB4:RB7, se compruebe si el tiempo transcurrido es minimo para guardarlo en la eeprom, y poner los contadores a 0; pero mi duda es la siguiente:
Habrá conflicto entre las dos interrupciones cuando éstas se den a la vez?
-
Conflicto no hay, si ocurren a la vez, al entrar a la rutina ISR, se atenderá a la interrupción por la que se pregunta primero. En CCS se puede dar prioridades con #priority
Saludos!
-
se te paso el 877 suky... jeje
Para ese pic no se puede usar prioridades, solo para 18F pa arriba.
Pensando en assembler si ocurren al mismito tiempo en un micro 16F, seguramente dependera de la rutina que se haga al consultar por las banderas, se ejecutara primero la rutina q este primero.. jaja.
Si el RETFIE no nos reestablece algunas banderas, tendria q volver a ejecutarse las rutinas de interrupcion y se ejecutaria la segunda. Pero si el retifie reestablece algunas banderas, si las interrupciones ocurren en el mismo tiempo exactamente, se perdera una de ellas?
-
Hasta donde yo se, la instrucción RETFIE no borra los flag de interrupción, lo sí hace es rehabilitarlas poniendo a 1 el bit GIE del registro INTCON.
Por ello es conveniente borrar cada de flag dentro de su consulta.
-
se te paso el 877 suky... jeje
Para ese pic no se puede usar prioridades, solo para 18F pa arriba.
Pensando en assembler si ocurren al mismito tiempo en un micro 16F, seguramente dependera de la rutina que se haga al consultar por las banderas, se ejecutara primero la rutina q este primero.. jaja.
Si el RETFIE no nos reestablece algunas banderas, tendria q volver a ejecutarse las rutinas de interrupcion y se ejecutaria la segunda. Pero si el retifie reestablece algunas banderas, si las interrupciones ocurren en el mismo tiempo exactamente, se perdera una de ellas?
No es tema de prioridad por vectorización, sino por qué bit IF se pregunta primero ;-) Eso hace #priority ;-)
Saludos!
-
Ok entendido, estaba confundiendo con la vectorizacion
Un saludo.
-
Bueno, ya está funcionando y no me da ningun problema :)
Eso si, me surge otra duda, que no tiene nada que ver con las interrupciones, pero la postearé aqui para no dar mucho el coñazo habriendo hilos, a ver si me la podeis resolver.
Los puertos RB4:Rb7 los uso como botones "ok, mas, menos, cancel" para navegar por el menu inicial, y configurar el programa antes de que empiece a cronometrar. Pero para marcar el fin/inicio de suceso, tambien necesitaba alguno de estos puertos, asi que me las he ingeniado de la siguiente forma. Perdonad por mi "jerga electrónica" pero como he aprendido de forma autodidacta, es mas bien nula, asi que es posible que suelte mas de una perla :)
Normalmente, las entradas RB4:RB7 estan conectadas a Vcc, estando siempre en nivel alto, y el pulsador desvia vcc a tierra, para que la entrada quede a nivel bajo, pero como necesitaba poder accionar RB4 y RB5 desde distintos sitios, lo que he hecho es proporcionar esos 5V a las entradas desde RB0 y RB1 para una situación (configurando RB2 y RB3 como entradas), y desde RB2 y RB3 para otra situacion (configuradno RB0 y RB1 como entradas).
Como me parece que me estoy expresando como un libro cerrado y al revés, cuelgo una captura:
(http://img208.imageshack.us/img208/3292/sinttulo1bp.jpg)
Como se vé, puedo activar la interrupción RB4:RB7 a traves de RB4 y RB5 por medio de dos pulsadores distintos, pero de forma indistinta, y quiero seleccionar cuales de los dos funcionan y cuales no. Creo que tengo que poner algún diodo en alguna parte, pero no se donde exactamente.
También me gustaria que me dijerais si veis algun fallo en el circuito o algo que deba corregir o mejorar.
Saludos y gracias!
-
No se ve la imágen. ¿Puede ser que te hayas olvidado de subirla?
-
Curioso... a mi si que se me ve. Pongo el enlace directo:
http://img208.imageshack.us/img208/3292/sinttulo1bp.jpg
-
Curioso... a mi si que se me ve. Pongo el enlace directo:
http://img208.imageshack.us/img208/3292/sinttulo1bp.jpg
Es porque está guardad en el cache (Ctrl + F5), pero por lo visto está caído imageshack :?
Saludos!
-
cayo, porque mi avatar esta en imageshack y no aparece :(
-
...
Como me parece que me estoy expresando como un libro cerrado y al revés, cuelgo una captura:
(http://img208.imageshack.us/img208/3292/sinttulo1bp.jpg)
Como se vé, puedo activar la interrupción RB4:RB7 a traves de RB4 y RB5 por medio de dos pulsadores distintos, pero de forma indistinta, y quiero seleccionar cuales de los dos funcionan y cuales no. Creo que tengo que poner algún diodo en alguna parte, pero no se donde exactamente.
...
yo creo que así es imposible, porque ¿como sabe el pic cual pulsador es si ambos están conectados idénticamente?
ahora una sugerencia es que dispongas ese par de teclas extras en forma matricial, y luego cada pin de cada tecla, lo conectes a otros pines (no importa cual, pero que sean salida), y luego utilizas el mismo pin RB4 conectado a ambas teclas, y luego el resto sería escribir una programación para el barrido de teclas matriciales.
-
yo en un proyecto que hice... como no debia de pulsar simultaneamente ningun boton y ya no me quedaban pines disponibles en el pic, use una sola entrada analogica del pic... y con un simple divisor de tension lo arregle todo... 8 pulsadores, 9 resistencias y en un solo pin del pic.... y a marchar....
un saludo....
-
yo en un proyecto que hice... como no debia de pulsar simultaneamente ningun boton y ya no me quedaban pines disponibles en el pic, use una sola entrada analogica del pic... y con un simple divisor de tension lo arregle todo... 8 pulsadores, 9 resistencias y en un solo pin del pic.... y a marchar....
un saludo....
Ese sistema de switch es muy empleado en la actualidad en distintos equipos de auido y también en TVs
-
a mi personalmente me agrada mucho este sistema para afrontar la escasez de pines libres para pulsadores, mas incluso que la las matrices.... y aun mas, cuando han incorporado la interrupcion ADC en los pics
por cierto... me autocito....
yo en un proyecto que hice... como no debia de pulsar simultaneamente ningun boton y ya no me quedaban pines disponibles en el pic, use una sola entrada analogica del pic... y con un simple divisor de tension lo arregle todo... 8 pulsadores, 9 resistencias y en un solo pin del pic.... y a marchar....
si se puede detectar la pulsacion conjunta de varios pulsadores.... todo consiste en calcular la ecuacion con cada coincidenicia
un saludo
-
Hay que tener en cuenta un detalle con este tipo de teclados. He visto en infinidad de oportunidades que los switch se vuelven resistivos y al ser pulsados su valor no es 0 sino que tiene una resistencia, en ocasiones superior a los 100 ohm, esto produce una variación en el divisor resistivo que a su vez provoca una lectura errónea de la tecla.
Por dar un ejemplo, a veces uno presiona la tecla de CD en un equipo pero el mismo se pone en función de Tunner. Ese fallo es provocado por los switch resistivos.
-
Hay que tener en cuenta un detalle con este tipo de teclados. He visto en infinidad de oportunidades que los switch se vuelven resistivos y al ser pulsados su valor no es 0 sino que tiene una resistencia, en ocasiones superior a los 100 ohm, esto produce una variación en el divisor resistivo que a su vez provoca una lectura errónea de la tecla.
Por dar un ejemplo, a veces uno presiona la tecla de CD en un equipo pero el mismo se pone en función de Tunner. Ese fallo es provocado por los switch resistivos.
100 ohmnios? joer los pulsadores.... eso es lo malo de este tipo de solucion... pero si no hay nada mas a mano que resistencias... para salir del apuro bueno es...
un saludo
-
Hay que tener en cuenta un detalle con este tipo de teclados. He visto en infinidad de oportunidades que los switch se vuelven resistivos y al ser pulsados su valor no es 0 sino que tiene una resistencia, en ocasiones superior a los 100 ohm, esto produce una variación en el divisor resistivo que a su vez provoca una lectura errónea de la tecla.
Por dar un ejemplo, a veces uno presiona la tecla de CD en un equipo pero el mismo se pone en función de Tunner. Ese fallo es provocado por los switch resistivos.
100 ohmnios? joer los pulsadores.... eso es lo malo de este tipo de solucion... pero si no hay nada mas a mano que resistencias... para salir del apuro bueno es...
un saludo
Por supuesto que es bueno el sistema. De todas maneras ese fallo que menciono lo he visto siempre en equipos (Audio, TV, DVD....) que suelen tener más de 2 años de uso.