Uploaded by Aprilian Sandi

Chapter II

advertisement
BAB II
LANDASAN TEORI
2.1. Perangkat Keras
2.1.1. Real-Time Clock (RTC) DS1307
Real-time clock DS1307 adalah IC yang dibuat oleh perusasahaan 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) meyimpan 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.
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.
Universitas Sumatera Utara
6
6. SCL – Serial Clock.
7. SQW/OUT – Square Wave/Output Driver.
Gambar 2.1. Diagram pin RTC DS1307 (Data Sheet IC Real-Time Clock DS1307).
2.1.2. 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.2.1. 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, ditdai dengan
kondisi HIGH yang cukup lama pada pin SCL maupun SDA.
Universitas Sumatera Utara
7
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.2. Prinsip komunikasi serial bus I2C (Data Sheet RTC DS1307).
2.1.2.2. 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).
Universitas Sumatera Utara
8
2.1.2.3. 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 eksta 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).
Universitas Sumatera Utara
9
2.1.2.4. 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 byte,
master mengirimkan sinyal ‘not avknowledge’, setelah itu master mengirimkan sinyal
STOP.
Gambar 2.3. Proses transfer data pada I2C (data sheet RTC DS1307).
Universitas Sumatera Utara
10
2.1.2.5. 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 opersai 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 diimpan 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.
Universitas Sumatera Utara
11
Gambar 2.4. 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 dikirikan 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.5. Data read – slave transmitter mode (Data sheet RTC DS1307).
2.1.2.6. 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
Universitas Sumatera Utara
12
Tabel 2.1. Peta alamat RTC DS1307 (Data sheet RTC DS1307).
2.1.2.7. 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.
Universitas Sumatera Utara
13
Tabel 2.3. Rate select (RS1, RS0) (Data sheet RTC DS1307).
2.1.3. Mikrokontroler ATMega8535
Atmel AVR adalah jenis mikrokontroller yang paling sering dipakai dalam bidang
elektronika dan instrumentasi. Mikrokontroler AVR ini memiliki arsitektur RISC
(Reduce Instruction Set Computing) delapan bit, di mana semua instruksi dikemas
dalam kode 16-bit (16 bits word) dan sebagian besar instruksi dieksekusi dalam 1 (satu)
siklus clock.
Arsitektur mikrokontroler jenis AVR pertama kali dikembangkan pada tahun
1996 oleh dua orang mahasiswa Norwegian Institute of Technology yaitu Alf-Egil
Bogen dan Vegard Wollan. Mikrokontroler AVR kemudian dikembangkan lebih lanjut
oleh Atmel. Seri pertama AVR yang dikeluarkan adalah mikrokontroler 8 bit
AT90S8515, dengan konfigurasi pin yang sama dengan mikrokontroler 8051, termasuk
address dan data bus yang termultipleksi. Mikrokontroler AVR menggunakan teknologi
RISC dimana set instruksinya dikurangi dari segi ukurannya dan kompleksitas mode
pengalamatannya.
Pada awal era industri komputer, bahasa pemrograman masih menggunakan
kode mesin dan bahasa assembly. Untuk mempermudah dalam pemrograman para
desainer komputer kemudian mengembangkan bahasa pemrograman tingkat tinggi yang
mudah dipahami manusia. Namun akibatnya, instruksi yang ada menjadi semakin
komplek dan membutuhkan lebih banyak memori. Dan tentu saja siklus eksekusi
instruksinya menjadi semakin lama. Dalam AVR dengan arsitektur RISC 8 bit, semua
instruksi berukuran 16 bit dan sebagian besar dieksekusi dalam 1 siklus clock. Berbeda
Universitas Sumatera Utara
14
dengan mikrokontroler MCS-51 yang instruksinya bervariasi antara 8 bit sampai 32 bit
dan dieksekusi selama 1 sampai 4 siklus mesin, dimana 1 siklus mesin membutuhkan
12 periode clock.
Dalam perkembangannya, AVR dibagi menjadi beberapa varian yaitu AT90Sxx,
ATMega, AT86RFxx dan ATTiny. Pada dasarnya yang membedakan masing-masing
varian adalah kapasitas memori dan beberapa fitur tambahan saja. Memori merupakan
bagian yang sangat penting pada mikrokontroler. Mikrokontroler memiliki dua macam
memori yang sifatnya berbeda.
Read Only Memory (ROM) yang isinya tidak berubah meskipun IC kehilangan
catu daya. Sesuai dangan keperluannya, dalam susunan MCS-51 memori penyimpanan
progam ini dinamakan sebagai memori progam.
Random Access Memori (RAM) isinya akan sirna begitu IC kehilangan catu
daya, dipakai untuk menyimpan data pada saat progam bekerja. RAM yang dipakai
untuk menyimpan ini data disebut sebagai memori data.Ada berbagai jenis ROM.
Untuk mikrokontroler dengan progam yang sudah baku dan diproduksi secara masal,
progam diisikan ke dalam ROM pada saat IC mikrokontroler dicetak di pabrik IC.
Untuk keperluan tertentu mikrokontroler mengunakan ROM yang dapat diisi ulang atau
Programble-Eraseable ROM yang disingkat menjadi PEROM atau PROM. Dulu
banyak dipakai UV-EPROM (Ultra Violet Eraseable Progamble ROM) yang kemudian
dinilai mahal dan ditinggalkan setelah ada flash PEROM yang harganya jauh lebih
murah.
ATMega8535 memiliki On-Chip In-System Reprogrammable Flash Memory
untuk menyimpan program. Untuk alasan keamanan, memori program dibagi menjadi
dua bagian yaitu boot flash section dan application flash section. Boot flash section
digunakan untuk menyimpan program boot loader, yaitu program yang harus
dijalankan pada saat AVR reset atau pertamakali diaktifkan. Application flash section
digunakan untuk menyimpan program aplikasi yang dibuat user. AVR tidak dapat
menjalankan program aplikasi ini sebelum menjalankan program boot loader. Besarnya
memori boot flash section dapat diprogram dari 128 word sampai 1024 word tergantung
Universitas Sumatera Utara
15
setting pada konfigurasi bit di register BOOTSZ. Jika boot loader diproteksi, maka
program pada application flash section juga sudah aman. (Lingga Wrdhana, 2006).
Gambar 2.6. IC Mikrokontroler ATMega8535
(Data Sheet IC AT90S8535, AT90L8535).
Konfigurasi Pin Mikrokontroler AVR ATmega8535:
1. VCC - Merupakan pin yang berfungsi sebagai pin masukan catu daya.
2. GND – Merupakan pin ground.
3. Port A (PA0...PA7) - Merupakan pin I/O dan pin masukan ADC.
4. Port B (PB0 – PB7) – Merupakan akan pin I/O dua arah dan pin fungsi khusus,
yaitu sebagai Timer/Counter, komperator analog dan SPI.
5. Port C (PC0 – PC7) – Merupakan pin I/O dua arah dan pin fungsi khusus, yaitu
TWI, komperator analog, input ADC dan Timer Osilator.
6. Port D (PD0 – PD7) – Merupakan pin I/O dua arah dan pin fungsi khusus, yaitu
komperator analog, interupsi eksternal dan komunikasi serial.
7. RESET – Merupakan pin yang digunakan untuk mereset mikrokontoler.
8. XTAL1 dan XTAL2 – Merupakan pin masukan clock eksternal.
9. AVCC – Merupakan pin masukan tegangan untuk ADC.
10. AREF – Merupakan pin tegangan referensi ADC.
Universitas Sumatera Utara
16
2.1.4. Menentukan lamanya satu detik
Baik jam digital maupun alalog pada prinsipnya sama, yaitu frekuensi getaran.
Perbedaanya 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.7.
Gambar 2.7. Skema penentuan detik, menit dan jam
(http://elektroarea.blogspot.com/2009_01_13_archive.html).
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). (http://elektroarea.blogspot.com/2009_01_13_archive.html).
2.1.4.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)
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 (=
Universitas Sumatera Utara
17
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
18
17
16
14
Bit 9 – Left counter
6
-------------1.000.000
Q8 – pin 1
Q7 – pin 4
Q6 – pin 2
Q5 – pin 3
Q3 – pin 6
Q10 – pin 14
Q7 – pin 4
Decimal value =
524288
262144
131072
65536
16384
512
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.8. Rangkaian skematik untuk menentukan satu detik menggunakan kristal
osilator 50 kHz (www.bowdenshobbycircuits.info.com).
Universitas Sumatera Utara
18
2.1.4.2. Menentukan satu detik pada mikrokontroler
Sebuah mikrokontroler mempunyai beberapa port keluaran. Dari port tersebut dapat
dikeluarkan isyarat clock dengan frekuensi tertentu. Aras rendah clock dapat
dikeluarkan dengan memberikan logika rendah pada keluaran port tersebut; dan aras
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 mikrokontoler 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.
Universitas Sumatera Utara
19
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.9. 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.
Gambar 2.10. Pembangkitan clock 500 kHz
(Teknoin, Volume 13, Nomor 2, Desember 2008, 6-10. ISSN: 0853-8697)
Universitas Sumatera Utara
20
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
fclock (kHz)
2
500 333
3
4
5
6
7
8
9
250
200
167
143
125
111
100
2.1.5. 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.
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.
Universitas Sumatera Utara
21
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.
Pin-pin pada Mikrokontroler AT89C2051
Deskripsi pin-pin pada Microcontroller AT89C2051 adalah sebagai berikut:
1. VCC (Pin 20) – Supplai 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).
P3.2 (pin 6)
INT0 (input interupsi eksternal 0, aktif low).
Universitas Sumatera Utara
22
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.6. 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.
Universitas Sumatera Utara
23
Gambar 2.11. 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.4 menunjukkan posisi dan penamaan pin untuk IC 4094.
Gambar 2.12. Diagram Pin IC 4094 (Data sheet IC 4094).
Keterangan:
D
= data input
Universitas Sumatera Utara
24
CP
= clock input
STR
= strobe input
EO
= ouput enable input
QS, Q’S
= output serial
Q0 S/d Q7
= output parallel
2.1.7. 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.13. Tampilan seven segmen (Sulhan Setiawan, 2006)
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.14.
Gambar 2.14. Konfigurasi seven segmen tipe common anoda (Dwi sutadi, 2002).
Sesuai dengan gambar 2.14, 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.
Universitas Sumatera Utara
25
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.15. Konfigurasi seven segmen tipe common katoda (Dwi Sutadi, 2002).
Sesuai dengan gambar 2.15, 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.
Universitas Sumatera Utara
26
2.1.8. Sensor Infra Merah
Infra merah (infra red) ialah sinar elektromagnet yang panjang gelombangnya lebih dari
pada cahaya nampak yaitu di antara 700 nm dan 1 mm. Sinar infra merah merupakan
cahaya yang tidak tampak. Jika dilihat dengan dengan spektroskop cahaya maka radiasi
cahaya infra merah akan nampak pada spektrum elektromagnet dengan panjang
gelombang di atas panjang gelombang cahaya merah. Dengan panjang gelombang ini
maka cahaya infra merah ini akan tidak tampak oleh mata namun radiasi panas yang
ditimbulkannya masih terasa/dideteksi. Infra merah dapat dibedakan menjadi tiga
daerah yakni:
1. Near Infra Merah………………0.75 – 1.5 µm.
2. Mid Infra Merah..……………...1.50 – 10 µm.
3. Far Infra Merah……………….10 – 100 µm.
Sifat-sifat cahaya infra merah:
1. Tidak tampak manusia.
2. Tidak dapat menembus materi yang tidak tembus pandang.
3. Dapat ditimbulkan oleh komponen yang menghasilkan panas.
Sistem sensor infra merah pada dasarnya menggunakan infra merah sebagai
media untuk komunikasi data antara receiver dan transmitter. Sistem akan bekerja jika
sinar infra merah yang dipancarkan terhalang oleh suatu benda yang mengakibatkan
sinar infra merah tersebut tidak dapat terdeteksi oleh penerima. Keuntungan atau
manfaat dari sistem ini dalam penerapannya antara lain sebagai pengendali jarak jauh,
alarm keamanan, otomatisasi pada sistem. Pemancar pada sistem ini tediri atas sebuah
LED infra merah yang dilengkapi dengan rangkaian yang mampu membangkitkan data
untuk dikirimkan melalui sinar infra merah, sedangkan pada bagian penerima biasanya
terdapat foto transistor, fotodioda, atau inframerah module yang berfungsi untuk
menerima sinar inframerah yang dikirimkan oleh pemancar.
Universitas Sumatera Utara
27
Komunikasi Infra Merah dilakukan dengan menggunakan dioda infra merah
sebagai pemancar dan modul penerima infra merah sebagai penerimanya. Untuk jarak
yang cukup jauh, kurang lebih tiga sampai lima meter, pancaran data infra merah harus
dimodulasikan terlebih dahulu untuk menghindari kerusakkan data akibat noise.
Gambar 2.16. Modulasi sinyal infra merah
(http://www.ittelkom.ac.id/library/index.php?view=category&id=23:Sistem%20Komun
ikasi%20Inframerah=com_content&Itemid=15).
Untuk transmisi data yang menggunakan media udara sebagai media perantara
biasanya menggunakan frekuensi carrier sekitar 30KHz sampai dengan 40KHz. Infra
merah yang dipancarkan melalui udara ini paling efektif jika menggunakan sinyal
carrier yang mempunyai frekuensi di atas. Sinyal yang dipancarkan oleh pengirim
diterima oleh penerima infra merah dan kemudian di-dekode-kan sebagai sebuah paket
data biner. Proses modulasi dilakukan dengan mengubah kondisi logika 0 dan 1
menjadi kondisi ada dan tidak ada sinyal carrier infra merah yang berkisar antara
30KHz sampai 40 KHz. Pada komunikasi data serial, kondisi idle (tidak ada transmisi
data) adalah merupakan logika ‘0’, sedangkan pada komunikasi infra merah kondisi idle
adalah kondisi tidak adanya sinyal carrier. Hal ini ditujukan agar tidak terjadi
pemborosan daya pada saat tidak terjadi transmisi data.
Gambar 2.17. Timing diagram infra merah
(http://www.ittelkom.ac.id/library/index.php?view=category&id=23:Sistem%20Komun
ikasi%20Inframerah=com_content&Itemid=15).
2.1.8.1. Sistem transmisi infra merah
Universitas Sumatera Utara
28
Semua remote kontrol menggunakan transmisi sinyal infra merah yang dimodulasi
dengan sinyal carrier dengan frekuensi tertentu yaitu pada frekuensi 30KHz sampai
40KHz. Sinyal yang dipancarkan oleh pengirim diterima oleh penerima infra merah dan
kemudian di-decode-kan sebagai sebuah paket data biner. Pada transmisi infra merah
terdapat dua terminologi yang sangat penting yaitu : ‘space’ yang menyatakan tidak ada
sinyal carrier dan pulse yang menyatakan ada sinyal carrier seperti pada gambar 2.18
Gambar 2.18. Terminologi pulsa-spasi
(http://www.ittelkom.ac.id/library/index.php?view=category&id=23:Sistem%20Komun
ikasi%20Inframerah=com_content&Itemid=15)
Untuk transmisi data biasanya sinyal ditransmisikan dalam bentuk pulsa-pulsa.
Ketika sebuah tombol ditekan pada remote kontrol maka infra merah akan
mentransmisikan sebuah sinyal yang akan dideteksi sebagai urutan data biner. Led infra
merah adalah jenis dioda yang memencarkan cahaya infra merah, aplikasi sederhana
penggunaan led infra merah ini adalah pada remote TV. Led infra merah pada dasarnya
adalah dioda PN silicon biasa yang dikemas dalam kotak transparan. Sinar infra merah
dihasilkan dari pertemuan Arsenida Galium pada led infra merah yang diberikan
tegangan listrik. Led infra merah merupakan salah satu komponen elektronika yang
akan mengantar arus jika dialiri bias maju. Led infra merah terbuat dari bahan Arsenida
gelium atau Fosfida Galium (GaAS atau Gap), dan ditempatkan dalam suatu wadah
yang tembus pandang. Untuk membedakan antara katoda dan anodanya dapat dilihat
dari bentuk elektrodanya yang besar adalah katoda. Material yang digunakan dalam
konstruksi led akan menentukan jenis cahaya yang diradiasikan. Apakah cahaya tampak
atau cahaya tidak tampak. Sebagai contoh material GaAlAs menghasilkan cahaya infra
merah (cahaya tidak tampak), sedangkan GaAsP menghasilkan cahaya tampak merah.
Pada sistem ada dua jenis led yang digunakan yaitu sebagai indikator dan juga sebagai
komponen pengirim cahaya infra merah. Berikut gambar led infra merah dan rangkaian
pengirim infra merah.
Universitas Sumatera Utara
29
Gambar 2.19. LED infra merah
(http://www.ittelkom.ac.id/library/index.php?view=category&id=23:Sistem%20Komun
ikasi%20Inframerah=com_content&Itemid=15)
Gambar 2.20. Rangkaian pengirim infra merah
(http://www.ittelkom.ac.id/library/index.php?view=category&id=23:Sistem%20Komun
ikasi%20Inframerah=com_content&Itemid=15)
2.1.8.2. Sistem penerima infra merah
Sinar infra merah yang dipancarkan oleh pemancar infra merah tentunya mempunyai
aturan tertentu agar data yang dipancarkan dapat diterima dengan baik di penerima.
Oleh karena itu baik di pengirim infra merah maupun penerima infra merah harus
mempunyai aturan yang sama dalam mentransmisikan (bagian pengirim) dan menerima
sinyal tersebut kemudian mendekodekannya kembali menjadi data biner (bagian
penerima). Komponen yang dapat menerima infra merah ini merupakan komponen
yang
peka
cahaya
yang
dapat
berupa
dioda
(photodioda)
atau
transistor
(phototransistor). Komponen ini akan merubah energi cahaya, dalam hal ini energi
cahaya infra merah, menjadi pulsa-pulsa sinyal listrik. Komponen ini harus mampu
mengumpulkan sinyal infra merah sebanyak mungkin sehingga pulsapulsa sinyal listrik
yang dihasilkan kualitasnya cukup baik. Pada perangkat penerima ini biasanya detektor
Universitas Sumatera Utara
30
cahaya yang digunakan adalah komponen TSOP4838, dimana pada komponen ini
sudah terdapat filter. Jadi detektor ini akan bekerja dengan baik jika terdapat frekuensi
38KHz.
Gambar 2.21. Rangkaian penerima infra merah dengan filter
(http://www.ittelkom.ac.id/library/index.php?view=category&id=23:Sistem%20Komun
ikasi%20Inframerah=com_content&Itemid=15)
Fototransistor adalah jenis transistor bipolar yang menggunakan kontak
(junction) base-collector untuk menerima atau mendeteksi cahaya dengan gain internal
yang dapat menghasilkan sinyal analog maupun digital. Fototransistor ini akan
mengubah energi cahaya menjadi arus listrik dengan sensitivitas yang lebih tinggi
dibandingkan fotodioda, tetapi dengan waktu respon yang secara umum akan lebih
lambat daripada fotodioda. Hal ini terjadi karena transistor jenis ini mempunyai kaki
basis terbuka untuk menangkap sinar, dan elektron yang ditimbulkan oleh foton cahaya
pada junction ini di-injeksikan di bagian basis dan diperkuat dibagian kolektornya.
Pada fototransistor, jika kaki basis mendapat sinar maka akan timbul tegangan
pada basisnya dan akan menyebabkan transistor berada pada daerah jenuhnya (saturasi),
akibatnya tegangan pada kaki kolektor akan sama dengan ground (Vout = 0 V).
Sebaliknya jika kaki basis tidak mendapat sinar, tidak cukup tegangan untuk membuat
transistor jenuh, akibatnya semua arus akandilewatkan ke keluaran (Vout = Vcc).
Pada prakteknya sinyal infra merah yang diterima intensitasnya sangat kecil
sehingga perlu dikuatkan. Kekuatan sinar dan sudut datang merupakan faktor penting
dalam keberhasilan transmisi data melalui infra merah selain filter dan penguatan pada
Universitas Sumatera Utara
31
bagian penerimanya. Selain itu agar tidak terganggu oleh sinyal cahaya lain maka sinyal
listrik yang dihasilkan oleh sensor infra merah harus difilter pada frekuensi sinyal
carrier yaitu pada 30KHz sampai 40KHz. Selanjutnya baik photodioda maupun
phototransistor disebut sebagai photodetector. Dalam penerimaan infra merah, sinyal ini
merupakan sinyal infra merah yang termodulasi. Pemodulasian sinyal data dengan
sinyal carrier dengan frekuensi tertentu akan dapat memperjauh transmisi data sinyal
infra merah. Semakin besar area penerimaan maka sudut penerimaannya juga semakin
besar. Kelemahan area penerimaan yang semakin besar ini adalah noise yang dihasilkan
juga semakin besar pula. Suatu penerima pada sistem komunikasi cahaya harus
memenuhi syarat antara lain:
1. Sensitivitas yang tinggi. Karena detektor cahaya digunakan pada suatu panjang
gelombang tertentu, maka sensitivitas tertinggi terdapat pada daerah panjang
gelombang yang dimaksud.
2. Respon waktu yang cepat, hal ini dimaksudkan agar sistem dapat dioperasikan
pada kecepatan tinggi yang akan meningkatkan efisiensi sistem komunikasi.
3. Noise
internal
yang
dibangkitkan
detektor
harus
sekecil
mungkin.
(http://www.ittelkom.ac.id/library/index.php?view=category&id=23:Sistem%20
Komunikasi%20Inframerah=com_content&Itemid=15)
2.1.9. Sensor Suhu LM35
IC LM35 dari National Semiconductor adalah sensor suhu yang teliti dan terkemas
dalam bentuk Integrated Circuit (IC), dimana output tegangan keluaran sangat linear
berpadanan dengan perubahan suhu. Sensor ini berfungsi sebagai pegubah dari besaran
fisis suhu ke besaran tegangan yang memiliki koefisien sebesar 10 mV/°C yang berarti
bahwa kenaikan suhu 1°C maka akan terjadi kenaikan tegangan sebesar 10 mV.
Sensor suhu LM35 ini tidak memerlukan pengkalibrasian atau penyetelan dari
luar karena ketelitiannya sampai lebih kurang seperempat derajat celcius pada
temperature ruang. Interval sensor mulai dari – 55°C sampai dengan +150°C, IC LM35
Universitas Sumatera Utara
32
penggunaannya sangat mudah, difungsikan sebagai kontrol dari indikator tampilan catu
daya terbelah.
Meskipun tegangan sensor ini dapat mencapai 30 volt akan tetapi yang
diberikan ke sensor adalah sebesar 5 volt, sehingga dapat digunakan dengan catu daya
tunggal dengan ketentuan bahwa LM35 hanya membutuhkan arus sebesar 60 µA hal ini
berarti LM35 mempunyai kemampuan menghasilkan panas (self-heating) dari sensor
yang dapat menyebabkan kesalahan pembacaan yang rendah yaitu kurang dari 0,5 ºC
pada suhu 25 ºC. (Data sheet LM35).
Tegangan output-nya adalah analog dapat langsung dihubungkan dengan salah
satu port mikrokontroler yang memiliki kemampuan ADC, misalnya ATmega8535.
ADC pada ATmega8535 memiliki resolusi 10-bit, yang dapat memberikan keluaran
2^10 = 1024 nilai diskrit. Bila digunakan catu 5V, resolusi yang dihasilkan adalah
5000mV/1024 = 4.8mV. Karena LM35 memiliki resolusi output 10mV/ºC, maka
resolusi termometer yang dibuat dengan ATmega8535 adalah 4.8mV/(10mV/°C) ~
0.5ºC. Dan untuk hasil yang lebih baik dan mengurangi pengaruh noise, output dari
LM35 dapat diperkuat dengan sebuah penguat tegangan. (Sulhan Setiawan, 2006).
Beberapa varian LM35:
• LM35, LM35A memiliki jangkauan -55ºC hingga +150ºC.
• LM35C, LM35CA memiliki jangkauan -40ºC hingga +110ºC.
• LM35D memiliki jangkauan 0ºC hingga +100ºC.
Gambar 2.22. Bentuk dan simbol IC LM35 (Data sheet LM35).
Universitas Sumatera Utara
33
Adapun keistimewaan dari IC LM 35 adalah :
1. Kalibrasi dalam satuan derajat celcius.
2. Linearitas +10 mV/ º C.
3. Akurasi 0,5 º C pada suhu ruang.
4. Range +2 º C – 150 º C.
5. Dioperasikan pada catu daya 4 V – 30 V.
6. Arus yang mengalir kurang dari 60 µA.
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
Universitas Sumatera Utara
34
}
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)
{
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 mengunakan 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.
Universitas Sumatera Utara
35
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
Unsigned char
1 byte
0 s/d 255
Signed char
1byte
-128 s/d 127
Int
2 byte
-32.768 s/d 32.767
Universitas Sumatera Utara
36
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
Double
4 byte
1.2*10-38 s/d 3.4*10+38
Universitas Sumatera Utara
37
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 penamaanya
dilakukan pada file lain yang disisipkan dalam program utama dengan sintaks sebagai
berikut:
# include <nama_preprosesor>
Contoh:
# include <mega 8535.h>
Universitas Sumatera Utara
38
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).
3. Fungsi matematika (math.h).
4. Fungsi String (string.h).
5. Fungsi Konversi BCD (bcd.h).
6. Fungsi Konversi Akses Memori (mem.h).
Universitas Sumatera Utara
39
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)
{
Dataku = PINA;
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
Universitas Sumatera Utara
40
2.2.1.9. Pernyataan Switch
Pernyataan switch digunakan untuk melakukan pengambilan keputusan terhadap
banyak kemungkikan. 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
nilai_2, pernyataan_3 akan dikerjakan jika ekspresi bernilai sama dengan nilai_3, dan
seterusnya. Pernyataan_default berssifat opsional, artinya boleh ada boleh tidak. Jika
ada maka pernyataan_default akan dikerjakan apabila nilai ekspresi tadak 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
Case 0xFD
: PORTC = 0x00; break;
: PORTC = 0xFF; break;
Pernyataan di atas berarti membaca port A, kemudian datanya (PINA) akan
dicocokan dengan nilai case. Jika PINA bernilai 0xFE maka data 0x00 akan
dikeluarkan ke port C kemudian program keluar dari pernyataan switch tetapi jika
Universitas Sumatera Utara
41
PINA bernilai 0xFD maka data 0xFF akan dikeluarkan ke port C kemudian program
keluar dari pernyataan switch. (Agus Bejo, 2008).
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
Perintah di atas berarti : isikan nilai 20 Heksadesimal ke register 0 (R0).
Universitas Sumatera Utara
42
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:
.............
ACALL TUNDA
.............
TUNDA:
.............
4. Instruksi RET
Universitas Sumatera Utara
43
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
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,
Loop:
JNB P1.0, Loop
.................
8. Instruksi CJNZ (Compare Jump If Not Equal)
Universitas Sumatera Utara
44
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,
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
Universitas Sumatera Utara
45
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 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.
(http://www.google.com/avrku.blogspot.com/2008/11/berkenalan-dengancodevisionavr. pdf)
Universitas Sumatera Utara
46
Gambar 2.23. Programmer Setting
(http://s600.photobucket.com/albums/tt82/electroboter/?).
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.24. Software 8051 Editor, Assembler, Simulator
(http://www.google.com/avrku.blogspot.com/2008/11/berkenalan-dengancodevisionavr. pdf).
Setelah program selesai ditulis, kemudian di-save dan kemudian di-assemble (dicompile). 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.
Universitas Sumatera Utara
47
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.25. ISP- Flash Programmer
(http://www.google.com/avrku.blogspot.com/2008/11/berkenalan-dengancodevisionavr. pdf).
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.
Universitas Sumatera Utara
Download