Tenho uma aplicação que utiliza o protocolo Modbus para transmitir seus dados para um concentrador de dados, até ai funcionando bem, consigo ler e escrever bobinas e variáveis . Contudo, meu concentrador está derrubando a comunicação com o escravo por time out e tenho certeza que é meu método de leitura do adc... Leio 4 sinais com o adc e depois os disponibilizo em um buffer, mas essas leituras estão me gerando "delay's" dentro da rotina de Modbus.....
Minha função de leitura.
- Código: Selecionar todos
ADCON1.F1 = 1; //Start sampling (SAMP=1)
Delay_ms(100); //Wait for 100ms (sampling ...)
ADCON1.F1 = 0; //Clear SAMP bit (trigger conversion)
while (ADCON1.F0 == 0)
return ADCBUF0;
Não seria possível fazer por interrupção? Por exemplo dou set em um bit para iniciar a a amostragem e quando concluída tenho uma interrupção com a resposta da conversão?