Hola a todos Gracias por responder, pero el problema persiste, lo explicare paso a paso.
Inicialmente realice todo el montaje para descartar que fuese problemas de simulacion en proteus como indicaba Nocturno, pero proteus y el monatje me funcionan exactamente igual. Actualemente estoy trabajando con el pic16f1936 que es la gama avanzada del pic16f886 que ya no sale, osea tiene muchas mas funciones, mas memoria, pero en sintesis es lo mismo obviamente mucho mas caro.
El problema es que los datos que estoy tomando del adc al ser de 10 bits los tengo que enviar en 2 registros con lo cual uso la funcion make8(dato,1) parte alta y make8(dato,0) parte baja o lo que es lo mismo (dato>>
y (dato&255), de igual manera lo estoy haciendo para un encoder que me estara contando lo metros (3500) se hace lo mismo divido el dato en la parte alta y baja para guardarlo en 2 registros de la eeprom y poder contar hasta 65535, hasta ahi todo muy bien.
Los datos los estoy guardando en diercciones de la memoria eeprom, una vez se active una bandera asi :
if(flagcommand) {
commad_process(); // Hay algo pendiente de procesar y lo procesa.
write_eeprom(0,voltL1);
delay_us(150); // minimo de tiempo que se debe esperar para guardar el dato en al eeprom
write_eeprom(3,voltH1);
delay_us(150);
write_eeprom(6,voltL2);
delay_us(300);
write_eeprom(9,voltH2);
delay_us(300);
write_eeprom(12,metrosH);
delay_us(200);
write_eeprom(15,metrosL);
delay_us(200);
}
Todo funciona perfecto al recibir y enviar la trama, los datos toman la posicion que requiero, los estoy enviando en entero que la respresentacion ps no tiene mucha importancia en entero 5 v es (3-255) en hexa (3-ff) parte alta y parte baja.
Luego de explicar todo y que todo funciona bien el error es!
en la trama no se visualizan los valores por debajo de 1.25v para el adc captado siempre me muestra parte alta (0) y parte baja (138), para ponerlo mas claro en el contador de metros que empieza en 0 hasta 3500 cuando empieza se visualiza (0) parte alta y (137) parte baja.
Para visualizar que este contando bien estoy imprimendo los metros despues de que envio la trama asi:
printf("%x-%x-%x-%U-%U-%U-%U-%U-%U-%x-%x\r\n",cmd[0],cmd[1],cmd[2],cmd[3],cmd[4],cmd[5],cmd[6],cmd[7]cmd[8],cmd[9],cmd[10]); // ... y lo muestro
printf("%lU Metros: \r\n",metros);
Como se observa envio una trama los %U son los dos sensores y el encoder para los metros en sus partes altas y bajas
En la trama tomando las dos ultimas (%U-%U) es la respresentacion del encoder, mientras la variable metros que la imprimo abajo no llega hasta 255 se ve asi (0)-(137) parte alta y baja en la trama
lo cual me daria mal para tomar el metraja inicial osea
(0*256)+137=137 ese seria el valor siempre desd 1 hasta que supere 255 una vez los lo supera la trama se visualiza asi
(1)-(0) para los registros del encoder, por lo que se puede calcular el metraje
1*256+0=256
(1)-(3)
1*256+3=259
Mientras no se supere el valor de 255 los registros del encoder se veran (0)-(137), lo mismo sucede para el adc que los estoy haciendo para varoles de 0 a 5v, cuando esta por debajo de 1.25 v el valor del registro siempre es (0)-(138), minetras el valor sea >=1.25v todo funciona a la mil maravillas en el adc y mientras el valor sea mayor a 255 funcioan perfecto para llevar el calculo de los metros.
Espero haber expresado bien la idea y que me puedan ayudar, yo vengo rebentando cabeza y no entiendo por uqe se da eso.
Gracias por sus aportes