Termómetro con lm35, PIC y displays de 7 segmentos

Hola!
Miren, tengo un problema, tengo que hacer un termómetro usando el lm35 y el PIC16f887, pero lo tengo que hacer en ensamblador. Quisiera saber si me pueden ayudar con el código y el circuito :confused::confused:
Estoy usando 3 displays de 7 segmentos para desplegar la temperatura, pero si es meramente necesario, podría usar un display de LCD.
Mi idea es usar el puerto A para la lectura del lm35 y el B, C y D para cada display (si si uso los 3 displays).
Les agradeceré mucho la ayuda, gracias :)
 
Para el diseño, puedes utilizar 3 transistores para seleccionar con cada 1 un display( con lo que utilizarias solo 3 salidas de un puerto) y un puerto comun para los 7 segmentos( busca trabajos realizados con pic16f84 sobre sensor de temperatura, seguro que hay algo que te pueda ayudar)

Respecto al ensamblador supongo que te referiras a realizarlo con mplab.

Saludos
 
Gracias, sí me refería a mplab. Pero creo que me rendiré y lo haré en mikroC y con un LCD, ya encontré un proyecto muy parecido.

MikroC es un buen programa, facil de manejar si sabes programar en C pero a la hora de compilar a mi me dio problemas, no descartes utilizar mplab si mikroc te da problemas.

Saludos
 
amigo con respecto a tu proyecto lo he visto en algun libro del pic 16f84 creo que es desarroolo practico y aplicaciones. buscalo en pdf que de seguro esta. en el libro encontraras tanto el diagrama de conexion como el codigo asm. Lo unico seria modificar los puertos debido al micro que utilizaras y recuerda tener las rutinas de inicializacion de la LCD. Si es necesario usar los 7 segmentos te recomiendo que los conectes al puerto b y le coloques un arreglo de transistores para encenderlos con el port c y utiliza tablas de codigo para que solamente con un call tengas en el display el numero deseado.
 
Hola. Estoy tratando de realizar un control de temperatura estilo una pava automática, pero encuentro problemas a la hora de tomar el dato de la entrada analógica.
He encontrado varios ejemplos online pero todos con lcd, siendo que yo utilizo dos displays de 7 segmentos y un CD4511, no es particularmente util.

Especificando un poco más en el porque digo que no puedo medir correctamente, al realizar la simulación en proteus, abro la tabla para visualizar variables y no puedo ver los valores de datos float (aparecen de tipo unspecified y no me muestran ningún valor), por esto agregue un int, dado que dividiendo el float por 1000 debería obtener algún valor visualizable.

Tampoco tengo mucha idea de C, es propenso a errores.
Pongo el pseudo código que tengo hasta ahora.
Código:
#include <pava.h>

#define AN0_AN1_AN2_AN4_VSS_VREF     3    // A0 A1 A2 A5 VRefh=A3   
float Temp2;
int TEMPERATURA;


void main()
{
   setup_adc_ports(sAN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
   set_adc_channel(0);               //especifica de que canal se leera el valor analogico

   while(TRUE)
   {
      delay_us(20);                    // Tiempo para que se estabilice la configuracion sobre el canal de lectura.
      Temp2 = read_adc();              //se lee el valor analogico y se guarda digitalmente en la variable
      TEMPERATURA = Temp2 / 1000;

   }  

}
 
Hola:
En cuanto a programacion no podre ayudarte, pero puedo decirte que quiza no sea necesario usar un float, ya que, teniendo en cuenta el error del mismo sensor y del A/D converter... pienso que usar un float seria como ponerle un eslabon de acero a una cadena de plastico.
 
Hola. He avanzado un poco y estoy tratando de utilizar la instrucción sprintf para tomar los dos valores antes de la coma de la variable float y ponerlos dentro de una cadena.
El problema es que no sé que estoy haciendo mal, dado que al simularlo, los dos bytes de la cadena toman valores constantes e inservibles (el primero 32 y el segundo 48) y sin importar la variacion de la entrada analógica, se mantienen en esos dos valores.
Este es el codigo:
Código:
#include <pava.h>

#define AN0_AN1_AN2_AN4_VSS_VREF     3    // A0 A1 A2 A5 VRefh=A3 
float Temp2;
int Temper;
float q;
float p;
char cadenatemp[2];
int8 contador;
int1 disp1;
int1 disp2;
int1 disp3;
int1 contemp;
int1 conpers;
int quinientosms;
#int_TIMER0
void  TIMER0_isr(void) 
{
}

void main()

{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32|RTCC_8_bit);      //1.6 ms overflow
   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);
   setup_adc_ports(sAN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
   
   while(TRUE)
   {
      set_adc_channel(0);               //especifica de que canal se leera el valor analogico
      delay_us(20);                    // Tiempo para que se estabilice la configuracion sobre el canal de lectura.
      q=read_adc(0);
      p = q*0.488758;
      p=p*100;
      sprintf(cadenatemp,"%2.0f",p);
 
Última edición por un moderador:
Haber, que tipo de valor te devuelve la función "read_adc(0);", para poder a empezar a tratar los datos tendras que hacer un cast (casting) que nos permite hacer una conversión explícita de un tipo de dato a otro, ejemplo sobre tus rutinas:
Código:
float Temp2;
int TEMPERATURA;

Temp2 = [COLOR="Red"](float)[/COLOR] read_adc();              //se lee el valor analogico y se guarda digitalmente en la variable
TEMPERATURA =[COLOR="Red"](int)[/COLOR] [COLOR="red"]([/COLOR]Temp2 / 1000[COLOR="red"])[/COLOR];

otro tema es como quieras tratar esa información.
 
Hola, depende tu experiencia programando (si eres bueno puedes hacer maravillas con el pic), si quieres usar display de 7 segmentos puedes utilizar dos metodos, mediante transistores (un poco de programación) o utilizando el circuito integrado "74LS47-Anodo Comun-74LS48-Catodo Comun" (más circuiteria, casi nada de programación), o con LCD.

Si utilizas mikroC hay dos libros muy buenos.
- Programacion-de-MICROPIC-en-C-by-Enigmselectronica
- libro_simulacion_mikroc

ahi solo te darias una guia ya que son programas muy basico. y podrias apoyarte con
-mikroc_pic_pro_manual_v101

sAludos
 
Hola ! soy nuevo en el foro ! Estoy trabajando en realizar la programación de un sensor de temperatura con el sensor LM35 y con el PIC 18f47j53, necesito que me muestre los datos de temperatura en un display 7 segmentos. Soy estudiante de ingeniería Electrónica, principiante en esta área de los microcontroladores, Ya tengo una plantilla en la que tengo los datos del display y el conversor análogo digital y el display 7 segmentos, necesito implementar el codigo que me muestre los datos tomados por el LM35 en la salida del display, he intentado por todos los medios y no consigo que ningún código me funcione, agradecería mucho cualquier ayuda
 

Adjuntos

  • Sensor.txt
    5.5 KB · Visitas: 19
Atrás
Arriba