Autor Tema: Programa A/D que no va  (Leído 1967 veces)

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

Desconectado rferrero

  • PIC16
  • ***
  • Mensajes: 113
Programa A/D que no va
« en: 19 de Noviembre de 2004, 10:21:00 »

    Hola a todos. Dispongo de un sensor de infrarrojos, el GP2D12, supongo conocido por muchos. El caso es que cogi un ejemplo del subforo para simular y no va:

#include <16F876.h>

#device adc=10      // Conversión con 10 bits
#use delay (clock=4000000)
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, WRT
#use rs232(baud=9600, xmit=62, rcv=63) // PIN_C6=62 y PIN_C7=63

void main( void )
{
  long  valor;    
  float const resoluc= 5.0/1024.0;      // Conversión es con 10 bits  
  float voltios;

  setup_adc_ports ( ALL_ANALOG );        // Entrada analógica por RA0
  setup_adc ( ADC_CLOCK_INTERNAL );    // Reloj interno para el ADC
  set_adc_channel ( 0 );       // Canal 0 para convertir
 
  while ( 1 )                    
  {
      valor = read_adc();              
     
      voltios= valor * resoluc;    
                              
     printf("
 %f voltios -",voltios);
     
      delay_ms(200);            // Convierte cada 200ms
  }
}  

 
    Utilizo RS232 para sacar los resultados por pantalla y la patilla RA3. Que falla??
    El caso es que nada mas conectar la alimentacion, si, sale un valor, 1,63 V o los que sean, pero las siguientes medidas son siempre 0.

    Gracias. Rebotado Un saludo.
                 Ruben.


Desconectado rferrero

  • PIC16
  • ***
  • Mensajes: 113
RE: Programa A/D que no va
« Respuesta #1 en: 19 de Noviembre de 2004, 10:29:00 »

   Vaya, acabo de ver que el canal no era el correcto. Poniendo 3, aparecen medidas, pero no salen del valor 0,54 y 0,80 y pico. En teoria deberia ser el canal 8, no? Pues solo aparece una medida nada mas conectar la alimentacion. El resto son 0.
 
    Bueno, ahora pruebo con el canal 6 y parece que funciona mejor. Esto no parece muy exacto ...

    Alguien tiene alguna experiencia parecida con esto?

   

Desconectado rferrero

  • PIC16
  • ***
  • Mensajes: 113
RE: Programa A/D que no va
« Respuesta #2 en: 19 de Noviembre de 2004, 11:29:00 »

    Hasta donde llego a entender, poniendo como Vref+=Vdd y Vref-=Vss, y colocando la salida de la senal analogica del sensor en RA3, tengo que poner como setadcchannel = 3, 5 u 8, no?? Pues es que no alcanza valores superiores a la unidad.
 
    Esa declaracion de long que hay hecha ... no lo fastidia al multiplicar por la resolucion?? Porque es mezclar un entero con un float.

    Gracias de nuevo.


Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Programa A/D que no va
« Respuesta #3 en: 19 de Noviembre de 2004, 11:55:00 »
Tal y como está el programa,debes conectar el sensor al pin RA0,que es el canal que has seleccionado ( set_adc_channel(0) ).Si lo conectas en otro pin,cambias el cero por lo que corresponda.
Si le asignas a una variable de tipo entero un resultado o una varibale de tipo flotante se hace un redondeo que no tiene por qué causar problemas.
Saludos

Desconectado rferrero

  • PIC16
  • ***
  • Mensajes: 113
RE: Programa A/D que no va
« Respuesta #4 en: 19 de Noviembre de 2004, 12:22:00 »

    Ya lo he puesto (en RA0), pero da unos valores muy dispares. 2, 3 y hasta 4 y pico. Luego baja a 0 y apenas sube aunque varie la distancia.
    Alguien ha trabajado con este sensor??

   

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Programa A/D que no va
« Respuesta #5 en: 19 de Noviembre de 2004, 12:38:00 »
¿Esto es correcto:  #use rs232(baud=9600, xmit=62, rcv=63) ? El 62 y el 63 ¿no deberían de ser pines?

En los fuses cambia WRT por NOWRT, en una versión anterior había que poner WRT para que funcionase, pero ahora ya está corregido.

Un saludo

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Programa A/D que no va
« Respuesta #6 en: 19 de Noviembre de 2004, 12:47:00 »
PIN_C6  y PIN_C7 son alias definidos en 16F876.h asociados a los valores que rferrero utiliza en la directiva,por lo que lo mismo da poner PIN_C6 que poner 62.
rferrero,puedes probar que el código está bien colocando un potenciómtero entre Vcc y masa y conectando el terminal común al canal AD del pic.Si ves que los resultados son coherentes párate a pensar que el problema está en el sensor.

Desconectado Flugplatz

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 279
    • Mi canal de YouTube
RE: Programa A/D que no va
« Respuesta #7 en: 23 de Noviembre de 2004, 05:04:00 »
aunque solo debería dar problemas en la primera lectura, pónle una pequeña pausa después de seleccionar el canal de conversión
Codigo:

set_adc_channel(0);
delay_ms(25);
valorAD = Read_ADC();



y también es conveniente usar el reloj externo como base de tiempos ya que el reloj interno es más inestable.

Codigo:

setup_adc(ADC_CLOCK_DIV_32);




Mi canal de YouTube

Un saludo desde Madrid

Desconectado rferrero

  • PIC16
  • ***
  • Mensajes: 113
RE: Programa A/D que no va
« Respuesta #8 en: 28 de Noviembre de 2004, 05:26:00 »

    Bueno, más o menos sí que va. Ya. Por fin.  El programa estaba bien. El problema eran las conexiones. La de Vcc no era muy buena y a veces se soltaba. El caso es que lo he soldado y ahora va medianamente bien. Lo malo es que la medida varía bastante y es algo inestable.
    Gracias. Un saludo.