Interfacing LM35 temperature sensor with PIC18F4550 microcontroller

Summary of Interfacing LM35 temperature sensor with PIC18F4550 microcontroller


This article details the interfacing of an LM35 temperature sensor with a PIC18F4550 microcontroller using CCS C. It explains the linear voltage-to-temperature relationship (10mV/°C) and provides the necessary circuit connections, hardware components, and conversion formulas to display real-time temperature on a 1602 LCD screen.

Parts used in the Interfacing PIC18F4550 with LM35:

  • PIC18F4550 microcontroller
  • LM35 temperature sensor
  • 1602 LCD screen
  • 10K ohm variable resistor
  • Breadboard
  • 5V voltage source
  • Jumper wires
Interfacing PIC18F4550 with LM35

This small topic shows the circuit diagram and CCS C code of the interfacing of LM35 temperature sensor with PIC18F4550 microcontroller.

Interfacing LM35 temperature sensor with PIC18F4550 microcontroller

The LM35 temperature sensor is three pin device (VCC, OUT and GND) with an output voltage linearly related to Centigrade temperature. Since the LM35 output varies with dependent to the temperature we need ADC (Analog-to-Digital Converter) module to measure this voltage. The ADC module converts analog data into digital data.
The LM35 output has linear +10mV/°C scale factor means the following:
If the output voltage =   10mV —> temperature =   1°C
If the output voltage = 100mV —> temperature = 10°C
If the output voltage = 200mV —> temperature = 20°C
If the output voltage = 370mV —> temperature = 37°C
and so on.
LM35 Futures (from datasheet):

  • Calibrated Directly in ° Celsius (Centigrade)
  • Linear + 10 mV/°C Scale Factor
  • 0.5°C Ensured Accuracy (at +25°C)
  • Rated for Full −55°C to +150°C Range
  • Suitable for Remote Applications
  • Low Cost Due to Wafer-Level Trimming
  • Operates from 4 to 30 V
  • Less than 60-μA Current Drain
  • Low Self-Heating, 0.08°C in Still Air
  • Nonlinearity Only ±¼°C Typical
  • Low Impedance Output, 0.1 Ω for 1 mA Load

Hardware Required:

  • PIC18F4550 microcontroller
  • LM35 temperature sensor  — datasheet
  • 1602 LCD screen
  • 10K ohm variable resistor
  • Breadboard
  • 5V voltage source
  • Jumper wires

Interfacing PIC18F4550 with LM35 sensor circuit:

The output of the LM35 temperature sensor is connected to analog channel 0 (AN0) of the PIC18F4550 microcontroller.
In this example the MCU uses its internal oscillator and MCLR pin function is disabled.
Interfacing PIC18F4550 with LM35 temperature sensor C code:
The C code below was tested with CCS PIC C compiler version 5.051.
Reading voltage quantity using the ADC gives us a number between 0 and 1023 (10-bit resolution), 0V is represented by 0 and 5V is represented by 1023. Converting back the ADC digital value is easy and we can use the following equation for that conversion:

Interfacing LM35 temperature sensor with PIC18F4550 microcontroller schematics
The output of the LM35 temperature sensor is connected to analog channel 0 (AN0) of the PIC18F4550 microcontroller.
In this example the MCU uses its internal oscillator and MCLR pin function is disabled.
Interfacing PIC18F4550 with LM35 temperature sensor C code:
The C code below was tested with CCS PIC C compiler version 5.051.
Reading voltage quantity using the ADC gives us a number between 0 and 1023 (10-bit resolution), 0V is represented by 0 and 5V is represented by 1023. Converting back the ADC digital value is easy and we can use the following equation for that conversion:
Voltage (in Volts) = ADC reading * 5 / 1023
Multiplying the previous result by 100 (LM35 scale factor is 10mV/°C = 0.01V/°C) will gives the actual temperature:
Temperature(°C) = ADC reading * 0.489
where 0.489 = 500 / 1023
The complete C code is the one below.

/* Interfacing PIC18F4550 with LM35 analog temperature sensor CCS C code.
   Read LM35 datasheet to understand the code!
   http://ccspicc.blogspot.com/
   [email protected]
*/

//LCD module connections
#define LCD_RS_PIN      PIN_D0
#define LCD_RW_PIN      PIN_D1
#define LCD_ENABLE_PIN  PIN_D2
#define LCD_DATA4       PIN_D3
#define LCD_DATA5       PIN_D4
#define LCD_DATA6       PIN_D5
#define LCD_DATA7       PIN_D6
//End LCD module connections

#include <18F4550.h>
#fuses NOMCLR, INTRC_IO
#device ADC=10
#use delay(clock = 8MHz)
#include <lcd.c>

char temperature[] = " 00.0 C";
unsigned int16 temp;
void main(){
  setup_oscillator(OSC_8MHZ);                    // Set internal oscillator to 8MHz
  setup_adc(ADC_CLOCK_INTERNAL);                 // ADC Module uses its internal oscillator
  setup_adc_ports(AN0);                          // Configure AN0 pin as analog
  set_adc_channel(0);                            // Select channel 0 (AN0)
  lcd_init();                                    // Initialize LCD module
  lcd_putc('\f');                                // Clear LCD
  lcd_gotoxy(3, 1);                              // Go to column 3 row 1
  printf(lcd_putc, "Temperature:");
  temperature[5]  = 223;                         // Put degree symbol (°)
  while(TRUE){
    delay_ms(1000);
    temp = read_adc() * 0.489;                   // Read analog voltage and convert it to degree celsius (0.489 = 500/1023)
    if (temp > 99)
      temperature[0]  = 1 + 48;                  // Put 1 (of hundred)
    else
      temperature[0]  = ' ';                     // Put space
    temperature[1]  = (temp / 10) % 10  + 48;
    temperature[2]  =  temp % 10  + 48;
    lcd_gotoxy(5, 2);                            // Go to column 5 row 2
    printf(lcd_putc, temperature);               // Display LM35 temperature result
  }
}

The result

The result

Source: Interfacing LM35 temperature sensor with PIC18F4550 microcontroller

Quick Solutions to Questions related to Interfacing PIC18F4550 with LM35:

  • How does the LM35 output relate to temperature?
    The output voltage has a linear scale factor of +10mV per degree Celsius.
  • What ADC resolution is used in the code?
    A 10-bit resolution is used, where 0V equals 0 and 5V equals 1023.
  • Which pin is used for the LM35 output connection?
    The sensor output connects to analog channel 0 (AN0) of the microcontroller.
  • What equation converts the ADC reading to temperature?
    Temperature in degrees Celsius is calculated as ADC reading multiplied by 0.489.
  • What oscillator frequency is configured in the program?
    The internal oscillator is set to 8MHz.
  • Which compiler version was tested with this code?
    The code was tested with CCS PIC C compiler version 5.051.
  • What is the rated temperature range of the LM35 sensor?
    The sensor is rated for a full range from -55°C to +150°C.
  • How is the degree symbol displayed on the LCD?
    The value 223 is assigned to index 5 of the temperature character array.

About The Author

Ibrar Ayyub

I am an experienced technical writer holding a Master's degree in computer science from BZU Multan, Pakistan University. With a background spanning various industries, particularly in home automation and engineering, I have honed my skills in crafting clear and concise content. Proficient in leveraging infographics and diagrams, I strive to simplify complex concepts for readers. My strength lies in thorough research and presenting information in a structured and logical format.

Follow Us:
LinkedinTwitter