TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: cgraciae en 12 de Junio de 2007, 15:39:15
-
:-/Estoy programando en CCS un 16F737. Necesito leer unas magnitudes AD cada 20 segundos con un micro alimentado con una pila, por lo que me gustaría reducir su consumo utilizando la instrucción sleep(). El problema es que no sé como despertar al micro con el WDT y seguir con el programa donde ha quedado. ¿Alguien puede ayudarme?
-
'Mete' al pic en el sleep y se desbordará el WDT, a continuación, ejecutará la instrucción después del sleep.
Suerte!!! ;)
-
tengo entendido que se resetea no? despues que desborda el wdt
-
Hola.
Si se usa la interrupcion del ADC directamente saldra del modo sleep no?
Saludos
-
Hola a todos. Aca tienes que utilizar la interrupcion del timer para lograr que el micro se despierte cada 20 segundos. El WDT
no serviria en este caso porque no es posible alcanzar semejante intervalo de temporización, en general para los 16F es de 2034 ms o 2 seg, aunque no conozco a fondo el 16F737. El seudocogido sería:
Configurar timer
Habilitar interrupción del timer
while(1){
read_adc()
sleep()
delay_cycles(1)
}
Estoy apurado, en otro momento te posteo algun código que tengo almacenado por ahi.
Saludos!
-
Utiliza la cobinación TMR1 con reloj externo, te haces una red RC y completas el oscilador externo para que se desborde cada cierto tiempo (creo que 20 s es un tiempo bastante largo, pero bueno). Una vez despierto el uC, comenzaría a trabajar en la instrucción posterior al sleep, pero con el WDT no funcionará.
Tambié puedes hacer un circuito de wake-up con un 555 en configuración astable y conectarlo a INT (típicamente RB0) y con eso si el PIC está soñando el 555 lo despertará más o menos en el tiempo en que hayas diseñado este circuito.
Saludos
Reinier