Autor Tema: conversión analogica/digital  (Leído 992 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado javiergggg

  • PIC10
  • *
  • Mensajes: 7
conversión analogica/digital
« en: 07 de Mayo de 2021, 18:37:17 »
Hola a todos, tengo un problema..., con un pic16f873a tomo dos señales analógicas x el canal AN0 y AN1...., patas 2 y 3 del pic; el programa está de tal forma que cuando el pic recibe el carácter A responde la tensión digitalizada en el canal AN0, y cuando el pic recibe el carácter B responde con la tensión digitalizada en el canal AN1; bien, cuando interrogo al pic con A responde el valor de AN0 y cuando interrogo con B responde con la tensión digitalizada en AN0...., como si recibiera A.....  :oops: :oops: :oops:

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 562
Re:conversión analogica/digital
« Respuesta #1 en: 07 de Mayo de 2021, 20:29:25 »
Hola, no se comprende bien.
Quieres decir que inyectas una tensión análoga y luego según que valor tenga le das una identificación internamente?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:conversión analogica/digital
« Respuesta #2 en: 07 de Mayo de 2021, 21:18:44 »
Entonces tenes mal el programa. Pero sin el programa es dificil de ver donde esta el problema.

Desconectado javiergggg

  • PIC10
  • *
  • Mensajes: 7
Re:conversión analogica/digital
« Respuesta #3 en: 08 de Mayo de 2021, 09:34:20 »
el programita...., la comunicación es por rs485

#include <16F873a.h>
#device adc=10 //resolucion de 1024 valores
#FUSES HS,NOWDT,PUT,PROTECT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)
#use standard_io (C)
#use standard_io (B)
#use standard_io (A)
//*#define ALL_ANALOG
float an;
float bn;
int16 a,b;
char valor;

#int_rda
void serial_isr(){
                    valor=getc();
                    switch(valor){
                                  case 'A':                       
                                  output_high(pin_c2);//* sacando un "1" por C2 habilito TRASNMISIÓN DEL MAX485.-
                                  printf("%1.5f\r\n",an);
                                  output_low(pin_c2); //*sacando un "0" por C2 deshabilito transmisión y habilito RECEPCIÓN.-
                                  break;
                                 
                                  case 'B':
                                  output_high(pin_c2);//* sacando un "1" por C2 habilito TRASNMISIÓN DEL MAX485.-
                                  printf("%1.5f\r\n",bn);
                                  output_low(pin_c2); //*sacando un "0" por C2 deshabilito transmisi'on y habilito RECEPCIÓN.-
                                  break;
                                 }
                 }
void main()
           {
            valor=a=b=an=bn=0;
            output_low(pin_c2);
            enable_interrupts(int_rda);
            enable_interrupts(global);
            setup_adc_ports(all_analog);
            //*setup_adc_ports(AN0_AN1_AN3);
            setup_adc(ADC_CLOCK_INTERNAL);
 
while(true){
            set_adc_channel(0); //* del canal se leera el valor analogico
            delay_ms(20);
            an=(5.0*read_adc())/1024.0;
            delay_ms(15);             
           
            set_adc_channel(1); //* del canal se leera el valor analogico
            delay_ms(20);
            bn=(5.0*read_adc())/1024.0;
            delay_ms(15);     
           }
           }

Desconectado javiergggg

  • PIC10
  • *
  • Mensajes: 7
Re:conversión analogica/digital
« Respuesta #4 en: 08 de Mayo de 2021, 09:36:05 »
el programita...., la comunicación es por rs485

#include <16F873a.h>
#device adc=10 //resolucion de 1024 valores
#FUSES HS,NOWDT,PUT,PROTECT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)
#use standard_io (C)
#use standard_io (B)
#use standard_io (A)
//*#define ALL_ANALOG
float an;
float bn;
int16 a,b;
char valor;

#int_rda
void serial_isr(){
                    valor=getc();
                    switch(valor){
                                  case 'A':                       
                                  output_high(pin_c2);//* sacando un "1" por C2 habilito TRASNMISIÓN DEL MAX485.-
                                  printf("%1.5f\r\n",an);
                                  output_low(pin_c2); //*sacando un "0" por C2 deshabilito transmisión y habilito RECEPCIÓN.-
                                  break;
                                 
                                  case 'B':
                                  output_high(pin_c2);//* sacando un "1" por C2 habilito TRASNMISIÓN DEL MAX485.-
                                  printf("%1.5f\r\n",bn);
                                  output_low(pin_c2); //*sacando un "0" por C2 deshabilito transmisi'on y habilito RECEPCIÓN.-
                                  break;
                                 }
                 }
void main()
           {
            valor=a=b=an=bn=0;
            output_low(pin_c2);
            enable_interrupts(int_rda);
            enable_interrupts(global);
            setup_adc_ports(all_analog);
            //*setup_adc_ports(AN0_AN1_AN3);
            setup_adc(ADC_CLOCK_INTERNAL);
 
while(true){
            set_adc_channel(0); //* del canal se leera el valor analogico
            delay_ms(20);
            an=(5.0*read_adc())/1024.0;
            delay_ms(15);             
           
            set_adc_channel(1); //* del canal se leera el valor analogico
            delay_ms(20);
            bn=(5.0*read_adc())/1024.0;
            delay_ms(15);     
           }
           }

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 562
Re:conversión analogica/digital
« Respuesta #5 en: 08 de Mayo de 2021, 10:15:44 »
Pero que se supone que hace exactamente el programa???

Desconectado javiergggg

  • PIC10
  • *
  • Mensajes: 7
Re:conversión analogica/digital
« Respuesta #6 en: 08 de Mayo de 2021, 10:24:04 »
hace esto: cuando envío un carácter "A" el pic me devuelve el valor de la tensión de AN0; cuando envío un carácter "B" el pic me debería devolver el valor de la tensión de AN1; el problema es que mando un A y devuelve el valor AN0....y cuando mando una B me devuelve el mismo valor !!!! es decir el de AN0.... :5]

Desconectado javiergggg

  • PIC10
  • *
  • Mensajes: 7
Re:conversión analogica/digital
« Respuesta #7 en: 08 de Mayo de 2021, 10:26:41 »
ahhhh, no es un tema de hard...., porque mido en las patas y la tensión a convertir es la que debería ser....; o es una tontería que no alcanzo a darme cuenta o es peor....

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 946
Re:conversión analogica/digital
« Respuesta #8 en: 08 de Mayo de 2021, 11:37:44 »
El programa funciona lo mas bien.  Buscá el error por el lado del terminal.

 

* analog.jpg
(38.98 kB, 640x331 - visto 149 veces)

Desconectado javiergggg

  • PIC10
  • *
  • Mensajes: 7
Re:conversión analogica/digital
« Respuesta #9 en: 08 de Mayo de 2021, 13:34:50 »
gracias....!!!!! sabes que lo solucioné..., agregué retardos..., fuí probando con los tiempos en ms ....:
case 'A':                       
                                  output_high(pin_c2);//* sacando un "1" por C2 habilito TRASNMISIÓN DEL MAX485.-
                                  delay_ms(15);
                                  printf("%1.5f\r\n",an);
                                  delay_ms(5);
                                  output_low(pin_c2); //*sacando un "0" por C2 deshabilito transmisión y habilito RECEPCIÓN.-
                                  break;
                                 
                                  case 'B':
                                  output_high(pin_c2);//* sacando un "1" por C2 habilito TRASNMISIÓN DEL MAX485.-
                                  delay_ms(15);
                                  printf("%1.5f\r\n",bn);
                                  delay_ms(5);
                                  output_low(pin_c2); //*sacando un "0" por C2 deshabilito transmisión y habilito RECEPCIÓN.-
                                  break;

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 946
Re:conversión analogica/digital
« Respuesta #10 en: 08 de Mayo de 2021, 13:44:27 »
Pero entonces vos mandabas los caracteres A y B con muy poca diferencia de tiempo.   Lo que tenías que hacer era que mandar el siguiente caracter después que se recibió la respuesta.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:conversión analogica/digital
« Respuesta #11 en: 08 de Mayo de 2021, 15:44:00 »
Entonces está mal el programa por no considerar ese posible caso de enviar todo junto jejej.