TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: PabloFiscella en 13 de Mayo de 2004, 11:27:00

Título: Puerto ADC 4 es distinto de los otros
Publicado por: PabloFiscella en 13 de Mayo de 2004, 11:27:00
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) {
   }
}

Título: RE: Puerto ADC 4 es distinto de los otros
Publicado por: MGLSOFT en 13 de Mayo de 2004, 12:27:00
Que PIC es el que utilizas??
No esta en el codigo...
Título: RE: Puerto ADC 4 es distinto de los otros
Publicado por: PabloFiscella en 13 de Mayo de 2004, 12:43:00
Si se me paso esa linea
Es el 16F874 que tiene 8 entradas Analogicas
Título: RE: Puerto ADC 4 es distinto de los otros
Publicado por: pocher en 13 de Mayo de 2004, 12:45:00
Podrías explicar como funciona " un polimetro multiplexado con leds que testean 5 sondas ".

Sería conveniente que dejases el fuente y el dibujo con PROTEUS para que se pueda simular y se intente ver que pasa con A4.
Título: RE: Puerto ADC 4 es distinto de los otros
Publicado por: MGLSOFT en 13 de Mayo de 2004, 12:50:00
Pero en el programa siempre interrogas el puerto 4 solo??
Porque no subes la simulacion al foro??
Título: RE: Puerto ADC 4 es distinto de los otros
Publicado por: PabloFiscella en 13 de Mayo de 2004, 12:55:00
Como cuelgo los archivos para que los veas?

Esto sensa 5 voltages que provienen de un motor. Tiene 5 sondas que estan conectadas desde A0 a A4.
Como puden ser voltages de hasta 15v puse un divisor por resistencias que seguramente esta mal pero por ahora funciona.
Estos divisores dividen el voltage de entrada 5 veces.
Por medio de codigo vuelvo a multiplicarlo antes de mostrar el resultado.

Cada sonda esta representada por una fila de 10Leds cada una.
la variable sonda hace que se encienda una sonda por ves mandando masa solo a una a la ves.
Eso lo hace por el puerto C0 a c4

y los 10 leds se encienden con el puerto  D0 y D1 los dos primeros y los otros 8 con el puerto b

Espero que me hallan entendido.

Saludos.
Pablo
Título: RE: Puerto ADC 4 es distinto de los otros
Publicado por: PabloFiscella en 13 de Mayo de 2004, 12:57:00
El codigo ahora esta en 4 porque es con el que tenia problemas.
Pero el codigo original va cambiando del 0 a 4 y vuelve a empezar.
Título: RE: Puerto ADC 4 es distinto de los otros
Publicado por: pocher en 13 de Mayo de 2004, 13:15:00
Ponlos aquí: http://miarroba.com/foros/ver.php?foroid=256746
Título: RE: Puerto ADC 4 es distinto de los otros
Publicado por: PabloFiscella en 13 de Mayo de 2004, 14:10:00
Lo puse donde me indicaste.
Ahora acabo de probar el pueto A5 y el programa funciona perfecto.

Definitivamente es el A4, no entiendo nada.

Gracias.
Pablo
Título: RE: Puerto ADC 4 es distinto de los otros
Publicado por: Modulay en 13 de Mayo de 2004, 19:27:00
No estoy puesto en el tema pero en el diagrama de pines de la hoja de características RA4 no parece constar como entrada analógica,correspondiendo AN4 al pin RA5.Corríjanme si me equivoco.
Saludos
Título: RE: Puerto ADC 4 es distinto de los otros
Publicado por: pikman en 13 de Mayo de 2004, 21:18:00
Hola, no RA4 no es una entrada analogica, es I/O digita de colector abierto  y la entrada del TMR0, la entrada digital AN4 esta en el pin RA5, ese el el problema, RTFM.

saludos

Ariel
Título: RE: Puerto ADC 4 es distinto de los otros
Publicado por: pocher en 13 de Mayo de 2004, 22:57:00
Pués sí viendo el dibujo ya es otra cosa (la memoria es mala consejera), fíjate que en el PIN 6 tienes dibujado RA4/T0CKI y no aparece ningún AN4. El AN4 está en el PIN 7
Título: RE: Puerto ADC 4 es distinto de los otros
Publicado por: PabloFiscella en 14 de Mayo de 2004, 08:47:00
Error visual. Tienen razon. Muchas gracias a todos.

Saludos
Pablo