Autor Tema: termometro con display 7 segmentos Nuevo (segunda parte)  (Leído 4696 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado nitro

  • PIC10
  • *
  • Mensajes: 5
termometro con display 7 segmentos Nuevo (segunda parte)
« en: 31 de Diciembre de 2013, 23:26:06 »
Hola. Desde hace un tiempo he estado intentando hacer este proyecto que deberia mostrar la temperatura a traves un par de display de 7 segmentos.
Estoy usando como sensor un lm35 y un pic 16f877.
He simulado el codigo en proteus y siempre me da cero.
Aqui va el codigo:

#include <16f877a.h>
#device adc=10
#fuses xt, nowdt
#use delay (clock=4M)


void main ()
{
   int16 q;
   float p;
   int decena, unidad;
   
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   
   FOR (;;)
   {
      set_adc_channel(0);
      delay_us(20);
      q=read_adc();
      p=((q*5)/1024)*100;
           
      decena=p/10; //separo p en unidad y decena
      unidad=p-(decena*10);
     
   
   }
}


El problema es que en la simulacion en proteus "p" no me devuelve nada y obiamnete decena y unidad me dan cero. Aparentemente el problema esta en la division, pero no entiendo ya que p esta como float.
Ayuda please.......

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: termometro con display 7 segmentos Nuevo (segunda parte)
« Respuesta #1 en: 01 de Enero de 2014, 01:51:18 »
Hola.

Es probable que necesites hacer un casting para convertir los tipos.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado xesc0

  • PIC10
  • *
  • Mensajes: 22
Re: termometro con display 7 segmentos Nuevo (segunda parte)
« Respuesta #2 en: 01 de Enero de 2014, 09:49:32 »
Buenos días,

No queda claro como lo tienes conectado, una imagen ayuda. No necesitas variables float para mostrar el resultado en dos 7 segmentos, con char ya vas bien, tampoco veo ninguna instrucción en tu código que mande el resultado a los puertos donde tienes los siete segmentos. Algo como PORTB = 16*decena+unidad;

Saludos  :-/

Desconectado nitro

  • PIC10
  • *
  • Mensajes: 5
Re: termometro con display 7 segmentos Nuevo (segunda parte)
« Respuesta #3 en: 01 de Enero de 2014, 18:44:06 »
Hola. Es verdad falta la parte que muestra la temperatura en los display (eso ya lo tengo resuelto).
Sucede que lo estaba haciendo por parte y lo iba simulando en proteus:
1º leo el convertidor a/d
2º convieto el valor del a/d a temperatura en ºC
3º Separo la unidad y la decena para luego enviar a los display.

El problema surge que cuando convierto el valor del a/d a tempertura y lo separo en unidad y decena, estas me dan cero.
Para mi el problema esta en la formula "p=((q*5)/1024)*100", ya que cuando lo simulo paso a paso en proteus dicha formula no me devuelve nada y es por ello que unidad y decena me dan cero.

Adjunto imagen de la simulacion:

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: termometro con display 7 segmentos Nuevo (segunda parte)
« Respuesta #4 en: 01 de Enero de 2014, 19:41:08 »
como con variables de 2 bytes(int16) puedes trabajar bien el lm35,prueba asi... declara la variable float p por int16 y crea tambien la variable decima... asi tendras las decimas de grado....
 
      q=read_adc();
      p=q*5;
      p/=1,024;

      
      decima=p %10;
      unidad=p %100 /10;
      decena=p %1000 /100;
« Última modificación: 01 de Enero de 2014, 20:14:06 por ppyote »
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: termometro con display 7 segmentos Nuevo (segunda parte)
« Respuesta #5 en: 02 de Enero de 2014, 11:50:14 »
Hola.

Es probable que necesites hacer un casting para convertir los tipos.

Saludos.

Concuerdo con Bruno

tus variables son de diferentes tipos y tal vez ese sea el problema intenta con esto:

 p=(((float)q*5)/1024)*100;

"Nada es imposible, no si puedes imaginarlo"

Desconectado nitro

  • PIC10
  • *
  • Mensajes: 5
Re: termometro con display 7 segmentos Nuevo (segunda parte)
« Respuesta #6 en: 11 de Enero de 2014, 02:05:52 »
Hola amigos. He logrado hacer funcionar el proyecto.
Gracias a los que me ayudaron.

Desconectado allennet

  • PIC16
  • ***
  • Mensajes: 108
Re: termometro con display 7 segmentos Nuevo (segunda parte)
« Respuesta #7 en: 12 de Enero de 2014, 01:14:21 »
como sugerencia el adc de 10 bit el valor maximo que devuelve es 1023 nunca 1024, no varia tanto el resultado pero hay que tener en cuenta.

En mi caso yo pongo el ref+ a 1.023v asi  no le multiplico nada solo hago promedio, solo va a sensar max 102.3 grados celcius pero es de sobra para la mayoria de aplicaciones :D
"La curiosidad mato al gato, pero murio sabiendo"