Hola Miguel, y a todos en gral, vuelvo a escribir luego de mucho tiempo de no hacerlo.... espero no estar tan oxidado
Si siempre lees el mismo canal del ADC, creo que no debería ser necesario seleccionarlo siempre, por lo tanto podrías sacarlo del ciclo while. ¿Al borrar el LCD no queda posicionado directamente en el inicio del mismo? (Habría que ver en el datasheet que indica respecto de ese comando)
En ocasiones suele variar el bit de menor peso entre lecturas sucesivas del ADC es por ello que se estila hacer un promedio de varias lecturas. A su vez podrías mantener en una variable el valor anterior y compararlo con el nuevo valor y de haber diferencia sí hacer todo el procedimiento de escritura en el LCD....
Algo así
valor0 = ADC
valor1 = ADC
valor3 = ADC
valorLeido = (valor0 + valor1 + valor2)/3 // para hacer el promedio de las lecturas
si valorLeido != valorAnterior
{
valorAnterior = valorLeido
borrar display
convertir a ascii
imprimir display
}
Controla el consumo de sprintf, ya que suele llevarse muchos ciclos de instrucción
Espero haberme explicado