Autor Tema: como dormir un pic y despertarlo mediante MCLEAR  (Leído 10988 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Delphus

  • PIC12
  • **
  • Mensajes: 70
como dormir un pic y despertarlo mediante MCLEAR
« en: 21 de Octubre de 2011, 17:36:48 »
Hola a todos, segun tengo entendido se puede despertar un pic mediante la aplicacion de voltaje en el pin MCLEAR, para dormirlo lo hice así:

 if (input(pin_A7))
     sleep();
poniendo un interruptor doble entre el pin A7 y el mclear, lo que no sé es si con solo aplicar voltaje en mclear el pic se despertará o hay que hacer algo más.
Por lo menos cuando hice la simulación en el Proteus, cuando hacía el reset , el pic se quedaba paralizado.
Gracias por su atención.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: como dormir un pic y despertarlo mediante MCLEAR
« Respuesta #1 en: 21 de Octubre de 2011, 18:24:49 »
¿Y de qué PIC se trata?
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Delphus

  • PIC12
  • **
  • Mensajes: 70
Re: como dormir un pic y despertarlo mediante MCLEAR
« Respuesta #2 en: 21 de Octubre de 2011, 18:30:06 »
Hola AngelGris, gracias por responder, es un pic 16f88 con puertos A y B , el puerto B lo tengo ocupado con un display LCD.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: como dormir un pic y despertarlo mediante MCLEAR
« Respuesta #3 en: 21 de Octubre de 2011, 18:37:16 »
Pero dice lo siguiente:

Citar
External MCLR Reset will cause a device RESET. All
other events are considered a continuation of program
execution and cause a “wake-up”


El MCLR te resetea el micro  :?
No contesto mensajes privados, las consultas en el foro

Desconectado Delphus

  • PIC12
  • **
  • Mensajes: 70
Re: como dormir un pic y despertarlo mediante MCLEAR
« Respuesta #4 en: 21 de Octubre de 2011, 18:39:39 »
o sea yo quiero usar el reset solo para despertar el micro una vez ya esté en modo sleep, segun sé esto se puede hacer pero no he encontrado ejemplos de esto en la red.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: como dormir un pic y despertarlo mediante MCLEAR
« Respuesta #5 en: 21 de Octubre de 2011, 18:46:33 »
Digamos que se despierta, pero se resetea  :mrgreen: Los demás eventos si permiten continuar la ejecución: WDT, INT, RB4-RB7...


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Delphus

  • PIC12
  • **
  • Mensajes: 70
Re: como dormir un pic y despertarlo mediante MCLEAR
« Respuesta #6 en: 21 de Octubre de 2011, 19:01:42 »
es que por ejemplo en la simulacion de proteus, cuando dejaba el mclear conectado el pic seguia funcionando hasta que lo soltaba.
De todas formas tu propones ponerle en el mclear un boton mejor, eso es lo que entiendo.

Desconectado Delphus

  • PIC12
  • **
  • Mensajes: 70
Re: como dormir un pic y despertarlo mediante MCLEAR
« Respuesta #7 en: 21 de Octubre de 2011, 19:40:22 »
Aca les dejo el diseño,por ejemplo cuando arranco la simulacion, el lcd se pone en blanco, cuando presiono Reset, el lcd muestra el mensaje inicial de programa como si fuese a funcionar pero luego se queda ahi pausado y no funciona nada.

Desconectado tannke

  • PIC16
  • ***
  • Mensajes: 176
Re: como dormir un pic y despertarlo mediante MCLEAR
« Respuesta #8 en: 21 de Octubre de 2011, 19:52:01 »
Piensa que el reset es negado, es decir, mientras está a masa el pic está en reset, para arrancar tiene que estar a vcc.
 Por lo que en tú circuito tienes que tener el pulsador todo el rato presionado para que ande.


Un saludo

Desconectado Delphus

  • PIC12
  • **
  • Mensajes: 70
Re: como dormir un pic y despertarlo mediante MCLEAR
« Respuesta #9 en: 21 de Octubre de 2011, 20:28:28 »
hola tannke, gracias por responder, en un comienzo asi lo tenía, un interruptor doble de tal manera que cuando abria el sleep, activaba el mclear, pero ahi era donde se quedaba paralizado, segun lo que me recomendaron que no dejara el mclear activado porque el pic siempre iba a estar en reset por eso le puse el boton.

Ahora siguiendo tu consejo le puse un interruptor al mclear y efectivamente el pic funciona, pero para dormir al pic, se me vino la idea de hacer dormir el pic al inicio del programa como he visto por ahi, ejemplo:

main()

while(true)
   sleep();
de tal forma que cuando se suelte el reset el pic se duerma y cuando se presione este salga del sleep

hice la prueba y cuando suelto el reset, el lcd no se borra pero el programa parece que se detiene, pero cuando vuelvo a activar el reset, los valores de las variables no se mantienen.
que podría ser?
Aqui les muestro

Gracias.

Desconectado Delphus

  • PIC12
  • **
  • Mensajes: 70
Re: como dormir un pic y despertarlo mediante MCLEAR
« Respuesta #10 en: 21 de Octubre de 2011, 21:29:18 »
o será que el problema es del Proteus pues segun he leido a veces no simula bien el comportamiento del sleep, no sé , habrá que hacer las pruebas en la protoboard.
A alguien le ha pasado lo mismo?

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: como dormir un pic y despertarlo mediante MCLEAR
« Respuesta #11 en: 21 de Octubre de 2011, 21:41:20 »
segun el datasheet de ese pic he visto que el MCLR no sirve para despertar el pic, al ponerlo a LOW haces que el pic se resetee pero nada mas, cierto que sale del sleep, pero para ser reseteado.

Para que tu pic siga funcionando en modo sleep debes mantener el MCLR a HIGH, si lo pones a LOW se resetea.

Tienes otras opciones para salir del sleep:
2. Watchdog Timer wake-up (if WDT was enabled).
3. Interrupt from INT pin, RB port change or a
peripheral interrupt.

Aqui es donde pone que el MCLR solo se usa para reset en modo sleep:
External MCLR Reset will cause a device Reset. All
other events are considered a continuation of program
execution and cause a “wake-up”.

puedes verlo aqui en el datasheet:
15.13.1 WAKE-UP FROM SLEEP

Desconectado Delphus

  • PIC12
  • **
  • Mensajes: 70
Re: como dormir un pic y despertarlo mediante MCLEAR
« Respuesta #12 en: 21 de Octubre de 2011, 21:53:48 »
Hola MerLinz, gracias por la aclaración, todavía no me muevo muy bien con los datasheets  :(  , como puedes ver tengo el pin RB0 ocupado con el LCD y no puedo activar la interrupción ahí, te pregunto rapidamente ,  será que puedo usar el puerto A para el LCD  , algo como
 
Código: [Seleccionar]
#define use_portA_lcd TRUEpues no he visto eso y si se puede cómo serían las conexiones.
Gracias

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: como dormir un pic y despertarlo mediante MCLEAR
« Respuesta #13 en: 21 de Octubre de 2011, 22:03:43 »
puedes hacer lo siguiente, el RESET de RB7 pasarlo a MCLR (es lo mas logico xD) aunque no se que tipo de reset es, si es de codigo o algo asi... y usar el RB7 como PORTB on change int.

Si tu reset es algo de software que sea necesario, pon el pin del MCLR como digital desactivando el MCLR por hardware (MCLRE bit) y lo usas para lo que quieres si es posible.

Lo de cambiar de puerto al lcd es otra opcion, pero eso ya lo tienes que mirar en la libreria que uses ya que yo no se cual es, ni que codigo usa.

Desconectado Delphus

  • PIC12
  • **
  • Mensajes: 70
Re: como dormir un pic y despertarlo mediante MCLEAR
« Respuesta #14 en: 21 de Octubre de 2011, 22:35:52 »
Hola Merlinz no entendí varias cosas  :shock:
Citar
puedes hacer lo siguiente, el RESET de RB7


no entiendo lo del reset de RB7 o quisiste decir RB0

Citar
pasarlo a MCLR (es lo mas logico xD) aunque no se que tipo de reset es, si es de codigo o algo asi... y usar el RB7 como PORTB on change int.
Cómo puedo hacer ese cambio?


Citar
Si tu reset es algo de software que sea necesario, pon el pin del MCLR como digital desactivando el MCLR por hardware (MCLRE bit) y lo usas para lo que quieres si es posible.
Tampoco sabría como, si me pudieran facilitar un tuto, yo me lo leo  :)
Citar
Lo de cambiar de puerto al lcd es otra opcion, pero eso ya lo tienes que mirar en la libreria que uses ya que yo no se cual es, ni que codigo usa.

hice la prueba con
Código: [Seleccionar]
#define use_portA_lcd TRUE pero el compilador no me acepta esa directiva
« Última modificación: 21 de Octubre de 2011, 22:38:07 por Delphus »