Interfacing LM35 with 8051

Status
Not open for further replies.

niteshtripathi

Member level 3
Joined
Oct 11, 2013
Messages
59
Helped
0
Reputation
0
Reaction score
0
Trophy points
6
Activity points
429
I want to glow a LED when temp ig greater than 35'C. where should i add this logic.Pls hehp. My program is as :

Code:
#include<reg51.h>
#define port P3
#define adc_input P1
#define dataport P2
#define sec 100
sbit rs = port^0;
sbit rw = port^1;
sbit e = port^2;

sbit wr= port^3;
sbit rd= port^4;
sbit intr= port^5;

sbit buzzer= port^6;

int test_intermediate3=0, test_final=0,test_intermediate1[10],test_intermediate2[3]={0,0,0};

void delay(unsigned int msec )
{
    int i ,j ;
    for(i=0;i<msec;i++)
        for(j=0; j<1275; j++);
}

void lcd_cmd(unsigned char item)   
{
    dataport = item;
    rs= 0;
    rw=0;
    e=1;
    delay(1);
    e=0;
    return;
}

void lcd_data(unsigned char item)   
{
    dataport = item;
    rs= 1;
    rw=0;
    e=1;
    delay(1);
    e=0;
    return;
}

void lcd_data_string(unsigned char *str)  
{
    int i=0;
    while(str[i]!='\0')
    {
        lcd_data(str[i]);
        i++;
        delay(10);
    }
    return;
}

void shape()       
{
    lcd_cmd(64);
    lcd_data(2);
    lcd_data(5);
    lcd_data(2);
    lcd_data(0);
    lcd_data(0);
    lcd_data(0);
    lcd_data(0);
    lcd_data(0);
}
       
void convert()     
{
    int    s;
    lcd_cmd(0x81);      
    delay(2);
    lcd_data_string("TEMP:");
    test_final=(((9*test_intermediate3)/5)+32);
    s=test_final/100;
    test_final=test_final%100;
    lcd_cmd(0x88);
    if(s!=0)
    lcd_data(s+48);
    else
    lcd_cmd(0x06);
    s=test_final/10;
    test_final=test_final%10;
    lcd_data(s+48);
    lcd_data(test_final+48);
    lcd_data(0);
    lcd_data('F');
    lcd_data(' ');

    test_final=test_intermediate3;
    lcd_cmd(0xc1);        //Setting  cursor to first position of first line
    delay(2);
    lcd_data_string("TEMP:");
    s=test_final/100;
    test_final=test_final%100;
    lcd_cmd(0xc8);
    if(s!=0)
    lcd_data(s+48);
    else
    lcd_cmd(0x06);
    s=test_final/10;
    test_final=test_final%10;
    lcd_data(s+48);
    lcd_data(test_final+48);
    lcd_data(0);
    lcd_data('c');
    lcd_data(' ');
    delay(2);
	if(test_final>35)
	{
		buzzer=1;
	}
}

void main()
{
    int i,j;
	buzzer=0;
    adc_input=0xff;
    lcd_cmd(0x38);        
    lcd_cmd(0x0c);        
    delay(2);
    lcd_cmd(0x01);       
    delay(2);

    while(1)
    {
        for(j=0;j<3;j++)
        {
            for(i=0;i<10;i++)
            {
                delay(1);
                rd=1;
                wr=0;
                delay(1);
                wr=1;
                while(intr==1);
                rd=0;
                lcd_cmd(0x88);
                test_intermediate1[i]=adc_input/10;
                delay(1);
                intr=1;
            }
            for(i=0;i<10;i++)
            test_intermediate2[j]=test_intermediate1[i]+test_intermediate2[j];
        }

        test_intermediate2[0]=test_intermediate2[0]/3;
        test_intermediate2[1]=test_intermediate2[1]/3;
        test_intermediate2[2]=test_intermediate2[2]/3;
        test_intermediate3=test_intermediate2[0]+test_intermediate2[1]+test_intermediate2[2];
        shape();
        convert();	 

    }
}
 
Last edited by a moderator:

ok when u debug this code what is the value of test_intermediate3 and test_final given and also where is the led put in your code?
and also if in your code
Code:
if(test_final>35)
{
buzzer=1;
}
this is working or not?
 

ok when u debug this code what is the value of test_intermediate3 and test_final given and also where is the led put in your code?
and also if in your code
Code:
if(test_final>35)
{
buzzer=1;
}
this is working or not?

if(test_final>35)
{
buzzer=1;
}

i have used this one in my program but its not working
 

ok when u debug this code what is the value of test_intermediate3 and test_final given and also where is the led put in your code?
and also if in your code
Code:
if(test_final>35)
{
buzzer=1;
}
this is working or not?


If the above code is working, just define a pin for LED and in the main code just under that place you have buzzer ON like this:
buzzer=1;
LED=1;
}
 

i have included the LED option in your code .
But you need to check your conversion once again because it shows a large difference with actual temperature.
 

Attachments

  • code1.zip
    28 KB · Views: 49

but it is not simple interfacing bro because lm 35 is a 10mv/c type configuration . if 0 to 100 degree c then port has a 10 bit adc to convert this value on voltage at Vref . so in your code test_final > 35 is not actually 35 degree c. so find first perfact 1 degree c to voltage ? and what is the value of test_final ?
 

where is the ADC initialisation?
And where are you getting ADC values?
I don't thing any more meaning in your program...
 

i think he is using ADC chip in free running mode.i have already corrected the code to turn on led above a temperature 35D.cel.
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…