Perancangan Software Jam Digital Dengan Sistem Kalender Berbasis Mikrokontroller DS1307

(1)

PERANCANGAN SOFTWARE JAM DIGITAL DENGAN

SISTEM KALENDER BERBASIS MIKROKONTROLLER

DS1307

TUGAS AKHIR

TAUFIK PASARIBU

072408023

PROGRAM STUDI DIPLOMA III FISIKA INSTRUMENTASI

DEPARTEMEN FISIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS SUMATERA UTARA

MEDAN

2010


(2)

PERANCANGAN SOFTWARE JAM DIGITAL DENGAN

SISTEM KALENDER BERBASIS MIKROKONTROLLER

DS1307

TUGAS AKHIR

Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh gelar Ahli Madya

TAUFIK PASARIBU 072408023

PROGRAM STUDI DIPLOMA III FISIKA INSTRUMENTASI DEPARTEMEN FISIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA

MEDAN 2010


(3)

PERNYATAAN

PERANCANGAN SOFTWARE JAM DIGITALDENGAN SISTEM KALENDER BERBASIS MIKROKONTROLER

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, Juli 2010

TAUFIK PASARIBU 072408023


(4)

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 kepada Ibunda S.Sirait yang telah banyak memberikan dukungan doa dan moril maupun materil. Kepada Kakak dan Adik (Kak Frieska, Kak Eva, Kak Betty, Kak Aril dan Dek Ria) atas perhatian, motivasi dan doanya.

7. Eva Natalie Siringo-ringo yang telah banyak membantu dan memberi dukungan serta pemikiran kepada penulis.


(5)

8. Teman-teman di PNJ (Pondok Nur Jaya) khususnya Selina, Tina, Martin, Fajar, Fasionah, Robby, dan Team futsal Laguboti FC (Park’Lian, Benny, Wilman, Amin, Bang Juntriman, dan Mesu) atas dukungan semangat dan doanya.

9. Teman-teman seperjuangan FIN’07 , khususnya “GORGOM 07” (Dedy Xtankovic, Yatim Pique dan Marvel Margukguk, Julio Gabe, Miswar Budin) yang telah banyak memberi dukungan semangat dan kerja sama selama masa perkuliahan.

Akhir kata penulis ucapkan terima kasih kepada semua pihak yang telah membantu saya dalam menyelesaikan tugas akhir ini.


(6)

ABSTRAK

Untuk mengatur waktu aktifitas sehari-hari agar berjalan sesuai rutinitas yang diinginkan seseorang, maka sering kali diperlukan alat bantu sebagai pengingat waktu, berupa jam digital yang dipengkapi dengan kalender. Tugas akhir ini merancang bangun jam digital menggunakan IC Real Time Clock yang dilengkapi dengan mikrokontroller ATMega8-L sebagai pengendali waktu saat ini dan kalender untuk menampilkan tanggal, bulan dan tahun saat ini. Dalam sistem ini IC Real Time Clock (RTC) DS1307 sebagai masukan waktu ke mikrokontroller dan seven segen debagai penunjuk waktu (jam dan menit) dan kalender (tanggal, bulan dan tahun). Waktu yang menjadi acuan dalam jam digital diatur pada awal penggunaan jam digital ini ke dalam IC RTC melalui tombol tekan dan mikrokontroller akan mengambil data waktu tersebut pada alamat memori tertentu. Berdasarkan hasil pengujian, mulai dari set waktu dan set tampilan kalender dapat dikendalikan oleh mikrokontroller. Secara keseluruhan sistem ini dapat berfungsi sesuai dengan rancangan.


(7)

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 2

1.5. Sistematika Penulisan 3 BAB 2 LANDASAN TEORI

2.1. Perangkat Keras 5

2.1.1. Real Time Clock (RTC) DS1307 5 2.1.1.1. Komunikasi Serial Antar IC (I2C/TWI) 7 2.1.1.2. Prinsip Komunikasi I2C 7 2.1.1.3. Pengalamatan 7-bit I2C/TWI 8 2.1.1.4. Defenisi-defenisi Kondisi Bus 9 2.1.1.5. Mode Pengoperasian Transfer Data 10 2.1.1.6. Mode Operasi RTC DS1307 melalui I2C/TWI 11 2.1.1.7. Peta Alamat (Address Map) RTC DS1307 14 2.1.1.8. Jam dan Kalender 14


(8)

2.1.1.9. Register Kontrol (Control Register) 16 2.1.2. Mikrokontroller ATMega8L 17

2.1.2.1. Konstruksi ATMega8L 18

2.1.2.2. Pin-pin pada Mikrokontroller ATMega8L 20 2.1.3. Menentukan Lamanya Satu Detik 19 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.1.5. IC 4094 30

2.1.6. Seven Segment 32

2.2. Perangkat Lunak 34

2.2.1. Pemrograman Bahasa C 34 2.2.1.1. Bentuk Dasar Program C 34 2.2.1.2. Pengenal 35 2.2.1.3. Tipe Data 36 2.2.1.4. Variabel Bertanda (Signed) dan Tak Bertanda (Unsigned) 38 2.2.1.5. Pengarah Preprosesor 38 2.2.1.6. Pernyataan 39 2.2.1.7. Fungsi Pustaka 39 2.2.1.8. Pernyataan IF 40 2.2.1.9. Pernyataan Switch 41 2.2.1.10. Memanggil Assembler 42 2.2.2. Bahasa Assembly MCS-51 43 2.2.3. Code Vision AVR 47 2.2.4. Software 8051 Editor, Assembler, Simulator 49 2.2.5. Software Downloader 50 BAB 3 PERANCANGAN ALAT


(9)

3.2. Sistem Kerja Rangkaian 51 3.3. Perancangan Power Supply (PSA) 52 3.4. Rangkaian Mikrokontroller ATMega8L 53

3.5. Perancangan Driver 54

3.6. Perancangan Display Seven Segment 54 3.6.1. Pengaturan Jam dan Menit dengan Tombol Manual 57 BAB 4 ANALISA PROGRAM

4.1. Pengujian Rangkaian PSA 58 4.2. Pengujian Rangkaian Mikrokontroller ATMega8L 58 4.3. Pengujian Rangakian Display Seven Segment 60

4.4. Pengujian Detik 61

4.5. Pengujian Program Keseluruhan Sistem 62

BAB 5 KESIMPULAN DAN SARAN

5.1. Kesimpulan 71

5.2. Saran 72

DAFTAR PUSTAKA 73


(10)

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 Konfigurasi pin 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.15 Tampilan seven segment 32

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


(11)

Gambar 3.6 Rangkaian Jam dan Menit 55 Gambar 3.7 Rangkaian Tanggal, Bulan dan Tahun 56 Gambar 3.8 Rangkaian pengaturan jam secara manual 57 Gambar 4.1. Blok diagram pengujian jam dengan frequensi counter 61


(12)

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 60


(13)

ABSTRAK

Untuk mengatur waktu aktifitas sehari-hari agar berjalan sesuai rutinitas yang diinginkan seseorang, maka sering kali diperlukan alat bantu sebagai pengingat waktu, berupa jam digital yang dipengkapi dengan kalender. Tugas akhir ini merancang bangun jam digital menggunakan IC Real Time Clock yang dilengkapi dengan mikrokontroller ATMega8-L sebagai pengendali waktu saat ini dan kalender untuk menampilkan tanggal, bulan dan tahun saat ini. Dalam sistem ini IC Real Time Clock (RTC) DS1307 sebagai masukan waktu ke mikrokontroller dan seven segen debagai penunjuk waktu (jam dan menit) dan kalender (tanggal, bulan dan tahun). Waktu yang menjadi acuan dalam jam digital diatur pada awal penggunaan jam digital ini ke dalam IC RTC melalui tombol tekan dan mikrokontroller akan mengambil data waktu tersebut pada alamat memori tertentu. Berdasarkan hasil pengujian, mulai dari set waktu dan set tampilan kalender dapat dikendalikan oleh mikrokontroller. Secara keseluruhan sistem ini dapat berfungsi sesuai dengan rancangan.


(14)

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 yang disebut dengan jam dimana dengan adanya jam kita tahu waktu saat ini pukul 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


(15)

dengan judul “PERANCANGAN SOFTWARE JAM DIGITAL DENGAN SISTEM KALENDER BERBASIS MIKROKONTROLLER DS1307”.

1.2.Rumusan Masalah

Berdasarkan uraian di atas, dapat dirumuskan beberapa masalah yang dibahas dalam tugas proyek ini, yaitu :

1.DS 1307 berfungsi untuk menyimpan 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 proyek ini adalah :

1. Merancang jam digital yang dilengkapi dengan kalender.

2. Memanfaatkan DS 1307 sebagai mikrokontroller yang dapat diprogram sesuai kebutuhan.

3. Membuat tampilan (display) jam dari led (light emitting dioda) dengan urutan susunan jam, menit dan sekaligus sebagai penampilan pergantian tanggal. 4. Sebagai salah satu syarat untuk dapat menyelesaikan Program Diploma Tiga


(16)

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.

BAB 2 LANDASAN TEORI

Dalam bab ini dijelaskan tentang teori pendukung yang digunakan untuk pembahasan dan cara kerja dari rangkaian. Teori pendukung itu


(17)

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, diagram alir dari program yang akan diisikan ke mikrokontroller.

BAB 4 ANALISA PROGRAM

Dalam bab ini akan dibahas hasil analisa dari rangkaian dan sistem kerja alat, penjelasan mengenai rangkaian-rangkaian yang digunakan, penjelasan mengenai program yang diisikan ke mikrokontroller ATMega8L dan AT89C2051.

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 laporan proyek ini.


(18)

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 dan bulan dalam seminggu, dan tahun valid hingga 2100.

2. 56-byte, battery-backed, RAM nonvolatile (NV) RAM untuk penyimpanan. 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.


(19)

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.

7. SQW/OUT – Square Wave/Output Driver.


(20)

Gambar 2.2. Block Diagram DS1307

2.1.1.1.Komunikasi Serial antar IC (I2C/ 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 mikrokontroler dan divais periferal seperti memori, sensor temperatur dan I/O expander.

2.1.1.2.Prinsip Komunikasi I2C

Komunikasi dilakukan melalui dua jalur: SDA (serial data) dan SCL (serial clock). Setiap divais I2C memiliki 7-bit alamat yang unik. MSB adalah fix dan ditujukan untuk kategori divais. Sebagai contoh, 1010 biner ditujukan untuk serial EEPROM. Tiga bit berikutnya memungkinkan 8 kombinasi alamat I2C, yang berarti, dimungkinkan 8 divais dengan tipe yang sama, beroperasi pada bus I2C 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).


(21)

Gambar 2.3. Prinsip komunikasi serial bus I2C (Data Sheet RTC DS1307).

2.1.1.3.Pengalamatan 7-bit I2C/ TWI

Byte pertama setelah sinyal START yang dikirim oleh master adalah alamat slave. Pengalamatan 7-bit memungkinkan 128 divais pada bus yang sama. Alamat I2C 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).


(22)

2.1.1.4.Defenisi-defenisi Kondisi Bus

Berikut ini adalah defenisi kondisi bus pada sistem komunikasi serial I2C/ 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 SDA dari HIGH ke LOW ketika SCL dalam kondisi HIGH.

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


(23)

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).

2.1.1.5.Mode Pengoperasian Transfer Data

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 meengirimkan 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


(24)

byte, master mengirimkan sinyal ‘not avknowledge’, setelah itu master mengirimkan sinyal STOP.

Gambar 2.4. Proses transfer data pada I2C (data sheet RTC DS1307).

2.1.1.6.Mode Operasi RTC DS1307 Melalui I2C/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.


(25)

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 register pointer ditambah satu sehingga register ini menunjuk ke alamat 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


(26)

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’ diikuti dengan sinyal STOP. (Data sheet RTC DS1307).

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.


(27)

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 waktu dan tanggal hasil entri dalam operasi dapat didefinisikan. Bit 7 dari register 0 adalah penghentian jam (CH) bit. Bila bit ini di set ke 1, osilator dinonaktifkan. Ketika 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


(28)

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.

Tabel 2.1. Peta alamat RTC DS1307 (Data sheet RTC DS1307)

.

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


(29)

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.

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.


(30)

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 kontrol disimpan dalam ROM yang ukurannya relatif lebih besar, sedangkan RAM 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.


(31)

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

frekuensi 16 MHz.

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.


(32)

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). Dulu banyak UV-EPROM (Ultra Violet Eraseable Programble ROM) yang kemudian 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).


(33)

2.1.2.2.Pin-Pin pada Mikrokontroller ATMega8L

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.

8. AVCC – Merupakan pin masukan tegangan untuk ADC. 9. AREF – Merupakan pin tegangan referensi ADC.


(34)

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)

2.1.3.1.Menentukan satu detik menggunakan osilator kristal

Pembagian suatu sinyal osilator dengan menggunakan frekuensi kristal untuk menghasilkan akurasi (0,01%) waktu 1 detik. Dua buah kounter 12 stage (CD4040)


(35)

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 ---

1.000.000

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


(36)

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

2.1.3.2.Menentukan satu detik pada mikrokontroler

Sebuah mikrokontroler 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


(37)

pada frekuensi clock yang diberikan kepada mikrokontroler 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 mikrokontroler 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 dinegasikan setiap satu siklus sekali atau 0,5 mikrodetik sekali.

Pembangkit clock 1 MHz

Dengan mengoperasikan mikrokontroler 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.


(38)

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 menyisipkan instruksi untuk tidak mengerjakan apa-apa, yaitu NOP (No operation). 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.


(39)

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

fclock (kHz) 500 333 250 200 167 143 125 111 100

2.1.4.Mikrokontroler AT89C2051

Mikrokontroler AT89C2051 merupakan salah satu keluarga dari MCS-51 keluaran Atmel. Jenis Mikrokontroler ini pada prinsipnya dapat digunakan untuk mengolah data per bit ataupun data 8 bit secara bersamaan.


(40)

Pada prinsipnya program pada mikrokontroler 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 mikrokontroler 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 MHz.

2.1.4.1.Pin-pin pada Mikrokontroler AT89C2051


(41)

AT89C2051 GND VCC 1 2 3 4 5 6 7 8 20 19 18 17 16 15 14 13 9 10 12 11

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. (Data sheet AT89C2051)

Port (pin)

Fungsi

P3.0 (pin 2) RXD (port serial penerima data).

P3.1 (pin 3) TXD (port serial pengirim data).


(42)

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.

6. XTAL2 (pin 5) – Output dari osilator.

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.


(43)

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 untuk keperluan penyambungan beberapa IC secara serial. Data tersedia pada Qs pada 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.


(44)

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 untuk menampilkan angka 0 sampai 9 dan sejumlah karakter alfabet.

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.


(45)

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.

Gambar 2.17. Konfigurasi seven segmen tipe common katoda .

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.


(46)

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).

2.2.1.1.Bentuk Dasar Program C

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


(47)

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)

{

DDRA = A ; DDRB = B ; DDRC = C ; DDRD = D ; }

// fungsi utama

void main (void)

{

Inisialisasi_port (0xFF, 0xF0, 0x0F, 0x00) ;

2.2.1.2.Pengenal

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.


(48)

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.

Tabel 2.6. Tipe Data (Agus Bejo, 2009).

Tipe data Ukuran Jangkauan nilai

Bit 1 bit 0 atau 1

Char 1 byte -128 s/d 127


(49)

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

Long int 4 byte -2.147.483.648 s/d 2.147.483.647

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


(50)

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 komplemen 2. Misalnya untuk nilai (-1) komplemen 2 nya adalah 0xFF sehingga data 0xFF inilah yang disimpan dalam variabel tersebut. (Agus Bejo 2008).

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:


(51)

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 fungsi-fungsi yang telah dideklarasikan dalam file tersebut. Dalam banyak hal, 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).


(52)

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).

2.2.1.8.Pernyataan IF

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

}

Contoh:

If (PINA>0x80)

{


(53)

PORTC=0xFF; }

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:

switch (ekspresi)

{

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


(54)

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 keluar dari pernyataan switch.

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


(55)

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

Perintah di atas berarti : isikan nilai 20 Heksadesimal ke register 0 (R0). 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.


(56)

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:

... ACALL TUNDA ... TUNDA:

...

4. Instruksi RET

Instruksi RETURN (RET) ini merupakan perintah untuk kembali ke rutin pemanggil setelah instruksi ACALL dilaksanakan. Contoh:


(57)

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 dimaksud berlogika high (1). Contoh:

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,


(58)

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 selanjutnya.

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,


(59)

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:

1. Menggunakan IDE (Integrated Development Environment).

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


(60)

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 CodeVisionAVR juga.

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.


(61)

Gambar 2.19. Software 8051 Editor, Assembler, Simulator

2.2.5.Software Downloader

.

Setelah program selesai ditulis, kemudian di-save dan kemudian di-assemble (di-compile). Pada saat di-assemble akan tampil pesan peringatan dan kesalahan. Jika 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.

Untuk mengirimkan bilangan-bilangan heksadesimal ini ke mikrokontroller digunakan software ISP- Flash Programmer 3.0a yang dapat didownload dari internet.


(62)

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 kompilasi tersebut ke mikrokontroller.


(63)

Mikrokontroller ATMega8L

Jam

Kalender RTC DS1307

PSA

BAB 3

PERANCANGAN ALAT

3.1.Diagram Blok Rangkaian

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.


(64)

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 supply ditunjukkan pada gambar 3.2 berikut ini:

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.


(65)

3.4.Rangkaian Mikrokontroller ATMega8L

Rangkaian ini berfungsi sebagai pusat kendali dari seluruh sistem yang ada. Komponen utama dari rangkaian ini adalah Mikrokontroler ATMega8L. Pada mikrokontroler inilah semua program diisikan, sehingga rangkaian dapat berjalan sesuai dengan yang dikehendaki. Mikrokontroller ini merupakan suatu keping IC dimana terdapat mikroprosesor dan memori program (ROM) serta memori serbaguna (RAM), bahkan ada fasilitas ADC, PLL, EEPROM dalam satu kemasan. Mikrokontroler ATMega8L mempunyai 28 pin dengan catu daya tunggal 5 volt. Ke-28 pin dalam keluarga mikrokontroler ATMega8L ditunjukkan oleh gambar 3.3.

Gambar 3.3. Sistem minimum ATMega8L

3.5.Perancangan Driver

Rangkaian driver ini berfungsi untuk memproses data jam dan menit pada display seven segment. Rangkaian driver ditunjukkan pada gambar 3.4.


(66)

Gambar 3.4. Rangkaian Driver.

Rangkaian driver ini terdiri dari beberapa IC4094, dimana IC4094 sebagai pemindah data dari saluran serial kesaluran paralel dengan 3 tingkatan pergeseren bit Q0 sampai bit Q7 menuju output.

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.


(67)

Gambar 3.5. Rangkaian skematik display seven segment

Pada rangkaian display ini semua led disusun membentuk seven segmen menggunakan common katoda, dimana semua katoda 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 to 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


(68)

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 digunakan Transistor PNP TIP31C yang berfungsi sebagai saklar agar display 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).


(69)

3.6.1.Pengaturan jam dan menit dengan tombol manual

Dengan adanya dua buah tombol, program jam digital dapat ditambah untuk melakukan setting jam maupun menit. Misalnya tombol S1 digunakan untuk menambah jam dan tombol, S2 untuk menambah menit. Langkah untuk menambah jam dan menit pada dasarnya sama. Perbedaannya terletak pada variabel yang diubah, dan angka tertinggi untuk variabel tersebut.

Perintah pertama yang dilakukan adalah melompat jika S1 tidak ditekan. Tidak ditekan akan menghasilkan nilai 1, yang berarti bit diset. Agar proses melompat jika bit di-set maka perintah yang digunakan adalah jb. Jika ternyata tombol ditekan, artinya port bernilai 0 atau bit tidak di-set, maka proses lompatan tidak terjadi. Dengan demikian perintah yang dijalankan berikutnya adalah perintah dibawahnya.

Perintah di bawahnya adalah melompat ke perintah itu sendiri jika tombol tidak dilepas. Tombol tidak dilepas artinya tombol ditekan. Dengan demikian port bernilai 0 atau bit tidak di-set. Jadi perintah yang digunakan adalah jnb. Pemasangan tombol sederhana ke port adalah seperti gambar 3.8.


(70)

BAB 4

PENGUJIAN ALAT DAN ANALISA

4.1. Pengujian Rangkaian Power Supply (PSA)

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 Mikrokontroler ATMega8L

Untuk mengetahui apakah rangkaian mikrokontroller ATMega8L telah bekerja dengan baik, maka dilakukan pengujian. Pengujian bagian ini dilakukan dengan memberikan program sederhana pada mikrokontroler ATMega8L. Programnya adalah:

#include <mega8L.h> Void main()


(71)

DDRA=0xff PORTD=0x10 }

Penjelasan dari program adalah:

#include <mega8L.h>

//menyertakan file library untuk chip ATmega8L.

DDRD=0xff

//Port D, dijadikan sebagai output.

PORTD=0x10

/*

Mengeluarkan output ke Port D dengan nilai 0x10 (10 Heksa) atau 0b01000000. Berarti logika dari Port D saat program dijalankan:

1. Port D.0  low (0) 2. Port D.1  low (0) 3. Port D.2  low (0) 4. Port D.3  low (0) 5. Port D.4  low (0) 6. Port D.5  low (0) 7. Port D.6  high (1) 8. Port D.7  low (0)


(72)

Program di atas bertujuan untuk menghidupkan LED yang terhubung ke PD.7. Jika program tersebut diisikan ke mikrokontroller ATMega8L, kemudian mikrokontroller dapat berjalan sesuai dengan program yang diisikan, maka rangkaian minimum mikrokontroller ATMega8L telah bekerja dengan baik.

4.3. Pengujian Rangkaian Display Seven Segment

Pengujian pada rangkaian ini dapat dilakukan dengan menghubungkan rangkaian ini dengan rangkaian mikrokontroler, kemudian memberikan data tertentu pada port serial dari mikrokontroler. Seven segment yang digunakan adalah common katoda, 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 Mikrokontroler FMIPA USU diperoleh data yang harus dikirimkan ke port serial untuk menampilkan angka desimal ditunjukkan pada tabel 4.1.

Tabel 4.1. Konversi angka desimal ke heksadesimal

Angka

Desimal

Data yang dikirim

( Hexadesimal )

1 0xF3H

2 0x22H

3 0x 97H


(73)

5 0x 66H

6 0xE5H

7 0xF5H

8 0xA2h

9 0xF7H

0 0xE7H

4.4. Pengujian detik

Pengujian detik pada alat ini dihitung menggunakan alat yang dinamakan frekuensi kounter dimana output jam dihubungkan dengan frekuensi kounter tersebut untuk menghitung jumlah detik selama seminggu (tujuh hari) yang secara teori adalah 604.800 detik. Dan sebagai pembanding digunakan frekuensi generator dan jam digital buatan pabrik dari berbagai merk dengan pengujian yang sama.

Gambar 4.1. Blok diagram pengujian jam dengan frequensi counter. Frequensi

Generator

Frequensi


(74)

4.5. Program Keseluruhan Sistem

#include <mega8.h> #include <delay.h> #define sdt PORTC.2 #define sclk PORTC.1 #define soe PORTC.0 // #define ledk PORTD.7 #define leda PORTB.0 #define sdte PORTD.6 #define sclke PORTD.7 // #define soee PORTD.7 unsigned char h,m,s;

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) {

// Place your code here m++;

if (m>59) m = 0; 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);


(75)

}

// Standard Input/Output functions #include <stdio.h>

// Declare your global variables here void clock (void)

{ sclk=0; sclk=1; }

void sio (unsigned char kar) // pengiriman ke display 3 segment 4094 {

unsigned char i; bit xbit;

for (i=0x00; i<0x08; i++){ kar=kar>>1;

clock(); }

}

void display (unsigned char xbil) : program untuk mengatur detik {

switch (xbil) {

case 1: sio (0x44); break;

case 2: sio (0x6b); break;

case 3: sio (0x6e); break;

case 4: sio (0x5c); break;

case 5: sio (0x3e); break;

case 6: sio (0x3f); break;

case 7: sio (0x64); break;

case 8: sio (0x7f); break;

case 9: sio (0x7e); break;

case 0: sio (0x77); break;

default: break;


(76)

} }

void display_tick (unsigned char xbil) : program untuk mengatur detik {

switch (xbil) {

case 1: sio (0x44 | 0x80); break;

case 2: sio (0x6b | 0x80); break;

case 3: sio (0x6e | 0x80); break;

case 4: sio (0x5c | 0x80); break;

case 5: sio (0x3e | 0x80); break;

case 6: sio (0x3f | 0x80); break;

case 7: sio (0x64 | 0x80); break;

case 8: sio (0x7f | 0x80); break;

case 9: sio (0x7e | 0x80); break;

case 0: sio (0x77 | 0x80); break;

default: break; }

}

void display_hms (unsigned char jam, unsigned char menit) : program untuk mengatur tampilan jam dan menit

{

unsigned char jam_h,jam_l, menit_h, menit_l; jam_l = jam % 10;

jam_h = jam / 10; menit_l = menit % 10; menit_h = menit / 10; soe = 0;

display(menit_l); display(menit_h); display(jam_l); display(jam_h); soe = 1;


(77)

}

void display_hms_tick (unsigned char jam, unsigned char menit) : program untuk mengatur tampilan jam, menit dan detik

{

unsigned char jam_h,jam_l, menit_h, menit_l; jam_l = jam % 10;

jam_h = jam / 10; menit_l = menit % 10; menit_h = menit / 10; soe = 0;

display(menit_l); display(menit_h); display_tick(jam_l); display(jam_h); soe = 1;

delay_ms(10); }

void clocke (void) {

sclke=0; sclke=1; }

void sio2e (unsigned char kar) // pengiriman ke display 3 segment 4094 {

unsigned char i; bit xbit;

for (i=0x00; i<0x08; i++){ kar=kar>>1;

clocke(); }

}

unsigned char dec2disp (unsigned char bil) { switch (bil) { case 0x00:{ return (0x21); break; }


(78)

case 0x01:{ return (0xed); break; } case 0x02:{ return (0x19); break; } case 0x03:{ return (0x89); break; } case 0x04:{ return (0xc5); break; } case 0x05:{ return (0x83); break; } case 0x06:{ return (0x03); break; } case 0x07:{ return (0xe9); break; } case 0x08:{ return (0x01); break; } case 0x09:{ return (0x81); break; } } }

void disp_kalender (unsigned char d, unsigned char m, unsigned char y) : program untuk mengatur tampilan kalender, yaitu tanggal, bulan dan tahun

{

unsigned char dp, ds, mp, ms, yp, ys; unsigned char sisa, pul, bil, sat;

sisa = d; pul = sisa/10; bil = sisa;


(79)

sat = sisa;

dp = pul; ds = sat;

sisa = m; pul = sisa/10; bil = sisa;

sisa = bil - (pul*10); sat = sisa;

mp = pul; ms = sat; sisa = y; pul = sisa/10; bil = sisa;

sisa = bil - (pul*10); sat = sisa;

yp = pul; ys = sat; sio2e(dec2disp(ys)); sio2e(dec2disp(yp)); sio2e(dec2disp(0)); sio2e(dec2disp(2)); sio2e(dec2disp(ms)); sio2e(dec2disp(mp)); sio2e(dec2disp(ds)); sio2e(dec2disp(dp)); } void main(void) {

// Declare your local variables here // Input/Output Ports initialization // Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=0 PORTB=0x00;

DDRB=0x01;

// Port C initialization

// Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=Out // State6=T State5=T State4=T State3=T State2=0 State1=0 State0=0


(80)

PORTC=0x00; DDRC=0x07;

// Port D initialization

// Func7=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=0 State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00;

DDRD=0xf0;

// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00;

TCNT0=0x00;

// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off

// Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;

// Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00;

TCCR2=0x00; TCNT2=0x00; OCR2=0x00;


(81)

// INT0: On

// INT0 Mode: Falling Edge // INT1: On

// INT1 Mode: Falling Edge GICR|=0xC0;

MCUCR=0x0A; GIFR=0xC0;

// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On

// USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 4800 UCSRA=0x00;

UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x0C;

// Analog Comparator initialization // Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;

SFIOR=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(1,1,1);

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

// rtc_set_time(9,37,(s | 0x80)); delay_ms(50);

rtc_get_time(h,m,s); delay_ms(250);

rtc_set_time(h,m,(30 | 0x80)); delay_ms(250);

// rtc_set_time(9,37,(s | 0x80)); // rtc_set_date(10,6,10); rtc_set_time(h,m,(30 | 0x80));


(82)

rtc_set_time(h,m,30); while (1)

{

// Place your code here

rtc_get_time(h,m,s); pengaturan jam, menit dan detik melalui RTC delay_ms(10); tunda sebentar

display_hms (h,m); mengatur tampilan jam dan menit

rtc_get_time(h,m,s); pengaturan jam, menit dan detik melalui RTC delay_ms(990); tunda sebentar

rtc_get_date(date,month,year); pengaturan real time clock untuk hari,bulan dan tahun

display_hms_tick(h,m); mengatur tampilan jam, menit dan detik

disp_kalender(date,month,year); mengatur tampilan hari, bulan dan tahun delay_ms(990); tunda sebentar

}; }


(83)

BAB 5

KESIMPULAN DAN SARAN

5.1.Kesimpulan

1. Program yang digunakan adalah bahasa C dimana display_kalender (date, month, year) digunakan untuk menampilkan kalender dan display_hms (h, m) digunakan untuk menampilkan jam dan menit

2. Meskipun kita menggunakan bahasa C, kita masih bisa memakai sintaks pemrograman assembler. Program di bawah ini digunakan untuk memanggil sintaks pemrograman assembler:

# asm

; instruksi assembler # endasm

3. 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.


(84)

5.2.Saran

1. Untuk lebih lanjut lagi, dalam pembuatan alat ini kedepannya diharapkan dapat dimodifikasi dengan memakai sistem alarm atau pengingat, sehingga alat ini lebih bisa dimaksimalkan lagi pemanfaatannya.

2. Diharapkan untuk pembuatan selanjutnya tidak lagi menggunakan titik dua yang berkedip-kedip diantara jam dan menit sebagai detik, tetapi dengan menambahkan dua buah lagi seven segment untuk dua digit angka agar dapat dilihat dengan jelas pergantian detik demi detik dari angka 00 sampai dengan angka 59.


(85)

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.


(86)

G

am

bar

R

angkai

a

n D

ispl

ay

Jam

dan M

eni


(87)

G

am

bar

L

ayout R

angka

ian

D

is

pl

ay K

al

ende


(88)

G

am

bar

L

ayout

R

angka

ian D

ri


(1)

BAB 5

KESIMPULAN DAN SARAN

5.1.Kesimpulan

1. Program yang digunakan adalah bahasa C dimana display_kalender (date, month, year) digunakan untuk menampilkan kalender dan display_hms (h, m) digunakan untuk menampilkan jam dan menit

2. Meskipun kita menggunakan bahasa C, kita masih bisa memakai sintaks pemrograman assembler. Program di bawah ini digunakan untuk memanggil sintaks pemrograman assembler:

# asm

; instruksi assembler # endasm

3. 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.


(2)

5.2.Saran

1. Untuk lebih lanjut lagi, dalam pembuatan alat ini kedepannya diharapkan dapat dimodifikasi dengan memakai sistem alarm atau pengingat, sehingga alat ini lebih bisa dimaksimalkan lagi pemanfaatannya.

2. Diharapkan untuk pembuatan selanjutnya tidak lagi menggunakan titik dua yang berkedip-kedip diantara jam dan menit sebagai detik, tetapi dengan menambahkan dua buah lagi seven segment untuk dua digit angka agar dapat dilihat dengan jelas pergantian detik demi detik dari angka 00 sampai dengan angka 59.


(3)

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.


(4)

G

am

bar

R

angkai

a

n D

ispl

ay

Jam

dan M

eni


(5)

G

am

bar

L

ayout R

angka

ian

D

is

pl

ay K

al

ende


(6)

G

am

bar

L

ayout

R

angka

ian D

ri