Saat kondisi awal, sensor LM35 akan mendeteksi suhu ruangan.
LCD akan menampilkan berapa suhu yang terdeteksi. kemudian,
bila suhu naik, LM 35 akan mendeteksi berapa derajat kenaikan suhunya. Bila mencapai set point yang telah diberikan/saat suhu
tertentu alarm akan menyala dan otomatis menghidupkan kipas
angin.
Chip type : ATmega8535
Program type : Application
AVR Core Clock frequency: 4.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
*****************************************************/
#include <mega8535.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>
int Temp, dataADC;
// sensor menggunakan LM35 Pin output terhubung dengan PINA.0 (pada mikrokontroller)
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.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);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void tampil (unsigned int dat) // rutin untuk menampilkan di LCD
{
unsigned int data;
//lcd_gotoxy(0,0);
dat%=100;
data = dat / 10;
data+=0x30;
lcd_putchar(data);
dat%=10;
data = dat + 0x30;
lcd_putchar(data);
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
char lcd_buf[81];
// 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=0xF0;
// 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=0x0F;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 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: Timer 2 Stopped
// Mode: Normal top=FFh
// 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;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x20;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 86.400 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x87;
// LCD module initialization
lcd_init(16);
lcd_gotoxy(3,0);
lcd_putsf("SENSOR SUHU");
lcd_gotoxy(5,1);
lcd_putsf("RUANGAN");
delay_ms(200);
delay_ms(300);
lcd_gotoxy(3,0);
lcd_putsf(" KELOMPOK 2 ");
delay_ms(200);
lcd_gotoxy(0,0);
lcd_putsf(" ");
lcd_gotoxy(3,0);
lcd_putsf("MOHON TUNGGU");
lcd_gotoxy(6,1);
lcd_putsf(" ");
delay_ms(500);
while (1)
{
// Place your code here
if (PORTB.7==1)
{
lcd_gotoxy (0,0);
lcd_putsf("ALARM:AKTIF/");
lcd_puts(lcd_buf);
//delay_ms(150);
}
else
{
lcd_gotoxy (0,0);
lcd_putsf("ALARM:MATI /");
lcd_puts(lcd_buf);
//delay_ms(100);
}
dataADC=read_adc(0); //pembacaan ADC pada PINA.0 (no1)
delay_ms(200);
lcd_gotoxy(14,0);
lcd_putsf("'C");
Temp=(dataADC*4.9/10); //conversi nilai ADC ke nilai Temperatur (no7)
lcd_gotoxy(12,0); //menentukan kordinat huruf pada LCD 2x16 (x,y) = (7,1) //artinya kolom ke 7 dan baris ke1 (no8)
tampil(Temp); //menampilkan nilai temp hasil dari no7 (no9)
delay_ms(150);
dataADC=read_adc(1); //pembacaan ADC pada PINA.0 (no1)
delay_ms(150);
lcd_gotoxy(0,1); //menentukan kordinat huruf pada LCD 2x16 (x,y) = (0,0) //artinya kolom ke 0 dan baris ke0 (no2)
lcd_putsf("Suhu : "); //menampilkan tulisan string "view data sensor" (jangan //lebih dari 16 character) (no3)
dataADC=read_adc(1); //pembacaan ADC pada PINA.0 (no1)
lcd_gotoxy(14,1);
lcd_putsf("'C");
Temp=(dataADC*4.9/10); //conversi nilai ADC ke nilai Temperatur (no7)
lcd_gotoxy(12,1); //menentukan kordinat huruf pada LCD 2x16 (x,y) = (7,1) //artinya kolom ke 7 dan baris ke1 (no8)
tampil(Temp);
delay_ms(150);
if (ACSR.5==0)
{PORTB.7=0;}
else
{PORTB.7=1;}
};
}
Komentar
Posting Komentar