Autor Tema: Termómetro con LM35  (Leído 4227 veces)

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

Desconectado Pablolbap

  • PIC10
  • *
  • Mensajes: 37
Termómetro con LM35
« en: 18 de Junio de 2015, 18:02:05 »
Estoy haciendo un termómetro con el PIC16F88 y el sensor LM35 en mikroC. Lo simulo en Proteus.
Me trabaja bien de 0°C a 106°C. El sensor tiene un rango de -55°C a 150°C. Porsupuesto el PIC no va a leer voltajes negativos así como así. ¿Qué se puede hacer?
También cuando sube de 106°C va poniendo -105, -104,-103,...,-62. Como si la lectura a partir de 106 se replegara.
¿Qué puedo hacer para que muestre hasta 150°C?
Gracias por la atención. Cualquier idea se agradece mucho.

//Temperature Control
// Lcd pinout settings for LCD connection.
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
// Pin direction.
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
 //Fin de la configuración de los puertos.
int lm_35;
int temp;
char txt[15];
void main(){
OSCCON=0x40;                      // Oscilador interno a 1Mhz.
while (OSCCON.IOFS==0);      //Esperar mientras el oscilador se estabiliza.
PORTA=0x00;                         //Inicialización.
ANSEL=0x01;                         //Pin RA0/AN0, RA2/AN2 y RA3/AN3 como entradas analógicas.
//ADCON1=0x08;                   //Configura AVcc y Vref-.
TRISA=0x01;                         //Pin RA0/AN0, RA2/AN2 y RA3/AN3 como entradas.
Lcd_Init();                             //Inicializa el LCD.
Lcd_Cmd(_LCD_CLEAR);        //Borra el display.
Lcd_Cmd(_LCD_CURSOR_OFF);   //Apaga el cursor.
Lcd_Out(1,2, "Temperatura"); //Muestra rótulo.
Lcd_Out(2,12, "C");               //Muestra temperatura.
do {
   lm_35=ADC_Read(0);        //Obtiene 10 bits de la conversión del canal 2.
   temp=(lm_35*150)/307;     //Convierte lectura en grados centígrados.
   IntToStr(temp,txt);
   Lcd_Out(2,5, txt);
} while(1);
}

Desconectado Pablolbap

  • PIC10
  • *
  • Mensajes: 37
Re: Termómetro con LM35
« Respuesta #1 en: 19 de Junio de 2015, 11:05:37 »
La pregunta más importante en orden de dificultad es:
¿Cómo leer voltajes negativos con el Pic?
Agradezco cualquier idea. Saludos cordiales a todos.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2980
Re: Termómetro con LM35
« Respuesta #2 en: 19 de Junio de 2015, 11:33:48 »
Para leer tensiones negativas puedes usar un amplificador operacional en configuración con ganancia positiva. Por poner un ejemplo, si tienes -5voltios para leer y un amplificador operaciónal con vout=-1vin hay tienes tu tensión positiva.

Tu rango de medida debe estar dentro de los límites de alimentación del operacional. Y seguir algunas reglas siento no poder ayudarte mas pero estoy de exámenes y tengo poco tiempo libre.

Un saludo

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 214
Re: Termómetro con LM35
« Respuesta #3 en: 19 de Junio de 2015, 13:20:35 »
Hola Che Pablolbap, has estado poco sagaz Chango, ...
te dejo una simulación del proteus al respecto, unas resistencias y un par de diodos solucionan el problema, obvio hay  que emplear dos líneas del ADC y operarlas para lograr el resultado.

También se puede hacer como te indicaron pero esto es más sencillo.
Te advierto que el LM35 es poco práctico, no se puede emplear cables largos, en mi caso más de 20cm y mide cualquier cosa. Terminé con los 100% digitales, esos DS18S20.  Adio.

Olvido: siempre me pregunte como le irá al plástico del encapsulado por arriba de los 100c y llegando a los 150c como pregonan, idem con los -50c debe ser super frágil.

« Última modificación: 19 de Junio de 2015, 13:26:07 por AleSergi »

Desconectado Pablolbap

  • PIC10
  • *
  • Mensajes: 37
Re: Termómetro con LM35
« Respuesta #4 en: 19 de Junio de 2015, 14:04:04 »
Gracias por responder juaperser1 y AleSergi. Más claro no puede estar y aunque me tardaré un poco lo lograré realizar gracias a su valiosa ayuda. Sé que en TODOPIC, por lo que he visto todos están muy avanzados, por eso agradezco sobremanera que se tomen su tiempo para responder cuestiones básicas, pero que para mí son muy importantes.
Un saludo cordial y cuando lo tenga lo subo por si le sirve a alguien que comience en esto como su servidor.  (((:-)))

Desconectado Pablolbap

  • PIC10
  • *
  • Mensajes: 37
Re: Termómetro con LM35
« Respuesta #5 en: 19 de Junio de 2015, 18:53:46 »
Quedó funcionando desde -55°C hasta 106°C y creo que es demasiado para mí.
Gracias nuevamente a quienes colaboraron y a quien lea esto:


//Termometer.
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
int lm_35, v1, v2, temp;
char txt[15];
void main(){
OSCCON=0x40;                 // Oscilador interno a 1Mhz.
while (OSCCON.IOFS==0); //Esperar mientras el oscilador se estabiliza.
PORTA=0x00;                    //Inicialización.
ANSEL=0x0F;                     //Pin RA0/AN0, RA1/AN1, RA2/AN2 y RA3/AN3 como entradas analógicas.
//ADCON1=0x08;               //Configura AVcc y Vref-.
TRISA=0x0F;                     //Pin RA0/AN0, RA1/AN1, RA2/AN2 y RA3/AN3 como entradas.
Lcd_Init();                         //Inicializa el LCD.
Lcd_Cmd(_LCD_CLEAR);         //Borra el display.
Lcd_Cmd(_LCD_CURSOR_OFF);    //Apaga el cursor.
Lcd_Out(1,2, "Temperatura"); //Muestra rótulo.
Lcd_Out(2,12, "C");           //Muestra temperatura.
do {
   v1=ADC_Read(0);         //Obtiene 10 bits de la conversión del canal 2.
   v2=ADC_Read(1);
   if (v1 > v2)
      lm_35=v1 - v2;
   else if(v1 < v2)
      lm_35 = -(v1 + v2);
      else
         lm_35 = 0;
   temp=(lm_35*150)/307;  //Convierte lectura en grados centígrados.
   IntToStr(temp,txt);
   Lcd_Out(2,5, txt);
}while(1);
}

Desconectado Pablolbap

  • PIC10
  • *
  • Mensajes: 37
Re: Termómetro con LM35
« Respuesta #6 en: 20 de Junio de 2015, 14:12:07 »
Ahora viene la segunda pregunta:
¿Porqué no lee bien de 107°C a 150°C? Dirán que para qué necesito tanto. Es más con fines didácticos que para aplicarlo en la realidad. Ya que para lo que lo quiero (refrigeración) me basta y sobra de -30°C a 30°C. Como dijo AleRegi es dudoso que ese tipo de encapsulado soporte temperaturas tan extremas. Si logro que me lea hasta 150°C lo voy a meter al fuego y les cuento, jeje.
Hasta 106 lee bien luego muestra: -105, -104, -103, ... , 64, 63, 62. Como si en 106 se replegara.
La lectura del LM35 está bien, creo que es cuestión del programa como algo de la configuración.
He probado con otros Vref+ y lo mismo.
No me urge (no es tarea), pero sí quiero resolverlo para ir entendiendo más el ADC.
Saludos cordiales y gracias por su valioso tiempo. :)


 

anything