Perancangan Propeller Clock Digital Berbasis Mikrokontroler
TUGAS AKHIR
PERANCANGAN
PROPELLER CLOCK
DIGITAL
BERBASIS MIKROKONTROLER
Diajukan untuk memenuhi salah satu persyaratan dalam menyelesaikan pendidikan sarjana (S-1) pada Departemen Teknik Elektro
Oleh:
DEPARTEMEN TEKNIK ELEKTRO
FAKULTAS TEKNIK
UNIVERSITAS SUMATERA UTARA
MEDAN
2015
ROBIN
080402011
(2)
LEMBAR PENGESAHAN TUGAS AKHIR
PERANCANGAN PROPELLER CLOCK DIGITAL BERBASIS MIKROKONTROLER
Oleh:
1. Ketua Penguji : Ir. Kasmir Tanjung, M.T. ……….. ROBIN
080402011
Tugas Akhir ini diajukan untuk melengkapi salah satu syarat untuk mememperoleh gelar Sarjana Teknik pada
DEPARTEMEN TEKNIK ELEKTRO FAKULTAS TEKNIK
UNIVERSITAS SUMATERA UTARA MEDAN
Sidang pada tanggal 22 bulan April tahun 2015 di depan Penguji:
2. Anggota Penguji : Rahmad Fauzi, S.T., M.T. ……….. Disetujui oleh:
Pembimbing,
Ir. T. Ahri Bahriun, M.Sc NIP : 194905241985031001
Diketahui oleh:
Ketua Departemen Teknik Elektro FT USU,
NIP. 19540531198601100 Ir. SURYA TARMIZI KASIM, M.Si
(3)
i
ABSTRAK
Seiring perkembangan zaman, banyak cara untuk menampilkan waktu, tidak terbatas hanya pada jam analog atau jam digital yang sering dijual di pasaran. Salah satu contohnya adalah propeller clock, dimana prinsip dari jam ini adalah dengan
memutar sebaris LED yang dipasang berderet di atas sebuah papan PCB dengan kecepatan tinggi sehingga menghasilkan suatu efek persistence of vision dimana mata
kita seolah-olah melihat gambaran dari suatu jam.
(4)
KATA PENGANTAR
Puji dan syukur penulis ucapkan kepada Tuhan Yang Maha Esa atas rahmat dan karunia yang dilimpahkan-Nya sehingga penulis dapat menyelesaikan tugas akhir ini.
Terima kasih kepada kedua orang tua dan dan sanak saudara lainnya yang telah membesarkan, mendidik, dan memberikan dorongan baik moril maupun materiil sehingga penulis mempu menyelesaikan tugas akhir ini.
Selama masa perkuliahan sampai selesainya tugas akhir ini, banyak pihak yang telah membantu penulis dalam berbagai hal. Oleh karena itu dengan setulus hati penulis menyampaikan ungkapan terima kasih yang sebesar-besarnya kepada:
1. Bapak Ir. T. Ahri Bahriun, M.Sc selaku dosen pembimbing atas segala
bimbingan, ilmu, motivasi, dan nasihat selama mengerjakan tugas akhir ini.
2. Bapak Ir. Surya Tarmizi Kasim, M.Si selaku Ketua Departemen Teknik
Elektro FT-USU dan Bapak Rahmat Fauzi, S.T, M.T selaku Sekretaris Departemen Teknik Elektro FT-USU.
3. Seluruh staf pengajar Departemen Teknik Elektro FT-USU yang telah
memberikan ilmu kepada penulis semasa kuliah dan juga seluruh karyawan di Departemen Teknik Elektro FT-USU.
4. Teman-teman dekat semasa kuliah, Budiman Chandra, Denny, Yuyanto,
(5)
iii
5. Dwi Budi Prasetyo yang telah banyak membantu penulis dalam
menyelesaikan tugas akhir ini.
6. Teman-teman UKM Robotik Sikonek USU yang telah berbaik hati
meminjamkan ruangan dan peralatannya selama penulis menyelesaikan tugas akhir ini.
7. Teman-teman anggota laboratorium sistem pengaturan dan komputer,
Teguh, Reza, Arif, dan yang lainnya.
8. Rekan-rekan mahasiswa di departemen teknik elektro yang menjadi teman
belajar selama masa perkuliahan.
9. Berbagai pihak-pihak lainnya yang tidak dapat penulis sebutkan
satu-persatu.
Akhir kata, tugas akhir ini masih jauh dari sempurna karena masih banyak terdapat kesalahan dan kekurangan. Saran dan kritik dari pembaca sangat penulis harapkan agar dapat lebih baik ke depannya.
Medan, April 2015 Penulis
(6)
DAFTAR ISI
ABSTRAK ... i
KATA PENGANTAR... ii
DAFTAR ISI ... iv
DAFTAR GAMBAR ... vii
DAFTAR TABEL ... ix
BAB I PENDAHULUAN ... 1
1.1 Latar Belakang Masalah ... 1
1.2 Rumusan Masalah ... 1
1.3 Tujuan Penulisan ... 1
1.4 Batasan Masalah ... 2
1.5 Metodologi Penelitian ... 2
1.6 Sistematika Penulisan ... 3
BAB II DASAR TEORI ... 5
2.1 Persistence of Vision ... 5
2.2 Mikrokontroler ... 5
2.2.1 Mikrokontroler AVR ATMega8 ... 6
2.2.2 Konfigurasi Pena ATMega8 ... 10
2.2.3 Arsitektur Mikrokontroler ATMega8 ... 11
2.2.4 Peta Memori ATMega8 ... 12
2.2.4.1 Memori Program ... 13
2.2.4.2 Memori Data (SRAM) ... 13
2.2.4.3 Memori Data EEPROM ... 14
2.2.5 Serial Peripheral Interface (SPI) ... 15
2.2.6 Interupsi ... 15
(7)
v
2.4 LED Infrared... 17
2.5 Dioda Foto ... 18
2.6 Motor DC ... 18
2.7 CodeVision AVR ... 20
BAB III PERANCANGAN SISTEM ... 22
3.1 Spesifikasi Sistem ... 22
3.2 Perancangan Perangkat Keras ... 23
3.2.1 Mikrokontroler ATMega8 ... 24
3.2.2 RTC (Real Time Clock) DS 1307... 26
3.2.3 Push Button dan LED ... 27
3.2.4 Sensor Optik ... 29
3.2.5 Rangkaian Regulator Tegangan ... 30
3.2.6 Rangkaian Switching untuk ISP ( In System Programming) ... 34
3.3 Perancangan Perangkat Lunak ... 35
3.3.1 Sistem Perangkat Lunak secara Umum ... 36
3.3.2 Membaca Masukan dari Push Button ... 38
3.3.3 Konversi Karakter ke Tampilan LED ... 38
3.3.4 Interupsi Eksternal ... 39
BAB IV IMPLEMENTASI DAN PENGUJIAN ... 40
4.1 Implementasi ... 40
4.2 Pengujian... 41
4.2.1 Pengujian Catudaya Sistem ... 41
4.2.2 Pengujian Konsumsi Arus ... 42
4.2.3 Pengujian Sistem Minimum ... 43
4.2.4 Pengujian Sensor Optik ... 45
4.2.5 Pengujian Penampilan Karakter ... 46
4.2.6 Pengujian Sistem secara Keseluruhan ... 47
4.2.7 Pengujian Pengaruh Perubahan Tegangan Penggerak Motor terhadap Tampilan Karakter ... 48
(8)
5.1 Kesimpulan ... 50
5.2 Saran ... 50
DAFTAR PUSTAKA ... 52
LAMPIRAN A ... 53
(9)
vii
DAFTAR GAMBAR
Gambar 2.1 Diagram Blok Mikrokontroler AVR ATMega8... 9
Gambar 2.2 Konfigurasi Pena ATMega8...10
Gambar 2.3 Arsitektur Mikrokontroler ATMega8………. 12
Gambar 2.4 Peta Memori Program ATMega8………... 13
Gambar 2.5 Peta Memori data ATMega8……….. 14
Gambar 2.6 Susunan Pena RTC DS1307………... 16
Gambar 2.7 Simbol LED Inframerah………. 17
Gambar 2.8 Simbol Dioda Foto……….. 18
Gambar 2.9 Motor D.C Sederhana………. 19
Gambar 3.1 Blok Diagram Keseluruhan Sistem………. 23
Gambar 3.2 Hubungan RTC DS 1307 dengan Mikrokontroler……….. 27
Gambar 3.3 Hubungan Push Button dan LED dengan Mikrokontroler………. 28
Gambar 3.4 Rangkaian Sensor Optik………. 29
Gambar 3.5 Rangkaian Regulator Tegangan LM 7805……….. 34
Gambar 3.6 Rangkaian Switching……… 35
Gambar 3.7 Diagram Alir dari Perangkat Lunak……… 37
Gambar 4.1 Hasil Pengujian Catudaya Sistem……… 42
Gambar 4.2 Hasil Pengujian Konsumsi Arus………..43
Gambar 4.3 Hasil Pengujian Sistem Minimum……….. 44
Gambar 4.4 Hasil Pengujian Sensor Optik………. 45
(10)
Gambar 4.6 Hasil Pengujian Sistem secara Keseluruhan………... 47 Gambar 4.7 Hasil Pengujian Pengaruh Perubahan Tegangan Penggerak Motor terhadap Tampilan Karakter……..……….49
(11)
ix
DAFTAR TABEL
(12)
ABSTRAK
Seiring perkembangan zaman, banyak cara untuk menampilkan waktu, tidak terbatas hanya pada jam analog atau jam digital yang sering dijual di pasaran. Salah satu contohnya adalah propeller clock, dimana prinsip dari jam ini adalah dengan
memutar sebaris LED yang dipasang berderet di atas sebuah papan PCB dengan kecepatan tinggi sehingga menghasilkan suatu efek persistence of vision dimana mata
kita seolah-olah melihat gambaran dari suatu jam.
(13)
1 BAB I PENDAHULUAN
1.1 Latar Belakang Masalah
Berbagai jenis jam telah dijual di pasaran dengan berbagai bentuk, ukuran, dan cara penampilannya, tetapi masih sangat jarang ditemui jam yang menampilkan waktu dengan menerapkan prinsip persistence of vision dimana waktu ditampilkan
dengan memutar sebaris LED dengan kecepatan yang cukup tinggi sehingga mata manusia tidak dapat mengikutinya dan seolah-olah melihat tampilan karakter yang melayang di udara.
1.2 Rumusan Masalah
Dari latar belakang masalah diatas, timbul permasalahan bagaimana cara untuk menerapkan prinsip tersebut ke dalam sistem sehingga sistem yang dirancang dapat menampilkan waktu dengan baik. Oleh karena itu, dalam tugas akhir ini penulis akan merancang suatu sistem yang menggunakan prinsip tersebut untuk menampilkan waktu.
1.3 Tujuan Penulisan
Tugas akhir ini bertujuan untuk merancang suatu alat yang dapat menampilkan waktu secara digital hanya dengan menggunakan sebaris LED yang diputar dengan menerapkan prinsip persistence of vision.
(14)
1.4 Batasan Masalah
Agar pembahasan dalam Tugas Akhir ini tidak terlalu luas dan menyimpang, maka perlu diberikan batasan-batasan sebagai berikut :
1. Tidak membahas mengenai motor yang digunakan dan spesifikasinya.
2. Hanya menampilkan waktu secara digital.
3. Pengaturan waktu hanya dapat dilakukan ketika rangkaian dalam keadaan
diam.
4. Tidak membahas mengenai sensor optik secara mendalam.
5. Tundaan waktu yang digunakan didapat dengan metode trial and error.
6. Sistem yang dirancang tidak dimaksudkan untuk digunakan dalam waktu
yang lama.
1.5 Metodologi Penelitian
Adapun metodologi yang digunakan secara garis besar dapat dibagi menjadi empat tahap, yaitu :
1. Pemilihan komponen, yaitu memilih jenis motor, mikrokontroler, dan
komponen-komponen elektronik lainnya yang sesuai dengan kebutuhan.
2. Perancangan perangkat keras, yaitu membangun rangkaian seefisien dan
seefektif mungkin dan menghasilkan rangkaian yang dapat bekerja sesuai keinginan.
3. Perancangan perangkat lunak, yaitu penulisan kode program yang akan
ditanamkan ke dalam mikrokontroler sehingga rangkaian dapat bekerja sesuai yang diharapkan.
(15)
3
4. Pengujian dan perbaikan, yaitu menguji rangkaian yang telah dibuat dan
memperbaikinya jika terdapat kesalahan.
1.6 Sistematika Penulisan
Tugas akhir ini ditulis dengan sistematika penulisan sebagai berikut :
BAB I : PENDAHULUAN
Bab ini membahas secara umum tentang latar belakang penulisan, rumusan masalah, tujuan penulisan, batasan masalah, metodologi penulisan, dan sistematika penulisan dari tugas akhir.
BAB II : DASAR TEORI
Bab ini membahas secara umum tentang teori-teori dasar mengenai
persistence of vision, propeller clock, mikrokontroler, dan
komponen-komponen yang digunakan dalam rangkaian.
BAB III : PERANCANGAN SISTEM
Bab ini membahas tentang perancangan perangkat keras yaitu dengan membuat rangkaian di atas papan PCB dan perancangan perangkat lunak yaitu dengan membuat kode program dari sistem yang dirancang dalam tugas akhir ini.
BAB IV : IMPLEMENTASI DAN PENGUJIAN
Bab ini membahas tentang implementasi dan pengujian dari sistem yang telah dibuat.
(16)
BAB V : KESIMPULAN DAN SARAN
Bab ini berisi kesimpulan dari hasil pengujian dan saran untuk membuat sistem yang lebih baik.
(17)
5 BAB II DASAR TEORI
2.1 Persistence of Vision
Persistence of Vision adalah kemampuan mata untuk tetap melihat gambaran
dari suatu objek untuk sepersekian detik setelah objek menghilang dari pandangan. Gambaran dari suatu objek tetap tertinggal di retina meskipun kita telah selesai melihatnya. Mata dan otak kita sebenarnya mempertahankan kesan visual untuk sekitar 1/30 detik.
Prinsip dari persistence of vision digunakan dalam membuat gambar bergerak
dan animasi. Film dibuat dari sejumlah gambar terpisah, ditayangkan pada layar dengan kecepatan 24 gambar per detik. Ketika kita menontoh sebuah film, setiap gambar masih tertinggal di retina untuk waktu yang cukup lama sehingga bergabung dengan gambar berikutnya, dan kita akan mendapatkan ilusi berupa gambar bergerak.
Jika kita mengasumsikan bahwa kecepatan penampilan minimum agar mata kita dapat melihat efek persistence of vision adalah sebanyak 16 tampilan setiap detik,
maka jika prinsip tersebut diterapkan pada propeller clock, kecepatan minimum
motor yang digunakan agar dapat menghasilkan efek persistence of vision dimana
satu tampilan dihasilkan setiap satu putaran adalah sebesar 16 x 60 = 960 rpm.
2.2 Mikrokontroler
Mikrokontroler adalah suatu chip dengan kepadatan yang sangat tinggi,
(18)
satu keping, biasanya terdiri dari CPU (Central Proccesssing Unit), RAM (Random
Acess Memory), EEPROM/ EPROM/ PROM/ ROM, EEPROM/ EPROM/ PROM/
ROM, I/O, Timer dan lain sebagainya. Rata-rata mikrokontroler memiliki instruksi
manipulasi bit, akses ke I/O secara langsung dan mudah, dan proses interupsi yang cepat dan efisien.
Mikrokontroler sekarang ini sudah banyak dapat kita temui dalam berbagai peralatan elektronik, misalnya peralatan yang terdapat di rumah, seperti telepon digital, microwave oven, televisi, dan masih banyak lagi. Mikrokontroler juga dapat
kita gunakan untuk berbagai aplikasi misalnya untuk pengendalian suatu alat, otomasi dalam industri dan lain – lain. Keuntungan menggunakan mikrokontroler adalah harganya murah, dapat diprogram berulang kali, dan dapat diprogram sesuai dengan keinginan kita.
2.2.1 Mikrokontroler AVR ATMega8
Mikrokontroler AVR adalah mikrokontroler RISC 8 bit berdasarkan aristektur
Harvard, yang dibuat oleh Atmel pada tahun 1996. AVR memiliki keunggulan
dibandingkan dengan mikrokontroler lain, keunggulan AVR yaitu AVR memiliki kecepatan eksekusi program yang lebih cepat, karena sebagian besar instruksi
dieksekusi dalam 1 siklus clock, lebih cepat dibandingkan MCS51 yang
membutuhkan 12 siklus clock untuk mengeksekusi 1 instruksi. Mikrokontroler
ATMega8 memiliki fitur yang cukup lengkap. Selain itu, mikrokontroler ATMega8 juga beredar di pasaran sehingga lebih mudah didapatkan.
(19)
7
1. Performa tinggi dengan konsumsi daya yang rendah.
2. Arsitektur RISC yang meliputi:
a. 130 kode instruksi yang hampir semuanya hanya membutuhkan
satu clock untuk dieksekusi.
b. 32 x 8 buah register kerja kegunaan umum c. Pengoperasian full statik.
d. Kecepatan mengeksekusi sampai dengan 16 mega instruksi per
detik pada kecepatan clock 16 MHz.
e. Terdapat rangkaian pengali dua siklus di dalam chip. 3. Memori non-volatile dengan daya tahan yang tinggi.
a. Memori flash sebesar 8 Kbyte.
b. EEPROM 512 Byte.
c. SRAM internal 1 Kbyte.
d. Dapat dihapus-tulis sebanyak 10.000 kali untuk memori flash dan
100.000 kali untuk EEPROM.
e. Dapat menyimpan data selama 20 tahun pada suhu 85˚C atau 100
tahun pada suhu 25˚C.
f. Penguncian program untuk keamanan perangkat lunak.
4. Fitur-fitur periferal:
a. 2 buah timer/counter 8 bit. b. 1 buah timer/counter 16 bit.
c. Real Time Counter dengan osilator tersendiri.
(20)
e. 6 buah kanal ADC dengan akurasi 10 bit.
f. TWI.
g. USART.
h. SPI.
i. Watchdog timer yang dapat diprogram.
j. Komparator analog.
5. Fitur-fitur khusus mikrokontroler:
a. Power-on reset dan brown-out detection.
b. Osilator RC internal yang terkalibrasi. c. Sumber interupsi eksternal dan internal. d. 5 buah modus sleep.
6. 23 jalur I/O yang dapat diprogram.
7. Tegangan pengoperasian yaitu antara 4,5 – 5,5 Volt.
8. Kecepatan antara 0 – 16 MHz.
Adapun diagram blok dari mikrokontroler ATMega8 dapat dilihat pada Gambar 2.1.
(21)
9
(22)
2.2.2 Konfigurasi Pena ATMega8
Konfigurasi Pena ATMega8 untuk kemasan PDIP (Plastic Dual In-line
Package) 28 pena dapat dilihat pada Gambar 2.2.
Gambar 2.2 Konfigurasi Pena ATMega8
Adapun fungsi dari masing-masing pena ATMega8 adalah sebagai berikut:
1. VCC merupakan pena yang berfungsi sebagai masukan catu daya.
2. GND merupakan pena Ground
3. Port B (PB7..0) merupakan pena input/output dua arah dengan resistor pull-up
internal dan pena dengan fungsi khusus seperti
XTAL1/XTAL2/TOSC1/TOSC2.
4. Port C (PC6..0) merupakan pena input/output dua arah dengan resistor pull-up
internal.
5. Port D (PD7..0) merupakan pena input/output dua arah dengan resistor pull-up
(23)
11
6. RESET merupakan pena yang digunakan untuk me-reset mikrokontroler.
7. AVCC merupakan pena masukan tegangan untuk ADC.
8. AREF merupakan pena masukan tegangan referensi ADC.
2.2.3 Arsitektur Mikrokontroler ATMega8
ATMega8 menggunakan arsitektur Harvard dengan memisahkan antara
memori dan bus untuk program dan data untuk memaksimalkan kemampuan dan
kecepatan. Instruksi dalam memori program dieksekusi dengan pipelining single level
dimana ketika satu instruksi dieksekusi, instruksi berikutnya diambil dari memori program. Konsep ini mengakibatkan instruksi dieksekusi setiap siklus clock. CPU
terdiri dari 32x8 bit general purpose register yang dapat diakses dengan cepat dalam
satu siklus clock, yang mengakibatkan operasi Arithmetic Logic Unit (ALU) dapat
dilakukan dalam satu siklus. Pada operasi ALU, dua operand berasal dari register, kemudian operasi dieksekusi dan hasilnya disimpan kembali pada register dalam satu
siklus clock. Operasi aritmetik dan logika pada ALU akan mengubah bit-bit yang
terdapat pada Status Register (SREG). Arsitektur Mikrokontroler ATMega8 dapat
(24)
Gambar 2.3 Arsitektur Mikrokontroler ATMega8
2.2.4 Peta Memori ATMega8
ATMega8 memiliki dua memori utama, yaitu memori program dan memori
data. Memori program terletak pada In-System Reprogrammable Flash Program
Memory sedangkan memori data terbagi dua, yaitu memori data SRAM dan memori
(25)
13
2.2.4.1 Memori Program
ATMega8 memiliki 8Kbyte On-chip In-System Reprogrammable Flash
Memory untuk menyimpan program. Instruksi ATMega8 semuanya memiliki format
16 atau 32 bit, maka memori flash diatur dalam 8K x 16 bit. Memori flash dibagi
kedalam dua bagian, yaitu bagian program boot dan aplikasi seperti terlihat pada
Gambar 2.4. Bootloader adalah program kecil yang bekerja pada saat sistem dimulai
yang dapat memasukkan seluruh program aplikasi ke dalam memori prosesor.
Gambar 2.4 Peta Memori Program ATMega8
2.2.4.2 Memori Data (SRAM)
Memori data AVR ATMega8 terbagi menjadi 3 bagian, yaitu 32 register
(26)
menempati alamat data terbawah, yaitu $00 sampai $1F. Sedangkan memori I/O menempati 64 alamat berikutnya mulai dari $20 hingga $5F. Memori I/O merupakan register yang khusus digunakan untuk mengatur fungsi terhadap berbagai fitur mikrokontroler seperti kontrol register, timer/counter, fungsi-fungsi I/O, dan
sebagainya. 1024 alamat berikutnya mulai dari $60 hingga $45F digunakan untuk SRAM internal. Peta dari memori data ATMega8 dapat dilihat pada Gambar 2.5.
Gambar 2.5 Peta Memori data ATMega8
2.2.4.3 Memori Data EEPROM
ATMega8 terdiri dari 512 byte memori data EEPROM 8 bit, data dapat ditulis/dibaca dari memori ini, ketika catu daya dimatikan, data terakhir yang ditulis
(27)
15
pada memori EEPROM masih tersimpan pada memori ini, atau dengan kata lain
memori EEPROM bersifat non-volatile. Alamat EEPROM mulai dari $000 sampai
$511
2.2.5 Serial Peripheral Interface (SPI)
SPI pada ATMega8 digunakan untuk komunikasi serial dua arah antara pengirim dan penerima. Dalam SPI, pengirim dan penerima memiliki sumber penabuh yang sama. Hal ini membutuhkan jalur penabuh tambahan antara pengirim dan penerima tetapi memungkinkan tingkat transmisi data yang lebih tinggi. SPI dapat dilihat sebagai sebuah register geser 16-bit sinkron dengan setengah 8-bit berada di bagian pengirim dan setengah 8-bit lainnya berada di bagian penerima.
Pengirim dianggap sebagai master karena memberikan sumber penabuh sinkronisasi
antara pengirim dengan penerima sementara penerima ditunjuk sebagai slave.
2.2.6 Interupsi
Eksekusi program yang normal adalah mengikuti urutan instruksi dari program. Namun ada kalanya eksekusi tersebut terputus untuk menanggapi interupsi yang memiliki prioritas lebih tinggi yang berasal dari dalam maupun dari luar mikrokontroler. Ketika interupsi terjadi, mikrokontroler sementara harus menghentikan operasi normal dan melakukan tindakan-tindakan khusus yang disebut rutin layanan interupsi. Setelah interupsi selesai dilakukan maka mikrokontroler akan kembali mengeksekusi program normal yang terputus. ATMega8 dilengkapi dengan 19 buah sumber interupsi dimana tiga diantaranya merupakan sumber interupsi eksternal.
(28)
2.3 RTC (Real Time Clock) DS1307
RTC (Real Time Clock) DS1307 adalah IC yang dibuat oleh perusahaan
Dallas Semiconductor. DS1307 merupakan suatu IC yang dapat digunakan untuk menyimpan informasi waktu yang meliputi detik, menit, jam, hari, tanggal, bulan, dan tahun. Pengaksesan data dilakukan dengan sistem serial sehingga hanya
membutuhkan dua jalur untuk berkomunikasi yaitu jalur clock untuk membawa
informasi data penabuh dan jalur data yang membawa data. Susunan kaki-kaki dari DS1307 dapat dilihat pada Gambar 2.6.
Gambar 2.6 Susunan Pena RTC DS1307
Fungsi dari masing-masing pena DS1307 adalah sebagai berikut:
1. X1 dan X2 adalah pena yang dihubungkan dengan Kristal 32,768 KHz.
2. VBAT adalah pena yang dihubungkan dengan tegangan baterai +3V.
3. GND adalah pena yang dihubungkan dengan ground.
4. SDA adalah pena yang difungsikan sebagai jalur data. 5. SCL adalah pena yang difungsikan sebagai jalur clock.
6. SQW/OUT adalah pena yang digunakan sebagai keluaran sinyal kotak.
(29)
17
Untuk berkomunikasi dengan mikrokontroler ATMega8, RTC DS1307 menggunakan jenis komunikasi I2C.
2.4 LED Infrared
LED Infrared (LED inframerah) adalah suatu jenis dioda yang terbuat dari
bahan Gallium (Ga), Arsen (As), dan fosfor (P) yang apabila diberi tegangan maju maka arus majunya akan membangkitkan cahaya pada pertemuan PN-nya. Tegangan maju antara anoda-katoda berkisar antara 1,5 V – 2 V, sedangkan arus majunya berkisar antara 5 mA – 20 mA. Cahaya yang dibangkitkan oleh LED Inframerah adalah infra merah yang tidak dapat dilihat oleh mata. Led inframerah memancarkan
cahaya pada spektrum inframerah dengan panjang gelombang λ=940 nm. Spektrum
cahaya inframerah ini mempunyai level panas yang paling tinggi diantara sinar-sinar yang lain walaupun tidak tampak oleh mata dan mempunyai efek fotolistrik yang terkuat . Energi yang dihasilkan oleh LED inframerah tidak seluruhnya diubah menjadi bentuk energi cahaya atau foton melainkan dalam bentuk panas sebagian. Simbol dari LED inframerah dapat dilihat pada Gambar 2.7.
(30)
2.5 Dioda Foto
Dioda foto adalah jenis dengan diode biasa, kompone listrik. Cahaya yang dapat dideteksi oleh diode foto ini mulai dari cahaya serta beberapa peralatan di bidang medis. Simbol dari dioda foto dapat dilihat pada Gambar 2.8.
Gambar 2.8 Simbol Dioda Foto
2.6 Motor DC
Motor listrik merupakan perangkat elektromagnetis yang mengubah energi listrik menjadi energi mekanik. Energi mekanik ini digunakan untuk, misalnya memutar impeller pompa, fan atau blower, menggerakan kompresor, mengangkat
bahan,dll. Motor listrik digunakan juga di rumah (mixer, bor listrik, fan angin) dan di
industri. Motor listrik kadangkala disebut “kuda kerja” nya industri sebab diperkirakan bahwa motor-motor menggunakan sekitar 70% beban listrik total di industri.
Motor DC memerlukan suplai tegangan yang searah pada kumparan medan untuk diubah menjadi energi mekanik. Kumparan medan pada motor dc disebut stator
(31)
19
(bagian yang tidak berputar) dan kumparan jangkar disebut rotor (bagian yang berputar). Jika terjadi putaran pada kumparan jangkar dalam pada medan magnet, maka akan timbul tegangan (GGL) yang berubah-ubah arah pada setiap setengah putaran, sehingga merupakan tegangan bolak-balik. Prinsip kerja dari arus searah adalah membalik phasa tegangan dari gelombang yang mempunyai nilai positif dengan menggunakan komutator, dengan demikian arus yang berbalik arah dengan kumparan jangkar yang berputar dalam medan magnet. Bentuk motor paling sederhana memiliki kumparan satu lilitan yang bisa berputar bebas di antara kutub-kutub magnet permanen.
Catu tegangan dc dari baterai menuju ke lilitan melalui sikat yang menyentuh komutator, dua segmen yang terhubung dengan dua ujung lilitan. Kumparan satu lilitan pada gambar di atas disebut angker dinamo. Angker dinamo adalah sebutan untuk komponen yang berputar di antara medan magnet. Secara sederhana, motor DC dapat digambarkan seperti pada Gambar 2.9.
(32)
2.7 CodeVision AVR
CodeVisionAVR pada dasarnya merupakan perangkat lunak pemrograman mikrokontroler keluarga AVR berbasis bahasa C. Ada tiga komponen penting yang
telah diintegrasikan dalam perangkat lunak ini: Compiler C, IDE dan program
generator.
Berdasarkan spesifikasi yang dikeluarkan oleh perusahaan pengembangnya,
Compiler C yang digunakan hampir mengimplementasikan semua komponen standar
yang ada pada bahasa C standar ANSI (seperti struktur program, jenis tipe data, jenis
operator, dan library fungsi standar berikut penamaannya). Tetapi walaupun
demikian, dibandingkan bahasa C untuk aplikasi komputer, compiler C untuk
mikrokontroler ini memiliki sedikit perbedaan yang disesuaikan dengan arsitektur AVR tempat program C tersebut ditanamkan (embedded).
Khusus untuk library fungsi, disamping library standar (seperti fungsi-fungsi
matematik, manipulasi string, pengaksesan memori dan sebagainya),
CodeVisionAVR juga menyediakan fungsi-fungsi tambahan yang sangat bermanfaat dalam pemrograman antarmuka AVR dengan perangkat luar yang umum digunakan dalam aplikasi kontrol. Beberapa fungsi library yang penting diantaranya adalah
fungsi-fungsi untuk pengaksesan LCD, komunikasi I2C, IC RTC (Real time Clock),
sensor suhu, SPI (Serial Peripheral Interface) dan lain sebagainya.
Untuk memudahkan pengembangan program aplikasi, CodeVisionAVR juga
(33)
21
dijumpai pada setiap perangkat lunak berbasis Windows, CodeVisionAVR ini telah mengintegrasikan perangkat lunak downloader yang bersifat In System Programmer
yang dapat digunakan untuk mentransfer kode mesin hasil kompilasi ke dalam sistem memori mikrokontroler AVR yang sedang diprogram.
Selain itu, CodeVisionAVR juga menyediakan sebuah fitur yang dinamakan
dengan Code Generator atau CodeWizardAVR. Secara praktis, fitur ini sangat
bermanfaat membentuk sebuah kerangka program (template), dan juga memberi
kemudahan bagi programmer dalam peng-inisialisasian register-register yang
terdapat pada mikrokontroler AVR yang sedang diprogram. Dinamakan Code
Generator, karena perangkat lunak CodeVision ini akan membangkitkan kode-kode
program secara otomatis setelah fase inisialisasi pada jendela CodeWizardAVR selesai dilakukan. Secara teknis, penggunaan fitur ini pada dasarnya hampir sama dengan application wizard pada bahasa-bahasa pemrograman visual untuk komputer
(34)
22 BAB III
PERANCANGAN SISTEM
3.1 Spesifikasi Sistem
Sistem ini dirancang dengan menggunakan sebuah mikrokontroler untuk mengendalikan sistem. Sistem yang dirancang menggunakan LED yang disusun secara berurutan dan diputar dengan menggunakan sebuah motor DC untuk
menampilkan tampilan waktu dengan menerapkan prinsip persistence of vision.
Sistem ini memiliki sebuah switch yang digunakan untuk menyalakan sistem, 3 buah
push button yang digunakan untuk mengatur waktu, sebuah RTC (Real Time Clock)
untuk menyediakan informasi waktu, sebuah regulator tegangan, sebuah sensor optik dengan menggunakan LED dan dioda foto untuk sinkronisasi, sebuah konektor untuk
pemrograman secara ISP (In system Programming), dan LED untuk menampilkan
waktu secara digital.
LED yang digunakan sebanyak 10 buah LED yang terdiri dari 2 buah LED pada kedua bagian tepi yang selalu selalu berada dalam keadaan menyala sebagai bingkai dan 8 buah LED yang penyalaannya diatur oleh mikrokontroler. Waktu ditampilkan dalam format 6 digit yang terdiri 2 digit jam, 2 digit menit dan 2 digit detik dengan menggunakan tanda titik dua sebagai pemisah. Format waktu yang digunakan adalah 24 jam.
Tiga buah push button digunakan untuk mengendalikan waktu. Satu buah
(35)
23
setiap penekanan, satu buah push button yang digunakan untuk menambah cacah
digit menit sebanyak satu untuk setiap penekanan, dan satu buah push button yang
digunakan untuk membuat nol digit detik ketika ditekan. Secara umum, diagram blok dari keseluruhan sistem dapat dilihat pada Gambar 3.1.
Gambar 3.1 Blok Diagram Keseluruhan Sistem
3.2 Perancangan Perangkat Keras
Perancangan perangkat keras meliputi pemilihan komponen yang digunakan sesuai dengan yang dibutuhkan, perakitan sistem, dan peletakan komponen agar sistem dapat berada dalam keadaan yang seimbang dan dapat berputar dengan baik.
Dalam perancangan perangkat keras ada beberapa hal yang harus diperhatikan antara lain:
1. Keseimbangan sistem dimana sistem yang dirancang harus dibuat seseimbang
mungkin untuk mengurangi getaran yang timbul ketika sistem berputar. Agar
Mikrokontroler ATMega8 RTC
DS1307
3 buah
push button
Sensor optik
8 buah LED
(36)
sistem dapat seimbang, peletakan komponen-komponen yang digunakan harus diatur agar kedua sisi memiliki berat yang sama.
2. Kecepatan putaran motor dimana sudut yang ditempuh oleh LED ketika
menyala dipengaruhi oleh kecepatan putaran motor. Semakin cepat putaran motor maka besar sudut yang dilalui oleh LED juga akan semakin besar sehingga tampilan yang dihasilkan akan semakin melebar. Kecepatan putaran motor dipengaruhi oleh beberapa faktor antara lain jenis dari motor itu sendiri dan juga tegangan yang diberikan. Pada sistem ini, kecepatan putaran dari motor yang digunakan harus lebih besar dari 960 rpm agar dapat memberikan efek persistence of vision.
3. Jarak antara sensor optik dengan permukaan pantulan dimana semakin jauh
jarak antara LED inframerah dengan permukaan pantulan maka cahaya yang dihasilkan oleh LED inframerah menjadi lebih menyebar dan perbedaan intensitas cahaya yang dipantulkan oleh permukaan pantulan dan diterima oleh dioda foto menjadi kecil. Oleh karena itu jarak antara sensor optik dengan permukaan pantulan diusahakan sekecil mungkin sehingga terdapat perbedaan yang jelas antara intensitas cahaya yang diterima oleh dioda foto ketika sensor optik melewati permukaan putih dengan intensitas cahaya yang diterima oleh dioda foto ketika sensor optik melewati permukaan hitam.
3.2.1 Mikrokontroler ATMega8
Sistem yang dirancang menggunakan mikrokontroler jenis ATMega8. Pemilihan dilakukan dengan mempertimbangkan jumlah saluran I/O, fitur-fitur yang
(37)
25
disediakan, kapasitas memori, dan ukuran kemasan. Adapun jumlah saluran I/O yang
digunakan dalam sistem ini adalah sebanyak 11 buah ( 3 buah masukan dari push
button dan 8 buah keluaran ke LED ). Mikrokontroler ATMega8 juga telah memiliki
osilator internal dan unit interupsi eksternal sehingga fasilitas yang disediakan telah cukup untuk sistem yang akan dibuat. Sementara dari segi ukuran, mikrokontroler ATMega 8 memiliki ukuran yang cukup kecil dimana pada sistem yang akan dirancang diharapkan dapat dibuat seringan mungkin sehingga memperkecil beban pada motor DC. Selain itu, mikrokontroler ATMega8 juga mudah diperoleh dan cukup murah. Atas pertimbangan diatas maka diputuskan menggunakan mikrokontroler jenis ATMega8.
Sistem yang dirancang menggunakan osilator internal. Karena sistem yang dirancang ditujukan untuk bekerja dari sejak sistem dinyalakan hingga sistem dimatikan maka tidak diperlukan fungsi reset sehingga pena reset disambungkan
langsung dengan Vcc.
Adapun bandar-bandar I/O yang digunakan dalam sistem dapat dilihat pada Tabel 3.1.
(38)
Tabel 3.1 Daftar PORT/Bandar yang Digunakan
Port/Bandar Bit Fungsi
B 3-5
MOSI, MISO, dan SCK pada ISP (In System
Programming)
B 0-7 Keluaran ke 8 buah LED
C 4 Pena SDA dari RTC DS1307
C 5 Pena SCL dari RTC DS1307
D 2 Masukan untuk interupsi dari sensor optik
D 5-7 Masukan dari push button
3.2.2 RTC (Real Time Clock) DS 1307
Untuk menyediakan dan menyimpan informasi waktu dari sistem yang
dirancang maka diperlukan sebuah RTC (Real Time Clock). Pada tugas akhir ini
dipilih RTC jenis DS 1307 karena cukup mudah diperoleh dan dirasa paling cocok untuk digunakan dalam sistem yang dirancang.
Hubungan RTC DS 1307 dengan mikrokontroler ATMega8 menggunakan komunikasi I2C (Inter-Integrated Circuit) seperti yang ditunjukkan pada Gambar 3.2.
(39)
27
Gambar 3.2 Hubungan RTC DS 1307 dengan Mikrokontroler
Komunikasi I2C antar device menggunakan resistor pull-up yaitu R1 dan R2
pada pena SDA dan SCL dengan nilai resistansi 10K yang mengacu pada datasheet.
Pena SDA pada RTC dihubungkan ke PORTC.4 pada mikrokontroler dan pena SCL
dihubungkan ke PORTC.5. Pena X1 dan X2 dihubungkan dengan kristal quartz
32,768 KHz. VBAT dihubungkan dengan sumber tegangan baterai 3 V.
3.2.3 Push Button dan LED
Sistem yang dirancang menggunakan 3 buah push button dan 10 buah LED
dimana 2 buah LED dihubungkan langsung dengan Vcc dengan menggunakan
resistor 220 Ω dan 8 buah LED yang terhubung langsung dengan mikrokontroler
dengan menggunakan metode katoda bersama seperti yang ditunjukkan pada Gambar 3.3. VBAT 3 X1 1 X2 2 SCL 6 SDA 5 SOUT 7 U DS1307 X1 CRYSTAL 32.768KHz BAT1 3V SCL SDA R2 10K R1 10K Vcc
(40)
Gambar 3.3 Hubungan Push Button dan LED dengan Mikrokontroler
Seperti yang terlihat pada Gambar 3.3, ketiga push button dihubungkan
dengan PORTD.5-7 dan ground dengan alasan agar ketika push button ditekan maka
tegangan di pena dapat dipastikan berada pada 0 V. Push button tidak dihubungkan
dengan resistor karena mikrokontroler telah memiliki resistor pull-up internal
sehingga dapat menghemat komponen dan rangkaian yang dirancang lebih ringan, sementara untuk debouncing dapat dilakukan pada program.
LED 1 dan LED 10 dihubungkan dengan resistor 220 Ω untuk membatasi arus yang melalui kedua LED tersebut. Sementara LED 2 sampai dengan LED 9 dihubungkan langsung dengan PORTB.0-7 pada mikrokontroler karena arus maksimum yang dapat disediakan oleh mikrokontroler yaitu sebesar 40 mA yang
PB0/ICP1 14 PB1/OC1A 15 PB2/SS/OC1B 16 PB3/MOSI/OC2 17 PB4/MISO 18 PB5/SCK 19 PB6/TOSC1/XTAL1 9 PB7/TOSC2/XTAL2 10 PC6/RESET 1 PD0/RXD 2 PD1/TXD 3 PD2/INT0 4 PD3/INT1 5 PD4/T0/XCK 6 PD5/T1 11 PD6/AIN0 12 PD7/AIN1 13 PC0/ADC0 23 PC1/ADC1 24 PC2/ADC2 25 PC3/ADC3 26 PC4/ADC4/SDA 27 PC5/ADC5/SCL 28 AREF 21 AVCC 20 U1 ATMEGA8 LED 4 LED 5 LED 6 LED 7 LED 8 LED 3 LED 2 LED 9 PB1 PB2 PB3 LED 1 LED 10 R7 220 R8 220
(41)
29
masih berada dalam batas kerja LED sedangkan pemilihan metode katoda bersama adalah agar LED dapat dihubungkan tanpa menggunakan resistor dimana jika menggunakan metode anoda bersama maka diperlukan resistor yang terhubung dengan setiap LED sehingga rangkaian akan menjadi lebih berat dan boros komponen.
3.2.4 Sensor Optik
Untuk sinkronisasi sistem, maka diperlukan suatu rangkaian sensor optik yang akan membangkitkan sinyal interupsi setiap kali rangkaian melewati suatu posisi tertentu. Dalam tugas akhir ini, digunakan LED Inframerah dan dioda foto sebagai sensor optik. LED inframerah dan dioda foto dipasang berdampingan dimana dioda foto membaca cahaya pantulan dari LED inframerah. Pada permukaan pantulan akan dibuat sebuah garis hitam sehingga pada saat rangkaian melewati posisi tersebut intensitas cahaya yang diterima oleh dioda foto akan berubah dan menghasilkan sinyal interupsi pada mikrokontroler. Adapun rangkaian sensor optik yang digunakan dapat dilihat seperti pada Gambar 3.4.
Gambar 3.4 Rangkaian Sensor Optik IR LED 1
R4
220
PHOTODIODE 1
R5
10K
RV1
1K
Q1
BC 547
R6
1K
(42)
Seperti terlihat pada gambar, LED inframerah IR LED 1 dan dioda foto PHOTODIODE 1 akan menghasilkan tegangan pada katoda dari dioda foto yang nilainya berubah-ubah sesuai dengan warna dari permukaan pantulan. Sebuah trimpot RV1 digunakan untuk mengatur kepekaan transistor terhadap perubahan warna sehingga sistem dapat bekerja baik dalam kondisi terang maupun kondisi gelap. Sebuah transistor NPN Q1 dengan jenis BC 547 digunakan untuk menguatkan arus yang akan menjadi masukan dari interupsi menuju pena INT0 pada mikrokontroler.
3.2.5 Rangkaian Regulator Tegangan
Sistem dirancang dengan menggunakan catu daya dari baterai dengan tegangan 9V sementara komponen-komponen yang digunakan bekerja dengan catu daya 5V. Oleh karena itu dibutuhkan suatu regulator tegangan yang dapat menghasilkan tegangan keluaran yang stabil sebesar 5V. Untuk menentukan jenis regulator tegangan yang akan dipilih maka terlebih dahulu kita menghitung jumlah arus yang harus dapat disuplai oleh regulator tegangan dengan mengasumsikan kondisi dimana setiap komponen mengkonsumsi arus sampai pada batas maksimum yang memungkinkan.
Dari datasheet mikrokontroler ATMega 8, diketahui bahwa kebutuhan arus
untuk mikrokontroler adalah maksimum sebesar 300 mA, sementara arus maksimum yang dapat disediakan untuk keluaran setiap pena yaitu sebesar 40 mA. Pada kondisi dimana semua LED yang terhubung dengan mikrokontroler yaitu LED 2 sampai LED 9 menyala maka konsumsi arus maksimum untuk kedelapan buah LED adalah
(43)
31
sebesar 8 x 40 mA = 320 mA. Sementara RTC DS1307 telah memiliki catudaya tersendiri sehingga tidak mengkonsumsi arus.
Untuk kebutuhan arus dari kedua buah LED yang terhubung dengan Vcc yaitu LED 1 dan LED 10 dengan tegangan jatuh pada LED sebesar 2 V berdasarkan pengukuran dengan voltmeter maka arus yang mengalir pada LED 1 adalah:
ILED 1 =
Vcc−VLED 1
R7
ILED 1 = 5−2 220
ILED 1 = 3 220
ILED 1≈ 0,0136 A ≈ 14 mA
Karena R7 = R8 maka:
ILED 10 = ILED 1
ILED 10 = 14 mA
Maka arus yang mengalir pada kedua buah LED tersebut adalah sebesar 2 x 14 mA = 28 mA.
Arus maksimum yang mengalir melalui R1 dan R2 yaitu pada saat pena SDA dan pena SCL berada pada logika rendah yaitu:
IR1 = IR2 = Vcc
(44)
= 5
10K
= 0,5 mA
Sehingga jumlah arus maksimum yang melalui R1 dan R2 yaitu 0,5mA + 0,5mA = 1mA.
Untuk rangkaian sensor optik, arus yang mengalir pada LED inframerah IR LED 1 adalah sebesar:
IIR LED 1 =
Vcc−VIR LED 1 R4
IIR LED 1 = 5−2 220
IIR LED 1 = 3 220
IIR LED 1≈ 0.0136 A ≈ 14 mA
Sementara arus maksimum yang mengalir melalui R5 pada saat transistor Q1 saturasi dengan tegangan jatuh pada dioda foto PHOTODIODE 1 sebesar 1,6 V yang didapat melalui pengukuran adalah:
IR5 =
Vcc−VPHOTODIODE 1
R5
IR5 = 5−1,6
10K
IR5 = 3,4 10K
(45)
33
IR5= 0,34 mA
Sedangkan arus maksimum yang mengalir pada kolektor transistor Q1 yaitu ketika transistor berada dalam keadaan saturasi adalah:
IC = Vcc−0
R6
IC = 5−0
1K
IC = 5mA
Maka arus maksimal yang dibutuhkan oleh rangkaian sensor optik adalah sebesar 14 mA + 0,34 mA + 5 mA = 19,34 mA. Dengan demikian total arus maksimum yang harus dapat disediakan oleh regulator tegangan adalah:
Kebutuhan untuk mikrokontroler : 300 mA
Kebutuhan untuk output 8 buah LED : 320 mA
Kebutuhan untuk 2 buah LED : 28 mA
Kebutuhan untuk pena SDA dan SCL : 1 mA
Kebutuhan untuk sensor optik : 19,34 mA
Total : 668,34 mA
Berdasarkan perhitungan diatas, maka diperoleh kesimpulan bahwa rangkaian regulator tegangan harus dapat menyediakan arus minimal 668,34 mA. Oleh karena itu dipilih regulator tegangan LM 7805 yang dapat meregulasi tegangan menjadi 5 V dengan tegangan masukan antara 7 V sampai dengan 25 V serta menyediakan arus sebesar 1 A. Rangkaian regulator tegangan LM 7805 dapat dilihat pada Gambar 3.5.
(46)
Gambar 3.5 Rangkaian Regulator Tegangan LM 7805
Nilai dari C1 adalah 0,33 uF sedangkan C2 adalah sebesar 0,1 uF yang mengacu pada datasheet dari LM 7805.
3.2.6 Rangkaian Switching untuk ISP ( In System Programming)
Pada sistem ini, PORTB.3-5 digunakan untuk 2 fungsi yaitu untuk
menyalakan LED 5-7 dan keperluan ISP (In System Programming). Pada saat
pemrograman, hubungan antara mikrokontroler dengan LED harus terputus karena jika pemrograman dilakukan dengan keadaan LED masih terhubung maka arus yang mengalir melalui programmer akan terbagi menjadi dua yaitu menuju mikrokontroler
dan menuju LED sehingga dapat menimbulkan masalah. Untuk menghindari masalah
tersebut maka diperlukan sebuah rangkaian switching yang dapat memutuskan
hubungan dengan LED pada saat dilakukan pemrograman. Pada sistem ini digunakan
suatu komponen yang terdiri dari 4 buah switch dimana 3 buah diantaranya
dihubungkan antara PORTB.3-5 dengan LED 5-7 untuk keperluan tersebut sementara
VI 1
VO 3
G
N
D
2
U3
7805
BAT2
9V
C1
0.33uF
C2
0.1uF
(47)
35
1 buah yang dihubungkan antara PORTB.2 dengan LED 4 tidak digunakan. Adapun rangkaian switching yang digunakan dapat dilihat pada Gambar 3.6.
Gambar 3.6 Rangkaian Switching
3.3 Perancangan Perangkat Lunak
Pada dasarnya, setiap mikrokontroler memiliki set instruksi. Kumpulan dari set instruksi ini dapat dirancang untuk melakukan tugas tertentu yang disebut perangkat lunak / program dari sistem. Tanpa perangkat lunak, sistem yang dirancang tidak akan dapat bekerja.
Dalam tugas akhir ini, program ditulis dengan menggunakan bahasa pemrograman C dengan menggunakan CodeVision AVR.
PB0/ICP1 14 PB1/OC1A 15 PB2/SS/OC1B 16 PB3/MOSI/OC2 17 PB4/MISO 18 PB5/SCK 19 PB6/TOSC1/XTAL1 9 PB7/TOSC2/XTAL2 10 PC6/RESET 1 PD0/RXD 2 PD1/TXD 3 PD2/INT0 4 PD3/INT1 5 PD4/T0/XCK 6 PD5/T1 11 PD6/AIN0 12 PD7/AIN1 13 PC0/ADC0 23 PC1/ADC1 24 PC2/ADC2 25 PC3/ADC3 26 PC4/ADC4/SDA 27 PC5/ADC5/SCL 28 AREF 21 AVCC 20 U1 ATMEGA8 LED 4 LED 5 LED 6 LED 7 1 2 3 4 8 7 6 5 SW2 SW -DIP4 MOSI MISO SCK
(48)
3.3.1 Sistem Perangkat Lunak secara Umum
Secara sederhana, sistem ini berfungsi untuk menampilkan waktu secara
digital berdasarkan informasi yang diambil dari RTC. Tiga buah push button
digunakan untuk mengatur waktu sementara sensor optik digunakan untuk membangkitkan sinyal interupsi setiap kali rangkaian melewati posisi yang telah ditentukan. Sinyal interupsi inilah yang digunakan sebagai acuan untuk menentukan kapan LED harus dinyalakan. Flowchart dari program yang akan dibuat dapat dilihat
pada Gambar 3.7.
Start Inisialisasi data, variabel, PORT Apakah PB1 ditekan ? Apakah PB2 ditekan ? Apakah PB3 ditekan ? Ambil data dari RTC Ambil data dari RTC Ambil data dari RTC Naikkan cacah jam Naikkan cacah menit Nolkan cacah detik
Kirim data ke RTC
Kirim data ke RTC
Kirim data ke RTC Ya Ya Ya Tidak Tidak Tidak
(49)
37
Interupsi dari sensor optik
Tentukan nilai setiap digit
i=0 Ambil data dari
RTC
i<8 ?
Tampilkan data kolom berikutnya
Tunda 250 µs
Apakah masih ada kolom berikutnya ?
RET
Ya
Tidak
Ya
Tidak
Increment i
(50)
3.3.2 Membaca Masukan dari Push Button
Pembacaan masukan dari push button dilakukan dengan metode polling
dimana mikrokontroler akan terus-menerus bertanya apakah ada tombol yang ditekan. Jika tombol pertama PB1 ditekan maka mikrokontroler akan mengambil data waktu dari RTC dan kemudian menaikkan cacah pada jam sebanyak satu dan mengirimkan data yang telah diperbaharui kembali ke RTC. Jika tombol kedua PB2 ditekan maka mikrokontroler akan mengambil data waktu dari RTC dan kemudian menaikkan cacah pada menit sebanyak satu dan mengirimkan data yang telah diperbaharui kembali ke RTC. Jika tombol ketiga PB3 ditekan maka mikrokontroler akan mengambil data waktu dari RTC dan mengirimkan kembali data dengan membuat bagian detik menjadi nol.
3.3.3 Konversi Karakter ke Tampilan LED
Untuk menampilkan tampilan waktu dengan menggunakan LED maka diperlukan program untuk menentukan kapan masing-masing LED harus menyala agar dapat menampilkan karakter yang diinginkan. Karakter yang akan ditampilkan berjumlah 11 buah yaitu dari angka 0 sampai dengan 9 dan lambang titik dua Proses konversi dilakukan dengan membuat suatu tipe data array yang berisi kumpulan nilai heksadesimal dari setiap karakter yang akan dikirimkan ke PORT B untuk menyalakan LED untuk menampilkan karakter yang diinginkan.
(51)
39
3.3.4 Interupsi Eksternal
Interupsi eksternal digunakan untuk menentukan kapan LED mulai dinyalakan. Ketika rangkaian sensor optik melalui posisi yang telah ditentukan, sinyal interupsi akan memulai proses interupsi menuju ke pena INT 0 pada mikrokontroler. Setelah mikrokontroler mendapatkan sinyal interupsi, maka mikrokontroler akan mengambil data waktu dari RTC. Informasi waktu dari RTC akan dipisah menjadi 6 digit angka yang akan dikonversi menjadi keluaran dalam menyalakan LED.
(52)
40 BAB IV
IMPLEMENTASI DAN PENGUJIAN
4.1 Implementasi
Perancangan sistem diimplementasikan pada perangkat keras dan perangkat lunak. Perangkat keras diimplementasikan pada papan PCB yang terdiri dari beberapa bagian, yaitu regulator tegangan, mikrokontroler, RTC, sensor optik, push button, dan
LED. Perangkat lunak diimplementasikan dengan menggunakan bahasa C dengan
menggunakan CodeVision AVR sebagai compiler dan programmer ISP untuk
menanamkan program ke dalam mikrokontroler. Hasil integrasi dari perangkat keras dan perangkat lunak kemudian dilakukan pengujian.
Adapun tahapan-tahapan dalam implementasi adalah sebagai berikut:
1. Membuat rangkaian pada papan PCB.
2. Meng-install aplikasi-aplikasi yang dibutuhkan seperti CodeVision AVR dan
PROGISP. Sistem operasi yang digunakan adalah Windows 7 Ultimate
3. Menulis program dalam bahasa C dengan CodeVision AVR.
4. Meng-compile program yang dibuat sehingga menghasilkan file HEX.
5. Menanam file HEX ke dalam mikrokontroler ATMega 8 dengan
menggunakan programmer dengan aplikasi PROGISP.
(53)
41
4.2 Pengujian
Pengujian dilakukan untuk mengetahui apakah sistem telah bekerja sesuai dengan yang diharapkan atau tidak. Pengujian dilakukan terdiri dari beberapa tahapan yaitu pengujian pada setiap bagian untuk mengetahui apakah setiap bagian telah berfungsi dengan baik dan pengujian sistem secara keseluruhan.
4.2.1 Pengujian Catudaya Sistem
Pengujian catudaya rangkaian bertujuan untuk mengetahui apakah tegangan yang dihasilkan oleh regulator tegangan LM 7805 telah sesuai dengan tegangan kerja sistem yaitu 5 V. Pengujian ini cukup penting karena jika tegangan yang dihasilkan oleh regulator tegangan lebih besar daripada tegangan kerja sistem maka dapat mengakibatkan kerusakan pada sistem.
Pengujian dilakukan dengan menggunakan multimeter digital. Probe positif (merah) dari multimeter dihubungkan dengan pena 3 dari regulator 7805 sedangkan probe negative (hitam) dihubungkan dengan pena 2 dari regulator 7805. Hasil pengujian ditunjukkan pada Gambar 4.1.
Dari hasil pengujian tersebut tampak bahwa tegangan keluaran yang dihasilkan oleh regulator tegangan adalah 4,94 V dimana nilai tegangan ini telah sesuai dengan yang diinginkan.
(54)
Gambar 4.1 Hasil Pengujian Catudaya Sistem
4.2.2 Pengujian Konsumsi Arus
Pengujian konsumsi arus bertujuan untuk mengetahui berapa besar arus yang dikonsumsi oleh sistem dan melihat apakah arus yang dikonsumsi oleh sistem lebih kecil dari batas maksimum arus yang dapat disuplai oleh regulator tegangan LM7805 yaitu sebesar 1A karena jika arus yang dikonsumsi oleh sistem melebihi 1A maka regulator tegangan LM7805 dapat menjadi rusak.
Pengujian ini dilakukan dengan menuliskan program untuk menyalakan ketujuh buah LED yaitu LED 3 sampai dengan LED 9 dan mengukur besarnya konsumsi arus pada baterai BAT 2. Hasil dari pengujian ini ditunjukkan pada Gambar 4.2.
(55)
43
Gambar 4.2 Hasil Pengujian Konsumsi Arus
Dari hasil pengujian tersebut dapat dilihat bahwa arus yang dikonsumsi oleh sistem yaitu sebesar 0,05 A = 50 mA. Nilai ini jauh dibawah batas arus yang dapat disediakan oleh regulator tegangan LM7805 sehingga tidak ada masalah.
4.2.3 Pengujian Sistem Minimum
Sistem minimum merupakan rangkaian paling sederhana dari sistem mikrokontroler dengan tujuan agar pemrograman mikrokontroler dapat dilakukan secara ISP (In System Programming). Pengujian ini bertujuan untuk melihat apakah
mikrokontroler pada sistem yang dirancang dapat diprogram secara ISP atau tidak karena jika mikrokontroler tidak dapat diprogram secara ISP maka pemrograman
(56)
mikrokontroler harus dilakukan dengan melepaskan IC mikrokontroler dari sistem untuk diprogram dengan programmer khusus. Hal ini dapat mengakibatkan patahnya
pena mikrokontroler yang diakibatkan proses pencabutan dan pemasangan kembali IC mikrokontroler setiap kali kita ingin memrogram ulang.
Pengujian ini dilakukan dengan menghubungkan programmer ISP dengan
sistem. Perangkat lunak yang digunakan adalah PROGISP. Hasil dari pengujian dapat dilihat pada Gambar 4.3.
(57)
45
Dari hasil pengujian, didapatkan bahwa programmer dapat menghapus dan
menulis kembali program pada mikrokontroler yang artinya mikrokontroler telah dapat diprogram secara ISP.
4.2.4 Pengujian Sensor Optik
Pengujian ini bertujuan untuk mengetahui apakah sensor optik dapat bekerja dengan baik dan menghasilkan interupsi setiap kali sistem melewati posisi tertentu. Pengujian ini dilakukan dengan membuat program untuk menyalakan semua LED selama 200 mikrodetik dan mematikannya kembali setiap kali terjadi interupsi. Hasil dari pengujian ini dapat dilihat pada Gambar 4.4.
Gambar 4.4 Hasil Pengujian Sensor Optik
Dari hasil pengujian tersebut terlihat bahwa sensor optik telah bekerja dengan baik dan memberikan interupsi setiap kali sistem melewati posisi tertentu.
(58)
4.2.5 Pengujian Penampilan Karakter
Pengujian ini bertujuan untuk melihat apakah sistem dapat menampilkan karakter dengan baik atau tidak. Pengujian dilakukan dengan menulis program untuk menampilkan karakter 12:34:56 secara berurutan kemudian mencari tahu tundaan waktu antara penyalaan LED sehingga karakter yang dihasilkan dapat dilihat dan dibaca dengan baik. Hasil pengujian ini dapat dilihat pada Gambar 4.5.
Gambar 4.5 Hasil Pengujian Penampilan Karakter
Dari pengujian yang dilakukan didapat bahwa hasil terbaik yaitu dengan menggunakan resolusi 7x7 yaitu dengan menggunakan 7 kolom dimana 5 kolom digunakan untuk menampilkan karakter dan 1 kolom di bagian kiri dan kanan yang berfungsi untuk mematikan LED dan memberi jarak antara karakter dan menggunakan 7 dari 8 buah LED yang tersedia yaitu LED 3 sampai dengan LED 9.
(59)
47
LED 2 tidak digunakan dikarenakan bagian bawah dari karakter yang ditampilkan menjadi terlalu sempit sehingga karakter menjadi lebih susah dibaca.
4.2.6 Pengujian Sistem secara Keseluruhan
Pengujian sistem secara keseluruhan dilakukan dengan menanamkan program pada sistem dan melihat apakah seluruh sistem dapat bekerja sesuai dengan yang diharapkan. Hasil dari pengujian ini dapat dilihat pada Gambar 4.6.
Gambar 4.6 Hasil Pengujian Sistem secara Keseluruhan
Dari hasil pengujian secara keseluruhan, didapat bahwa sistem telah bekerja sesuai dengan yang diharapkan dan dapat menampilkan waktu dengan baik. Kita juga dapat menghitung kecepatan motor pada saat pengujian dilakukan dimana dari hasil pengujian terlihat bahwa 8 buah karakter dapat ditampilkan dalam setengah putaran. Setiap karakter terdiri dari 7 buah kolom dan setiap kolom ditampilkan dalam waktu 250µs sehingga waktu yang dibutuhkan untuk satu putaran adalah 2 x 8 x 7 x 250µs = 28ms = 0,028s. Maka kecepatan putaran motor adalah 60/0,028 ≈ 2143 rpm.
(60)
4.2.7 Pengujian Pengaruh Perubahan Tegangan Penggerak Motor terhadap Tampilan Karakter
Pengujian ini dilakukan dengan mengukur tegangan yang diberikan kepada motor ketika motor dalam keadaan berputar. Tegangan akan diturunkan secara bertahap dan melihat perubahan yang terjadi terhadap karakter yang ditampilkan. Gambar 4.7 (a) sampai dengan (d) memperlihatkan tampilan dari jam untuk tegangan penggerak motor DC sesuai dengan yang diperlihatkan oleh multimeter digital.
(61)
49
(c) (d)
Gambar 4.7 Hasil Pengujian Pengaruh Perubahan Tegangan Penggerak Motor terhadap Tampilan Karakter
Dari hasil pengujian diatas terlihat bahwa semakin kecil tegangan yang diberikan kepada motor maka karakter yang ditampilkan akan semakin menyempit.
(62)
50 BAB V
KESIMPULAN DAN SARAN
5.1 Kesimpulan
Setelah melakukan perancangan dan pengujian pada sistem, maka dapat diambil kesimpulan sebagai berikut:
1. Sistem yang dibuat sudah berhasil untuk menampilkan waktu dengan baik. 2. Hasil terbaik dari penampilan karakter yaitu dengan hanya menggunakan 7
buah LED yaitu LED 3 sampai dengan LED 9.
3. Semakin kecil tegangan yang diberikan kepada motor maka karakter yang
ditampilkan akan semakin menyempit.
4. Sistem yang dibuat dapat menyimpan informasi waktu pada RTC sehingga
informasi waktu tetap dapat diperbaharui walaupun sistem tidak diberi catudaya.
5. Sistem membutuhkan penahan agar putaran menjadi lebih stabil.
6. Sistem tidak dapat digunakan untuk waktu yang lama dikarenakan motor
menjadi terlalu panas dan dikhawatirkan dapat menjadi rusak.
5.2 Saran
Agar sistem dapat dikembangkan menjadi lebih baik, maka terdapat beberapa saran yang dapat diberikan, antara lain:
(63)
51
1. Tampilan yang dihasilkan dapat berupa jam analog atau dapat dipilih antara tampilan analog dengan tampilan digital.
2. Sistem yang dibuat diharapkan menggunakan satu buah sumber catudaya baik
untuk motor dan rangkaian sehingga tidak memerlukan baterai.
3. Sistem yang dibuat sebaiknya dapat diatur tanpa menghentikan putaran
terlebih dahulu, misalnya dengan menggunakan remote control.
4. Sistem yang dibuat diharapkan memiliki fungsi-fungsi tambahan lainnya
misalnya alarm.
5. Sistem yang dibuat sebaiknya dapat digunakan untuk waktu yang lama yaitu
(64)
DAFTAR PUSTAKA
1. Andrianto, Heri. 2008. Pemrograman Mikrokontroler AVR ATmega16
Menggunakan Bahasa C (CodeVisionAVR). Bandung: Informatika.
2. Bejo, Agus. 2008. C & AVR, Rahasia Kemudahan Bahasa C dalam
Mikrokontroler ATMega8535. Yogyakarta: Graha Ilmu.
3. Budiharto, Widodo. 2005. Perancangan Sistem dan Aplikasi Mikrokontroler.
Edisi Pertama. Jakarta: Erlangga.
4. Tarigan, Pernantin. 2011. Sistem Tertanam. Yogyakarta: Graha Ilmu.
5. Wardhana, Lingga. 2006. Belajar Sendiri Mikrokontroler AVR seri
ATMEGA8535. Yogyakarta: Andi.
6. Winoto, Ardi. 2010. Mikrokontroler AVR ATMega 8/32/16/8535 dan
Pemrogramannya dengan Bahasa C pada WinAVR. Bandung: Informatika
(65)
53 L AM P IRAN A RANG K AI AN S K E M A T IK S IS T E M YANG D IRANCAN G PB0/ICP1 14 PB1/OC1A 15 PB2/SS/OC1B 16 PB3/MOSI/OC2 17 PB4/MISO 18 PB5/SCK 19 PB6/TOSC1/XTAL1 9 PB7/TOSC2/XTAL2 10 PC6/RESET 1 PD0/RXD 2 PD1/TXD 3 PD2/INT04 PD3/INT1 5 PD4/T0/XCK 6 PD5/T1 11 PD6/AIN0 12 PD7/AIN1 13 PC0/ADC0 23 PC1/ADC124 PC2/ADC2 25 PC3/ADC3 26 PC4/ADC4/SDA27 PC5/ADC5/SCL 28 AREF 21 AVCC 20 U1 ATMEGA8 LED 4 LED 5 LED 6 LED 7 LED 8 LED 3 LED 2 LED 9 VBAT 3 X1 1 X2 2 SCL 6 SDA 5 SOUT 7 U2 DS1307 R2 10K R1 10K BAT1 3V X1 CRYSTAL 32.768 K IR LED 1
R4 220 PHOTODIODE 1 R5 10K RV1 1K Q1 BC 547 R6 1K PB1 PB2 PB3 MOSI MISO SCK R3 1K RESET VI 1 VO 3 G N D 2 U3 7805 BAT2 9V C1 0.33uF C2 0.1uF 1 2 3 4 5 6 J1 CONN-SIL6 RESET SCK MISO MOSI SW1 1 2 3 4 8 7 6 5 SW2 SW -DIP4 LED 1 LED 10 R7 220 R8 220
(66)
LAMPIRAN B
KODE PROGRAM SISTEM YANG DIRANCANG
/***************************************************** This program was produced by the
CodeWizardAVR V1.25.3 Standard Automatic Program Generator Project : propeller clock Version :
Date : 12/03/2015
Chip type : ATmega8 Program type : Application Clock frequency : 1.000000 MHz Memory model : Small
External SRAM size : 0 Data Stack size : 256
*****************************************************/ #include <mega8.h>
#include <delay.h> // I2C Bus functions #asm
.equ __i2c_port=0x15 ;PORTC .equ __sda_bit=4
.equ __scl_bit=5 #endasm
#include <i2c.h>
// DS1307 Real Time Clock functions #include <ds1307.h>
// Declare your global variables here unsigned char jam, menit, detik; int i, j;
int digit[8];
const char data[]={
0x00, 0x7C, 0x82, 0x82, 0x82, 0x7C, 0x00, // 0 0x00, 0x00, 0x42, 0xFE, 0x02, 0x00, 0x00, // 1 0x00, 0x42, 0x86, 0x8A, 0x92, 0x62, 0x00, // 2 0x00, 0x44, 0x82, 0x92, 0x92, 0x6C, 0x00, // 3 0x00, 0x18, 0x28, 0x48, 0xFE, 0x08, 0x00, // 4 0x00, 0xF2, 0x92, 0x92, 0x92, 0x9E, 0x00, // 5 0x00, 0x7C, 0x92, 0x92, 0x92, 0x8C, 0x00, // 6 0x00, 0x80, 0x80, 0x9E, 0xA0, 0xC0, 0x00, // 7 0x00, 0x6C, 0x92, 0x92, 0x92, 0x6C, 0x00, // 8 0x00, 0x62, 0x92, 0x92, 0x92, 0x7C, 0x00, // 9 0x00, 0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00 // :
(67)
55
};
// External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) {
rtc_get_time(&jam, &menit, &detik);
digit[0]=jam/10; // digit pertama jam digit[1]=jam%10; // digit kedua jam digit[2]=11; // :
digit[3]=menit/10; // digit pertama menit digit[4]=menit%10; // digit kedua menit
digit[5]=11; // :
digit[6]=detik/10; // digit pertama detik digit[7]=detik%10; // digit kedua detik
for(i=0; i<8; i++) {
if(digit[i]==0) {
for(j=0; j<7; j++) { PORTB=data[j]; delay_us(250); } } else if(digit[i]==1) {
for(j=7; j<14; j++) { PORTB=data[j]; delay_us(250); } } else if(digit[i]==2) {
for(j=14; j<21; j++) { PORTB=data[j]; delay_us(250); } } else if(digit[i]==3) {
for(j=21; j<28; j++) { PORTB=data[j]; delay_us(250); } } else if(digit[i]==4) {
(68)
{ PORTB=data[j]; delay_us(250); } } else if(digit[i]==5) {
for(j=35; j<42; j++) { PORTB=data[j]; delay_us(250); } } else if(digit[i]==6) {
for(j=42; j<49; j++) { PORTB=data[j]; delay_us(250); } } else if(digit[i]==7) {
for(j=49; j<56; j++) { PORTB=data[j]; delay_us(250); } } else if(digit[i]==8) {
for(j=56; j<63; j++) { PORTB=data[j]; delay_us(250); } } else if(digit[i]==9) {
for(j=63; j<70; j++) { PORTB=data[j]; delay_us(250); } } else {
for(j=70; j<77; j++) {
PORTB=data[j]; delay_us(250); }
(69)
57
} }
void main(void) {
// Declare your local variables here // Input/Output Ports initialization // Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTB=0x00;
DDRB=0xFF;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // 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=0xF0;
DDRD=0x00;
// External Interrupt(s) initialization // INT0: On
// INT0 Mode: Falling Edge // INT1: Off
GICR|=0x40; MCUCR=0x02; GIFR=0x40;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;
// I2C Bus initialization i2c_init();
// DS1307 Real Time Clock initialization // Square wave output on pin SQW/OUT: Off // SQW/OUT pin state: 0
rtc_init(0,0,0);
// Global enable interrupts #asm("sei")
(70)
while (1) {
if(PIND.5==0) {
rtc_get_time(&jam, &menit, &detik); jam++;
if(jam>23) jam=0;
rtc_set_time(jam, menit, detik); PORTB=0b10101010 ; delay_ms(200); PORTB=0x00 ; } else if(PIND.6==0) {
rtc_get_time(&jam, &menit, &detik); menit++; if(menit>59) { menit=0; jam++; }
rtc_set_time(jam, menit, detik); PORTB=0b11001100; delay_ms(200); PORTB=0x00 ; } else if(PIND.7==0) {
rtc_get_time(&jam, &menit, &detik); rtc_set_time(jam, menit, 0);
PORTB=0b11110000; delay_ms(200); PORTB=0x00 ; } }; }
(1)
53
L
AM
P
IRAN A
RANG
K
AI
AN S
K
E
M
A
T
IK
S
IS
T
E
M
YANG
D
IRANCAN
G
PB0/ICP1 14 PB1/OC1A 15 PB2/SS/OC1B 16 PB3/MOSI/OC2 17 PB4/MISO 18 PB5/SCK 19 PB6/TOSC1/XTAL1 9 PB7/TOSC2/XTAL2 10 PC6/RESET 1 PD0/RXD 2 PD1/TXD 3 PD2/INT04 PD3/INT1 5 PD4/T0/XCK 6 PD5/T1 11 PD6/AIN0 12 PD7/AIN1 13 PC0/ADC0 23 PC1/ADC124 PC2/ADC2 25 PC3/ADC3 26 PC4/ADC4/SDA27 PC5/ADC5/SCL 28 AREF 21 AVCC 20 U1 ATMEGA8 LED 4 LED 5 LED 6 LED 7 LED 8 LED 3 LED 2 LED 9 VBAT 3 X1 1 X2 2 SCL 6 SDA 5 SOUT 7 U2 DS1307 R2 10K R1 10K BAT1 3V X1 CRYSTAL 32.768 K IR LED 1R4 220 PHOTODIODE 1 R5 10K RV1 1K Q1 BC 547 R6 1K PB1 PB2 PB3 MOSI MISO SCK R3 1K RESET VI 1 VO 3 G N D 2 U3 7805 BAT2 9V C1 0.33uF C2 0.1uF 1 2 3 4 5 6 J1 CONN-SIL6 RESET SCK MISO MOSI SW1 1 2 3 4 8 7 6 5 SW2 SW -DIP4 LED 1 LED 10 R7 220 R8 220
(2)
LAMPIRAN B
KODE PROGRAM SISTEM YANG DIRANCANG
/***************************************************** This program was produced by the
CodeWizardAVR V1.25.3 Standard Automatic Program Generator Project : propeller clock Version :
Date : 12/03/2015
Chip type : ATmega8 Program type : Application Clock frequency : 1.000000 MHz Memory model : Small
External SRAM size : 0 Data Stack size : 256
*****************************************************/ #include <mega8.h>
#include <delay.h> // I2C Bus functions #asm
.equ __i2c_port=0x15 ;PORTC .equ __sda_bit=4
.equ __scl_bit=5 #endasm
#include <i2c.h>
// DS1307 Real Time Clock functions #include <ds1307.h>
// Declare your global variables here unsigned char jam, menit, detik; int i, j;
int digit[8];
const char data[]={
0x00, 0x7C, 0x82, 0x82, 0x82, 0x7C, 0x00, // 0 0x00, 0x00, 0x42, 0xFE, 0x02, 0x00, 0x00, // 1 0x00, 0x42, 0x86, 0x8A, 0x92, 0x62, 0x00, // 2 0x00, 0x44, 0x82, 0x92, 0x92, 0x6C, 0x00, // 3 0x00, 0x18, 0x28, 0x48, 0xFE, 0x08, 0x00, // 4 0x00, 0xF2, 0x92, 0x92, 0x92, 0x9E, 0x00, // 5 0x00, 0x7C, 0x92, 0x92, 0x92, 0x8C, 0x00, // 6 0x00, 0x80, 0x80, 0x9E, 0xA0, 0xC0, 0x00, // 7 0x00, 0x6C, 0x92, 0x92, 0x92, 0x6C, 0x00, // 8 0x00, 0x62, 0x92, 0x92, 0x92, 0x7C, 0x00, // 9 0x00, 0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00 // :
(3)
};
// External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) {
rtc_get_time(&jam, &menit, &detik);
digit[0]=jam/10; // digit pertama jam digit[1]=jam%10; // digit kedua jam digit[2]=11; // :
digit[3]=menit/10; // digit pertama menit digit[4]=menit%10; // digit kedua menit
digit[5]=11; // :
digit[6]=detik/10; // digit pertama detik digit[7]=detik%10; // digit kedua detik
for(i=0; i<8; i++) {
if(digit[i]==0) {
for(j=0; j<7; j++) {
PORTB=data[j]; delay_us(250); }
}
else if(digit[i]==1) {
for(j=7; j<14; j++) {
PORTB=data[j]; delay_us(250); }
}
else if(digit[i]==2) {
for(j=14; j<21; j++) {
PORTB=data[j]; delay_us(250); }
}
else if(digit[i]==3) {
for(j=21; j<28; j++) {
PORTB=data[j]; delay_us(250); }
}
else if(digit[i]==4) {
(4)
PORTB=data[j]; delay_us(250); }
}
else if(digit[i]==5) {
for(j=35; j<42; j++) {
PORTB=data[j]; delay_us(250); }
}
else if(digit[i]==6) {
for(j=42; j<49; j++) {
PORTB=data[j]; delay_us(250); }
}
else if(digit[i]==7) {
for(j=49; j<56; j++) {
PORTB=data[j]; delay_us(250); }
}
else if(digit[i]==8) {
for(j=56; j<63; j++) {
PORTB=data[j]; delay_us(250); }
}
else if(digit[i]==9) {
for(j=63; j<70; j++) {
PORTB=data[j]; delay_us(250); }
} else
{
for(j=70; j<77; j++) {
PORTB=data[j]; delay_us(250); }
(5)
} }
void main(void) {
// Declare your local variables here // Input/Output Ports initialization // Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTB=0x00;
DDRB=0xFF;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // 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=0xF0;
DDRD=0x00;
// External Interrupt(s) initialization // INT0: On
// INT0 Mode: Falling Edge // INT1: Off
GICR|=0x40; MCUCR=0x02; GIFR=0x40;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;
// I2C Bus initialization i2c_init();
// DS1307 Real Time Clock initialization // Square wave output on pin SQW/OUT: Off // SQW/OUT pin state: 0
rtc_init(0,0,0);
// Global enable interrupts #asm("sei")
(6)
{
if(PIND.5==0) {
rtc_get_time(&jam, &menit, &detik); jam++;
if(jam>23) jam=0;
rtc_set_time(jam, menit, detik); PORTB=0b10101010 ;
delay_ms(200); PORTB=0x00 ; } else if(PIND.6==0) {
rtc_get_time(&jam, &menit, &detik); menit++;
if(menit>59) {
menit=0; jam++; }
rtc_set_time(jam, menit, detik); PORTB=0b11001100;
delay_ms(200); PORTB=0x00 ;
}
else if(PIND.7==0) {
rtc_get_time(&jam, &menit, &detik); rtc_set_time(jam, menit, 0);
PORTB=0b11110000; delay_ms(200); PORTB=0x00 ; }
}; }