Programación Específica > Microcontroladores
Despertar el micro por RX
Pegasux:
Hola. Parece que ya esta solucionado el tema de los cables (por ahora...) pero me he dado cuenta de un problema, si hacemos el susodicho puente entre la linea Rx y RB0, la linea 0 del puerto B esta compartida por el LCD y por la linea de recepcion, esta ultima está simpre que no haya datos a 1, por lo que los datos que van para el display se falsean y aparecen cosas raras... Se me ocurren dos soluciones, la facil es colocar un transistor y activarlo con un bit de los que no uso del puerto C solamente cuando nos convenga, desactivando previamente el LCD, y la solucion dificil es cambiar el manejo del display de 8 a 4 bits, dejando libres los 4 bits de menos peso del puerto B, lo cual no se si me traera mas dolores de cabeza porque lo tengo todo hecho con la libreria de 8 bits... El tema es que una vez hecha la necesaria correccion va a ser mucho mas facil solucionar lo del sleep... Yo optaria por colocar el transistor, pero esque no llevo ninguno encima....
Toph:
--- Cita de: "Pegasux" ---si hacemos el susodicho puente entre la linea Rx y RB0, la linea 0 del puerto B esta compartida por el LCD y por la linea de recepcion, esta ultima está simpre que no haya datos a 1, por lo que los datos que van para el display se falsean y aparecen cosas raras
--- Fin de la cita ---
:blink: De hecho estas haciendo corto circuito cuando a la vez aparecen un uno y un cero por esa linea.
¿No hay posibilidad de colocar el LCD en el puerto C?
Pegasux:
Hola de nuevo. En el puerto C tampoco puedo colocar el LCD, tengo las lineas 6 y 7 que son las de la UART y tendria el mismo problema. He estado haciendo unas pruebas con un led colocado en el puerto C y le ordeno que lo encienda si se despierta del sleep, el tema es que si deshabilito el INT0 el led no se enciende, pero si lo habilito, el led se enciende aunque aparentemente no este recibiendo datos. Si fijo la linea RB0 a 1 quitando la linea de recepcion, el led no se enciende, luego parece que el problema viene de oscilaciones en la linea de recepcion cuando la linea deberia estar a 1 permanente mientras no le mande datos... Una pregunta que se me viene a la cabeza, Si el micro esta dormido ¿Funciona la recepcion de datos? porque si no funciona puede que parte del primer byte no se reciba correctamente mientras el micro despierta y eso fastidie la comunicacion, aunque al final consiga despertarse correctamente se puede perder el dato... Lo tengo configurado a 125kbps.
Toph:
--- Cita de: "Pegasux" --- pero si lo habilito, el led se enciende aunque aparentemente no este recibiendo datos.
--- Fin de la cita ---
O sea que se sale del sleep aunque no se de la interrupcion. Como te dije antes hay que ver que otras casos sacan al micro de sleep:
*Si esta activado el perro guardian al desbordarse esta sacando de sleep al micro
*El pin de reset MCLR
*cuando las interrupciones están deshabilitadas, pero el flag de habilitación de cualquier fuente de interrupción está activo y el bit de interrupción también está activo antes de la llamada a SLEEP, este se comporta como un NOP por lo tanto NUNCA entra en Sleep
--- Cita de: "Pegasux" ---Una pregunta que se me viene a la cabeza, Si el micro esta dormido ¿Funciona la recepcion de datos? porque si no funciona puede que parte del primer byte no se reciba correctamente mientras el micro despierta y eso fastidie la comunicacion, aunque al final consiga despertarse correctamente se puede perder el dato... Lo tengo configurado a 125kbps.
--- Fin de la cita ---
:think: buena pregunta, por mi poca experiencia con el uso de sleep me imagino que el proceso de despertarse es rapido y si alcanza a recibir los datos ya que si el micro se ha despertado por interrupcion y el sistema de interrupcion esta habilitado (INTCON7 =1), se ejecuta la instruccion que sigue a la instruccion sleep (se recomienda colocar un NOP) y se salta a a la direccion 4 de la memoria buscando la rutina de atencion a la interrupcion.
esto se hace en pocas fracciones de segundo
Pegasux:
Una vez mas gracias por tu ayuda. Acerca del WDT puede que este activado, no lo se porque yo uso la secuencia de configuracion __config 3D31 y no se lo que esta incluido, el tema es que si pongo la tipica: __config _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC el circuito no funciona, no hace absolutamente nada (compilar compila bien) y por eso no la uso.
He visto en el libro que en sleep los valores de los puertos se mantienen, por lo que si que puedo usar el transistor para conectar las lineas.
Un saludo.
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa