PERANCANGAN HARDWARE JAM DIGITAL
DENGAN SISTEM KALENDER BERBASIS
MIKROKONTROLLER DS1307
TUGAS AKHIR
DIAN SAIFUL RAMADHAN NUR TANJUNG
072408030
PROGRAM STUDI DIPLOMA III FISIKA INSTRUMENTASI
DEPARTEMEN FISIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SUMATERA UTARA
PERANCANGAN HARDWARE JAM DIGITAL DENGAN SISTEM KALENDER BERBASIS
MIKROKONTROLLER DS1307
TUGAS AKHIR
Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh gelar Ahli Madya
DIAN SAIFUL RAMADHAN NUR TANJUNG 072408030
PROGRAM STUDI DIPLOMA III FISIKA INSTRUMENTASI DEPARTEMEN FISIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA
PERNYATAAN
PERANCANGAN HARDWARE JAM DIGITAL DENGAN SISTEM KALENDER BERBASIS
MIKROKONTROLLER DS1307
TUGAS AKHIR
Saya mengakui bahwa tugas akhir ini adalah hasil kerja saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.
Medan, 7 Agustus 2010
PENGHARGAAN
Puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Kuasa, dengan
limpahan berkatnya penyusunan tugas akhir ini dapat diselesaikan dalam waktu yang
ditetapkan.
Ucapan terima kasih penulis sampaikan kepada berbagai pihak yang telah
banyak membantu penulis dalam penyelesaian Tugas Akhir ini yaitu kepada:
1. Bapak Prof. Dr. Eddy Marlianto, M.Sc, selaku Dekan Fakultas Matematika
dan Ilmu Pengetahuan Alam.
2. Bapak Drs. Syahrul Humaidi, M.Sc, selaku Ketua Program Studi D-III Fisika
Instrumentasi Fakultas Matematika dan Ilmu Pengetahuan Alam.
3. Ibu Dra. Justinon, M.Si, selaku Sekretaris Program Studi D-III Fisika
Instrumentasi Fakultas Matematika dan Ilmu Pengetahuan Alam.
4. Bapak Drs. Kurnia Brahmana, M.Si, selaku Dosen Pembimbing Tugas Akhir
yang telah memberikan bimbingan dan kepercayaan penuh pada penulis untuk
menyempurnakan tugas akhir ini.
5. Dosen, staff dan pegawai di Program Studi D-III Fisika Instrumentasi Fakultas
Matematika dan Ilmu Pengetahuan Alam.
6. Teristimewa kedua orangtua penulis Ayahanda S.Tanjung dan Ibunda N.A.Zai
Kepada Kakak dan Adik (Kak Titin, Kak Aril, Dek Ricky, Dek Idul dan Dek
Intan) atas perhatian, motivasi dan doanya.
7. Lia Murti Tirtayasa yang telah banyak membantu dan memberi dukungan serta
pemikiran kepada penulis.
8. Teman-teman di Kos-kosan Gg.Sipirok , khususnya (Putta The Gil, Marvel
Margukguk, Nasrul, Isman) atas dukungan semangat dan doanya.
9. Teman-teman seperjuangan FIN’07 , khususnya “GORGOM 07” (Taufik
Pasaribu dan Yatim Ibrahimovic) yang telah banyak memberi dukungan
semangat dan kerja sama selama masa perkuliahan.
Akhir kata penulis ucapkan terima kasih kepada semua pihak yang telah
ABSTRAK
DAFTAR ISI
Halaman
Persetujuan ii
Pernyataan iii
Penghargaan iv
Abstrak vi
Daftar Isi vii
Daftar Gambar x
Daftar Tabel xii
BAB 1 PENDAHULUAN
1.1. Latar Belakang Masalah 1
1.2. Rumusan Masalah 2
1.3. Tujuan Penulisan 2
1.4. Batasan Masalah 3
1.5. Sistematika Penulisan 3
BAB 2 LANDASAN TEORI
2.1.1.1. Komunikasi Serial Antar IC (I2C/TWI) 7
2.1.2.1. Konstruksi ATMega8L 18
2.1.2.2. Pin-pin pada Mikrokontroller ATMega8L 20
2.1.3. Menentukan Lamanya Satu Detik 21
2.1.3.1. Menentukan Satu Detik Menggunakan Osilator
Kristal 22
2.1.3.2. Menentukan Satu Detik Pada Mikrokontroller 24
2.1.4. Mikrokontroller AT89C2051 27
2.1.4.1. Pin-Pin Pada Mikrokontroller AT89C2051 28
2.2.1.9. Pernyataan Switch 41
4.3. Pengujian Rangkaian Driver 58
4.4. Pengujian Rangkaian Display Seven Segment 58
BAB 5 KESIMPULAN DAN SARAN
5.1. Kesimpulan 60
5.2. Saran 61
DAFTAR PUSTAKA 62
DAFTAR GAMBAR
Halaman
Gambar 2.1 Diagram pin RTC DS1307 6
Gambar 2.2 Block diagram DS1307 7
Gambar 2.3 Prinsip komunikasi serial bus I2C 8
Gambar 2.4 Proses transfer data pada I2C 11
Gambar 2.5 Data write-slave receiver mode 12
Gambar 2.6 Data read-slave transmitter mode 13
Gambar 2.7 IC mikrokontroller ATMega8L 20
Gambar 2.8 Skema penentuan detik, menit dan jam 22
Gambar 2.9 Rangkaian skematik untuk menentukan suatu detik menggunakan
kristal osilator 50 kHz 24
Gambar 2.10 Pembangkitan clock 1 MHz di port 1 pin 0 26
Gambar 2.11 Pembangkitan clock 500 kHz 26
Gambar 2.12 Pin IC Mikrokontroller AT89C2051 28
Gambar 2.13 Diagram fungsi register 31
Gambar 2.14 Diagram pin IC 4094 31
Gambar 2.16 Konfigurasi seven segment tipe common anoda 32
Gambar 2.17 Konfigurasi seven segment tipe common katoda 33
Gambar 2.18 Programmer setting 48
Gambar 2.19 Software 8051 editor, assembler, simulator 49
Gambar 2.20 ISP-Flash programmer 50
Gambar 3.1 Diagram blok rancangan jam digital dengan sistem kalender 51
Gambar 3.2 Rangkaian power supply 52
Gambar 3.3 Sistem minimum ATMega8L 53
Gambar 3.4 Rangkaian Driver 54
Gambar 3.5 Rangkaian skematik display seven segment 55
Gambar 3.6 Rangkaian Jam dan Menit 55
DAFTAR TABEL
Halaman
Tabel 2.1 Peta alamat RTC DS1307 15
Tabel 2.2 Register kontrol (control register) 16
Tabel 2.3 Rate select (RS1, RS0) 16
Tabel 2.4 Jumlah intruksi NOP yang di sisipkan dan frekuensi clock keluaran 27
Tabel 2.5 Fungsi masing-masing pin port 3 mikrokontroller AT89S2051 29
Tabel 2.6 Tipe data 36
Tabel 4.1 Konversi angka desimal ke heksadesimal 59
ABSTRAK
BAB 1
PENDAHULUAN
1.1.Latar Belakang Masalah
Seiring dengan kemajuan teknologi elektronika yang pesat saat ini sehingga dengan
kemajuan tersebut dapat membantu dan mempermudah pekerjaan yang dilakukan oleh
manusia menjadi lebih praktis, ekonomis dan efisien. Kemudian harga komponennya
yang relatif murah membuat elektronika menjadi sesuatu yang harus dipelajari karena
dalam dunia modern sekarang ini hampir seluruh aktivitas dalam kehidupan manusia
diliputi oleh perangkat elektronika.
Dalam kehidupan sehari-hari orang sangat butuh dengan alat penunjuk waktu
berapa, kita tahu berapa lama melakukan aktivitas dan dengan adanya jam kita dapat
mengatur jadwal.
Dengan adanya kebutuhan akan alat yang dapat mengetahui waktu dan
tanggal, penulis mencoba untuk membuat suatu alat dan Penulisan Tugas Akhir
dengan judul “PERANCANGAN HARDWARE JAM DIGITAL DENGAN
SISTEM KALENDER BERBASIS MIKROKONTROLLER DS1307”.
1.2.Rumusan Masalah
Berdasarkan uraian di atas, dapat dirumuskan beberapa masalah yang dibahas dalam
tugas akhir ini, yaitu :
1. RTC (Real Time Clock) DS 1307 sebagai penyimpan data-data jam dan
kalender.
2. IC 4094 merupakan IC shift register 8 tingkat yang berfungsi untuk
memindahkan data dari saluran serial ke saluran paralel.
3. Seven segment berfungsi sebagai display atau tampilan dari jam dan kalender.
1.3.Tujuan Penulisan
Adapun tujuan dari tugas akhir ini adalah :
1. Merancang jam digital yang dilengkapi dengan kalender.
2. Memanfaatkan DS 1307 sebagai mikrokontroller yang dapat diprogram sesuai
kebutuhan.
4. Sebagai salah satu syarat untuk dapat menyelesaikan Program Diploma Tiga
(D-III) Fisika Instrumentasi FMIPA Universitas Sumatera Utara.
1.4.Batasan Masalah
Dalam perencanaan penulisan ini terdapat beberapa batasan masalah sebagai berikut:
1. Cara kerja dari jam digital yang menggunakan mikrokontroller AT Mega8L.
2. RTC (Real Time Clock) yang digunakan adalah DS1307 yang menyimpan
data-data detik, menit, jam, tanggal, bulan, hari dalam seminggu, dan tahun
valid hingga 2100.
3. Untuk menampilkan angka waktu dan angka tanggal digunakan beberapa led
yang disusun menyerupai seven segment yang terdiri atas 12 digit yang
perinciannya adalah 2 digit untuk jam dan 2 digit untuk menit, serta 8 digit
untuk penunjukan kalender.
1.5.Sistematika Penulisan
Untuk mempermudah pembahasan dan pemahaman maka penulis melihat sistematika
pembahasan bagaimana sebenarnya prinsip kerja dari alat ini:
BAB 1 PENDAHULUAN
Dalam bab ini berisikan mengenai latar belakang, rumusan masalah,
tujuan penulisan, batasan masalah, serta sistematika penulisan.
Dalam bab ini dijelaskan tentang teori pendukung yang digunakan
untuk pembahasan dan cara kerja dari rangkaian. Teori pendukung itu
antara lain tentang DS 1307, bahasa program yang digunakan, dan
RTC (Real Time Clock), serta karakteristik dari komponen-komponen
pendukung.
BAB 3 PERANCANGAN ALAT DAN PROGRAM
Dalam bab ini penulis menyajikan perancangan alat, antara lain
diagram blok dari rangkaian, skematik dari masing-masing rangkaian.
BAB 4 PENGUJIAN ALAT DAN ANALISA
Dalam bab ini akan dibahas hasil analisa dari rangkaian dan sistem
kerja alat, penjelasan mengenai rangkaian-rangkaian yang digunakan.
BAB 5 PENUTUP
Dalam bab ini menjelaskan kesimpulan dan saran dari alat ataupun data
yang dihasilkan dari alat. Bab ini juga merupakan akhir dari penulisan
BAB 2
LANDASAN TEORI
2.1.Perangkat Keras
2.1.1.Real-Time Clock (RTC) DS1307
Real-time clock DS1307 adalah IC yang dibuat oleh perusahaan Dallas
Semiconductor. IC ini memiliki kristal yang dapat mempertahankan frekuensinya
dengan baik. Real-time clock DS1307 memiliki fitur sebagai berikut:
1. Real-time clock (RTC) menyimpan data-data detik, menit, jam, tanggal, bulan
dan hari dalam seminggu, dan tahun valid hingga 2100.
3. Antarmuka serial Two-wire (I2C).
4. Sinyal keluaran gelombang-kotak terprogram (Programmable squarewave).
5. Deteksi otomatis kegagalan-daya (power-fail) dan rangkaian switch.
6. Konsumsi daya kurang dari 500nA menggunakan mode baterei cadangan
dengan operasional osilator.
7. Tersedia fitur industri dengan ketahanan suhu: -40°C hingga +85°C.
8. Tersedia dalam kemasan 8-pin DIP atau SOIC.
Sedangkan daftar pin RTC DS1307 adalah sebagai berikut:
1. VCC – Primary Power Supply.
2. X1, X2 – 32.768kHz Crystal Connection.
3. VBAT – +3V Battery Input.
4. GND – Ground.
5. SDA – Serial Data.
6. SCL – Serial Clock.
Gambar 2.1. Diagram pin RTC DS1307 (Data Sheet IC Real-Time Clock DS1307).
Gambar 2.2. Block Diagram DS1307
2.1.1.1.Komunikasi Serial antar IC (I²C/ TWI)
I2C singkatan dari Inter Integrated Circuit, adalah sebuah protokol untuk komunikasi
serial antar IC, dan sering disebut juga Two Wire Interface (TWI). Bus yang
digunakan untuk komunikasi antara mikrokontroller dan divais periferal seperti
memori, sensor temperatur dan I/O expander.
2.1.1.2.Prinsip Komunikasi I²C
Komunikasi dilakukan melalui dua jalur: SDA (serial data) dan SCL (serial clock).
Setiap divais I²C memiliki 7-bit alamat yang unik. MSB adalah fix dan ditujukan
Tiga bit berikutnya memungkinkan 8 kombinasi alamat I²C, yang berarti,
dimungkinkan 8 divais dengan tipe yang sama, beroperasi pada bus I²C yang sama.
Pengiriman data hanya dapat dimulai ketika saluran tidak sibuk, ditandai
dengan kondisi HIGH yang cukup lama pada pin SCL maupun SDA.
Selama pengiriman data, saluran data (SDA) harus dalam keadaan stabil ketika
saluran clock (SCL) dalam keadaan high. Perubahan kondisi SDA pada saat SCL high
akan dianggap sebagai sinyal-sinyal kendali, seperti: sinyal START (HIGH ke LOW)
atau sinyal STOP (LOW ke HIGH).
Gambar 2.3. Prinsip komunikasi serial bus I²C (Data Sheet RTC DS1307).
Byte pertama setelah sinyal START yang dikirim oleh master adalah alamat slave.
Pengalamatan 7-bit memungkinkan 128 divais pada bus yang sama. Alamat I²C
dikirim dalam byte pertama. LSB dari byte ini digunakan untuk menunjukkan bila
master akan melakukan penulisan (0) atau pembacaan (0) terhadap slave.
Divais yang mengirim data sepanjang bus disebut master, divais yang
menerima data disebut slave. Master memulai transmisi dengan sebuah sinyal start,
dan menghentikan transmisi dengan sebuah sinyal stop pada jalur SDA. Selama sinyal
start dan stop, jalur SCL harus dalam keadaan HIGH. Setelah master memulai
pengiriman data dengan sebuah sinyal start, master menulis satu byte alamat divais
kepada slave. Setiap byte data harus memiliki panjang 8-bit. Slave harus memberikan
konfirmasi dari byte data yang diterimanya dengan sebuah bit acknowledge (ACK).
(Data Sheet IC Real-Time Clock DS1307).
2.1.1.4.Defenisi-defenisi Kondisi Bus
Berikut ini adalah defenisi kondisi bus pada sistem komunikasi serial I²C/ TWI:
1. Bus tidak sibuk (bus not busy): menyatakan pada saat ini bus tidak sibuk
yaitu pada saat jalur clock (SCL) dan jalur data (SDA) dua-duanya dalam
keadaan HIGH.
2. Mulai transfer data (start data transfer): ditandai dengan perubahan kondisi
3. Stop transfer data (stop data transfer): ditandai dengan perubahan kondisi
SDA dari LOW ke HIGH ketika SCL dalam kondisi HIGH.
4. Data valid: data yang dikirim bit demi bit dianggap valid jika setelah START,
kondisi SDA tidak berubah selama SCL HIGH, baik SDA HIGH maupun SDA
LOW tergantung dari bit yang ingin ditransfer. Setiap siklus HIGH SCL baru
menandakan pengiriman bit baru. Duty cycle untuk SCL tidak mesti 50%,
tetapi frekuensi kemunculannya hanya ada dua macam, yaitu mode standar 100
kHz dan fast mode atau mode cepat 400 kHz. Setelah SCL mengirimkan sinyal
HIGH yang kedelapan, arah transfer SDA berubah, sinyal kesembilan pada
SDA ini dianggap sebagai acknowledge dari receiver ke transmitter. DS1307
hanya bisa melakukan transfer pada mode standar 100 kHz.
5. Pemberitahuan (Acknowledge): setiap receiver wajib mengirimkan sinyal acknowledge atau sinyal balasan setiap selesai pengiriman 1-byte (8-bit data).
Master harus memberikan ekstra clock atau clock tambahan pada SCL, yaitu
clock kesembilan untuk memberikan kesempatan receiver mengirimkan sinyal
acknowledge ke transmitter berupa keadaan LOW pada SDA selama SCL
HIGH. Meskipun master berperan sebagai receiver, ia tetap sebagai penentu
sinyal STOP. Pada bit akhir penerimaan byte terakhir, master tidak
mengirimkan sinyal acknowledge, SDA dibiarkan HIGH oleh receiver dalam
hal ini master, kemudian master mengubah SDA dari LOW menjadi HIGH
yang berarti sinyal STOP. (Data Sheet IC Real-Time Clock DS1307).
Mode pengoperasian transfer data berdasarkan kondisi bit R/W, ada dua jenis transfer
data yaitu: transfer data dari transmitter master ke receiver slave dan transfer data dari
transmitter slave ke receiver master.
A.Transfer Data dari Transmitter Master ke Receiver Slave
Byte pertama yang dikirimkan oleh master adalah alamat slave, setelah itu master
mengirimkan sejumlah byte data. Slave atau receiver mengirimkan sinyal
acknowledge setiap kali menerima 1-byte data. Pada tiap byte, bit pertama yang
dikirim adalah MSB dan bit yang terakhir adalah LSB.
B.Transfer Data dari Transmitter Slave ke Receiver Master
Meskipun master berperan sebagai receiver, byte pertama dikirimkan oleh master
berupa alamat slave. Setelah itu slave mengirimkan bit acknowledge, dilanjutkan
dengan pengiriman sejumlah byte dari slave ke master. Master mengirimkan bit
acknowledge untuk setiap byte yang diterimanya kecuali byte terakhir. Pada akhir
byte, master mengirimkan sinyal ‘not avknowledge’, setelah itu master mengirimkan
sinyal STOP.
2.1.1.6.Mode Operasi RTC DS1307 Melalui I²C/TWI
IC RTC DS1307 beroperasi dalam dua mode, yaitu Slave Receiver Mode (Write
Mode) dan Slave Transmitter Mode (Read Mode).
A.Slave Receiver Mode (Write Mode):
Mode penerima slave (write mode) dalam pengiriman sinyal memiliki urutan:
1. Setelah sinyal START, master mengirim byte pertama yang terdiri dari 7-bit
address IC DS1307, yaitu 1101000 dan 1-bit R/W, yaitu LOW, karena ini
adalah operasi WRITE.
2. Hardware pada DS1307 akan membaca address yang dikirimkan oleh master
tersebut, kemudian slave, dalam hal ini IC DS1307 akan bit-acknowledge pada
SDA.
3. Setelah itu master akan mengirimkan address tempat data pertama akan
diakses. Address ini berbeda dengan 7-bit address tadi, ini adalah address “isi”
IC DS1307, bukan address dari IC DS1307. Address ini akan disimpan dalam
register pointer oleh DS1307 yang juga mengirim sinyal acknowledge ke
master.
4. Setelah itu master dapat mengirimkan sejumlah byte ke slave, dimana setiap
byte dibalas dengan acknowledge oleh slave. Setiap menerima byte baru isi
berikutnya dari lokasi data pada DS1307. Setelah menerima acknowledge
terakhir, master akan mengirim sinyal STOP untuk mengakhiri transfer data.
Gambar 2.5. Data write – slave receiver mode (Data sheet RTC DS1307).
B.Slave Transmitter Mode (Read Mode):
Sama seperti mode write, setelah master memberikan sinyal START, ia mengirimkan
byte pertama yang terdiri dari 7-bit dalam IC DS1307, yaitu 1101000, diikuti 1-bit
R/W, yaitu HIGH. Setelah menerima byte pertama ini, slave, dalam hal ini DS1307
akan mengirimkan bit acknowledge pada SDA. Setelah itu slave mulai mengirimkan
sejumlah byte ke master. Setiap byte pengiriman dibalas dengan 1-bit acknowledge
oleh master. Byte pertama yang dikirimkan oleh slave atau DS1307 adalah data yang
alamatnya ditunjuk oleh register pointer pada DS1307. Setiap kali pengiriman byte ke
master, secara otomatis isi register pointer ditambah satu. DS1307 akan terus menerus
mengirimkan byte ke master sampai master mengirimkan bit ‘not acknowledge’
Gambar 2.6. Data read – slave transmitter mode (Data sheet RTC DS1307).
2.1.1.7.Peta Alamat (Address Map) RTC DS1307
Pemetaan alamat (address map) pada RTC dimana register-register RTC di tempatkan
pada lokasi pengalamatan 00h sampai 07h. sedangkan register-register RAM (Random
Access Memory) ditempatkan pada lokasi pengalamatan 08h sampai 3Fh.
Khusus alamat 02H, bit-6 LOW untuk siklus jam 00 – 24 dan HIGH untuk
siklus jam 00 – 12. Bit-5 HIGH pada saat PM dan LOW pada saat AM atau angka
puluhan jika bit-6 LOW.
2.1.1.8.Jam dan Kalender
Informasi waktu dan kalender diperoleh dengan membaca byte register yang
sesuai. Tabel 2.1 menunjukkan RTC register. Waktu dan kalender diatur atau diawali
dengan menuliskan byte register yang sesuai. Isi waktu dan register kalender dalam
format BCD. Pergantian hari dan minggu terjadi pada tengah malam. Nilai-nilai yang
sesuai dengan hari dan minggu yang digunakan harus sekuensial (yaitu, jika 1 sama
dengan hari Minggu, kemudian 2 sama dengan Senin, dan seterusnya). Ketidaklogisan
diatur ke 0, osilator ini diaktifkan. Pada penerapan listrik pertama ke perangkat,
register waktu dan tanggal biasanya diatur ulang ke 01/01/00 01 00:00:00 (MM / DD /
YY Dow HH: MM: SS). Register CH bit pada detik-detik akan ditetapkan ke 1. Jam
ini dapat dihentikan setiap kali fungsi ketepatan waktu tidak diperlukan, yang dapat
meminimalkan arus.
DS1307 dapat dijalankan baik dalam jam bermodus 12 maupun dengan jam
bermodus 24. Bit 6 dari jam didefinisikan sebagai register bit pada mode pilihan
12-jam atau 24-12-jam. Ketika tinggi, modus 12-12-jam dipilih. Pada modus 12-12-jam, bit 5
adalah bit AM / PM dengan logika tinggi menjadi PM. Pada modus 24-jam, bit 5
adalah 10-bit kedua jam ( 20-23 jam ). Nilai jam harus kembali setiap kali masuk
modus bit 12/24-jam berubah.
Ketika membaca atau menulis waktu dan tanggal register, penggunaan
penyangga digunakan untuk mencegah kesalahan ketika internal register diperbaharui.
Ketika membaca waktu dan register saat ini, penggunaan penyangga disinkronisasi ke
register internal pada setiap I²C START. Informasi waktu dibaca dari register
sekunder sementara jam terus berjalan. Hal ini menghilangkan kebutuhan untuk
membaca kembali register dalam kasus register internal update selama membaca.
Rantai pembagi diatur ulang setiap kali detik register tertulis. Transfer terjadi pada I²C
dari DS1307. Setelah rantai pembagi diatur ulang, untuk menghindari masalah
rollover, waktu yang tersisa dan tanggal register harus ditulis dalam satu detik.
.
2.1.1.9.Register Kontrol (Control Register)
Register kontrol pada RTC DS1307 digunakan untuk mengontrol operasi pada pin
SQW/OUT.
Tabel 2.2. Register kontrol (control register) (Data sheet RTC DS1307).
Keterangan bit-bit pada register kontrol:
1. Bit-7: Output Control (OUT) yaitu jika pin SQW/OUT di-disable sehingga
tidak mengeluarkan clock, bit-7 ini menentukan level sinyal yang keluar dari
pin SQW/OUT. Jika bit-7 ini LOW, maka level pin SQW/OUT ikut LOW dan
jika bit-7 ini HIGH, maka level pin SQW/OUT ikut HIGH.
2. Bit-4: Square-wave Enable digunakan untuk enable/ disable keluarnya clock
dari pin SQW/OUT. HIGH berarti enable dan LOW berarti disable. Frekuensi
sinyal clock yang keluar dari pin SQW/OUT ditentukan oleh kondisi bit-1 dan
bit-0.
3. Bits 1, 0: Rate Select (RS1, RS0) untuk menentukan frekuensi yang keluar
dari pin SQW/OUT. Kombinasi nilai RS0, dan RS1 menghasilkan output
gelombang kotak dengan nilai frekuensi masing-masing yang ditunjukkan oleh
Tabel 2.3. Rate select (RS1, RS0) (Data sheet RTC DS1307).
2.1.2.Mikrokontroller ATMega8L
Mikrokontroller, sebagai suatu terobosan teknologi mikrokontroller dan
mikrokomputer, hadir memenuhi kebutuhan pasar (market need) dan teknologi baru.
Sebagai teknologi baru, yaitu teknologi semi konduktor dengan kandungan transistor
yang lebih banyak namun hanya membutuhkan ruang kecil serta dapat diproduksi
secara massal (dalam jumlah banyak) sehingga harga menjadi lebih murah
(dibandingkan mikroprosessor). Sebagai kebutuhan pasar, mikrokontroller hadir untuk
memenuhi selera industri dan para konsumen akan kebutuhan dan keinginan alat-alat
bantu dan mainan yang lebih canggih serta dalam bidang pendidikan.
Tidak seperti sistem komputer, yang mampu menangani berbagai macam
program aplikasi (misalnya pengolah kata, pengolah angka, dan lain sebagainya),
Mikrokontroller hanya bisa digunakan untuk satu aplikasi tertentu saja. Perbedaan
lainnya terletak pada perbandingan RAM dan ROM-nya. Pada sistem komputer
perbandingan RAM dan ROM-nya besar, artinya program-program pengguna
disimpan dalam ruang RAM yang relatif besar, sedangkan rutin-rutin antar muka
perangkat keras disimpan dalam ruang ROM yang kecil. Sedangkan Pada
mikrokontroller, perbandingan ROM dan RAM-nya yang besar artinya program
digunakan sebagai tempat penyimpanan sederhana sementara, termasuk
register-register yang digunakan pada mikrokontroller yang bersangkutan.
Mikrokontroller ATmega8L merupakan salah satu keluarga dari MCS-51
keluaran Atmel. Jenis mikrokontroller ini pada prinsipnya dapat digunakan untuk
mengolah data per bit ataupun data 8 bit secara bersamaan. Pada prinsipnya program
pada mikrokontroller dijalankan bertahap, jadi pada program itu sendiri terdapat
beberapa set instruksi dan tiap instruksi itu dijalankan secara bertahap atau berurutan.
Beberapa fasilitas yang dimiliki oleh mikrokontroller ATmega8L adalah
sebagai berikut :
1. Saluran I/O sebanyak 23 buah terbagi menjadi 3 port.
2. ADC sebanyak 6 saluran dengan 4 saluran 10 bit dan 2 saluran 8 bit
3. Tiga buah timer counter, dua diantaranya memiliki fasilitas pembanding.
4. CPU dengan 32 buah register.
5. EEPROM sebesar 512 byte.
6. Empat buah programable port I/O yang masing-masing terdiri dari delapan
buah jalur I/O.
7. Memori flash sebesar 8K bytes sistem Self-progamable Flash.
8. Kemampuan untuk melaksanakan operasi aritmatika dan operasi logika.
9. Kecepatan dalam melaksanakan instruksi per siklus 1 mikrodetik pada
2.1.2.1.Konstruksi ATMega8L
Mikrokontroller ATmega8L hanya memerlukan tambahan 3 kapasitor, 1 resistor dan 1
kristal serta catu daya 5 volt. Kapasitor 10 micro-fard dan resistor 10 kilo Ohm
dipakai untuk membentuk rangkaian riset. Dengan adanya rangkaian riset ini
ATmega8L otomatis diriset begitu rangkaian menerima catu daya. Kristal dengan
frekuensi maksimum 24MHz dan kapasitor 30 mikro-farad dipakai untuk melengkapi
rangkaian oscilator pembentuk clock yang menentukan kecepatan kerja
mikrokontroller.
Memori merupakan bagian yang sangat penting pada mikrokontroller.
Mikrokontroller memiliki dua macam memori yang sifatnya berbeda. Read Only
Memory (ROM) yang isinya tidak berubah meskipun IC kehilangan catu daya. Sesuai
dengan keperluannya, dalam susunan MCS-51 memori penyimpanan program ini
dinamakan sebagai memori program.
Random Access Memory (RAM) isinya akan sirna begitu IC kehilangan catu
daya, dipakai untuk menyimpan data pada saat program bekerja. RAM yang dipakai
untuk menyimpan data ini disebut sebagai memori data. Ada berbagai jenis ROM.
Untuk mikrokontroller dengan program yang sudah baku dan diproduksi secara
massal, program diisikan kedalam ROM pada saat IC mikrokontroller dicetak dipabrik
IC. Untuk keperluan tertentu mikrokontroller menggunakan ROM yang dapat diisi
ulang atau Programble-Eraseable ROM yang disingkat menjadi PROM (PEROM).
dinilai mahal dan ditinggalkan setelah ada flash PEROM yang harganya jauh lebih
murah.
Jenis memori yang dipakai untuk memori program ATmega8L adalah flash
PEROM, program untuk mengendalikan mikrokontroller diisikan ke memori itu lewat
bantuan alat yang dinamakan sebagai ATmega8L flash PEROM Programmer.
ATmega8L dilengkapi UART (Universal Asyncronous Receiver/Transmiter) yang
biasa dipakai untuk komunikasi data secara seri. Jalur untuk komunikasi data seri
(RXD dan TXD) diletakkan berhimpitan dengan P1.0 dan P1.1. pada kaki nomor 2
dan 3, sehingga kalau sarana input/output bekerja menurut fungsi waktu. Clock
penggerak untaian pencacah ini bisa berasal dari oscillator kristal atau clock yang
diumpan dari luar lewat T0 dan T1/T0 dan T1 berhimpitan dengan P3.4 dan P3.5,
sehingga P3.4 dan P3.5 tidak bisa dipakai untuk jalur input/output paralel kalau T0
dan T1 dipakai.
ATmega8L mempunyai enam sumber pembangkit interupsi, dua diantaranya
adalah sinyal interupsi yang diumpankan ke kaki INT0 dan INT1. Kedua kaki ini
berhimpitan dangan P3.2 dan P3.3 sehingga tidak bisa dipakai sebagai jalur input /
output paralel kalau INT0 dan INT1 dipakai untuk menerima sinyal interupsi. Port1
dan 2, UART, Timer 0, Timer 1 dan sarana lainnya merupakan yang secara fisik
merupakan RAM khusus, yang ditempatkan di Special Function Register (SFR).
Deskripsi pin-pin pada mikrokontroller ATmega8L :
Gambar 2.7. IC Mikrokontroler ATmega8L
1. VCC - Merupakan pin yang berfungsi sebagai pin masukan catu daya.
2. GND – Merupakan pin ground.
3. Port B (PB0 – PB7) – Merupakan pin I/O dua arah dan pin fungsi khusus,
yaitu sebagai Timer/Counter, komperator analog dan SPI.
4. Port C (PC0 – PC7) – Merupakan pin I/O dua arah dan pin fungsi khusus,
yaitu TWI, komperator analog, input ADC dan Timer Osilator.
5. Port D (PD0 – PD7) – Merupakan pin I/O dua arah dan pin fungsi khusus,
yaitu komperator analog, interupsi eksternal dan komunikasi serial.
6. RESET – Merupakan pin yang digunakan untuk mereset mikrokontoler.
7. XTAL1 dan XTAL2 – Merupakan pin masukan clock eksternal.
9. AREF – Merupakan pin tegangan referensi ADC.
2.1.3.Menentukan lamanya satu detik
Baik jam digital maupun analog pada prinsipnya sama, yaitu frekuensi getaran.
Perbedaannya hanya terletak pada sumber getaran / frekuensinya. Kalau jam analog
menggunakan ayunan mekanik dan gear dengan kombinasi tertentu sehingga dia
mampu untuk menentukan lamanya 1 detik dan menghitung 1 menit = 60 detik.
Skema jam digital sumber frekuensinya dengan detak/ clock ditunjukkan pada gambar
2.8.
Gambar 2.8. Skema penentuan detik, menit dan jam
Sebuah pembangkit getaran sumber detak 1 Hz akan dicacah dengan
menggunakan MOD 60, artinya 1 Hz = 1 detik, setelah melewati MOD 60, maka 60
detik = 1 menit. Begitu pula dengan jam, 60 menit = 1 jam dan 24 jam = 1 hari (pukul
00 : 00 : 00)
Pembagian suatu sinyal osilator dengan menggunakan frekuensi kristal untuk
menghasilkan akurasi (0,01%) waktu 1 detik. Dua buah kounter 12 stage (CD4040)
membentuk sebuah kounter biner 24 stage dan bit-bit yang sesuai digerbangkan
bersama untuk memperoleh hasil yang diinginkan.
Menggunakan sebuah kristal 50 kHz, perhitungan 50000 diperoleh ketika
bit-bit yang sesuai dijumlahkan untuk menghasilkan nilai 50000 adalah berlogika high
(1). Bit-bit sesuai yang dijumlahkan adalah: bit 15 (= 32768) + bit 14 (= 16384) + bit
9 (= 512) + bit 8 (= 256) + bit 6 (= 64) + bit 4 (= 16). Bit 14 dan 15 adalah stage ke-3
dan ke-4 pada kounter kedua (Q3 – pin 6 dan Q4 – pin 5), bit 0 adalah stage pertama
pada kounter pertama (Q1 – pin 9). Untuk menggunakan kristal 100 kHz,
masing-masing bit digeser ke kanan sebanyak satu kali menjadi: 65536(bit 16) + 32768(bit
15) + 1024(bit 10) + 512(bit 9) + 128(bit 7) + 32(bit 5) = 100.000. Dan jika
menggunakan kristal 1MHz, bit-bit berikut ini akan diperlukan:
Bit 19 – Right counter Q8 – pin 1 Decimal value = 524288
18 Q7 – pin 4 262144
17 Q6 – pin 2 131072
16 Q5 – pin 3 65536
14 Q3 – pin 6 16384
Bit 9 – Left counter Q10 – pin 14 512
6 Q7 – pin 4 64
---
Pada 1 MHz, resistor 330K pada rangkaian osilator dibutuhkan untuk
peredaman yang setara dengan kira-kira 15K. Ketika hitungan terminal tercapai,
sebuah pulsa reset 7 uS dibangkitkan oleh inverter Schmitt Trigger yang mengikuti
gerbang NAND. Resistor 47K dan kapasitor 470 pF menopang output agar
kounter-kounternya menghasilkan reset ke nol. Ini kurang dari satu siklus klok pada 50kHz
dan tidak menghasilkan error akan menjadi sama dengan 7 siklus pada 1 MHz yang
akan menyebabkan kounter kehilangan 7 mikro sekon waktu dalam setiap detiknya.
Ini bukan error yang besar (7 bagian dari 1 juta). Lebar pulsa reset minimum untuk
kounter CMOS kira-kira 1.5 mikro sekon, jadi pulsa reset tidak dapat dibuat terlalu
singkat.
Gambar 2.9. Rangkaian skematik untuk menentukan satu detik menggunakan kristal
osilator 50 kHz
Sebuah mikrokontroller mempunyai beberapa port keluaran. Dari port tersebut dapat
dikeluarkan isyarat clock dengan frekuensi tertentu. Arus rendah clock dapat
dikeluarkan dengan memberikan logika rendah pada keluaran port tersebut; dan arus
tinggi clock dapat dikeluarkan dengan memberikan logika tinggi pada keluaran port
tersebut. Frekuensi tertinggi clock yang dapat dikeluarkan sebuah port tergantung
pada frekuensi clock yang diberikan kepada mikrokontroller tersebut dan pemilihan
instruksi yang tepat.
Pembangkit isyarat clock
Pembangkitan isyarat clock dapat dilakukan minimal dengan tiga cara. Pertama,
dengan mengeluarkan data logika tinggi diikuti dengan data logika rendah secara
periodis. Hal ini dapat dilakukan dengan instruksi pemindahan data seperti MOV.
Agar dapat diperoleh frekuensi clock cukup tinggi, maka dipilih instruksi yang
mempunyai waktu eksekusi paling kecil yaitu satu siklus. Contoh instruksi tersebut
adalah MOV P1, A (Atmel Corp., 1997). Jika suatu mikrokontroller dioperasikan
dengan clock 24 MHz, maka dengan instruksi tersebut perubahan logika keluaran port
1 dapat dilakukan setiap 0,5 mikrodetik sekali.
Cara kedua dengan mengeset dan mereset sebuah pin port keluaran. Hal ini
dapat dilakukan dengan instruksi SETB <pin_port> dan CLR <pin_port>. Cara kedua
ini mempunyai kelebihan tidak terlibatnya data di memori lain. Sedangkan cara ketiga
adalah dengan menegasikan logika port keluaran. Dengan menggunakan instruksi
CPL <pin_port>, maka logika keluaran di suatu pin pada port keluaran dapat
Pembangkit clock 1 MHz
Dengan mengoperasikan mikrokontroller pada frekuensi 24 MHz, maka satu siklus
bahasa mesin yang terdiri dari enam fase dapat dieksekusi dalam waktu 0,5
mikrodetik (Atmel Corp., 2007). Dengan menggunakan instruksi CPL P1.0
berturut-turut, maka di pin 0 port 1 akan diperoleh keluaran isyarat clock dengan periode 1
mikrodetik atau berfrekuensi 1 MHz.
Keluaran pin 0 port 1 diharapkan berbentuk gelombang kotak dengan
frekuensi 1 MHz. Namun dengan adanya efek kapasitif pada keluaran port tersebut,
bentuk gelombang berbentuk keluaran mungkin tidak kotak, tapi mendekati keluaran
gelombang kotak yang telah melalui untai integrator. Untuk mengembalikan bentuk
tersebut ke gelombang kotak dapat digunakan gerbang dengan pemicu Schmitt,
misalnya gerbang NOT dengan pemicu Schmitt 74LS14 (Tocci dan Widmer, 1998).
Gambar 2.10. Pembangkitan clock 1 MHz di port 1 pin 0
(Teknoin, Volume 13, Nomor 2, Desember 2008, 6-10. ISSN: 0853-8697).
Pembangkit clock kurang dari 1 MHz
Clock dengan frekuensi kurang dari 1 MHz dapat dibentuk dengan menunda
pelaksanaan instruksi CPL P1.0 berikutnya. Penundaan dapat dilakukan dengan
Instruksi tersebut membutuhkan waktu eksekusi satu siklus. Penyisipan satu instruksi
NOP di antara dua instruksi CPL P1.0 akan menunda eksekusi instruksi CPL P1.0
berikutnya selama satu siklus. Dengan mengoperasikan mikrokontroler ini pada clock
24 MHz, maka instruksi CPL berikutnya akan tertunda satu siklus atau 0,5 mikrodetik,
sehingga selang eksekusi dua instruksi CPL adalah 1 μs.
Gambar 2.11. Pembangkitan clock 500 kHz
(Teknoin, Volume 13, Nomor 2, Desember 2008, 6-10. ISSN: 0853-8697)
Penyisipan satu instruksi NOP akan membentuk clock dengan periode 2
mikrodetik atau berfrekuensi 500 kHz. Penyisipan dua instruksi NOP akan
membentuk clock dengan frekuensi 333.333 Hz. Jumlah instruksi NOP yang dapat
disisipkan dan frekuensi clock keluaran pada tabel 2.4.
Tabel 2.4. Jumlah instruksi NOP yang disisipkan dan frekuensi clock keluaran
(Teknoin, Volume 13, Nomor 2, Desember 2008, 6-10. ISSN: 0853-8697).
NOP yang disisipkan 1 2 3 4 5 6 7 8 9
2.1.4.Mikrokontroller AT89C2051
Mikrokontroller AT89C2051 merupakan salah satu keluarga dari MCS-51 keluaran
Atmel. Jenis Mikrokontroller ini pada prinsipnya dapat digunakan untuk mengolah
data per bit ataupun data 8 bit secara bersamaan.
Pada prinsipnya program pada mikrokontroller dijalankan bertahap, jadi pada
program itu sendiri terdapat beberapa set instruksi dan tiap instruksi itu dijalankan
secara bertahap atau berurutan.
Beberapa fasilitas yang dimiliki oleh mikrokontroller AT89C2051 adalah
sebagai berikut:
1. Sebuah Central Processing Unit 8 bit.
2. Osilator internal dan rangkaian pewaktu.
3. RAM internal 128 byte.
4. Flash memori 2 Kbyte.
5. Lima buah jalur interupsi (dua buah interupsi eksternal dan tiga buah interupsi
internal).
6. Empat buah programable port I/O yang masing-masing terdiri dari delapan buah
jalur I/O.
7. Sebuah port serial dengan kontrol serial full duplex UART.
8. Kemampuan untuk melaksanakan operasi aritmatika dan operasi logika.
9. Kecepatan dalam melaksanakan instruksi per siklus 1 mikrodetik pada frekuensi 12
AT89C2051
2.1.4.1.Pin-pin pada Mikrokontroller AT89C2051
Deskripsi pin-pin pada Mikrokontroller AT89C2051 adalah sebagai berikut:
Gambar 2.12. Pin IC Mikrokontroller AT89C2051
1. VCC (Pin 20) – Supply tegangan.
2. GND (Pin 10) – Ground.
3. Port 3 (Pin 2, 3, 6 – pin 9, 11) – Port 3 merupakan 7 bit port I/O dua arah dengan internal pullup. Port 3 mempunyai fungsi pin masing-masing yang ditunjukkan
pada tabel 2.5.
Tabel 2.5. Fungsi masing-masing pin port 3 mikrokontroler AT89S2051.
Port (pin)
Fungsi
P3.0 (pin 2) RXD (port serial penerima data).
P3.1 (pin 3) TXD (port serial pengirim data).
P3.2 (pin 6) INT0 (input interupsi eksternal 0, aktif low).
P3.3 (pin 7) INT1 (input interupsi ekstrernal 1, aktif low).
P3.4 (pin 8) T0 (eksternal input timer / counter 0).
P3.5 (pin 9) T1 (eksternal input timer / counter 1).
P3.7 (pin 11)
RD (Read, aktif low) Sinyal kontrol pembacaan memori data
input-output eksternal ke port 0.
4. RST (pin 1) – Reset akan aktif dengan memberikan input high selama 2 siklus.
5. XTAL1 (pin 4) – Input untuk clock internal.
2.1.5.IC 4094
IC 4094 adalah suatu IC shift register 8 tingkat yang memiliki register latch untuk
setiap bit untuk keperluan memindahkan data dari saluran serial kesaluran paralel
dengan 3 tingkatan pergeseren bit Q0 sampai bit Q7 menuju output. Output paralel
dapat dihubungkan langsung dengan jalur data umum. Data digeser pada perubahan
sinyal clock dari Low ke High, selanjutnya data digeser dari register geser keregister
penyimpanan, kemudian dengan memberikan logika high pada pin OE akan
menggeser data dari register penyimpangan menuju register output.
Gambar 2.13. Diagram fungsi register (Data Sheet IC 4094)
Ada dua serial yang keluar dari IC 4094 yaitu Qs dan Q’s yang disediakan
pergeseran sinyal clock dari logika low ke logika high untuk memungkinkan
pergeseran dengan kecepatan tinggi dalam keperluan penyambungan beberapa IC
secara serial. Output pada Q’s akan bergeser pada saat sinyal clock berubah dari
logika high ke logika low. Gambar 2.14 menunjukkan posisi dan penamaan pin untuk
IC 4094.
Gambar 2.14. Diagram Pin IC 4094 (Data sheet IC 4094).
Keterangan:
D = data input
CP = clock input
STR = strobe input
EO = ouput enable input
QS, Q’S = output serial
Q0 S/d Q7 = output parallel
2.1.6.Seven Segment
Seven segment merupakan LED yang disusun atas 7 segment yang dipergunakan
Gambar 2.15. Tampilan seven segmen
Seven segment terdiri dari dua konfigurasi, yaitu common anoda dan common katoda.
Pada seven segment tipe common anoda, anoda dari setiap LED dihubungkan menjadi
satu kemudian dihubungkan ke sumber tegangan positif dan katoda dari
masing-masing LED berfungsi sebagai input dari seven segment, seperti ditunjukkan pada
gambar 2.16.
Gambar 2.16. Konfigurasi seven segment tipe common anoda.
Sesuai dengan gambar 2.16, maka untuk menyalakan salah satu segmen, maka
katodanya harus diberi tegangan 0 volt atau logika low. Misalnya jika segmen a akan
dinyalakan, maka katoda pada segmen a harus diberi tegangan 0 volt atau logika low,
dengan demikian maka segmen a akan menyala. Demikian juga untuk segmen
lainnya.
Pada seven segment tipe common katoda, katoda dari setiap LED dihubungkan
menjadi satu kemudian dihubungkan ke ground dan anoda dari masing-masing LED
berfungsi sebagai input dari seven segment.
Sesuai dengan gambar 2.17, maka untuk menyalakan salah satu segmen, maka
anodanya harus diberi tegangan minimal 3 volt atau logika high. Misalnya jika
segmen a akan dinyalakan, maka anoda pada segmen a harus diberi tegangan minimal
3 volt atau logika high, dengan demikian maka segmen a akan menyala. Demikian
juga untuk segmen lainnya.
2.2.Perangkat Lunak
2.2.1.Pemrograman Bahasa C
Pencipta bahasa C adalah Brian W. Kernighan dan Dennis M. Ritchie pada sekitar
tahun 1972. C adalah bahasa pemrograman terstruktur, yang membagi program dalam
bentuk sejumlah blok. Tujuannya adalah untuk memudahkan dalam pembuatan dan
pengembangan program. Program yang ditulis dengan mengunakan C mudah sekali
untuk dipindahkan dari satu jenis mesin ke jenis mesin lainnya. Hal ini berkat adanya
standarisasi bahasa C yaitu berupa standar ANSI (American National Standards
Institute) yang dijadikan acuan oleh para pembuat kompiler C. (Agus Bejo, 2008).
Sebuah program dalam bahasa C setidaknya harus memiliki sebuah fungsi. Fungsi
dasar ini disebut dengan fungsi utama (fungsi main) dan memiliki kerangka program
sebagai berikut:
void main (void)
{
// pernyataan-pernyataan
}
Jika kita memiliki beberapa fungsi yang lain maka fungsi utama inilah yang
memiliki kedudukan paling tinggi dibandingkan fungsi-fungsi yang lain sehingga
setiap kali program dijalankan akan selalu dimulai dari memanggil fungsi utama
terlebih dahulu. Fungsi-fungsi yang lain dapat dipanggil setelah fungsi utama
dijalankan melalui pernyataan-pernyataan yang berada didalam fungsi utama. Contoh:
// prototype fungsi inisialisasi port
Void inisialisasi_port (char A, char B, char C, char D)
{
Inisialisasi_port (0xFF, 0xF0, 0x0F, 0x00) ;
Pengenal (identifier) merupakan sebuah nama yang diisikan oleh pemrogram untuk
menunjukkan identitas dari sebuah konstanta, variable, fungsi, label atau tipe data
khusus. Pemberian nama sebuah pengenal dapat ditentukan bebas sesuai keinginan
pemrogram tetapi harus memenuhi aturan berikut:
1. Karakter pertama tidak boleh menggunakan angka.
2. Karakter kedua dapat berupa huruf, angka, atau garis bawah.
3. Tidak boleh menggunakan spasi.
4. Case sensitive, yaitu huruf kapital dan huruf kecil dianggap berbeda.
5. Tidak boleh menggunakan kata-kata yang merupakan sintaks maupun operator
dalam pemrograman C, misalnya: void, short, const, if, bit, long, case, do,
switch, char, float, for, else, break, int, double, include, while.
2.2.1.3.Tipe Data
Tipe data merupakan bagian program yang paling penting karena tipe data
mempengaruhi setiap instruksi yang akan dilaksanakan oleh computer. Misalnya saja
5 dibagi 2 bisa saja menghasilkan hasil yang berbeda tergantung tipe datanya. Jika 5
dan 2 bertipe integer maka akan menghasilkan nilai 2, namun jika keduanya bertipe
float maka akan menghasilkan nilai 2.5000000. Pemilihan tipe data yang tepat akan
membuat proses operasi data menjadi lebih efisien dan efektif.
Tipe data Ukuran Jangkauan nilai
Bit 1 bit 0 atau 1
Char 1 byte -128 s/d 127
Unsigned char 1 byte 0 s/d 255
Signed char 1byte -128 s/d 127
Int 2 byte -32.768 s/d 32.767
Short int 2 byte -32.768 s/d 32.767
Unsigned int 2 byte 0 s/d 65.535
Signed int 2 byte -32.768 s/d 32.767
Unsigned long int 4 byte 0 s/d 4.294.967.295
Signed long int 4 byte -2.147.483.648 s/d 2.147.483.647
Float 4 byte 1.2*10-38 s/d 3.4*10+38
Double 4 byte 1.2*10-38 s/d 3.4*10+38
2.2.1.4.Variabel Bertanda (Signed) dan Tak Bertanda (Unsigned)
Untuk pendeklarasian tipe data yang berupa bilangan bulat yaitu char, int, short dan
long dapat ditambahkan signed atau unsigned. Signed digunakan untuk
mendefenisikan bahwa data yang disimpan dalam variabel adalah bertanda sedangkan
unsigned untuk data yang tidak bertanda. Contoh:
Unsigned char data1;
Signed char data2;
Pada contoh diatas variabel data1 bertipe char (1 byte) dan tidak bertanda
(unsigned) sehingga dapat menyimpan data dari 0 sampai 255. Sedangkan variabel
data2 bertipe char (1 byte) dan bertanda (signed) sehingga dapat menyimpan data dari
-128 sampai 127. Nilai negatif pada bilangan bertanda disimpan dalam bentuk
2.2.1.5.Pengarah Preprosesor
Pengarah preprosesor digunakan untuk mendefenisikan prosesor yng digunakan,
dalam hal ini adalah untuk mendefenisikan jenis mikrokontroler yang digunakan.
Dengan pengarah preprosesor ini maka pendeklarasian register-register dan
penamaannya dilakukan pada file lain yang disisipkan dalam program utama dengan
sintaks sebagai berikut:
# include <nama_preprosesor>
Contoh:
# include <mega 8L.h>
2.2.1.6.Pernyataan
Pernyataan adalah satu buah instruksi lengkap yang berdiri sendiri. Berikut adalah
contoh sebuah pernyataan:
PORTC = 0x0F;
Pernyataan PORTC = 0x0F; merupakan sebuah instruksi untuk mengeluarkan
data 0x0F ke Port C. (Agus Bejo, 2008).
2.2.1.7.Fungsi Pustaka
Bahasa C memiliki sejumlah fungsi pustaka yang berada pada file-file tertentu dan
sengaja disediakan untuk menangani berbagai hal dengan cara memanggil
pustaka-pustaka yang tersedia tidak berbentuk kode sumber melainkan dalam bentuk yang
telah dikompilasi. Sintaks untuk menggunakan fungsi pustaka ini adalah sebagai
berikut:
# include <nama_file_pustaka>
Contoh:
# include <lcd.h>
Beberapa fungsi pustaka yang telah disediakan oleh CodeVisionAVR antara
lain adalah:
1. Fungsi Tipe Karakter (ctype.h).
2. Fungsi Standar I/O (stdio.h).
3. Fungsi matematika (math.h).
4. Fungsi String (string.h).
5. Fungsi Konversi BCD (bcd.h).
6. Fungsi Konversi Akses Memori (mem.h).
7. Fungsi Tunda (delay.h).
8. Fungsi LCD (lcd.h).
9. Fungsi I2C (i2c.h).Fungsi SPI (spi.h).
10. Fungsi Real Time Clock (RTC) (ds 1302.h, ds1307.h).
11. Fungsi Sensor Suhu LM75, DS1621 dll (lm75.h, ds1621.h).
12. Fungsi Sensor Suhu LM75, DS1621 dll (lm75.h, ds1621.h).
Pernyataan if digunakan untuk melakukan pengambilan keputusan terhadap dua buah
kemungkinan yaitu mengerjakan suatu blok pernyataan atau tidak. Bentuk pernyataan
if adalah sebagai berikut:
If (kondisi)
{
// blok pernyataan yang akan dikerjakan
// jika kondisi if terpenuhi
}
Pernyataan if diatas akan mengecek apakah data yang terbaca pada Port A
(PINA) nilainya lebih dari 0x80 atau tidak, jika ya maka variabel dataku diisi dengan
nilai PINA dan data 0xFF dikeluarkan ke port C.
Apabila dalam blok pernyataan hanya terdapat satu pernyataan saja maka
tanda { dan } dapat dihilangkan seperti contoh berikut:
If (PINA>0x80)
PORTC = 0xFF
2.2.1.9.Pernyataan Switch
Pernyataan switch digunakan untuk melakukan pengambilan keputusan terhadap
banyak kemungkinan. Bentuk pernyataan switch adalah sebagai berikut:
{
case nilai_1 : pernyataan_1; break;
case nilai_2 : pernyataan_2; break;
case nilai_3 : pernyataan_3; break;
….
Default : pernyataan_default; break;
}
Pada pernyataan switch, masing-masing pernyataan (pernyataan_1 sampai
dngan pernyataan_default) dapat berupa satu atau beberapa perintah dan tidak perlu
berupa blok pernyataan. Pernyataan_1 akan dikerjakan jika ekspresi bernilai sama
dengan nilai_1, pernyataan_2 akan dikerjakan jika ekspresi bernilai sama dengan
nilai_2, pernyataan_3 akan dikerjakan jika ekspresi bernilai sama dengan nilai_3, dan
seterusnya. Pernyataan_default bersifat opsional, artinya boleh ada boleh tidak. Jika
ada maka pernyataan_default akan dikerjakan apabila nilai ekspresi tidak ada yang
sama satupun dengan salah satu nilai_1, nilai_2, nilai_3 dan seterusnya.
Setiap akhir dari pernyataan harus diakhiri dengan break, karena ini digunakan
untuk keluar dari pernyataan switch. Contoh:
switch (PINA)
{
Case 0xFE : PORTC = 0x00; break;
Case 0xFD : PORTC = 0xFF; break;
Pernyataan di atas berarti membaca port A, kemudian datanya (PINA) akan
dicocokkan dengan nilai case. Jika PINA bernilai 0xFE maka data 0x00 akan
dikeluarkan ke port C kemudian program keluar dari pernyataan switch tetapi jika
PINA bernilai 0xFD maka data 0xFF akan dikeluarkan ke port C kemudian program
2.2.1.10.Memanggil Assembler
Meskipun kita menggunakan bahasa C, kita masih tetap bisa menggunakan sintaks
pemrograman assembler. Caranya adalah sebagai berikut:
# asm
; instruksi-instruksi assembler
# endasm
Contoh:
# asm
Ldi r0, 100
mov r2, r3
# endasm
2.2.2.Bahasa Assembly MCS-51
Bahasa yang digunakan untuk memprogram IC mikrokontroler AT89C4051 adalah
bahasa assembly untuk MCS-51. angka 51 merupakan jumlah instruksi pada bahasa
ini hanya ada 51 instruksi, antara lain yaitu:
1. Instruksi MOV
Perintah ini merupakan perintah untuk mengisikan nilai ke alamat atau register
tertentu. Pengisian nilai dapat secara langsung atau tidak langsung. Contoh pengisian
nilai secara langsung:
MOV R0, #20h
Tanda # sebelum bilangan menunjukkan bahwa bilangan tersebut adalah nilai.Contoh
pengisian nilai secara tidak langsung:
MOV 20h, #80h
...
...
MOV R0, 20h
Perintah di atas berarti : isikan nilai yang terdapat pada alamat 20
Heksadesimal ke register 0 (R0). Tanpa tanda # sebelum bilangan menunjukkan
bahwa bilangan tersebut adalah alamat.
2. Instruksi DJNZ
Decreament Jump If Not Zero (DJNZ) ini merupakan perintah untuk mengurangi nilai
register tertentu dengan 1 dan lompat jika hasil pengurangannya belum nol. Contoh:
MOV R0, #80h
Loop: ...
...
DJNZ R0, Loop
...
R0 = 1, jika belum 0 lompat ke loop, jika R0 = 0 maka program akan
meneruskan ke perintah pada baris berikutnya.
3. Instruksi ACALL
Instruksi ini berfungsi untuk memanggil suatu rutin tertentu. Contoh:
...
TUNDA:
...
4. Instruksi RET
Instruksi RETURN (RET) ini merupakan perintah untuk kembali ke rutin pemanggil
setelah instruksi ACALL dilaksanakan. Contoh:
ACALL TUNDA
...
TUNDA:
...
RET
5. Instruksi JMP (Jump)
Instruksi ini merupakan perintah untuk lompat ke alamat tertentu. Contoh:
Loop:
...
...
JMP Loop
6. Instruksi JB (Jump if bit)
Instruksi ini merupakan perintah untuk lompat ke alamat tertentu, jika pin yang
Loop:
JB P1.0, Loop
...
7. Instruksi JNB (Jump if Not bit)
Instruksi ini merupakan perintah untuk lompat ke alamat tertentu, jika pin yang
dimaksud berlogika low (0). Contoh,
Loop:
JNB P1.0, Loop
...
8. Instruksi CJNZ (Compare Jump If Not Equal)
Instruksi ini berfungsi untuk membandingkan nilai dalam suatu register dengan suatu
nilai tertentu. Contoh,
Loop:
...
CJNE R0, #20h, Loop
...
Jika nilai R0 tidak sama dengan 20h, maka program akan lompat ke rutin
Loop. Jika nilai R0 sama dengan 20h, maka program akan melanjutkan instruksi
9. Instruksi DEC (Decreament)
Instruksi ini merupakan perintah untuk mengurangi nilai register yang dimaksud
dengan 1. Contoh:
MOV R0, #20h R0 = 20h
...
DEC R0 R0 = R0 – 1
...
10.Instruksi INC (Increament)
Instruksi ini merupakan perintah untuk menambahkan nilai register yang dimaksud
dengan 1. Contoh,
MOV R0,#20h R0 = 20h
...
INC R0 R0 = R0 + 1
...
2.2.3.CodeVisionAVR
CodeVisionAVR merupakan salah satu software kompiler yang khusus digunakan
untuk mikrokontroler keluarga AVR. CodeVisionAVR merupakan yang terbaik bila
dibandingkan dengan kompiler-kompiler yang lain karena beberapa kelebihan yang
dimiliki oleh CodeVisionAVR antara lain:
2. Fasilitas yang disediakan lengkap (mengedit program, mengkompile program,
mendownload program) serta tampilannya terlihat menarik dan mudah
dimengerti. Kita dapat mengatur settingan editor sedemikian rupa sehingga
membantu memudahkan kita dalam penulisan program.
3. Mampu membangkitkan kode program secara otomatis dengan menggunakan
fasilitas CodeWizardAVR.
4. Memiliki fasilitas untuk mendownload program langsung dari
CodeVisionAVR dengan menggunakan hardware khusus seperti Atmel
STK500, Kanda System STK200+/300 dan beberapa hardware lain yang telah
didefenisikan oleh CodeVisionAVR.
5. Memiliki fasilitas debugger sehingga dapat menggunakan software compiler
lain untuk mengecek kode assembler nya, contohnya AVRStudio.
6. Memiliki terminal komunikasi serial yang terintegrasi dalam
CodeVisionAVR sehingga dapat digunakan untuk membantu pengecekan
program yang telah dibuat khususnya yang menggunakan fasililtas
komunikasi serial UART.
CodeVision chip programmer
Salah satu kelebihan dari CodeVisionAVR adalah tersedianya fasilitas untuk
mendownload program ke mikrokontroler yang telah terintegrasi sehingga demikian
CodeVisionAVR ini selain dapat berfungsi sebagai software kompiler juga dapat
berfungsi sebagai software programmer/ downloader. Jadi kita dapat melakukan
proses download program yang telah dikompile dengan menggunakan software
Gambar 2.18. Programmer Setting
2.2.4. Software 8051 Editor, Assembler, Simulator
Instruksi-instruksi yang merupakan bahasa assembly tersebut dituliskan pada sebuah
editor, yaitu 8051 Editor, Assembler, Simulator.
Gambar 2.19. Software 8051 Editor, Assembler, Simulator
Setelah program selesai ditulis, kemudian di-save dan kemudian di-assemble
masih ada kesalahan atau peringatan, itu berarti ada kesalahan dalam penulisan
perintah atau ada nama subrutin yang sama, sehingga harus diperbaiki terlebih dahulu
sampai tidak ada pesan kesalahan lagi.
Software 8051 IDE ini berfungsi untuk merubah program yang kita tuliskan ke
dalam bilangan heksadesimal, proses perubahan ini terjadi pada saat peng-compile-an.
Bilangan heksadesimal inilah yang akan dikirimkan ke mikrokontroler.
2.2.5.Software Downloader
Untuk mengirimkan bilangan-bilangan heksadesimal ini ke mikrokontroller digunakan
software ISP- Flash Programmer 3.0a yang dapat didownload dari internet.
Gambar 2.20. ISP- Flash Programmer
Cara menggunakannya adalah dengan meng-klik Open File untuk mengambil
file heksadesimal dari hasil kompilasi, kemudian klik Write untuk mengisikan hasil
BAB 3
PERANCANGAN ALAT
Gambar 3.1. Diagram blok rancangan jam digital dengan sistem kalender.
3.2.Sistem Kerja Rangkaian
Tegangan yang masuk ke rangkaian PSA akan mengaktifkan rangkaian
Mikrokontroller dan display seven segment. Data yang disimpan dalam Real Time
Clock (RTC) berupa data jam dan menit, serta kalender akan ditampilkan di display
seven segment. Dimana display pada jam dan kalender sudah ditetapkan.
3.3.Perancangan Power Supply (PSA)
Rangkaian ini berfungsi untuk mensupply tegangan ke seluruh rangkaian yang ada.
Rangkaian PSA yang dibuat dengan keluaran 5 volt digunakan untuk mensupply
tegangan ke rangkaian display dan rangkaian mikrokontroler. Rangkaian power
Gambar 3.2. Rangkaian Power Supply
Trafo CT merupakan trafo stepdown yang berfungsi untuk menurunkan
tegangan dari 220 volt AC menjadi 12 volt AC. Kemudian 12 volt AC akan
disearahkan dengan menggunakan dua buah dioda menjadi 12 volt DC, selanjutnya 12
volt DC akan diratakan oleh kapasitor 2200 μF. Regulator tegangan 5 volt
(LM7805CT) digunakan agar keluaran yang dihasilkan tetap 5 volt walaupun terjadi
perubahan pada tegangan masukannya. LED1 sebagai indikator apabila PSA
dinyalakan, sedangkan LED2 sebagai indikator untuk 5 Volt dan 12 Volt. Transistor
PNP TIP 2955 disini berfungsi untuk mensupply arus apabila terjadi kekurangan arus
pada rangkaian, sehingga regulator tegangan (LM7805CT) tidak akan panas ketika
rangkaian butuh arus yang cukup besar. Tegangan 12 volt DC langsung diambil dari
keluaran 2 buah dioda penyearah.
3.4.Rangkaian Mikrokontroller ATMega8L
Rangkaian ini berfungsi sebagai pusat kendali dari seluruh sistem yang ada.
Komponen utama dari rangkaian ini adalah Mikrokontroller ATMega8L. Pada
mikrokontroller inilah semua program diisikan, sehingga rangkaian dapat berjalan
dimana terdapat mikroprosesor dan memori program (ROM) serta memori serbaguna
(RAM), bahkan ada fasilitas ADC, PLL, EEPROM dalam satu kemasan.
Mikrokontroller ATMega8L mempunyai 28 pin dengan catu daya tunggal 5 volt.
Ke-28 pin dalam keluarga mikrokontroller ATMega8L ditunjukkan oleh gambar 3.3.
Gambar 3.3. Sistem minimum ATMega8L
3.5.Perancangan Driver
Rangkaian driver ini berfungsi sebagai penguat daya pada display seven segment yang
memiliki ukuran yang lebih besar. Pada alat, rangkaian driver ini digunakan pada
display jam dan menit saja karena memiliki ukuran yang lebih besar daripada display
Gambar 3.4. Rangkaian Driver
Rangkaian driver ini terdiri dari beberapa IC4094 sebagai pemindah data dari
saluran serial kesaluran paralel.
3.6.Perancangan Display Seven Segment
Rangkaian display seven segment ini berfungsi untuk menampilkan data jam, menit
dan detik. Rangkaian display seven segment ditunjukkan pada gambar 3.5.
Pada rangkaian display ini semua led disusun membentuk seven segment
menggunakan common anoda, dimana semua anoda led dihubungkan. Setiap segmen
akan menyala jika diberi logika high.
Gambar 3.6. Rangkaian Jam dan Menit
Display ini menggunakan 4 buah seven segment (sebagai penunjuk jam dan
menit) yang dihubungkan ke IC HCF 4094BE yang merupakan IC serial ke paralel. IC
ini akan merubah 8 bit data serial yang masuk menjadi keluaran 8 bit data paralel.
Rangkaian ini dihubungkan dengan PC.7, PC.6, PC.5 ATmega8L. PC.7 digunakan
sebagai port pengiriman data serial, PC.6 sebagai sinyal clock untuk pengiriman data
serial, PC.5 sebagai output enable pada IC HCF 4094BE. Pada rangkaian display ini
disupply langsung dari PSA, karena arus dari output 4094 tidak cukup untuk
mensupply LED yang banyak.
Gambar 3.7. Rangkaian Tanggal, Bulan dan Tahun.
Display ini menggunakan 8 buah seven segment (sebagai penunjuk tanggal,
bulan dan tahun).
BAB 4
4.1. Pengujian Rangkaian Power Supply (PSA)
Pengujian rangkaian power supply bertujuan untuk mengetahui apakah power supply
yang digunakan sebagai penyalur tegangan pada rangkaian telah berfungsi dengan
baik atau tidak. Pengujian pada bagian rangkaian power supply ini dapat dilakukan
dengan mengukur tegangan keluaran dari rangkaian ini dengan menggunakan volt
meter digital. Pada power supply ini terdapat dua keluaran. Dari hasil pengujian
diperoleh tegangan keluaran pertama sebesar + 5,1 volt. Tegangan ini dipergunakan
untuk mensupply tegangan ke seluruh rangkaian. Mikrokontroler ATMega8L dapat
bekerja pada tegangan 4,0 sampai dengan 5,5 volt, sehingga tegangan 5,1 volt ini
cukup untuk mensupply tegangan ke mikrokontroler ATMega8L.
4.2.Pengujian Rangkaian Mikrokontroller ATMega8L
Untuk mengetahui apakah rangkaian mikrokontroller ATMega8L telah bekerja
dengan baik, maka dilakukan pengujian dengan mengisikan program pada
mikrokontroller ATMega8L. Jika program yang diisikan ke dalam mikrokontroller
ATMega8L dapat berjalan sesuai dengan program yang dibuat, maka rangkaian
mikrokontroller ATMega8L telah bekerja dengan baik.
Sesuai dengan fungsi rangkaian driver sebagai penguat daya pada display seven
segment yang memiliki ukuran yang lebih besar , dimana pada alat yang dibuat
rangkaian driver ini digunakan pada display jam dan menit saja karena memiliki
ukuran yang lebih besar daripada display kalender. Maka pengujian yang dilakukan
pada rangkaian driver ini adalah dengan melihat pada tampilan display jam dan menit.
Bila lampu led yang ditunjukkan pada display jam dan menit telah menyala dan
menunjukkan waktu yang sesuai, berarti rangkaian driver ini telah berfungsi dengan
baik.
4.4.Pengujian Rangkaian Display Seven Segment (Jam dan Kalender)
Pengujian pada rangkaian ini dapat dilakukan dengan menghubungkan rangkaian ini
dengan rangkaian mikrokontroller, kemudian memberikan data tertentu pada port
serial dari mikrokontroler. Seven segment yang digunakan adalah common anoda,
dimana segmen akan menyala jika diberi logika 1 dan sebaliknya segmen akan mati
jika diberi logika 0.
Pengujian pada display seven-segment yang diadakan di Laboratorium
Mikrokontroller FMIPA USU diperoleh data yang harus dikirimkan ke port serial
Tabel 4.1. Konversi angka desimal ke heksadesimal
Angka
Desimal
Data yang dikirim
( Hexadesimal )
1 0xF3H
2 0x22H
3 0x 97H
4 0xA7H
5 0x 66H
6 0xE5H
7 0xF5H
8 0xA2h
9 0xF7H
BAB 5
KESIMPULAN DAN SARAN
5.1.Kesimpulan
1. Panduan jam ini diambil dari waktu telkomsel dan setelah pengujian selama
beberapa hari, jam tersebut tidak mutlak sama tetapi memiliki toleransi waktu
± 1 menit.
2. Tampilan detik pada display jam digital hanya berfungsi sebagai visualisasi
saja, hitungan detiknya tidak sama dengan jam pada umumnya, dan hal
tersebut tidak mempengaruhi hitungan menit dan jam.
3. Alat ini telah bekerja dengan baik, dan dapat menampilkan menit, jam,
tanggal, bulan dan tahun.
5.2.Saran
1. Diharapkan untuk pembuatan selanjutnya tidak lagi menggunakan titik dua
yang berkedip-kedip diantara jam dan menit sebagai detik, tetapi dengan
dilihat dengan jelas pergantian detik demi detik dari angka 00 sampai dengan
angka 59.
2. Untuk lebih lanjut lagi, dalam pembuatan alat ini kedepannya diharapkan dapat
dimodifikasi dengan memakai sistem alarm atau pengingat, sehingga alat ini
DAFTAR PUSTAKA
Bejo, Agus. 2008. C DAN AVR Rahasia Kemudahan Bahasa C Dalam Mikrokontroller
ATMega8L. Edisi I. Yogyakarta: Graha Ilmu.
Ibrahim, KF. 1991. Teknik Digital. Edisi I. Terjemahan Ir. P. Insap Santoso. Yogyakarta:
Andi.
Pitowarno, Endra. 2005. Mikroprosesor dan Interfacing. Edisi I. Yogyakarta: Andi Offset.
Wardhana, Lingga. 2006. Belajar Sendiri Mikrokontroller AVR Seri ATMega8L Simulasi,
Hardware, dan Aplikasi. Yogyakarta: Penerbit Andi.
Woollard, Barry G. 2003. Elektronika Praktis. Jakarta: PT Pradnya Paramita.
PROGRAM KESELURUHAN SISTEM
unsigned char date,month,year;
// 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>
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void) {
rtc_set_time(h,m,s); delay_ms(50); }
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void) {
// Place your code here h++;
if (h>23) h = 0; rtc_set_time(h,m,s); delay_ms(50); }
// Standard Input/Output functions #include <stdio.h>
// Declare your global variables here void clock (void)
break;
void display_tick (unsigned char xbil) : program untuk mengatur detik {
{
unsigned char jam_h,jam_l, menit_h, menit_l; jam_l = jam % 10;
void display_hms_tick (unsigned char jam, unsigned char menit) : program untuk
mengatur tampilan jam, menit dan detik
{
for (i=0x00; i<0x08; i++){