Digital Room thermometer

This article is about a simple ranges -55 to 150°C digital thermometer with 1°C resolution using ATMEGA32.The circuit is based on LM35 analog temperature sensor,  ATMEGA32 controller and a potentiometer that you might use for sensor calibration.the circuit is using inbuilt ADC feature of controller which converts the analogue output voltage of the LM35  to a proportional digital value suitable for the controller.The microcontroller performs necessary manipulations according to code and displays it numerically on 16*2 LCD module.

PROTEUS DESIGN

 

CODE

/*
 * room_temp.c
 *
 * Created: 8/7/2014 9:02:25 AM
 *  Author: rohit
 */ 
 
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#define lcdport PORTD
#define signal PORTB
#define en PB2
#define rw PB1
#define rs PB0
void lcdcmd(unsigned char cmd);
void lcdint();
void lcddata(unsigned char data);
void lcd_print(char * str);
void adc_init();
unsigned int adc_conversion();
void adc_convert(unsigned char);
unsigned char digit[3];
unsigned char value;
 
void adc_convert(unsigned char k)
{
unsigned int g;
g=(k/10);
digit[0]=(k%10);
digit[1]=(g%10);
digit[2]=(g/10);
lcddata(digit[2]+48);
lcddata(digit[1]+48);
lcddata(digit[0]+48);
lcdcmd(0x40); // address where first coustom character is stored
lcddata(10);
lcddata(17);
lcddata(17);
lcddata(10);
lcddata(0);
lcddata(0);
lcddata(0);
lcddata(0);
lcdcmd(0x87);// address of lcd where character to be displayed
lcddata(0x00);// display the character created at address 0x40
lcddata('C');
}
int main(void)
{
DDRD=0xff;//output port
DDRB=0b00011111;
lcdint();
adc_init();
lcd_print("welcome");
    while(1)
    {
lcdcmd(0x01);
lcdcmd(0x84);
adc_conversion();
    }
}
void adc_init()
{
ADMUX = (1<<REFS0);// AREF
ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);// ADC Enable and prescaler of 128
// 16000000/128 = 125000
}
 
unsigned int adc_conversion()
{
ADCSRA |= (1<<ADSC);// start convertion
while(ADCSRA & (1<<ADSC));// wait for conversion to complete
adc_convert(ADC/2);
_delay_ms(100);
}
void lcdint()
{
lcdcmd(0x38);
_delay_ms(1);
lcdcmd(0x01);
_delay_ms(1);
lcdcmd(0x0E);
_delay_ms(1);
}
void lcdcmd(unsigned char x)
{
lcdport=x;
signal|=(0<<rs)|(0<<rw)|(1<<en);
_delay_ms(1);
signal&=(0<<rs)|(0<<rw)|(0<<en);
_delay_ms(1);
}
void lcddata(unsigned char data)
{
lcdport= data;
signal|=(1<<rs)|(0<<rw)|(1<<en);
_delay_ms(1);
signal&=(1<<rs)|(0<<rw)|(0<<en);
_delay_ms(1);
}
void lcd_print(char * str)
{
unsigned char i = 0;
while(str[i]!=0)
{
lcddata(str[i]);
i++;
}
}
 

VIDEO

 

Category: 

Share

Who's new

  • ravirajpatil871...
  • shubhambajoria
  • yassir
  • demiholyman890954
  • scottgillum51169040

Get Notified

 

Share

We are Social

Syndicate

Subscribe to Syndicate