Adquisición de datos analógica por RS232

Este circuito es una placa de adquisición de datos analógicos por puerto serial bajo norma RS232.
El mismo lo que hace es tomar los niveles de tensión de sus canales análogos y enviarlos por serie a la pc, de esta forma se pueden armar tablas temporales que permiten generar estadísticas sobre las mediciones tomadas.
El funcionamiento es en base al micro-controlador PIC16F876A (se podría usar otro que tenga ADC) el mismo toma los valores a medir en cada uno de sus 5 canales ADC luego los procesa para enviarlos por el puerto serial, en el circuito se incluye el conversor TTL/232 para la correcta comunicación con el ordenador.
Con cualquier programa receptor de 232 se pueden extraer los datos de la placa.
La configuración RS232 de esta placa es: 9600-8-N-1-H
A continuación se dejara el circuito, pcb y programa.





#include <16f876a .h="">
#device adc=10
#FUSES XT,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)
#define LED0 PIN_C0
void main(){
   int16 q,r,j,a,c;
   float p,o,k,b,d;
   setup_adc_ports(all_analog);
   setup_adc(ADC_CLOCK_DIV_2);
   while(TRUE){
      set_adc_channel(0);
      delay_us(10);
      q=read_adc();
      p=5.0*q/1024.0;
      if(q==1)
         p=0;
      set_adc_channel(1);
      delay_us(10);
      r=read_adc();
      o=5.0*r/1024.0;
      if(r==1)
         o=0;
      set_adc_channel(2);
      delay_us(10);
      j=read_adc();
      k=5.0*j/1024.0;
      if(j==1)
         k=0;
      set_adc_channel(3);
      delay_us(10);
      a=read_adc();
      b=5.0*a/1024.0;
      if(a==1)
         b=0;
      set_adc_channel(4);
      delay_us(10);
      c=read_adc();
      d=5.0*c/1024.0;
      if(c==1)
         d=0;
      printf("V1: %02.3f - V2: %02.3f - V3: %02.3f - V4: %02.3f - V5: %02.3f \r", p,o,k,b,d);
      delay_ms(20);
      output_toggle(LED0);
   }
}

2 comentarios:

  1. Hola, que interesante tu blog, gracias por compartir toda esa info!! yo tengo una duda con este programita.... bueno la verdad llevo poco tiempo que aprendi esto, mi duda es si se ha configurado con 8 bits a la directiva #use rs232 , es posible que transfiera los 10 bits del dato que está representando la conversion analogica-digital en 8bits q configuro el rs232? yo Debo estar confundiendo las cosas lo sexD pero despejame esa duda porfavor! Saludos!!

    ResponderEliminar
    Respuestas
    1. Hola, gracias!, te comento, la norma serial admite un maximo de 8bits, si configuras tu ADC en 10bits y queres enviarlos los 10 (porque podes enviar solo los 8 mas significativos pero depende de la exactitud que quieras), tenes que enviar dos mensajes seriales en lugar de uno. Por ejemplo primero mandas los primeros 5bit y despues mandas los segundos 5bit. Pero esto no es lo mas normal de todo, suele usarse 8bits en esa norma, o bien separar el numero entre entero y mantiza. Lo mas sencillo es usar 8bits.
      Saludos.

      Eliminar