Hola a todos:
Estoy haciendo un polimetro multiplexado con leds que testean 5 sondas y funciona perfecto con las primeras 4 pero no con la ultima.
Probe el programa para que solo funcione con AD0 luego con la 1, pero cuando pruebo la entrada A4 me marca cualquier cosa.
Tiene idea si es algo diferente para la entrada A4.
Les muestro el codigo y si lo necesitan les mando el diseño en el proteus.
La variable pos en en procedimento Conversion_Ad() es la que selecciona la sonda.
Saludos y gracias.
Pablo
#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, NOWRT
byte const sensor[] = {0b00011110,0b00011101,0b00011011,0b00010111,0b00001111};
byte const ledB[] = {0b00000000,0b00000000,0b00000001,0b00000011,0b00000111,0b00001111,0b00011111,0b00111111,0b01111111,0b11111111};
float value=0;
float cant=0;
int pos=0, int_count=0;
#int_rtcc // This function is called every time
clock_isr() { // the RTCC (timer0) overflows (255->0).
if(int_count++==10) { // per milisecond.
int_count=0;
output_low(PIN_D0);
output_low(PIN_D1);
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
output_c(sensor[pos]);
if(cant <= 0.5){
output_bit( PIN_D0, 0);
output_bit( PIN_D1, 0);
output_b(ledB[0]);
}else if((cant > 0.5) && (cant <= 1)){
output_bit( PIN_D0, 1);
output_bit( PIN_D1, 0);
output_b(ledB[0]);
} else if((cant > 1) && (cant <= 1.5)) {
output_bit( PIN_D0, 1);
output_bit( PIN_D1, 1);
output_b(ledB[1]);
} else if((cant > 1.5) && (cant <= 2)) {
output_bit( PIN_D0, 1);
output_bit( PIN_D1, 1);
output_b(ledB[2]);
} else if((cant > 2) && (cant <= 2.5)) {
output_bit( PIN_D0, 1);
output_bit( PIN_D1, 1);
output_b(ledB[3]);
} else if((cant > 2.5) && (cant <= 3)) {
output_bit( PIN_D0, 1);
output_bit( PIN_D1, 1);
output_b(ledB[4]);
} else if((cant > 3) && (cant <= 3.5)) {
output_bit( PIN_D0, 1);
output_bit( PIN_D1, 1);
output_b(ledB[5]);
} else if((cant > 3.5) && (cant <= 4)) {
output_bit( PIN_D0, 1);
output_bit( PIN_D1, 1);
output_b(ledB[6]);
} else if((cant > 4) && (cant <= 4.5)) {
output_bit( PIN_D0, 1);
output_bit( PIN_D1, 1);
output_b(ledB[7]);
} else if((cant > 4.5) && (cant <= 5)) {
output_bit( PIN_D0, 1);
output_bit( PIN_D1, 1);
output_b(ledB[8]);
} else if(cant > 5) {
output_bit( PIN_D0, 1);
output_bit( PIN_D1, 1);
output_b(ledB[9]);
}
}
}
#INT_AD
Conversion_Ad()
{
set_adc_channel(pos);
cant = (read_adc(ADC_READ_ONLY) * 0.0048828125)*5;
delay_ms(100);
pos = 4; // NUMERO DE SONDA
read_adc(ADC_START_ONLY);
}
void main(void) {
int valor;
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports( ALL_ANALOG );
enable_interrupts(global);
enable_interrupts(INT_AD);
read_adc(ADC_START_ONLY);
set_adc_channel(0);
set_timer0(56);
setup_counters( RTCC_INTERNAL, RTCC_DIV_256);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
set_tris_a(0xFF);
set_tris_b(0b00000000);
set_tris_c(0b10000000);
set_tris_d(0b00000000);
output_low(PIN_D0);
output_low(PIN_D1);
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
while(true) {
}
}