Transcript
Page 1: Tutorial membuat project termometer dan jam digital menggunakan codevision avr by muhammad kennedy ginting

Tutorial Membuat Project Termometer Dan Jam Digital Menggunakan Codevision AVR by Muhammad Kennedy Ginting

A. Deskripsi UmumAplikasi ini dapat menampilkan suhu dan jam digital. Dimana sensor suhu yang digunakan adalah LM35. Aplikasi ini merupakan gabungan dari aplikasi yaitu termometer dengan LM35 dan jam digital menggunakan LCD.

B. Spesifikasi Teknis Dan KarakteristikAplikasi pembacaan suhu (monitoring suhu) ini, menggunakan sensor LM35 yang merupakan sebuah sensor suhu dengan harga yang relatif murah dan output nya sudah berupa tegangan yang sudah linear.

Aplikasi ini tidak menggunakan RTC (Real Time Clock), sehingga ketika catu daya atau power supply dimatikan maka nilai dari jam digital tersebut akan menunjukan pukul “12:0:0″. Oleh karena itu saya tambahkan 3 buah push button untuk menset nilai tersebut.

C. Daftar Komponen1. Sistem Minimum Atmega16

ATmega16 IC 7805 Crystal 12MHz Kapasitor 22pF (2), 100nF (4), 100uF(2) 2 Resistor 1KΩ 4 Switch Button 1x40 Female Header 1x40 Male Header 1N4002

2. LCD 16x23. LM35 (Sensor Suhu)4. Potensiometer 1KΩ5. Battery 9V6. Downloader AVR

D. Prinsip Kerja Dan RangkaianCara kerja jam digital yang saya buat adalah menggunakan penampil LCD 2×16. Kemudian terdapat 3 buah pushbutton yaitu SET, UP dan DOWN. Tombol SET digunakan untuk menset jam, kemudian UP dan DOWN digunakan untuk menset nilai dari jam. Jika ingin menset menit maka harus menekan tombol SET kembali, begitu seterusnya untuk menset detik.

Page 2: Tutorial membuat project termometer dan jam digital menggunakan codevision avr by muhammad kennedy ginting

Menurut datasheet LM35, untuk kenaikan 1 derajat Celcius akan mengakibatkan perubahan 10mV terhadap output tegangannya. Dimana saat suhu 0° Celcius sensor ini mempunyai tegangan offset sebesar 0 V.

Disini saya akan melakukan pembacaan suhu dalam satuan derajat Celcius dengan range pengukuran 0°-100° Celcius. Sehingga tegangan output dari LM35 adalah 0-1 V.

Tegangan output tersebut sudah dapat dibaca oleh mikrokontroler melalui ADC tanpa diperlukan sebuah penguat tegangan. Aplikasi ini telah saya buat dalam bentuk real (sesungguhnya) dan juga saya simulasikan menggunakan Proteus. Skematic LM35 yang kemudian ditampilkan pada LCD dapat dilihat diatas.

Mikrokontroler Atmega16 memiliki fasilitas analog yang sudah build in didalam chip. Fitur internal ADC inilah yang menjadi salah satu kelebihan mikrokontroler ini jika dibandingan dengan beberapa jenis mikrokontroler lainnya.

Atmega memiliki resolusi ADC 10 bit (dapat juga menggunakan ADC 8 bit) dengan 8 channel (PA0-PA7) input ADC dan mendukung 16 macam penguat beda. ADC ini bekerja dengan teknik succecive approximation. Rangkaian internal ADC memiliki catu daya tersendiri yaitu pin AVCC.

Data hasil konversi ADC 10 bit (1024) adalah:ADC=(Vin*1024)/Vref

Jika ingin menggunakan ADC 8 bit maka tinggal meng-klik saja pada “use 8 bit“. “Volt Ref” merupakan sumber pemilihan tegangan referensi ADC, sedangkan “Clock” adalah banyaknya frekuensi sampling ADC. Dan “Auto Trigger Source” merupakan mode ADC yang akan digunakan.

Sedangkan instruksi untuk pembacaan ADC pada program CodeVision AVR adalah sebagai berikut:int ADC;//variabel ADC dengan tipe data integerADC=read_adc(0);//baca data ADC dari channel 0 (ADC0/PA1)

Page 3: Tutorial membuat project termometer dan jam digital menggunakan codevision avr by muhammad kennedy ginting

Berikut skematik dan cara setting di CodeVision AVR :

Gambar 1. Skematik Jam Digital dan Termometer

Gambar 2. Setting Clock dan Timer1

Page 4: Tutorial membuat project termometer dan jam digital menggunakan codevision avr by muhammad kennedy ginting

Gambar 3. Setting LCD dan ADC Listing Program :

/*****************************************************This program was produced by theCodeWizardAVR V2.05.3 StandardAutomatic Program Generator© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.http://www.hpinfotech.com

Project : Jam Digital Dan TermometerVersion : v.1Date : 11/08/2014Author : Muhammad Kennedy GintingCompany : Apartment 57Comments:

Chip type : ATmega16Program type : ApplicationAVR Core Clock frequency: 12,000000 MHzMemory model : SmallExternal RAM size : 0Data Stack size : 256*****************************************************/

unsigned char temp[6];int detik=0, menit=0, jam=12, indeks=6, adc_suhu;float suhu;

#include <mega16.h>#include <stdlib.h>#include <delay.h>

Page 5: Tutorial membuat project termometer dan jam digital menggunakan codevision avr by muhammad kennedy ginting

// Alphanumeric LCD functions#asm .equ __lcd_port=0x15 ;PORTC#endasm#include <alcd.h>

#define ADC_VREF_TYPE 0x00

// Read the AD conversion resultunsigned int read_adc(unsigned char adc_input)ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);// Delay needed for the stabilization of the ADC input voltagedelay_us(10);// Start the AD conversionADCSRA|=0x40;// Wait for the AD conversion to completewhile ((ADCSRA & 0x10)==0);ADCSRA|=0x10;return ADCW;

// Timer1 overflow interrupt service routineinterrupt [TIM1_OVF] void timer1_ovf_isr(void)// Reinitialize Timer1 valueTCNT1H=0xD23A >> 8;TCNT1L=0xD23A & 0xff;// Place your code heredetik++;adc_suhu=read_adc(0);

void jam_digital()if (detik==60) lcd_clear(); detik=0; menit++; if (menit==60) lcd_clear(); menit=0; jam++; if (jam==24) lcd_clear(); jam=0;

void tampil_lcd()

Page 6: Tutorial membuat project termometer dan jam digital menggunakan codevision avr by muhammad kennedy ginting

lcd_gotoxy(0,0); lcd_putsf(" Apartment 57"); itoa(jam,temp); //menampilkan JAM di LCD lcd_gotoxy(0,1); lcd_puts(temp); lcd_gotoxy(2,1); //menampilkan : lcd_putsf(":"); itoa(menit,temp); //menampilkan MENIT di LCD lcd_gotoxy(3,1); lcd_puts(temp); lcd_gotoxy(5,1); //menampilkan : lcd_putsf(":"); itoa(detik,temp); //menampilkan DETIK di LCD lcd_gotoxy(6,1); lcd_puts(temp); ftoa(suhu,1,temp); //menampilkan suhu lcd_gotoxy(9,1); lcd_puts(temp); lcd_gotoxy(13,1) ; lcd_putchar(0xdf);//menampilkan karakter derajat lcd_gotoxy(14,1) ; lcd_putsf("C");

void set_jam()if (PIND.0==0 && indeks==6) TIMSK=0x00; //MENGHENTIKAN TIMER delay_ms(300); indeks=5; while (PIND.0==1 && indeks==5) tampil_lcd(); if (PIND.1==0) delay_ms(300); jam=jam+10; if (jam>=24) jam=23; if (PIND.2==0) delay_ms(300); jam=jam-10; if (jam<=9)

Page 7: Tutorial membuat project termometer dan jam digital menggunakan codevision avr by muhammad kennedy ginting

lcd_clear(); if (jam<0) jam=0; if (PIND.0==0 && indeks==5) delay_ms(300); indeks=4; while (PIND.0==1 && indeks==4) tampil_lcd(); if (PIND.1==0) delay_ms(300); jam=jam+1; if (jam>=24) jam=23; if (PIND.2==0) delay_ms(300); jam=jam-1; if (jam<=9) lcd_clear(); if (jam<0) jam=0; if (PIND.0==0 && indeks==4) delay_ms(300); indeks=3; while (PIND.0==1 && indeks==3) tampil_lcd(); if (PIND.1==0) delay_ms(300); menit=menit+10; if (menit>=60)

Page 8: Tutorial membuat project termometer dan jam digital menggunakan codevision avr by muhammad kennedy ginting

menit=59; if (PIND.2==0) delay_ms(300); menit=menit-10; if (menit<=9) lcd_clear(); if (menit<0) menit=0;

if (PIND.0==0 && indeks==3) delay_ms(300); indeks=2; while (PIND.0==1 && indeks==2) tampil_lcd(); if (PIND.1==0) delay_ms(300); menit=menit+1; if (menit>=60) menit=59; if (PIND.2==0) delay_ms(300); menit=menit-1; if (menit<=9) lcd_clear(); if (menit<0) menit=0;

if (PIND.0==0 && indeks==2) delay_ms(300); indeks=1;

Page 9: Tutorial membuat project termometer dan jam digital menggunakan codevision avr by muhammad kennedy ginting

while (PIND.0==1 && indeks==1) tampil_lcd(); if (PIND.1==0) delay_ms(300); detik=detik+1; if (detik>=60) detik=59; if (PIND.2==0) delay_ms(300); detik=detik-1; if (detik<=9) lcd_clear(); if (detik<0) detik=0;

if (PIND.0==0 && indeks==1) delay_ms(300); indeks=0; while (PIND.0==1 && indeks==0) tampil_lcd(); if (PIND.1==0) delay_ms(300); detik=detik+1; if (detik>=60) detik=59; if (PIND.2==0) delay_ms(300); detik=detik-1; if (detik<=9) lcd_clear(); if (detik<0) detik=0;

Page 10: Tutorial membuat project termometer dan jam digital menggunakan codevision avr by muhammad kennedy ginting

indeks=6; TIMSK=0x04; //MEMULAI LAGI TIMER delay_ms(450);

void baca_suhu() suhu=(float)adc_suhu*500/1023;//perhitungan suhu menggunakan LM35

// Declare your global variables here

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=0xff;DDRD=0x00;

// Timer/Counter 0 initialization// Clock source: System Clock

Page 11: Tutorial membuat project termometer dan jam digital menggunakan codevision avr by muhammad kennedy ginting

// Clock value: Timer 0 Stopped// Mode: Normal top=0xFF// OC0 output: DisconnectedTCCR0=0x00;TCNT0=0x00;OCR0=0x00;

// Timer/Counter 1 initialization// Clock source: System Clock// Clock value: 11,719 kHz// Mode: Normal top=0xFFFF// OC1A output: Discon.// OC1B output: Discon.// Noise Canceler: Off// Input Capture on Falling Edge// Timer1 Overflow Interrupt: On// Input Capture Interrupt: Off// Compare A Match Interrupt: Off// Compare B Match Interrupt: OffTCCR1A=0x00;TCCR1B=0x05;TCNT1H=0xD2;TCNT1L=0x3A;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: DisconnectedASSR=0x00;TCCR2=0x00;TCNT2=0x00;OCR2=0x00;

// External Interrupt(s) initialization// INT0: Off// INT1: Off// INT2: OffMCUCR=0x00;MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initializationTIMSK=0x04;

// USART initialization// USART disabledUCSRB=0x00;

// Analog Comparator initialization// Analog Comparator: Off// Analog Comparator Input Capture by Timer/Counter 1: Off

Page 12: Tutorial membuat project termometer dan jam digital menggunakan codevision avr by muhammad kennedy ginting

ACSR=0x80;SFIOR=0x00;

// ADC initialization// ADC Clock frequency: 750,000 kHz// ADC Voltage Reference: AREF pin// ADC Auto Trigger Source: ADC StoppedADMUX=ADC_VREF_TYPE & 0xff;ADCSRA=0x84;

// SPI initialization// SPI disabledSPCR=0x00;

// TWI initialization// TWI disabledTWCR=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: 16lcd_init(16);

// Global enable interrupts#asm("sei")

while (1) // Place your code here baca_suhu(); jam_digital(); tampil_lcd(); set_jam();

Selamat Mencoba Good Luck !!!


Top Related