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

Download Tutorial membuat project termometer dan jam digital menggunakan codevision avr by muhammad kennedy ginting

Post on 22-Nov-2014

768 views

Category:

Engineering

22 download

Embed Size (px)

DESCRIPTION

Tutorial membuat project termometer dan jam digital menggunakan codevision avr by muhammad kennedy ginting. Disini akan juga diberikan l

TRANSCRIPT

<ul><li> 1. Tutorial Membuat Project Termometer Dan Jam Digital Menggunakan Codevision AVR by Muhammad Kennedy Ginting A. Deskripsi Umum Aplikasi 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 Karakteristik Aplikasi 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 Komponen 1. 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 16x2 3. LM35 (Sensor Suhu) 4. Potensiometer 1K 5. Battery 9V 6. Downloader AVR D. Prinsip Kerja Dan Rangkaian Cara kerja jam digital yang saya buat adalah menggunakan penampil LCD 216. 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. </li> <li> 2. 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 integer ADC=read_adc(0);//baca data ADC dari channel 0 (ADC0/PA1) </li> <li> 3. Berikut skematik dan cara setting di CodeVision AVR : Gambar 1. Skematik Jam Digital dan Termometer Gambar 2. Setting Clock dan Timer1 </li> <li> 4. Gambar 3. Setting LCD dan ADC Listing Program : /***************************************************** 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 : Jam Digital Dan Termometer Version : v.1 Date : 11/08/2014 Author : Muhammad Kennedy Ginting Company : Apartment 57 Comments: Chip type : ATmega16 Program type : Application AVR Core Clock frequency: 12,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/ </li> <li> 5. unsigned char temp[6]; int detik=0, menit=0, jam=12, indeks=6, adc_suhu; float suhu; #include #include #include // Alphanumeric LCD functions #asm .equ __lcd_port=0x15 ;PORTC #endasm #include #define ADC_VREF_TYPE 0x00 // Read the AD conversion result unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE &amp; 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 &amp; 0x10)==0); ADCSRA|=0x10; return ADCW; } // Timer1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { // Reinitialize Timer1 value TCNT1H=0xD23A &gt;&gt; 8; TCNT1L=0xD23A &amp; 0xff; // Place your code here detik++; adc_suhu=read_adc(0); } </li> <li> 6. 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() { 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(":"); </li> <li> 7. 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 &amp;&amp; indeks==6) { TIMSK=0x00; //MENGHENTIKAN TIMER delay_ms(300); indeks=5; while (PIND.0==1 &amp;&amp; indeks==5) { tampil_lcd(); if (PIND.1==0) { delay_ms(300); jam=jam+10; if (jam&gt;=24) { jam=23; } } if (PIND.2==0) { delay_ms(300); jam=jam-10; if (jam</li></ul>