Autor Tema: Problema con convertidores A/D Pic16F876A  (Leído 2216 veces)

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

Desconectado Raybak

  • PIC10
  • *
  • Mensajes: 12
Problema con convertidores A/D Pic16F876A
« en: 28 de Abril de 2010, 07:33:29 »
Buenas a todos,

Estoy trabajando ahora en un programa que me lea dos sensores analogicos y me saque por la LCD el valor de los mismos. En proteus simulando los sensores con potenciometros que me dan de 0 a 5 voltios me va perfectamente pero a la hora de montar los sensores me dependen uno del otro...

Tengo dos sensores uno de temperaturo y otro de presion. Actualmente solo tengo implementado el de temperatura, el de presion lo tengo llevado a masa por aquello de que no quede al aire (aun no me ha llegado el sensor). El problema es que si llevo a masa la patilla por la que tiene que entrar el sensor de presion la temperatura se vuelve loca y me da -15º que es lo equivalente aproximadamente a lo minimo que me puede dar el sensor de temperatura, en cambio si llevo la patilla de presion a positivo el sensor de temperatra si que aparentemente reacciona adecuadamente ya que me viene a dar unos 22-23º aproximadamete y si lo caliento asciende (lo he llegado a subir hasta 33º y luego va bajando hasta estabilizarse de nuevo entre 22º y 23º) La verdad que no le encuentro  ya mucho sentido a esto que me está pasando....

Os dejo las partes del codigo de los convertidores a ver si veis algo raro... lo unico que si hago es cada vez que leo un canal desactivo los convertidores y luego los vuelvo a activar, eso ya lo habia hecho alguna vez y me funcionaba bien....


///////////////////////////////////////////////////////////////////////////////

void configurarconvertidor1()
{
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);
set_adc_channel(3);
medidatemperatura = read_adc();
delay_ms(50);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
delay_ms(50);
}

void configurarconvertidor2()
{
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);
set_adc_channel(4);
medidapresion = read_adc();
delay_ms(50);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
delay_ms(50);
}

////////////////////////////////////////////////////////////////////////////

If (contador==1)
{
configurarconvertidor1();
delay_ms(250);
configurarconvertidor2();

temperatura = calculatemperatura(medidatemperatura);
presion = calculapresion(medidapresion);

presiones();

volumen = calculavolumen();
If (a==1)
{
printf(lcd_putc, "\f");
printf(lcd_putc, "T: %f\xDFC \nP: %f Bar",temperatura,presion);
a=2;
}
If (input(PIN_C5))
{
a=1;
}
}



Las variables estan definidas anteriormente al igual que las funciones, todo el programa me va bien quitando ese fallo con los sensores... en la practica real poniendo potenciometros me pasaba lo mismo asi que descarto que sea el sensor

Un Saludo y gracias de antemano.
Si Quieres Ser El Mejor, Tienes Que Vencer Al Mejor

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Problema con convertidores A/D Pic16F876A
« Respuesta #1 en: 28 de Abril de 2010, 09:24:54 »
Hola Raybak,
Citar
set_adc_channel(3);
medidatemperatura = read_adc();

Prueba poniendo un retardo entre la selección de canal y la lectura del buffer

set_adc_channel(3);
dalay_us(50);
medidatemperatura = read_adc();

saludos

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema con convertidores A/D Pic16F876A
« Respuesta #2 en: 28 de Abril de 2010, 09:44:57 »
Como ya te sugirió RayBack colocá el retardo, la forma de calcular el tiempo de retardo está especificada en el datasheet del PIC (de todas maneras esos 50us son suficientes).

Otra cosa es que creo innecesario la configuración del ADC "a cada rato". Lo configurás (tipo de reloj, cantidad de puertos) una sola vez al inicio del programa y listo. Creo que tampoco lo apagaría, al menos que lo hagas para que PIC consuma un poco menos de energía.
De esa manera en tus rutinas sólo tendrías que seleccionar el puerto y hacer la lectura.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Raybak

  • PIC10
  • *
  • Mensajes: 12
Re: Problema con convertidores A/D Pic16F876A
« Respuesta #3 en: 28 de Abril de 2010, 11:01:26 »
La configuracion del ADC la desactivo porque los pines RA0, RA1 y RA2 los utilizo tambien para la LCD, entonces por eso los desactivo no vaya a ser que interfieran que ya me han dado algun problemilla....

Ahora lo he modificado un poco activandolos y desactivandolos una solo vez, leyendo ambos datos y no he conseguido nada... voy a probar a ver con lo del retardo...


He estado haciendo mas pruebas y me he dado cuenta de que si pongo el pin donde ha de ir el sensor de presion a positivo siempre me da de 22º a 23º aunque si la caliento si que asciende de valor cosa que si llevo el pin a masa se queda en -15º puede ser que tenga mal conectado el sensor y me este dando algun fallo de masas?

como sensor de temperatura estoy utilizando una pt100 con un CAS (TxIsoBlock de novus). Lo tengo conectado a una fuente con 15V y el pic esta a otra con 5V pero he probado tambien a conectar todo con la de 15V utilizando un 7812 y un 7805 para adaptar la señal al pic y me va aun peor...

Un saludo
Si Quieres Ser El Mejor, Tienes Que Vencer Al Mejor

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema con convertidores A/D Pic16F876A
« Respuesta #4 en: 28 de Abril de 2010, 11:16:01 »
No sé como trabajará bien el CCS cuando acitvás los ADC. por las dudas podrías poner los tris correspondientes a 1 para asegurarte que leas bien el puerto.

Porque si usás "#uses Standartio" (creo que era esa la sentencia) y querés sacar un dato por el puerto, te pone todo el puerto como salida.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Raybak

  • PIC10
  • *
  • Mensajes: 12
Re: Problema con convertidores A/D Pic16F876A
« Respuesta #5 en: 28 de Abril de 2010, 12:16:08 »
He probado con los retardos entre la eleccion del canal y la lectura del mismo y ahora parece que funciona mejor... tanto si coloco el pin del sensor de presion a masa como a positivo me da el mismo valor de temperatura y si la caliento aumenta dicho valor y luego se reduce por lo que a priori parece que funciona.
El problema que hay es que he probado a conectar el pin del sensor de presion a una tension de 1.24V mas o menos, ahi se vuelve loco el sensor de temperatura marcandome -18º.

El montaje del sensor de temperatura es el que os adjunto en el dibujo con la salvedad de que la carga son dos resistencias (100 y 150 ohmios en serie)

Donde he conectado el pin del sensor de presion es entre las dos resistencias.

Un saludo
Si Quieres Ser El Mejor, Tienes Que Vencer Al Mejor

Desconectado Raybak

  • PIC10
  • *
  • Mensajes: 12
Re: Problema con convertidores A/D Pic16F876A
« Respuesta #6 en: 28 de Abril de 2010, 12:53:21 »
Vale, me acabo de dar cuenta de la impresionante liada que estaba haciendo al conectar ahi el pin que me lee el sensor de presion.... :oops: :oops: :oops:

He metido ahora ese pin a un potenciometro para poder variar tranquilamente la tension y que no sea todo o nada y ya va perfectamente la clave era el retardo ese que me habiais dicho.

Muchas gracias y ahora a ver si no me da problemas el sensor de presion que creo que me llegara mañana.

Un saludo
Si Quieres Ser El Mejor, Tienes Que Vencer Al Mejor


 

anything