Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

11/05/2012 #1


Termómetro con lm35, PIC16f887 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
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
11/05/2012 #2


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
11/05/2012 #3


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.
11/05/2012 #4


sandraps dijo: Ver Mensaje
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
20/05/2012 #5


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.
10/11/2014 #6


Termómetro con lm35, PIC16f887 y displays de 7 segmentos
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;

   }  

}
10/11/2014 #7

Avatar de eL1ct

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.
13/11/2014 #8


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);
14/11/2014 #9

Avatar de ViCtorA

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 = (float) read_adc();              //se lee el valor analogico y se guarda digitalmente en la variable
TEMPERATURA =(int) (Temp2 / 1000);
otro tema es como quieras tratar esa información.
23/11/2014 #10

Avatar de ruben90

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
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.