BAB II DASAR TEORI 2.1 AVR Atmega 8 AVR merupakan salah satu jenis mikrokontroler yang di dalamnya terdapat berbagai macam fungsi. Perbedaannya pada mikro yang pada umumnya digunakan seperti MCS51 adalah pada AVR tidak perlu menggunakan oscillator eksternal karena di dalamnya sudah terdapat internal oscillator. Selain itu kelebihan dari AVR adalah memiliki Power-On Reset, yaitu tidak perlu ada tombol reset dari luar karena cukup hanya dengan mematikan supply, maka secara otomatis AVR akan melakukan reset. Untuk beberapa jenis AVR terdapat beberapa fungsi khusus seperti ADC, EEPROM sekitar 128 byte sampai dengan 512 byte. AVR Atmega 8 adalah mikrokontroler CMOS 8-bit berarsitektur AVR RISC yang memiliki 8K byte in-System Programmable Flash. Mikrokontroler dengan konsumsi daya rendah ini mampu mengeksekusi instruksi dengan kecepatan maksimum 16MIPS pada frekuensi 16MHz. Jika dibandingkan dengan Atmega 8L perbedaannya hanya terletak pada besarnya tegangan yang diperlukan untuk bekerja. Untuk Atmega8 tipe L, mikrokontroler ini dapat bekerja dengan 7 8 tegangan antara 2,7 - 5,5 V sedangkan untuk Atmega 8 hanya dapat bekerja pada tegangan antara 4,5 – 5,5 V. 2.1.1 Konfigurasi AVR Atmega 8 ATmega8 memiliki 28 Pin, yang masing-masing pin nya memiliki fungsi yang berbeda-beda baik sebagai port maupun fungsi yang lainnya. Gambar 2.1 Konfigurasi AVR Atmega 8 Berikut akan dijelaskan fungsi dari masing-masing kaki Atmega 8 • VCC Merupakan supply tegangan digital. 9 • GND Merupakan ground untuk semua komponen yang membutuhkan grounding. • Port B (PB7...PB0) Didalam Port B terdapat XTAL1, XTAL2, TOSC1, TOSC2. Jumlah Port B adalah 8 buah pin, mulai dari pin B.0 sampai dengan B.7. Tiap pin dapat digunakan sebagai input maupun output. Port B merupakan sebuah 8-bit bi-directional I/O dengan internal pull-up resistor. Sebagai input, pin-pin yang terdapat pada port B yang secara eksternal diturunkan, maka akan mengeluarkan arus jika pull-up resistor diaktifkan. Khusus PB6 dapat digunakan sebagai input Kristal (inverting oscillator amplifier) dan input ke rangkaian clock internal, bergantung pada pengaturan Fuse bit yang digunakan untuk memilih sumber clock. Sedangkan untuk PB7 dapat digunakan sebagai output Kristal (output oscillator amplifier) bergantung pada pengaturan Fuse bit yang digunakan untuk memilih sumber clock. Jika sumber clock yang dipilih dari oscillator internal, PB7 dan PB6 dapat digunakan sebagai I/O atau jika menggunakan Asyncronous Timer/Counter2 maka PB6 dan PB7 (TOSC2 dan TOSC1) digunakan untuk saluran input timer. • Port C (PC5…PC0) Port C merupakan sebuah 7-bit bi-directional I/O port yang di dalam masing-masing pin terdapat pull-up resistor. Jumlah pin nya hanya 7 buah 10 mulai dari pin C.0 sampai dengan pin C.6. Sebagai keluaran/output port C memiliki karakteristik yang sama dalam hal menyerap arus (sink) ataupun mengeluarkan arus (source). • RESET/PC6 Jika RSTDISBL Fuse diprogram, maka PC6 akan berfungsi sebagai pin I/O. Pin ini memiliki karakteristik yang berbeda dengan pin-pin yang terdapat pada port C lainnya. Namun jika RSTDISBL Fuse tidak diprogram, maka pin ini akan berfungsi sebagai input reset. Dan jika level tegangan yang masuk ke pin ini rendah dan pulsa yang ada lebih pendek dari pulsa minimum, maka akan menghasilkan suatu kondisi reset meskipun clock-nya tidak bekerja. • Port D (PD7…PD0) Port D merupakan 8-bit bi-directional I/O dengan internal pull-up resistor. Fungsi dari port ini sama dengan port-port yang lain. Hanya saja pada port ini tidak terdapat kegunaan-kegunaan yang lain. Pada port ini hanya berfungsi sebagai masukan dan keluaran saja atau biasa disebut dengan I/O. • AVcc Pin ini berfungsi sebagai supply tegangan untuk ADC. Untuk pin ini harus dihubungkan secara terpisah dengan VCC karena pin ini digunakan untuk analog saja. Bahkan jika ADC pada AVR tidak digunakan tetap saja 11 disarankan untuk menghubungkannya secara terpisah dengan VCC. Jika ADC digunakan, maka AVcc harus dihubungkan ke VCC melalui lowpass filter. • AREF Merupakan pin referensi jika menggunakan ADC Gambar 2.2 Blok Diagram Atmega 8 12 Pada AVR status register mengandung beberapa informasi mengenai hasil dari kebanyakan hasil eksekusi instruksi aritmatik. Informasi ini digunakan untuk altering arus program sebagai kegunaan untuk meningkatkan performa pengoperasian. Register ini di-update setelah operasi ALU (Arithmetic Logic Unit) hal tersebut seperti yang tertulis dalam datasheet khususnya pada bagian Instruction Set Reference. Dalam hal ini untuk beberapa kasus dapat membuang penggunaan kebutuhan instrukasi perbandingan yang telah didedikasikan serta dapat menghasilkan peningkatan dalam hal kecepatan dan kode yang lebih sederhana dan singkat. Register ini tidak secara otomatis tersimpan ketika memasuki sebuah rutin interupsi dan juga ketika menjalankan sebuah perintah setelah kembali dari interupsi. Namun hal tersebut harus dilakukan melalui software. Berikut adalah gambar status register. Gambar 2.3 Status Register Atmega8 • Bit 7(I) Merupakan bit Global Interrupt Enable. Bit ini harus di-set agar semua perintah interupsi dapat dijalankan. Untuk perintah interupsi individual akan di jelaskan pada bagian yang lain. Jika bit ini di-reset, maka semua perintah interupsi baik yang individual maupun yang secara umum akan di 13 abaikan. Bit ini akan dibersihkan atau cleared oleh hardware setelah sebuah interupsi di jalankan dan akan di-set kembali oleh perintah RETI. Bit ini juga dapat di-set dan di-reset melalui aplikasi dan intruksi SEI dan CLL. • Bit 6(T) Merupakan bit Copy Storage. Instruksi bit Copy Instructions BLD (Bit Load) and BST (Bit Store) menggunakan bit ini sebagai asal atau tujuan untuk bit yang telah dioperasikan. Sebuah bit dari sebuah register dalam Register File dapat disalin ke dalam bit ini dengan menggunakan instruksi BST, dan sebuah bit di dalam bit ini dapat disalin ke dalam bit di dalam register pada Register File dengan menggunakan perintah BLD. • Bit 5(H) Merupakan bit Half Carry Flag. Bit ini menandakan sebuah Half Carry dalam beberapa operasi aritmatika. Bit ini berfungsi dalam aritmatika BCD. • Bit 4(S) Merupakan Sign bit. Bit ini selalu merupakan sebuah ekslusif di antara Negative Flag (N) dan two’s Complement Overflow Flag (V). • Bit 3(V) Merupakan bit Two’s Complement Overflow Flag. Bit ini menyediakan fungsi aritmatika dua komplemen. 14 • Bit 2(N) Merupakan bit Negative Flag. Bit ini mengindikasikan sebuah hasil negative di dalam sebuah fungsi logika atai aritmatika. • Bit 1(Z) Merupakan bit Zero Flag. Bit ini mengindikasikan sebuah jasil nol “0” dalam sebuah fungsi aritmatika atau logika. • Bit 0(C) Merupakan bit Carry Flag. Bit ini mengindikasikan sebuah Carry atau sisa dalam sebuah aritmatika atau logika. 2.1.2 Memori AVR Atmega 8 Memori atmega terbagi menjadi tiga yaitu : 1. Memori Flash Memori flash adalah memori ROM tempat kode-kode program berada. Kata flash menunjukan jenis ROM yng dapat ditulis dan dihapus secara elektrik. Memori flash terbagi menjadi dua bagian yaitu bagian aplikasi dan bagian boot. Bagian aplikasi adalah bagian kode-kode program apikasi berada. Bagian boot adalah bagian yang digunakan khusus untuk booting 15 awal yang dapat diprogram untuk menulis bagian aplikasi tanpa melalui programmer/downloader, misalnya melalui USART. 2. Memori Data Memori data adalah memori RAM yang digunakan untuk keperluan program. Memori data terbagi menjadi empat bagian yaitu : 32 GPR (General Purphose Register) adalah register khusus yang bertugas untuk membantu eksekusi program oleh ALU (Arithmatich Logic Unit), dalam instruksi assembler setiap instruksi harus melibatkan GPR. Dalam bahasa C biasanya digunakan untuk variabel global atau nilai balik fungsi dan nilai-nilai yang dapat memperingan kerja ALU. Dalam istilah processor komputer sahari-hari GPR dikenal sebagai “chace memory”. I/O register dan Aditional I/O register adalah register yang difungsikan khusus untuk mengendalikan berbagai pheripheral dalam mikrokontroler seperti pin port, timer/counter, usart dan lain-lain. Register ini dalam keluarga mikrokontrol MCS51 dikenal sebagi SFR(Special Function Register). 3. EEPROM EEPROM adalah memori data yang dapat mengendap ketika chip mati (off), digunakan untuk keperluan penyimpanan data yang tahan terhadap gangguan catu daya. 16 Gambar 2.4 Peta Memori Atmega 8 2.1.3 Timer / Counter 0 Timer/counter 0 adalah sebuah timer/counter yang dapat mencacah sumber pulsa/clock baik dari dalam chip (timer) ataupun dari luar chip (counter) dengan kapasitas 8-bit atau 256 cacahan. Timer/counter dapat digunakan untuk : • Timer/counter biasa • Clear Timer on Compare Match (selain Atmega 8) • Generator frekuensi (selain Atmega 8) • Counter pulsa eksternal 2.1.4 Komunikasi Serial Pada Atmega 8 AVR Atmega 8 memiliki Port USART pada Pin 2 dan Pin 3 untuk melakukan komunikasi data antara mikrokontroler dengan mikrokontroler ataupun mikrokontroler dengan komputer. USART dapat difungsikan sebagai transmisi data sinkron, dan asinkron. Sinkron berarti clock yang digunakan antara transmiter dan receiver satu sumber clock. Sedangkan asinkron berarti transmiter 17 dab receiver mempunyai sumber clock sendiri-sendiri. USART terdiri dalm tiga blok yaitu clock generator, transmiter, dan receiver. Gambar 2.5 Blok USART 2.1.4.1 Clock Generator Clock generator berhubungan dengan kecepatan transfer data (baud rate), register yang bertugas menentukan baud rate adalah register pasangan. 18 Tabel 2.1 Baud Rate Dimana : Fosc adalah frekuensi ossilator yang digunakan BAUD adalah transfer bit per detik. 2.1.4.2 USART Transmiter USART Transmiter berhubungan dengan data pada Pin TX. Perangkat yang sering digunakan seperti register UDR sebagi tempat penampungan data yang akan ditransmisikan. Flag TXC sebagai akibat dari data yang ditransmisikan telah sukses (complete), dan flag UDRE sebagai indikator jika UDR kosong dan siap untuk diisi data yang akan ditransmisikan lagi. 19 2.1.4.2 USART Receiver USART Receiver berhubungan dengan penerimaan data dari Pin RX. Perangkat yang sering digunakan seperti register UDR sebagai tempat penampung data yang telah diterima, dan flag RXC sebagi indikator bahwa data telah sukses (complete) diterima. 2.2 Sensor Suhu LM 35 Sensor adalah piranti yang menghasilkan sinyal keluaran yang sebanding dengan parameter yang diindra (Sensing). Pengukuran temperatur merupakan hal yang sangat penting. Pendeteksian temperature dapat dilakukan dengan menggunakan sensor temperature. Ada beberapa jenis sensor temperatur yang dapat digunakan pada pengukutan temperatur, yakni : termokopel,termistor. Sensor temperature yang sering di gunakan adalah sensor LM35 karena keakuratannya dibandingkan dengan sensor lain. LM35 adalah sensor temperature semiconductor-juncion yang tegangan outputnya sebanding dengan temperature dalam derajat celcius ( °C). LM35 memiliki kelebihan dibandingkan sensor suhu berpresisi Kelvin, dimana pemakai tidak perlu mengambil tegangan konstan yang besar untuk mendapatkan celcius yang tepat. LM35 memiliki keadaan default yaitu akurasi ±1/4 °C pada temperature ruang dan ±3/4°C pada range maksimum – sampai + 150°C. LM35 memiliki faktor skala linier +10.0 mV/°C, ini berarti untuk kenaikan satu derajat Celsius pada suhu sekitar tegangan output akan naik 10 mV. 20 Tegangan kerja dari LM35 adalah 4 sampai 30 Volt dengan kuat arus sebesar 60µA. Adapun beberapa kelebihan dari LM35 dari sensor temperature lain adalah: • Hasil pengkuran lebih akurat disbanding dengan menggunakan termistor. • Rangkaian sensor tertutup dan tidak bergantung (tidak terpengaruh) pada Oksidasi • LM35 menghasilkan tegangan keluaran lebih besar dbanding dengan thermocouple dan tegangan keluaran tidak perlu diperbesar. 2.3 Elemen Peltier (Thermoelectric Cooler) Peltier seperti yang ditunjukan pada Gambar 2.6, adalah suatu komponen yang mengaplikasikan Efek Peltier. Peltier merupakan sebuah komponen yang tergolong komponen Thermoelectric, dimana ketika terjadi perbedaan suhu diantara dua sisinya maka komponen ini mengubahnya menjadi besaran tegangan listrik, dan begitu pula sebaliknya, ketika suatu tegangan listrik diberikan kepada komponen ini, maka dia dapat mengubahnya menjadi dua suhu yang berbeda. Dalam prakteknya, TEC menggunakan beberapa termokopel yang disusun seri yang memudahkan perpindahan panas. Umumnya bagian luar komponen ini dibungkus sejenis keramik tipis yang berisikan batang-batang Bismuth Telluride di dalamnya. Material tersebut adalah suatu semikonduktor yang didalamya ditambahkan suatu zat tambahan. Zat tambahan tersebut bertujuan untuk 21 memberikan kelebihan elektron bebas (N-type semiconductor) atau memberikan kekurangan elektron bebas (P-type semiconductor). Gambar 2.6 Elemen Peltier Elektron dari material yang kekurangan elektron (P-type material) bergerak ke material yang kelebihan elektron (N-type material). Dalam keadaan ini maka konektor akan menyerap energi. Ketika elektron bergerak dari N-type menuju P-type, maka pada konektor akan dilepas energi. Energi yang diserap atau dilepas ini diberikan dalam bentuk panas. Ilustrasi kerja elemen pertier ditunjukkan pada Gambar 2.7. Gambar 2.7 Ilustrasi Kerja Elemen Peltier 22 2.3.1 Efek Seebeck Pada tahun 1821, J. T. Seebeck (1770-1831) menyatakan bahwa logam yang berbeda yang dihubungkan pada dua lokasi berbeda, maka akan ada tegangan mikro yang timbul jika kedua sisi plat memiliki perbedaan temperatur. Efek ini disebut “Efek Seebeck”. Seebeck dalam percobaannya menghubungkan tembaga dan besi dalam sebuah rangkaian. Di antara kedua logam tersebut lalu diletakkan jarum kompas. Ketika sisi logam tersebut dipanaskan, jarum kompas ternyata bergerak. Belakangan diketahui, hal ini terjadi karena aliran listrik yang terjadi pada logam menimbulkan medan magnet. Medan magnet inilah yang menggerakkan jarum kompas. Medan magnet ini terjadi karena adanya tegangan yang mengalir di antara kedua plat tersebut. Tegangan (Vo) tersebut dapat dinyatakan dengan persamaan : V0 = α XY X ( Th – Tc )…………………………………….(2.1) Dimana : V0 = Tegangan keluaran ( Volt ) α = Koefisien Seebeck antara 2 material X dan Y (Volt / K ) XY Th , Tc = Temperatur Termokopel panas dan dingin ( K ) 23 Nilai dari efek seebeck dapat ditentukan bergantung material yang digunakan. Berikut adalah tabel nilai seebeck untuk beberapa material : Tabel 2.2 Koefisien Seebeck 2.3.2 Efek Peltier Pada 1834, seorang ilmuwan bernama Jean Charles Athanase Peltier menemukan suatu teori pembalikan efek Seebeck. Teori tersebut disebut Efek Peltier. Beliau menemukan bahwa ketika suatu termokopel diberikan tegangan, maka akan terjadi perbedaan temperatur pada kedua sisinya. Teori ini juga sering dikenal sebagai Thermo-Electric Cooler (TEC). Ketika dua buah plat dialiri arus listrik maka akan timbul perbedaan suhu pada kedua plat tersebut. Jumlah kalor yang diserap dan juga yang dilepas dapat dinyatakan dalam persamaan berikut : Qc = Qh = πxy x I xy……………………………(2.2) 24 Dimana : Qc = Qh = Tingkat pendinginan atau pemanasan (Watt) πxy = Koefisien Peltier antara 2 material ( Volt ) Ixy = Arus yang mengalir ( Ampere ) Besar suhu di sisi panas dan sisi dingin dapat diubah-ubah tergantung arus polaritas yang diberikan. Hal tersebut menunjukkan bahwa proses terjadinya efek peltier bersifat reversibel. 2.3.3 Cara Kerja Elemen Peltier Suatu elemen Peltier memiliki 2 sisi dimana satu sisi bertindak sebagai bagian panas dan sisi lainnya bertindak sebagai bagian dingin. Cara kerja elemen peltier ditunjukkan pada Gambar 2.8. Gambar 2.8 Cara Kerja Elemen Peltier 25 Elektron dari material yang kekurangan elektron (P-type material) bergerak ke material yang kelebihan elektron (N-type material). Dalam keadaan ini maka konektor akan menyerap energi sehingga sisi ini akan menjadi sisi dingin dari Peltier. Dilain pihak, ketika elektron bergerak dari N-type menuju P-type, maka pada konektor akan melepas energi sehingga sisi ini akan menjadi sisi panas dari Peltier. 2.3.4 Faktor Thermal Dalam Elemen Peltier Ada beberapa faktor thermal yang mempengaruhi penggunaan elemen Peltier untuk aplikasi, yaitu: • Temperatur permukaan sisi panas ( Th ) Pada penggunaan elemen peltier, salah satu sisinya akan menjadi sisi panas. Dimana temperatur sisi panas (hot side) elemen peltier dapat ditentukan dengan persamaan berikut : Th = Tamb + (θ)(Qh)………………………….(2.3) Dimana : Th = Temperatur sisi panas ( oC ) Tamb = Temperatur Ambient ( oC ) θ = Tahanan termal dari heat exchanger( oC/watt ) Qh = Qc + Pin…………………………………(2.4) Dimana : Qh = Kalor yang dilepaskan pada bagian sisi panas elemen Peltier (Watt) 26 Qc = Kalor yang diserap pada bagian cold side elemen Peltier (Watt) Pin = Daya input (Watt) Persamaan tersebut dapat digunakan ketika menggunakan pendinginan menggunakan udara secara natural maupun konveksi paksa (forced convection) misalnya dengan penambahan fan. • Temperatur permukaan sisi dingin ( Tc ) Pada penggunaan elemen peltier, salah satu sisinya akan menjadi sisi dingin. Sisi dingin ini harus ditentukan agar suhunya lebih dingin dari temperatur yang diinginkan pada bagian yang didinginkan. Sisi dingin ini harus ditentukan agar tercapai suhu dingin yang kita inginkan. Perbedaan temperatur antara sisi panas dan sisi dingin disebut juga delta temperatur (∆T) yang ditentukan dengan persamaan : ∆T = Th – Tc……………………………(2.5) Pada elemen peltier konvensional, delta temperature (∆T) yang dapat dihasilkan berkisar antara 30 oC - 40 oC tergantung dari jenis dan kualitas elemen peltier yang digunakan. • Heat load yang dapat dialirkan dari obyek yang didinginkan ( Qc ) Faktor lain yang perlu dipertimbangkan dalam penggunaan elemen Peltier untuk aplikasi umum ialah material alat yang digunakan dan pertimbangan terhadap lingkungan sekitar. Heatsink dan coldsink harus dibuat dari material yang memiliki nilai konduktivitas thermal yang tinggi untuk memudahkan proses perpindahan kalor. 27 Faktor dari lingkungan seperti kelembaban (humidity) dan kondensasi dari sisi dingin (cold side) yang harus diminimalisir dengan metode sealing yang tepat. Sealing berfungsi untuk melindungi elemen Peltier dari kontak dengan air, gas, mengurangi kemungkinan korosi, korsleting listrik atau thermal yang dapat merusak elemen Peltier. 2.4 Heatsink Heatsink adalah material yang dapat menyerap dan mendisipasi panas dari suatu tempat yang bersentuhan dengan sumber panas dan membuangnya. Heatsink digunakan pada beberapa teknologi pendingin seperti refrijerasi, air conditioning, dan radiator pada mobil. Gambar 2.9 Heatsink 28 Sebuah heatsink dirancang untuk meningkatkan luas kontak permukaan dengan fluida disekitarnya, seperti udara. Kecepatan udara pada lingkungan sekitar, pemilihan material, desain sirip (atau bentuk lainnya) dan surface treatment adalah beberapa faktor yang mempengaruhi tahanan thermal dari heatsink. Thermal adhesive (juga dikenal dengan thermal grease) ditambahkan pada dasar permukaan heatsink agar tidak ada udara yang terjebak di antara heatsink dengan bagian yang akan diserap panasnya. 2.5 Coldsink Coldsink menggunakan mekanisme yang sama dengan heatsink namun yang membedakan seperti dalam penamaannya adalah bila heatsink berfungsi untuk memindahkan panas dari permukaan benda yang ingin didinginkan, maka coldsink berfungsi sebaliknya yaitu coldsink digunakan untuk memindahkan dingin (temperature yang lebih rendah) dari sisi dingin Peltier untuk mendinginkan udara box. Rumusan yang digunakan dalam perhitungan perpindahan kalor dari sisi dingin Peltier ke Coldsink sama dengan yang digunakan pada Heatsink yaitu dengan menggunakan rumusan perpindahan kalor konduksi. Q = Kmaterial . A . ∆T…………………………….(2.6) Dimana : Q = Kalor yang dipindahkan (Watt) 29 Kmaterial = Koefisien Perpindahan Panas Konduksi (Watt/m 0C) A = Luasan permukaan (m2) ∆T = Perbedaan temperatur sisi dingin Peltier dengan Coldsink (K) 2.6 Relay Relay adalah saklar yang dikendalikan secara elektronik (electronically switch). Arus listrik yang mengalir pada kumparan relay akan menciptakan medan magnet yang kemudian akan menarik lengan relay dan mengubah posisi saklar, yang sebelumnya terbuka menjadi terhubung. Relay memiliki tiga jenis kutub: COMMON = kutub acuan, NC (Normally Close) = kutub yang dalam keadaan awal terhubung pada COMMON, dan NO (Normally Open) = kutub yang pada awalnya terbuka dan akan terhubung dengan COMMON saat kumparan relay diberi arus listrik. Berdasarkan jumlah kutub pada relay, maka relay dibedakan menjadi 4 jenis: • SPST = Single Pole Single Throw • SPDT = Single Pole Double Throw • DPST = Double Pole Single Throw • DPDT = Double Pole Double Throw Pole adalah jumlah COMMON, sedangkan Throw adalah jumlah terminal output (NO dan NC). Untuk lebih memahami dapat dilihat gambar 2.10: 30 Gambar 2.10 Skematik Tipe-tipe Relay Pada umumnya, output dari mikrokontroler berarus rendah, sehingga dibutuhkan rangkaian tambahan berupa penggerak (driver) yang berupa electronic switch untuk bisa mengendalikan relay. Dan driver tersebut pun perlu ditambahkan suatu komponen peredam GGL-induksi yang dihasilkan oleh kumparan relay, seperti dioda yang diarahkan ke VCC seperti pada gambar 2.11: Gambar 2.11 Rangkaian Penggerak (Driver) Relay 31 2.7 BASCOM AVR BASCOM-AVR adalah salah satu tool untuk pengembangan / pembuatan program untuk kemudian ditanamkan dan dijalankan pada microcontroller terutama microcontroller keluarga AVR . BASCOM-AVR juga bisa disebut sebagai IDE (Integrated Development Environment) yaitu lingkungan kerja yang terintegrasi, karena disamping tugas utamanya (meng-compile kode program menjadi file HEX / bahasa mesin), BASCOM-AVR juga memiliki kemampuan / fitur lain yang berguna sekali, contoh : • Terminal (monitoring komunikasi serial) • Programmer (untuk menanamkan program yang sudah di-compile ke microcontroller). Dan perlu diketahui, sesuai dengan namanya BASCOM (Basic Compiler) bahasa yang digunakan adalah bahasa BASIC. Jadi, jika anda sudah pernah menggunakan bahasa BASIC (Visual Basic, Turbo Basic, dll), akan menjadi modal penting untuk mempelajari tool ini karena secara struktur pemrograman dasar tidak ada perbedaan. 2.7.1 Langkah Awal Penulisan Program Untuk memulai pembuatan program dengan BASCOM-AVR, klik menu File -> New. Langkah awal penulisan program adalah dengan menentukan file register, kristal yang digunakan, yakni dengan menuliskan : $regfile = "m8def.dat" $crystal = 1200000 32 Dimana "m8def.dat" adalah nama file yang berisi konfigurasi alamat register pada Microcontroller AVR ATMEGA 8, jika anda menggunakan jenis lain, maka anda harus mengganti nama file register ini sesuai dengan mikrocontroller yang anda gunakan, file-file ini dapat ditemukan pada direktori : C:\Program Files\MCS Electronics\BASCOM-AVR Sedangkan 12000000 adalah frekuensi denyut kristal yang digunakan, satuannya adalah dalam Hertz (12000000 = 12MHz). 2.7.2 Variabel dan Tipe data Di dalam pemrograman tipe data adalah hal yang sangat penting untuk diketahui sebelum kita memulai pemrograman itu sendiri. Pada bahasa Basic yang telah disesuaikan dengan BASCOM-AVR, tipe-tipe data yang dikenal dan dapat digunakan adalah sebagai berikut : • Bit (1/8 byte). Satu bit hanya bisa menampung nilai 1 atau 0. Kumpulan dari bit sebanyak 8 disebut byte. • Byte (1 byte). Byte bisa menampung angka binari 8 bit dengan jangkauan 0 sampai 255. • Integer (2 byte). Integer bisa menampung angka bulat 16 bit dengan jangkauan -32,768 sampai +32,767. • Word (2 byte). Words memiliki daya tampung yang sama dengan Integer, perbedaannya adalah Wor tidak mendukung nilai negatif adapun jangkauannya adalah dari 0 sampai 65535. 33 • Long (4 byte). Long mampu menampung angka bulat 32 bit mulai dari 2147483648 sampai 2147483647. • Single. Single mampu menampung angka pecahan (desimal) 32 bit dengan jangkauan dari 1.5 x 10^–45 sampai 3.4 x 10^38 • Double. Double mampu menampung angka pecahan (desimal) 64 bit dengan jangkauan dari 5.0 x 10^–324 sampai 1.7 x 10^308 • String (bisa sampai 254 byte). String bisa menampung karakter ataupun kumpulan karakter. Misalnya : "Reza" => merupakan kumpulan karakter, sehingga bisa ditampung ke dalam variabel dengan tipe data String. Cara mendeklarasikan sebuah variabel pada BASCOM-AVR adalah sebagai berikut : Dim namavariabel tipedata, contoh : Dim x as Byte. Khusus untuk tipe data String ada sedikit tambahan yakni jumlah karakter maksimal yang bisa ditampung oleh variabel tersebut. Contoh : Dim x as String * 10, berarti variabel x mampu menampung karakter sepanjang 10 karakter. Di dalam penulisan nama variabel terdapat beberapa aturan yang harus di perhatikan : 1. Tidak boleh menggunakan karakter khusus seperti : */#$@!%^&*(),;'~`?<>+=-\ 34 2. Tidak boleh menggunakan kata kunci yang telah ada di dalam bahasa pemrograman, contoh : for, next, do, loop, while, until, dll. 3. Karakter pertama dalam nama varibel tidak boleh angka, contoh : 4ndi => salah, n4di => benar. 4. Tidak boleh ada spasi, jika nama variabel lebih dari satu kata dapat dihubungkan dengan underscore. 2.7.3 Operator Operator yang digunakan secara umum adalah, operator pembanding, operator aritmatik, dan operator logika. 1. Operator Pembanding Digunakan untuk mewakili sebuah nilai logika (nilai boolean), dari suatu persamaan atau nilai. Tabel 2.3 Operator Pembanding Operator Keterangan = <> Sama Dengan Tidak Sama Dengan Penggunaan X = Y X <> Y > Besar Dari X > Y < Kecil Dari X < Y >= Besar Sama Dengan X >= Y <= Kecil Sama Dengan X <= Y Hasil dari operasi dengan menggunakan operator pembanding adalah true atau false. 35 2. Operator Aritmatik Digunakan untuk mengoperasikan data-data numerik, seperti penjumlahan, pengurangan, perkalian, pembagian, dll. Dalam proses aritmatika tersebut, pengerjaan operasi tergantung dari tingkat valensi operator-operator yang terlibat. Perpangkatan memiliki valensi tertinggi, kemudian dilanjutkan dengan perkalian, pembagian, pembagian bulat dan sisa pembagian, sedangkan penjumlahan dan pengurangan mempunyai valensi yang terendah. Tabel 2.4 Operator Aritmatik Operator Keterangan Penggunaan + Tambah X=Y+Z - Kurang X=Y-Z * Kali X=Y*Z / Bagi X=Y/Z Pembagian \ bulat X=Y\Z ^ Pangkat X=Y^Z 36 3. Operator Logika Digunakan untuk mengoperasikan operand (konstanta, variabel, atau suatu ekspresi) secara logis Tabel 2.5 Operator Logika Operator Keterangan Penggunaan and Konjungsi Y and Z or Disjungsi Y or Z Exclusive xor Or Y xor Z not Komplemen Not Y 2.7.4 Perulangan / Looping Perulangan / looping tidak bisa dipisahkan dengan bahasa pemrograman. di dalam bahasa basic (disesuaikan dengan BASCOM-AVR) perulangan yang dapat digunakan adalah sebagai berikut : 1. Do ... Loop Until Kondisi Contoh penggunaan : Dim x as byte x=0 Do statement ... 37 x=x +1 Loop until x = 10 2. While Kondisi ..... Wend Contoh penggunaan : Dim x as byte x=0 While x < 10 statement ... x=x+1 Wend 3. For..... Next Contoh penggunaan : Dim x as byte For x = 1 to 10 statement ... Next x 38 2.7.5 Konfigurasi Dasar Port Agar dapat digunakan, Port yang terdapat pada mikrocontroller harus dikonfigurasi terlebih dahulu. Pada kesempatan ini kita hanya akan mengkonfigurasi Port sebagai I/O (Input atau Output). 1. Konfigurasi Port Sebagai Output Dengan mengkonfigurasi Port sebagai output berarti Port tersebut ditugaskan untuk mengeluarkan suatu logika. Untuk mengkonfigurasi Port sebagai output dapat dilakukan dengan 2 cara : • Konfigurasi Semua Pin dalam suatu Port secara keseluruhan. Dengan mengggunakan cara ini berarti kita menginginkan semua pin pada Port tertentu dikonfigurasi sebagai output. Adapun cara penulisannya adalah : Config PORTX= output. Contoh : Config PORTA = output. • Konfigurasi Pin tertentu dalam suatu Port. Dengan menggunakan cara ini berarti kita menginginkan salah satu Pin atau beberapa Pin pada Port tertentu dikonfigurasi sebagai output. Adapun cara penulisannya adalah: Config PORTX.y = output. Contoh : Config PORTA.3 = output. Pada contoh tersebut dapat dilihat bahwa hanya Pin 3 ( Pin ke 4, karena penomoran Pin dimulai dari 0) pada PORTA yang dikonfigurasi sebagai output. 2. Konfigurasi Port Sebagai Input Dengan mengkonfigurasi Port sebagai input berarti Port tersebut ditugaskan untuk menangkap perubahan logika dari suatu sumber tertentu 39 (misalnya sensor). Untuk mengkonfigurasi Port sebagai input dapat dilakukan dengan 2 cara : • Konfigurasi Semua Pin dalam suatu Port secara keseluruhan. Dengan mengggunakan cara ini berarti kita menginginkan semua pin pada Port tertentu dikonfigurasi sebagai input. Adapun cara penulisannya adalah : Config PORTX= input. Contoh : Config PORTA = input. • Konfigurasi Pin tertentu dalam suatu Port. Dengan menggunakan cara ini berarti kita menginginkan salah satu Pin atau beberapa Pin pada Port tertentu dikonfigurasi sebagai input. Adapun cara penulisannya adalah: Config PINX.y = input. Contoh : Config PINA.3 = input. Pada contoh tersebut dapat dilihat bahwa hanya Pin 3 (Pin ke 4, karena penomoran Pin dimulai dari 0) pada PORTA yang dikonfigurasi sebagai input.