TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: xootraoox en 12 de Enero de 2006, 21:17:00

Título: Problema con Interrupcion Externa...
Publicado por: xootraoox en 12 de Enero de 2006, 21:17:00
Primero que nada grandes saludos a todos.........

    bueno lo que me pasa es lo siguiente...

    estoy tratando de hacer un frecuenciometro de red (220Vac) el cual me he decidido a hacerlo por medio de un circuito pequeño atravez de un optoacoplador, el cual me trabaja a la perfeccion... pero el problema se me presenta al tratar de ingresar los pulsos al micro por medio de RB0 (pin de interrupcion) el cual al encender el pic se encuentra en estado bajo y cuando el optoacoplador llega a su estado alto, no es capaz de levantar al pin RB0 por lo que se queda en estado bajo... hay es donde me decido a ayudar al optoacoplador con un pequeño puente hacia positivo, pero este se niega despues a bajar... quedando en estado altolocolocoloco, osea me entrega 5v... es normal esto??? bueno la unica forma es bajarlo nuevamente con  un puente a negativo...  

en un principio pense que el optoacoplador no tenia la suficiente fuerza para controlarlo por lo que pense en ayudarlo con un transistor, y adivinen...... nuevamente este se niega a subir o bajar ...... por lo que me decidi a enbrutecerme un poco y le puse un pequeño mosfet el cual mirandolo en el osciloscopio logro hacer el trabajo pero a costa de 300mA de consumo adicional.... ya que lo fuerzo a que lo haga subir o bajar.....

ahora el gran problema es que en mi diseño, el consumo si importa ya que es un equipo que usa baterias y en caso de alguna falla el equipo dejaria de trabajar quedando sin carga de baterias y es importantisimo que el micro no deje de trabajar.....

tambien pense que podia ser problema de el programa pero la verdad es que no se como solucionarlo ya que en el mismo puerto b tengo un lcd y no se como configurar solo como entrada el RB0sin afectar los demas pines del puerto B...

espero alguien me pueda ayudar. y desde ya agradesco cualquier tipo de comentariosSonrisa Gigante
Título: RE: Problema con Interrupcion Externa...
Publicado por: vszener en 13 de Enero de 2006, 07:25:00
Buenas!!!haber para la configuracion d epuertos tanto d salida/entrada, puedes declarar los pines de salida con la directiva:
#use fixed_io(b_output=pines de salida)

y para declarar el pin RB0 como entrada, la puedes declarar asi:
#use fast_io(b)

set_tris_b(0b00000001); puerto b como salida y RB0 como entrada

En los ejemplitos en c hay un programa de la interrupcion externa, es el numero 40, miratelo!:
http://miarroba.com/foros/ver.php?foroid=46840&temaid=4061462

Suerte!!!Giño
Título: RE: Problema con Interrupcion Externa...
Publicado por: xootraoox en 13 de Enero de 2006, 09:56:00
bueno eso ya lo se pero lo que pasa es que en ese mismo  puerto tengo un lcd en el que hay pines que trabajan tanto de entrada como de salida... es por eso que se lo dejo al compilador que haga ese trabajo pero si es que y quiero confiigurar a mi gusto afecto todo el puerto y es hay en donde esta mi gran problemas .... entiendes amigo vzener... en realidad lo que necesito es poder configurar solo ese pin sin afectar los demas pines del mismo puerto.....
Título: RE: Problema con Interrupcion Externa...
Publicado por: antoniof en 13 de Enero de 2006, 10:02:00
Creo que no puedes configurar ese pin como salida, porque la interrupción externa se desabilita cuando el RB0 esta como salida. Lo que puedes hacer es configurar la librería de ccs para que trabaje con el lcd en modo 4bits con los pines RB4 ~ RB7.

No se como el compilador trata este tipo de casos, pero la interrupción externa la deberías dejar como entrada constantemente
Título: RE: Problema con Interrupcion Externa...
Publicado por: pocher en 13 de Enero de 2006, 23:06:00
A ver si sumando ideas...

El fichero lcd.c de CCS ya trabaja en modo 4 bits de por sí, no hay que modificarlo. El problema para xootraoox, es que usa para el control RB0 a RB2 y como datos RB4 a RB7. Si lo que te molesta es la LCD en ese puerto, para dejar libre a RB0, pués quítala de ahí y métela en otro puerto (el puerto D, comentando el define que trae el lcd.c).

Tengo un fichero también, para control de LCD donde puedes asignar los pines de la LCD a los pines dispersos del PIC que desees.

Título: RE: Problema con Interrupcion Externa...
Publicado por: vszener en 14 de Enero de 2006, 07:31:00
El enlace a un post de libreria sobre la lcd:
http://miarroba.com/foros/ver.php?foroid=46840&temaid=4465289

Suerte!!!Giño
Título: RE: Problema con Interrupcion Externa...
Publicado por: xootraoox en 14 de Enero de 2006, 15:46:00
Bueno... lo de la libreria.... ya esta cambiada......... y trabaja a 4bits....

Codigo:
struct lcd_pin_map {
           BOOLEAN unused;   //RB0    
           BOOLEAN rs;      //BR1
           BOOLEAN rw;      //RB2
        BOOLEAN enable;   //RB3
           int data : 4;   //RB4-RB5-RB6-RB7
        } lcd;


por lo que me ha quedado el pin RB0 libre.....   mi problema mas que nada en tanto es de comodidad, ya que puedo cambiar el lcd de puerto, pero lo malo es que ya esta hecho un pcb el cual quisiera evitar rediseñarlo y volver ha mandar a fabricarlo... pero al parecer no me va a quedar de otra opcion, pero esperare a ver si alguien tiene alguna solucion para este pequeño gran dilema

desde ya agradesco todos los comentarios

-==XooTRAooX==-
Título: RE: Problema con Interrupcion Externa...
Publicado por: xootraoox en 17 de Enero de 2006, 14:25:00
bueno... solo comento que la unica solucion que logre fue el cambiar al lcd de puerto, y sin mas ninguna modificacion en el programa trabajo de maravillas...... que pena que no se pudiese definir cada pin de forma independiente al todos los del puerto

agradesco mucho todos sus comentarios amigos

despide
-==XooTRAooX==-