Hola, buenas a todos del foro
Estoy haciendo una placa para TFG, y tengo una duda:
pongo en modo sleep, y luego quiero despertarla con WDT, es posible cuando PIN_A0=1, que me hace un restart_WDT? o otra posible forma? Es que según mi codigo, me parece que una vez que esten en modo SLEEP, ya no ejecuta las instrucciones, con lo cual no ejecutara el WDT.
Cualquier ayuda me iria bien, gracias.
Estoy haciendo una placa para TFG, y tengo una duda:
pongo en modo sleep, y luego quiero despertarla con WDT, es posible cuando PIN_A0=1, que me hace un restart_WDT? o otra posible forma? Es que según mi codigo, me parece que una vez que esten en modo SLEEP, ya no ejecuta las instrucciones, con lo cual no ejecutara el WDT.
Cualquier ayuda me iria bien, gracias.
Código:
#include <16f628a.h>
#fuses NOWDT //Watch dog timer no esta activado desde principio
#fuses NOPROTECT,NOPUT,LP
#fuses MCLR,NOBROWNOUT
#fuses INTRC_IO // Internal RC Osc, no CLKOUT
#use delay(INTERNAL=48000,RESTART_WDT) // Ojo a INTERNAL, determina la duracion
#include <tones.c>
}
void main(){
setup_oscillator( OSC_48kHZ ); //esta determina la frecuencia
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2 );//usamos un reloj interno, division 2
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
SET_TIMER0(236);//CARGA 220 =>0.012s
TRISB=0b0000001;//declara que RB0 sea entrada, las otras de RB sea salida
PORTB=0x00;
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_EXT_H2L); // turn on external interrupt H->L
enable_interrupts(GLOBAL);
while(true){
if (input(PIN_A0)==1)
{
RESTART_WDT(); //activa el WATCH DOG TIMER, para despertar el micro. wake up from sleep
enable_interrupts(INT_EXT_H2L); //no puedo poner esto aqui ya que no funcionara, porque esta en modo sleep, estas instrucciones no se ejecutara.
if(vibracion==1)
{
setup_oscillator( OSC_4MHZ );
generate_tone(2000,2000);
setup_oscillator( OSC_48kHZ );
}}
if (input(PIN_A0)==0){
output_low(PIN_A1);
delay_ms(100);
setup_WDT(WDT_18MS);
disable_interrupts(INT_EXT_H2L);
SLEEP();
}
}
}