Hello Sahabat Anak Kendali.
Artikel kali ini akan membahas tentang sensor Lm35, jika sebelumnya kita sudah bisa mengakses sensor LM35 dengan Arduino, tapi kali ini saya akan mencoba untuk mengaksesnya dengan atmega CVAVR
tidak ada perbedaan diantara keduanya, disini untuk pembacaan sensor nya menggunakan data Analog yang mana mana software CVAVR kita dapat mengturnya akan menggunakan 8bit atau 10bit,
sensor Lm35 memiliki 3 buah kaki dimana fungsi kaki itu, PIN 1
sedangkan untuk PIN 2 difungsikan sebagai keluaran yang akan memberikan tegangan analog pada mikrokontroller, untu PIN 3 difungsikan sebagai GND
sebelum itu saya akan menjelaskan tentang cara menggunakan Analog,
pada microcontroller Atmega terdapat pin AVCC dan AREF yang mana fungsi keduanya sama untuk sumber tegangan referensi pembacaan Analog,
jadi misalkan kita ingin membaca tegangan Analog dengan menggunakan referensi teganganya dari AREF yang mana AREF ini diberi tegangan 3.3V dan 10 bit berarti untuk perhitungan nilai ADC nya
Nilai_Adc = 5V/1023
jadi misal untuk mencari, berapa nilai adc saat mikrokontroller membaca 1V
bisa dijawab dengan 1V/5V x 1023
jadi apabila kita menggunakan tegangan referensi 5V berarti setiap cacahan => 5/1023 = 4,883mV.
dari sini kita mencari tau tentang karakteristik sensor LM35, sesuai datasheet LM35 ketika perubahan 1 derajat maka teganganya berubah 10mV sehingga :
1 C = 10mV / 4,883mV
1C = 2.0479
dan didapat rumus untuk program Sensor LM35 yaitu
Suhu = nilaiAnalogSensor / 2.0479
baiklah berikut adalah program yang saya buat
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 1/8/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <stdlib.h>
#include <delay.h>
// Alphanumeric LCD functions
#include <alcd.h>
#define ADC_VREF_TYPE 0x40
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
// Declare your global variables here
float suhu_c;
char temp [10];
int suhu;
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: ADC Stopped
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS – PORTC Bit 0
// RD – PORTC Bit 1
// EN – PORTC Bit 2
// D4 – PORTC Bit 4
// D5 – PORTC Bit 5
// D6 – PORTC Bit 6
// D7 – PORTC Bit 7
// Characters/line: 16
lcd_init(16);
while (1)
{
// Place your code here
suhu=read_adc(0x00);
suhu_c=(float)suhu*500/1023;
ftoa(suhu_c,3,temp);
lcd_gotoxy(5,0);
lcd_puts(temp);
lcd_gotoxy(14,0);
lcd_putchar(0xDF);
lcd_gotoxy(15,0);
lcd_putsf(“C”);
delay_ms(200);
}
}
oke mungkin cukup sekian apa yang bisa saya tulis kali ini, kurang lebih nya mohon maaf,
silahkan beri masukan kritikan, atau pertanyaan di kolom komentar!
keyword:
Cara Membaca Sensor suhu
membaca sensor suhu svavr
sensor lm35 cvavr
anak kendali
lm35
lm35 atmega
anak kendali sensor suhu