Hola gente:
Ya no se que mas probar.
Estoy haciendo algo simple para uds.
Intento tomar los datos de AN0 que ronda en 2.5v lo multiplico por 10 y quedan 25.0 luego uso una funcion para separar cada numero y mostrarlo por un display de 7 segmentos.
En el proteus parece funcionar pero cuando lo llevo a la practica muestra cualquier cosa y cambia costantemente de valor.
Ya chequie la entrada y entran los 2.5v.
El circuito funciona bien porque si pongo a la variable sonda1 un valor fijo lo muestra.
les dejo el codigo a ver si encuentran algo.
Hay variables que las estoy usando para otra cosa.
El codigo que ven no es el codigo completo del progama.
Muchas gracias y felices fiestas.
Pablo
#include <16F874.h>
#device ADC=10
#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOPUT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NOWDT
byte Display1[] = {0b0000,0b0001,0b0010,0b0011,0b0100,0b0101,0b0110,0b0111,0b1000,0b1001};
byte Anodos[] = {0b111111,0b111110,0b111101,0b111011,0b110111,0b101111,0b011111};
byte sonda,int_count = 35;
float sonda1,sonda3;
float TempBaja1, TempAlta1,v4,v10;
char numero1[4],numero3[4], tbaja[4],talta[4];//,PHAlto[4],PHBajo[4], PH4[4],PH10[4];
byte Boton = 0,Seteo = 1; //VistaPH = 1;
byte t1,t2,t3,t4,t5,t6;
#separate
void main()
{
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(RA0_RA1_RA3_ANALOG);
set_adc_channel(1);
enable_interrupts(global);
enable_interrupts(INT_AD);
set_tris_a(0xFF);
set_tris_b(0x00);
set_tris_c(0x00);
set_tris_d(0x00);
set_tris_e(0x3);
while(true)
{
sonda1 = (read_adc() * 0.0048828125);
delay_ms(3);
// sonda1 = 1.23;
t1 = (int) sonda1;
sonda1 = (sonda1 - t1) * 10;
t2 = (int) sonda1;
sonda1 = (sonda1 - t2) * 10;
t3 = (int) sonda1;
output_b(Display1[t1]);
output_d(Anodos[1]);
delay_ms(3);
output_d(Anodos[0]);
output_b(Display1[t2]);
output_d(Anodos[2]);
delay_ms(3);
output_d(Anodos[0]);
output_b(Display1[t3]);
output_d(Anodos[3]);
delay_ms(3);
output_d(Anodos[0]);
}
}