jam digital

download jam digital

of 19

description

laporan pembuatan jam digital untuk semester 2

Transcript of jam digital

I. Tujuan 1. Dapat mengaplikasikan jam digital dengan timer internal mikrokontroller AVR Atmega16.2. Dapat mengaplikasikan sistem yang dapat mengetahui arah putaran motor (CW / CCW) dengan menggunakan 2 buah sensor photointerrupter.3. Dapat membuat dan mengaplikasikan konfigurasi 3 buah switch push button dengan mode ADC. II. Teori Dasar1. Timer Timer & Counter merupakan fitur yang telah tertanam di mikrokontroler AVR yang memiliki fungsi terhadap waktu. Fungsi pewaktu yang dimaksud disini adalah penentuan kapan program tersebut dijalankan, tidak hanya itu saja fungsi timer yang lainnya adalah PWM, ADC, dan Oscillator.Prinsip kerja timer dengan cara membagi frekuensi (prescaler) pada clock yang terdapat pada mikrokontroler sehingga timer dapat berjalan sesuai dengan frekuensi yang di kehendaki.Timer merupakan fungsi waktu yang sumber clocknya berasal dari clock internal. Sedangkan counter merupakan fungsi perhitungan yang sumber clocknya berasal dari external mikrokontroler. Salah satu contoh penggunaan fungsi timer yaitu pada jam digital yang sumber clocknya bisa menggunakan crystal oscillator dan contoh penggunaan counter pada penghitung barang pada konveyor yang sumber clocknya berasal dari sensor yang mendeteksi barang tersebut.Pada mikrokontroler ATMEGA 16 memiliki 3 buah timer yaitu timer 0 (8bit), timer1 (16bit), dan timer 2 (8bit). Untuk mengenai register lengkapnya bisa dibaca pada datasheet. Namun yang akan dibahas pada tulisan kali ini hanya timer 0(8bit) dan timer1 (16 bit) saja.Register yang Digunakan untuk Timer & Counter TCNT0 = Register Timer 1 TCNT 1 = Register Timer 0 Ttimer0 = Periode Timer 0 Ttimer 1 =Periode Timer 1 Tosc = Periode Clock Fosc = Frekuensi Crystall Clock N = Prescaler (1, 8, 64, 256, 1024)2. ADC (Analog to digital converter)ADC (Analog Digital Converter) merupakan fitur pada mikrokontroler yang berfungsi untuk mengkonversi sinyal/data dari besaran analog menjadi besaran digital. ADC memiliki 2 faktor penting pada penggunaannya yaitu Kecepatan Sampling dan Resolusi. Dimana kecepatan sampling ini berpengaruh terhadap seberapa banyak sinyal analog yang di konversi ke sinyal digital dalam satuan waktu. Satuan waktu yang digunakan yaitu SPS (Sample per Second). Sedangkan resolusi ADC berpengaruh terhadap ketelitian hasil konversinya. Resolusi pada mikrokontroler AVR ada 2 yaitu resolusi 8 bit dan 10 bit.ATMEGA 16 memiliki 8 channel ADC yang ber-resolusi 8 bit dan 10 bit. Yang dimaksud 8 channel adalah pada PORTA, PORT0 sampai PORT 7 (8 PORT). Jadi rentang nilai pada 8 bit sebesar 2^8 = 256 dan pada 10 bit sebesar 2^10 = 1024. Nilai analog yang digunakan untuk acuan konversi dari mikrokontroler sebesar 5V. Nilai ini juga dapat diubah tergantung dengan kebutuhan dari referensi analog yang kita gunakan. Pada mikrokontroler ATMEGA 16 tegangan referensi dapat diaktifkan melalui pin AREF dan AVCC yang sebelumnya telah diberikan tegangan.Jadi jika nilai konversi ADC ke digital seperti berikut :a. Nilai 0 pada ADC akan menghasilkan tegangan 0 Voltb. Nilai 512 pada ADC akan menghasilkan tegangan 2.5 Voltc. Nilai 1024 pada ADC akan menghasilkan tegangan 5 Volt3. LCD (Liquid Crystal Display)LCD (Liquid Crystal Display) adalah suatu jenis media tampil yang menggunakan kristal cair sebagai penampil utama. LCD sudah digunakan diberbagai bidang misalnya alalalat elektronik seperti televisi, kalkulator, atau pun layar komputer. Pada postingan aplikasi LCD yang dugunakan ialah LCD dot matrik dengan jumlah karakter 2 x 16. LCD sangat berfungsi sebagai penampil yang nantinya akan digunakan untuk menampilkan status kerja alat. Fitur LCD 16 x 2 Adapun fitur yang disajikan dalam LCD ini adalah : a. Terdiri dari 16 karakter dan 2 baris. b. Mempunyai 192 karakter tersimpan. c. Terdapat karakter generator terprogram. d. Dapat dialamati dengan mode 4-bit dan 8-bit. e. Dilengkapi dengan back light.

Gambar 2.1. LCD 16x24. Rotary EncoderEncoder terdiri dari dua track atau single track dan dua sensor yang disebut channel A dan B. Ketika poros berputar, deretan pulsa akan muncul di masing-masing channel pada frekuensi yang proporsional dengan kecepatan putar sedangkan hubungan fasa antara channel A dan B menghasilkan arah putaran. Dengan menghitung jumlah pulsa yang terjadi terhadap resolusi piringan maka putaran dapat diukur. Untuk mengetahui arah putaran, dengan mengetahui channel mana yang leading terhadap channel satunya dapat kita tentukan arah putaran yang terjadi karena kedua channel tersebut akan selalu berbeda fasa seperempat putaran (quadrature signal). Seringkali terdapat output channel ketiga, disebut INDEX, yang menghasilkan satu pulsa per putaran berguna untuk menghitung jumlah putaran yang terjadi.

Gambar 2.2. Output phase rotary encoder5. Seven Segment Common ChatodaSeven segment. Sebenarnya seven segment tersusun dari 8 buah led yang dibentuk menyerupai angka 8 yang terdiri dari 7 segmen dan ditambah 1 segmen berupa titik (dot). Seven segment terdiri dari 2 jenis konfigurasi yaitu katoda bersama atau common cathoda (CC) dan anoda bersama atau common anoda (CA) . Dari gambar dibawah sudah dapat langsung bisa diketahui. Jika common Anode, dimana sisi anoda pada LED tiap segmennya digabungkan (common) sehingga sering disebut katoda bersama..CA (common anoda) mempunyai perbedaan yang mendasar yaitu cara untuk mengaktifkan/menyalakan tiap segmennya.untuk CA agar segmennya dapat menyala harus diberi logila LOW (GND).

Gambar 2.3. Seven Segment Common Anoda

III. Konfigurasi Rangkaian Jam Digital

Gambar 3.1. Rangkaian Jam Digital.Rangkaian diatas adalah skematik dari rangkaian jam digital, dimana rangkaian diatas menggunakan mikrokontroller AVR Atmega 16, kemudian sebagai tampilan / display dari jam digital menggunakan seven segment 4 digit dengan led sebagai detik, jam digital diatas mempunyai tiga buah switch yang berfungsi sebagai input digital, untuk mengatur jam / waktu. Sebagai sumber tegangan atau power supply jam digital ini menggunakan battery CR2032 dengan domain tegangan 3V. ini dimaksudkan untuk mengefisiensi penggunaan daya pada sebuah sistem mikrokontroller.

Arah Motor DC

Gambar 3.2. Rangkaian Arah Putaran Motor.

Rangkaian diatas adalah rangkaian untuk mengetahui arah putaran motor dengan menggunakan mikrokontroller AVR Atmega16, dengan dua buah sensor photointerrupter sebagai input pulsa yang masuk ke mikrokontroller.Rangkaian ini dilengkapi dengan dua buah display led yang memberikan informasi arah putaran motor, pada rangkaian ini power supply yang digunakan dibangnun dari sebuah battery 6F22NT - 9V dan reduce menggunakan regulator 7805 menjadi 5 Volt.Pada rangkaian ini ditambahkan 3 switch yang dibuat dengan menggunakan mode ADC untuk menyalakan led, dengan tujuan untuk mengetahui prinsip kerja penggunaan fitur ADC sebagai penghematan penggunaan pin pada mikrokontroler. IV. Codevision AVR

Gambar 4.1. Codevision AVR.Compiler yang digunakan menggunakan bahasa tingkat tinggi yaitu bahasa C, Codevision Avr adalah sebuah software compiler yang menggunakan wizard sebagai interface dalam pengaturan konfigurasi mikrokontroller pada jam digital yang dibuat konfigurasi yang dilakukan yaitu menyetting PORT IO yang digunakan, Kemudian menyetting konfigurasi Timer Internal sebagai pewaktu.Dimana Timer 1 digunakan sebagai detak per satu detik dengan mode CTC, dan Timer 2 digunakan untuk scanning dengan interval 20ms, jadi terdapat dua buah interrupt timer yang digunakan pada program jam digital yang dibuat.Konfigurasi Codewizard jam digital :1. Pengaturan internal crystal, menggunakan software Sinaprog

Gambar 4.2. Setiing Chip Mikrokontroller dan Crystal.

2. Pengaturan Mikrokontroller yang digunakan dan crystal,a. Mikrokontroller AVR Atmega8.b. Crystal Internal 8Mhz.

Gambar 4.3. Setiing Chip Mikrokontroller dan Crystal.

3. Pengaturan PORT IO,a. PORTB.0 - .2 >> Sebagai input dari switch. PORT .3 6 output scaningb. PORTD >> Sebagai Output (untuk menampilkan karakter pada 7 Seg. Gambar 4.3. Konfigurasi PORT I/O.4. Konfigurasi Timer 1 a. Timer 1 sebagai interval pewaktuan satu detik.b. Prescaller 1024.Nilai Value didapat dari (1/4000 Hz) x 65536 x 1024 = 61630 D (F0BE hex), Nilai ini lah yang digunakan sebagai nilai TOP dari proses pencacahan register TCNT1. Interrupt Timer 1 diaktifkan agar pada saat pencacahan sudah mencapai nilai TOP akan ada flag yang digunakan sebagai counter pada detik pada jam digital.

Gambar 4.4. Konfigurasi Timer 1

Timer 1 yang digunakan untuk mencacah naik (counting-up) hingga mencapai TOP (nilai TCNT1 sama dengan nilai OCR1x yang kita tentukan.) lalu kemudian TCNT1 nol lagi yang akan otomatis menset flag OCF1 dan akan membangkitkan interrupsi timer 1 comapare match jika diaktifkan.PORTB.4 7 digunakan sebagai scaning 4 seven segment. Dimana selisih waktu scaning adalah 25 ms. Dan PORTD digunakan sebagai pengirim data kombinasi data hexa untuk menghasilkansebuah karakter angka pada seven segment.Dan PORTB.2-3 adalah input sinyal switch untuk mengatur jam. Dengan setingan low 0.

Arah Motor DC

Gambar 3.2. Rangkaian Arah Putaran Motor.

Rangkaian diatas adalah rangkaian untuk mengetahui arah putaran motor dengan menggunakan mikrokontroller AVR Atmega16, dengan dua buah sensor photointerrupter sebagai input pulsa yang masuk ke mikrokontroller.Rangkaian ini dilengkapi dengan dua buah display led yang memberikan informasi arah putaran motor, pada rangkaian ini power supply yang digunakan dibangnun dari sebuah battery 6F22NT - 9V dan reduce menggunakan regulator 7805 menjadi 5 Volt.Pada rangkaian ini ditambahkan 3 switch yang dibuat dengan menggunakan mode ADC untuk menyalakan led, dengan tujuan untuk mengetahui prinsip kerja penggunaan fitur ADC sebagai penghematan penggunaan pin pada mikrokontroler.

1. Arah Motor DC

Pada sistem arah putaran motor DC digunakan mikrokontroller Atmega16 sebagai kontroller, sebagai input untuk mengetahui arah dari putaran motor digunakan dua buah photo interrupter yang dipasang sehingga terdapat perbedaan pulsa sekitar 90 derajat. Mikrokontroller akan mengetahui arah putaran motor dari dua buah input ini.Untuk memahami penggunaan fungsi ADC maka ditambahkan mekanisme penyalaan LED dengan menggunakan dua buah input digital, dimana hannya membaca setiap bit yang masuk dan memberi informasi pada output led. Selain itu alat ini juga dilengkapi dengan sebuah mekanisme swich ADC, dimana ada tiga buah switch push button dirancang dengan hanya menggunakan sebuah input ADC. Dari rangkaian adc diatas didapat subuah hasil pengukuran tegangan :

a. Switch1 jika ditekan menghasilkan tegangan keluaran 1,48v jika dikonversi kedalam ADC 10 bit maka (2,8v/5v ) * 1024 = 303.b. Switch2 jika ditekan menghasilkan tegangan keluaran 2,12v jika dikonversi kedalam ADC 10 bit maka (1,2v/5v ) * 1024 = 434.c. Switch3 jika ditekan menghasilkan tegangan keluaran 3,69v jika dikonversi kedalam ADC 10 bit maka (0v/5v ) * 1024 = 0.Nilai ADC tadi dibuat treshold untuk menentukan switch mana yang sedang ditekan. Akan ada perbedaan tegangan antara switch yang satu dan switch yang lainnya Switch ini digunakan untuk menyalakan LED, V. LampiranListing Program Jam Digital/*****************************************************This program was produced by theCodeWizardAVR V2.04.4a AdvancedAutomatic Program Generator Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l.http://www.hpinfotech.com

Project : Version : Date : 06/01/2015Author : NeVaDaCompany : Comments:

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

#include #include int detik=0, menit=0, jam=17, temp_jam, temp_menit, ubah, indeks=4; //data_7segment;int menit_satuan, menit_puluhan, jam_satuan, jam_puluhan;// Timer1 overflow interrupt service routineinterrupt [TIM1_OVF] void timer1_ovf_isr(void){// Reinitialize Timer1 valueTCNT1H=0xF0BD >> 8;TCNT1L=0xF0BD & 0xff;detik = detik + 1;PORTB.0=~PORTB.0;// Place your code here

}

// Declare your global variables herevoid ubah_ke_format7segment()//fungsi untuk mengubah kedalam format 7segment{ if (ubah == 0){ubah=0xC0;} if (ubah == 1){ubah=0xCF;} if (ubah == 2){ubah=0x64;} if (ubah == 3){ubah=0x46;} if (ubah == 4){ubah=0x4B;} if (ubah == 5){ubah=0x52;} if (ubah == 6){ubah=0x50;} if (ubah == 7){ubah=0xC7;} if (ubah == 8){ubah=0x40;} if (ubah == 9){ubah=0x42;}}

void data_7segmen(){ temp_menit=menit; menit_satuan=temp_menit%10;//sisa dari pembagian disimpan di variabel satuan ubah=menit_satuan; ubah_ke_format7segment();//panggil fungsi mengubah kedalam format 7segment menit_satuan=ubah; temp_menit=temp_menit/10; menit_puluhan=temp_menit%10; ubah=menit_puluhan; ubah_ke_format7segment(); menit_puluhan=ubah; temp_jam=jam; jam_satuan=temp_jam%10; ubah=jam_satuan; ubah_ke_format7segment(); jam_satuan=ubah; temp_jam=jam/10; jam_puluhan=temp_jam%10; ubah=jam_puluhan; ubah_ke_format7segment(); jam_puluhan=ubah;}

void tampil_1(){ PORTB.4=1;//menyalakan digit3 PORTB.5=0; PORTB.6=0; PORTB.7=0; PORTD=jam_puluhan;//mengirimkan data kedigit5 delay_ms(3);} void tampil_2() { PORTB.4=0;//menyalakan digit3 PORTB.5=1; PORTB.6=0; PORTB.7=0; PORTD=jam_satuan;//mengirimkan data kedigit6 //PORTA.7=PORTC.7^dot;//indikator detik dengan menyalakan segment DOT pada digit ke2 delay_ms(3); } void tampil_3() { PORTB.4=0;//menyalakan digit3 PORTB.5=0; PORTB.6=1; PORTB.7=0; PORTD=menit_puluhan;//mengirimkan data kedigit7 delay_ms(3); } void tampil_4(){ PORTB.4=0;//menyalakan digit3 PORTB.5=0; PORTB.6=0; PORTB.7=1; PORTD=menit_satuan;//mengirimkan data kedigit8 delay_ms(3);}

void set_jam(){If (PINB.1==0) { TIMSK=0x00; //stop LAGI TIMER delay_ms(300); indeks=3; while (PINB.1==1) { data_7segmen(); tampil_4(); if (PINB.2==0) { delay_ms(300); menit=menit+1; if (menit>9) { menit=0; } } if (PINB.3==0) { delay_ms(300); menit=menit-1; if (menit50) { menit=0; } } if (PINB.3==0) { delay_ms(300); menit=menit-10; if (menit9) { jam=0; } } if (PINB.3==0) { delay_ms(300); jam=jam-1; if (jam20) { jam=0; } } if (PINB.3==0) { delay_ms(300); jam=jam-10; if (jam625 && input_adc289 && input_adc