Pessoal tenho uma dúvida noob quanto ao bouncing.
Tenho uma aplicação bem simples onde o PIC tem duas opções pra execução de duas rotinas. Pra evitar problemas de criação de flags de estado anterior e td mais já optei por uma chave-alavanca assim quando a chave tá pra um lado executa uma rotina e quando tá pra outro executa a outra. Feito isso ele só irá executar uma nova depois que for desligado e religado. Pra isso eu criei um while(1) lá depois da análise da posição da chave pra "prender" o bixo lá.. hehe
Não acredito que esse tipo de "boot" seja a maneira mais ortodoxa de se fazer isso mas foi a maneira que eu encontrei. Estranhamente algumas vezes depois de executar a primeira rotina, ele executa a rotina seguinte mesmo "fisicamente" não estando satisfeita akela condição. Eu acredito que isso seja bouncing.. será que é?? Oq vcs acham???
Pra resolver isso eu botei um while no final de cada uma das duas rotinas.
Mas isso me incomoda pq.. é meio anti-profissional não é??
Acredito que seja bouncing... Oq vcs acham?
Vou postar essa parte do código q falei aki:
- Código: Selecionar todos
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC);
setup_vref(FALSE);
if(!chave_modo_pro_ativada) { // (V!=0):
LED_modo_PRO_desativado; // apaga "LED PRO" e acende "LED Normal"
delay_us(250); // evita leituras consecutivas
LED_modo_normal_ativado;
Modo_Normal(); // primeira rotina
}
if (chave_modo_pro_ativada) { // (V=0):
LED_modo_normal_desativado; // apaga "LED Normal" e acende "LED PRO"
delay_us(250); // evita leituras consecutivas
LED_modo_PRO_ativado;
Modo_PRO(); // segunda rotina
}
//while(1); // isso impedia uma nova execução antes de um boot
// mas agora essa linha está no final de cada uma das duas rotinas.. oq funciona mas gera 2 warnings ao invés de um...
} // fim main
Pessoal me dá uma luz aê pq sou iniciante meeesmo.
Vlw!