Saturday, January 2, 2021

LM35 and LCD Temperature Displaying with PIC18F4550 in CCS PICC

Referring to ADC module of PIC18F4550, there are many analog output sensor to interfaces with this MCU. LM35 is a simple analog temperature sensor, creating analog voltage output representing its temperature conversion in degree Celsius. The step temperature from this device is 10 mV per degree Celsius. I don't want to put all its details here. For more information about using this device, please see this post.







00:00 / 00:00

In this post, LM35 connects to AN2 analog channel of the ADC. The MCU reads the analog voltage, converting it to temperature value in both degree Celsius and degree Fahrenheit.



PIC18F4550 interfaces to LM35 and LCD
A temperature reading of 31.2 degree Celsius.

A very simple LM35 comes in a transistor-like TO-92 package.

LM35DZ in TO-92 package.

C source code fed from GitHub.


#include<18f4550.h>
#device ADC=10
/*Use high speed clock no PLL prescaler
no system clock post scaler */
#fuses HS,PLL1,CPUDIV1
#use delay(clock=20M)
#define LCD_ENABLE_PIN PIN_B2
#define LCD_RS_PIN PIN_B0
#define LCD_RW_PIN PIN_B1
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
#include<lcd.c>
void adcConfig(void){
//RA3 As Input
set_tris_a(0x04);
//PORTD as output
set_tris_d(0x00);
//Set RA0...RA2 To Analog
setup_adc_ports(AN0_TO_AN2);
//Select ADC internal RC Clock
setup_adc(ADC_CLOCK_INTERNAL);
}
float getTemperature(void){
set_adc_channel(2);
delay_ms(1);
int16 analogValue=read_adc();
while(!adc_done());
float temperature = (analogValue*5.0)/1024;
temperature*=100;
return temperature;
}
void main(){
float temp;
lcd_init();
adcConfig();
while(1){
lcd_gotoXy(1,1);
printf(LCD_PUTC,"LM35 Temperature");
lcd_gotoXy(1,2);
temp=getTemperature();
printf(LCD_PUTC,"%0.1f%cC %0.1f%cF ",temp,223,((temp*1.8)+32),223);
delay_ms(250);
}
}
view raw lm35Lcd.c hosted with ❤ by GitHub

Click here to download the zip file of this example.

PIC18F4550 interfaces to LM35 and LCD
Schematic Diagram



No comments:

Post a Comment

Search This Blog

Labels

25AA010A (1) 8051 (7) 93AA46B (1) ADC (30) Analog Comparator (1) Arduino (15) ARM (6) AT89C52 (7) ATMega32 (56) AVR (57) CCS PICC (28) DAC (1) DHT11 (2) Display (105) Distance Sensor (3) DS18B20 (3) dsPIC (2) dsPIC30F1010 (2) EEPROM (5) Environment Sensor (4) esp8266 (1) I2C (29) Input/Output (67) Interrupt (19) Keil (5) Keypad (10) LCD (47) Master/Slave (1) MAX7221 (1) MCP23017 (5) MCP23S17 (4) Meter (3) MikroC (2) Motor (15) MPLABX (71) Nokia 5110 LCD (3) OLED (2) One-Wire (6) Oscillator (8) PCB (6) PCD8544 (3) PCF8574 (5) PIC (107) PIC12F (2) PIC16F628A (2) PIC16F630 (1) PIC16F716 (3) PIC16F818 (10) PIC16F818/819 (2) PIC16F84A (15) PIC16F876A (1) PIC16F877A (9) PIC16F88 (1) PIC16F887 (60) PIC18 (19) PIC18F1220 (4) PIC18F2550 (3) PIC18F4550 (12) PWM (11) RTC (8) Sensor (10) SH1106 (1) Shift Register (11) Shift Registers (3) SPI (24) STM32 (6) STM32 Blue Pill (6) STM32CubeIDE (6) STM32F103C8T6 (6) SysTick (3) temperature sensor (11) Thermometer (21) Timer/Counter (31) TM1637 (2) UART (7) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (94)