Belajar Mikrokontroler Dengan Bahasa C

Belajar Mikrokontroler Dengan Bahasa C
APA ITU MIKROKONTROLER Komputer hadir dalam kehidupan manusia baru 50 tahun terakhir, namun efeknya sangat besar dalam merubah kehidupan manusia, bahkan melebihi penemuan manusia lainnya seperti radio, telepon, automobil, dan televisi. Begitu banyak aplikasi memanfaatkan komputer, terutama dalam pemanfaatan kemampuan chip mikroprosesor di dalamnya yang dapat melakukan komputasi sangat cepat, dapat bekerja sendiri dengan diprogram, dan dilengkapi memori untuk menyimpan begitu banyak data. Seiring dengan perkembangan zaman, semakin luaslah kebutuhan akan kemampuan seperti yang dimiliki oleh komputer, sehingga menyebabkan munculnya terobosan-terobosan baru yang salah satunya adalah dibuatnya chip mikrokontroler. Mikrokontroler adalah single chip computer yang memiliki kemampuan untuk diprogram dan digunakan untuk tugas-tugas yang berorientasi kontrol. Mikrokontroler datang dengan dua alasan utama, yang pertama adalah kebutuhan pasar (market need) dan yang kedua adalah perkembangan teknologi baru. Yang dimaksud dengan kebutuhan pasar adalah kebutuhan yang luas dari produk-produk elektronik akan perangkat pintar sebagai pengontrol dan pemroses data. Sedangkan yang dimaksud dengan perkembangan teknologi baru adalah perkembangan teknologi semikonduktor yang memungkinkan pembuatan chip dengan kemampuan komputasi yang sangat cepat, bentuk yang semakin mungil, dan harga yang semakin murah. PERBEDAAN MIKROKONTROLER DENGAN MIKROPROSESOR Terdapat perbedaan yang signifikan antara mikrokontroler dan mikroprosessor. Perbedaan yang utama antara keduanya dapat dilihat dari dua faktor utama yaitu arsitektur perangkat keras (hardware architecture) dan aplikasi masing-masing. Ditinjau dari segi arsitekturnya, mikroprosesor hanya merupakan single chip CPU, sedangkan mikrokontroler dalam IC-nya selain CPU juga terdapat device lain yang memungkinkan mikrokontroler berfungsi sebagai suatu single chip computer. Dalam sebuah IC mikrokontroler telah terdapat ROM, RAM, EPROM, serial interface dan paralel interface, timer, interrupt controller, konverter Anlog ke Digital, dan lainnya (tergantung feature yang melengkapi mikrokontroler tersebut). Sedangkan dari segi aplikasinya, mikroprosessor hanya berfungsi sebagai Central Processing Unit yang menjadi otak komputer, sedangkan mikrokontroller, dalam bentuknya yang mungil, pada umumnya ditujukan untuk melakukan tugas–tugas yang berorientasi kontrol pada rangkaian yang membutuhkan jumlah komponen minimum dan biaya rendah (low cost). APLIKASI MIKROKONTROLER Karena kemampuannya yang tinggi, bentuknya yang kecil, konsumsi dayanya yang rendah, dan harga yang murah maka mikrokontroler begitu banyak digunakan di dunia. Mikrokontroler digunakan mulai dari mainan anak-anak, perangkat elektronik rumah tangga, perangkat pendukung otomotif, peralatan industri, peralatan telekomunikasi, peralatan medis dan kedokteran, sampai dengan pengendali robot serta persenjataan militer. Terdapat beberapa keunggulan yang diharapkan dari alat-alat yang berbasis mikrokontroler (microcontroller-based solutions) : Kehandalan tinggi (high reliability) dan kemudahan integrasi dengan komponen lain (high degree of integration). Ukuran yang semakin dapat diperkecil (reduced in size). Penggunaan komponen dipersedikit (reduced component count) yang juga akan menyebabkan biaya produksi dapat semakin ditekan (lower manufacturing cost). Waktu pembuatan lebih singkat (shorter development time) sehingga lebih cepat pula dijual ke pasar sesuai kebutuhan (shorter time to market). Konsumsi daya yang rendah (lower power consumption). PERKEMBANGAN MIKROKONTROLER Karena kebutuhan yang tinggi terhadap “chip-chip pintar” dengan berbagai fasilitasnya, maka berbagai vendor juga berlomba untuk menawarkan produk-produk mikrokontrolernya. Hal tersebut terjadi semenjak tahun 1970-an. Motorola mengeluarkan seri mikrokontroler 6800 yang terus dikembangkan hingga sekarang menjadi 68HC05, 68HC08, 68HC11, 68HC12, dan 68HC16. Zilog juga mengeluarkan seri mikroprosesor Z80-nya yang terkenal dan terus dikembangkan hingga kini menjadi Z180 dan kemudian diadopsi juga oleh mikroprosesor Rabbit. Intel mengeluarkan mikrokontrolernya yang populer di dunia yaitu 8051, yang karena begitu populernya maka arsitektur 8051 tersebut kemudian diadopsi oleh vendor lain seperti Phillips, Siemens, Atmel, dan vendor-vendor lain dalam produk mikrokontroler mereka. Selain itu masih ada mikrokontroler populer lainnya seperti Basic Stamps, PIC dari Microchip, MSP 430 dari Texas Instrument dan masih banyak lagi. Selain mikroprosesor dan mikrokontroler, sebenarnya telah bemunculan chip-chip pintar lain seperti DSP prosesor dan Application Spesific Integrated Circuit (ASIC). Di masa depan, chip-chip mungil berkemampuan sangat tinggi akan mendominasi semua desain elektronik di dunia sehingga mampu memberikan kemampuan komputasi yang tinggi serta meminimumkan jumlah komponen-komponen konvensional. OVERVIEW MIKROKONTROLER AVR Mikrokontroler AVR merupakan salah satu jenis arsitektur mikrokontroler yang menjadi andalan Atmel. Arsitektur ini dirancang memiliki berbagai kelebihan dan merupakan penyempurnaan dari arsitektur mikrokontroler-mikrokontroler yang sudah ada. Berbagai seri mikrokontroler AVR telah diproduksi oleh Atmel dan digunakan di dunia sebagai mikrokontroler yang bersifat low cost dan high performance. Di Indonesia, mikrokontroler AVR banyak dipakai karena fiturnya yang cukup lengkap, mudah untuk didapatkan, dan harganya yang relatif terjangkau. Antar seri mikrokontroler AVR memiliki beragam tipe dan fasilitas, namun kesemuanya memiliki arsitektur yang sama, dan juga set instruksi yang relatif tidak berbeda. Berikut tabel perbandingan beberapa seri mikrokontroler AVR buatan Atmel. Seri Flash (KBytes) RAM (Bytes) EEPROM (KBytes) Pin I/O Timer 16-bit Timer 8-bit UART PWM ADC 10-bit SPI ISP ATmega8 8 1024 0.5 23 1 1 1 3 6/8 1 Ya ATmega8535 8 512 0.5 32 2 2 1 4 8 1 Ya ATmega16 16 1024 0.5 32 1 2 1 4 8 1 Ya ATmega162 16 1024 0.5 35 2 2 2 6 8 1 Ya ATmega32 32 2048 1 32 1 2 1 4 8 1 Ya ATmega128 128 4096 4 53 2 2 2 8 8 1 Ya ATtiny12 1 - 0.0625 6 - 1 - - - - Ya ATtiny2313 2 128 0.125 18 1 1 1 4 - 1 Ya ATtiny44 4 256 0.25 12 1 1 - 4 8 1 Ya ATtiny84 8 512 0.5 12 1 1 - 4 8 1 Ya Keterangan: Flash adalah suatu jenis Read Only Memory yang biasanya diisi dengan program hasil buatan manusia yang harus dijalankan oleh mikrokontroler. RAM (Random Acces Memory) merupakan memori yang membantu CPU untuk penyimpanan data sementara dan pengolahan data ketika program sedang running. EEPROM (Electrically Erasable Programmable Read Only Memory) adalah memori untuk penyimpanan data secara permanen oleh program yang sedang running. Port I/O adalah kaki untuk jalur keluar atau masuk sinyal sebagai hasil keluaran ataupun masukan bagi program. Timer adalah modul dalam hardware yang bekerja untuk menghitung waktu/pulsa . UART (Universal Asynchronous Receive Transmit) adalah jalur komunikasi data khusus secara serial asynchronous. PWM (Pulse Width Modulation) adalah fasilitas untuk membuat modulasi pulsa. ADC (Analog to Digital Converter) adalah fasilitas untuk dapat menerima sinyal analog dalam range tertentu untuk kemudian dikonversi menjadi suatu nilai digital dalam range tertentu. SPI (Serial Peripheral Interface) adalah jalur komunikasi data khusus secara serial secara serial synchronous. ISP (In System Programming) adalah kemampuan khusus mikrokontroler untuk dapat diprogram langsung dalam sistem rangkaiannya dengan membutuhkan jumlah pin yang minimal. ARSITEKTUR MIKROKONTROLER AVR Mikrokontroler AVR sudah menggunakan konsep arsitektur Harvard yang memisahkan memori dan bus untuk data dan program, serta sudah menerapkan single level pipelining. Selain itu mikrokontroler AVR juga mengimplementasikan RISC (Reduced Instruction Set Computing) sehingga eksekusi instruksi dapat berlangsung sangat cepat dan efisien. Blok sistem mikrokontroler AVR adalah sebagai berikut. Keterangan: Flash adalah suatu jenis Read Only Memory yang biasanya diisi dengan program hasil buatan manusia yang harus dijalankan oleh mikrokontroler. RAM (Random Acces Memory) merupakan memori yang membantu CPU untuk penyimpanan data sementara dan pengolahan data ketika program sedang running. EEPROM (Electrically Erasable Programmable Read Only Memory) adalah memori untuk penyimpanan data secara permanen oleh program yang sedang running. Port I/O adalah kaki untuk jalur keluar atau masuk sinyal sebagai hasil keluaran ataupun masukan bagi program. Timer adalah modul dalam hardware yang bekerja untuk menghitung waktu/pulsa . UART (Universal Asynchronous Receive Transmit) adalah jalur komunikasi data khusus secara serial asynchronous. PWM (Pulse Width Modulation) adalah fasilitas untuk membuat modulasi pulsa. ADC (Analog to Digital Converter) adalah fasilitas untuk dapat menerima sinyal analog dalam range tertentu untuk kemudian dikonversi menjadi suatu nilai digital dalam range tertentu. SPI (Serial Peripheral Interface) adalah jalur komunikasi data khusus secara serial secara serial synchronous. ISP (In System Programming) adalah kemampuan khusus mikrokontroler untuk dapat diprogram langsung dalam sistem rangkaiannya dengan membutuhkan jumlah pin yang minimal. ARSITEKTUR MIKROKONTROLER AVR Mikrokontroler AVR sudah menggunakan konsep arsitektur Harvard yang memisahkan memori dan bus untuk data dan program, serta sudah menerapkan single level pipelining. Selain itu mikrokontroler AVR juga mengimplementasikan RISC (Reduced Instruction Set Computing) sehingga eksekusi instruksi dapat berlangsung sangat cepat dan efisien. Blok sistem mikrokontroler AVR adalah sebagai berikut. PENJELASAN FUNGSI PIN MIKROKONTROLER AVR IC mikrokontroler dikemas (packaging) dalam bentuk yang berbeda. Namun pada dasarnya fungsi kaki yang ada pada IC memiliki persamaan. Gambar salah satu bentuk IC seri mikrokontroler AVR ATmega8535 dapat dilihat berikut. Berikut adalah penjelasan fungsi tiap kaki. PORT A Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port A dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port A (DDRA) harus disetting terlebih dahulu sebelum Port A digunakan. Bit-bit DDRA diisi 0 jika ingin memfungsikan pin-pin port A yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Selain itu, kedelapan pin port A juga digunakan untuk masukan sinyal analog bagi A/D converter. PORT B Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port B dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port B (DDRB) harus disetting terlebih dahulu sebelum Port B digunakan. Bit-bit DDRB diisi 0 jika ingin memfungsikan pin-pin port B yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Pin-pin port B juga memiliki untuk fungsi-fungsi alternatif khusus seperti yang dapat dilihat dalam tabel berikut. PORT C Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port C dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port C (DDRC) harus disetting terlebih dahulu sebelum Port C digunakan. Bit-bit DDRC diisi 0 jika ingin memfungsikan pin-pin port C yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Selain itu, dua pin port C (PC6 dan PC7) juga memiliki fungsi alternatif sebagai oscillator untuk timer/counter 2. PORT D Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port D dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port D (DDRD) harus disetting terlebih dahulu sebelum Port D digunakan. Bit-bit DDRD diisi 0 jika ingin memfungsikan pin-pin port D yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Selain itu, pin-pin port D juga memiliki untuk fungsi-fungsi alternatif khusus seperti yang dapat dilihat dalam tabel berikut. RESETRST pada pin 9 merupakan reset dari AVR. Jika pada pin ini diberi masukan low selama minimal 2 machine cycle maka system akan di-reset. XTAL1XTAL1 adalah masukan ke inverting oscillator amplifier dan input ke internal clock operating circuit. XTAL2XTAL2 adalah output dari inverting oscillator amplifier. AVccAvcc adalah kaki masukan tegangan bagi A/D Converter. Kaki ini harus secara eksternal terhubung ke Vcc melalui lowpass filter. AREF AREF adalah kaki masukan referensi bagi A/D Converter. Untuk operasionalisasi ADC, suatu level tegangan antara AGND dan Avcc harus dibeikan ke kaki ini. AGNDAGND adalah kaki untuk analog ground. Hubungkan kaki ini ke GND, kecuali jika board memiliki anlaog ground yang terpisah. PEMROGRAMAN BAHASA C UNTUK AVR Bahasa C luas digunakan untuk pemrograman berbagai jenis perangkat, termasuk mikrokontroler. Bahasa ini sudah merupakan high level language, dimana memudahkan programmer menuangkan algoritmanya. Untuk mengetahui dasar bahasa C dapat dipelajari sebagai berikut. 1. Struktur penulisan program #include < [library1.h] > // Opsional #include < [library2.h] > // Opsional#define [nama1] [nilai] ; // Opsional #define [nama2] [nilai] ; // Opsional[global variables] // Opsional[functions] // Opsional void main(void) // Program Utama { [Deklarasi local variable/constant] [Isi Program Utama] } 2. Tipe data char : 1 byte ( -128 s/d 127 ) unsigned char : 1 byte ( 0 s/d 255 ) int : 2 byte ( -32768 s/d 32767 ) unsigned int : 2 byte ( 0 s/d 65535 ) long : 4 byte ( -2147483648 s/d 2147483647 ) unsigned long : 4 byte ( 0 s/d 4294967295 ) float : bilangan desimal array : kumpulan data-data yang sama tipenya. 3. Deklarasi variabel & konstanta Variabel adalah memori penyimpanan data yang nilainya dapat diubah-ubah. Penulisan : [tipe data] [nama] = [nilai] ; Konstanta adalah memori penyimpanan data yang nilainya tidak dapat diubah. Penulisan : const [nama] = [nilai] ; Tambahan: Global variabel/konstanta yang dapat diakses di seluruh bagian program. Local variabel/konstanta yang hanya dapat diakses oleh fungsi tempat dideklarasikannya. 4. Statement Statement adalah setiap operasi dalam pemrograman, harus diakhiri dengan [ ; ] atau [ } ]. Statement tidak akan dieksekusi bila diawali dengan tanda [ // ] untuk satu baris. Lebih dari 1 baris gunakan pasangan [ /* ] dan [ */ ]. Statement yang tidak dieksekusi disebut juga comments / komentar. Contoh: suhu=adc/255*100; //contoh rumus perhitungan suhu 5. Function Function adalah bagian program yang dapat dipanggil oleh program utama. Penulisan : [tipe data hasil] [nama function]([tipe data input 1],[tipe data input 2]) { [statement] ; } 6. Conditional statement dan looping if else : digunakan untuk penyeleksian kondisi if ( [persyaratan] ) { [statement1]; [statement2]; } else { [statement3]; [statement4]; } for : digunakan untuk looping dengan jumlah yang sudah diketahui for ( [nilai awal] ; [persyaratan] ; [operasi nilai] ) { [statement1]; [statement2]; } while : digunakan untuk looping jika dan salama memenuhi syarat tertentu while ( [persyaratan] ) { [statement1]; [statement2]; } do while : digunakan untuk looping jika dan salama memenuhi syarat tertentu, namun min 1 kali do { [statement1]; [statement2]; } while ( [persyaratan] ) switch case : digunakan untuk seleksi dengan banyak kondisi switch ( [nama variabel] ) { case [nilai1]: [statement]; break; case [nilai2]: [statement]; break; } 7. Operasi logika dan biner Logika AND :&& NOT : ! OR : || Biner AND : & OR : | XOR : ^ Shift right: >> Shift left : << Komplemen : ~ 8. Operasi relasional (perbandingan) Sama dengan : == Tidak sama dengan : != Lebih besar : > Lebih besar sama dengan : >= Lebih kecil : < Lebih kecil sama dengan : <= 9. Operasi aritmatika + , – , * , / : tambah,kurang,kali,bagi += , -= , *= , /= : nilai di sebelah kiri operator di tambah/kurang/kali/bagi dengan nilai di sebelah kanan operator % : sisa bagi ++ , — : tambah satu (increment) , kurang satu (decrement) Contoh : a = 5 * 6 + 2 / 2 -1 ; maka nilai a adalah 30 a *= 5 ; jika nilai awal a adalah 30, maka nilai a = 30×5 = 150. a += 3 ; jika nilai awal a adalah 30, maka nilai a = 30+5 = 33. a++ ; jika nilai awal a adalah 5 maka nilai a = a+1 = 6. a– ; jika nilai awal a adalah 5 maka nilai a = a-1 = 4. RANGKAIAN SISTEM MINIMUM AVR 8535 Sistem minimum (sismin) mikrokontroler adalah rangkaian elektronik minimum yang diperlukan untuk beroperasinya IC mikrokontroler. Sismin ini kemudian bisa dihubungkan dengan rangkaian lain untuk menjalankan fungsi tertentu. Di keluarga mikrokontroler AVR, seri 8535 adalah salah satu seri yang sangat banyak digunakan. Untuk membuat rangkaian sismin Atmel AVR 8535 diperlukan beberapa komponen yaitu: IC mikrokontroler ATmega8535 1 XTAL 4 MHz atau 8 MHz (XTAL1) 3 kapasitor kertas yaitu dua 22 pF (C2 dan C3) serta 100 nF (C4) 1 kapasitor elektrolit 4.7 uF (C12) 2 resistor yaitu 100 ohm (R1) dan 10 Kohm (R3) 1 tombol reset pushbutton (PB1) Selain itu tentunya diperlukan power suply yang bisa memberikan tegangan 5V DC. Rangkaian sistem minimum ini sudah siap untuk menerima sinyal analog (fasilitas ADC) di port A. Gambar rangkaiannya adalah sebagai berikut. CARA BELAJAR Belajar mikrokotroler pada hakikatnya adalah bermain-main dengan bilangan. Input apapun yang masuk ke dalam CPU terlebih dahulu harus diubah ke dalam bentuk bilangan biner. Bilangan biner terdiri dari angka 1 (ya/ada tegangan) dan 0 (tidak/tidak ada tegangan). Mengapa CPU yang hanya bisa membedakan angka 1 dan 0 bisa begitu canggih? Untuk ilustrasi, jika kita punya memori 1 bit maka memori tersebut mampu menyimpan 2 kemungkinan yaitu 1 dan 0. Jika kita punya memori 4 bit maka memori tersebut mampu menyimpan 4 kemungkinan yaitu 00, 01, 10, 11. Semakin banyak bit yang kita miliki maka semakin banyak kemungkinan yang ada. Bit Kemungkinan 0 2 1 Bit Bit Kemungkinan 0 0 4 0 1 1 0 KONSEP MIKROKONTROLER Mikrokontroler adalah sebuah sistem microprosesor di mana di dalamnya sudah berisi CPU, ROM, RAM, I/O, Clock, dan peralatan internal lainya yang saling terhubung dan terorganisasi dengan baik oleh pabrik pembuatnya dan dikemas dalam satu chip yang siap dipakai. Sehingga kita tinggal memprogram isi ROM sesuai aturan penggunaan oleh pabrik yang membuatnya. Cara mudah mengoperasikan peralatan internal mikrokontroler adalah dengan mempelajari register-register pengendali peralatan tersebut. Dalam menulis script program kita harus menggunakan bahasa pemprograman tersendiri agar script yang kita buat dapat dimengerti oleh CPU. Bahasa pemprograman yang sering digunakan adalah bahasa Assembler dan Bahasa C. Dibandingkan bahasa Assembler, Bahasa C adalah bahasa HLL (High Level Language) atau bahasa menengah yang mudah untuk dibaca dan dibuat. SISTEM BILANGAN DAN KONVERSI BILANGAN Dalam bermain-main dengan mikrokontroler kita akan sering menemui 3 sistem bilangan yang biasa digunakan pada pemprograman, yaitu bilangan desimal, bilangan heksadesimal dan bilangan biner. Bilangan Desimal Bilangan desimal (basis 10) adalah bilangan yang memiliki sepuluh simbol angka, yaitu 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Aturan penulisannya langsung, misal 214. Bilangan Heksadesimal Bilangan heksadesimal (basis 16) adalah bilangan yang memiliki 16 simbol angka, yaitu 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Aturan penulisannya diawali dengan 0x, misal 0x2D. Bilangan Biner Blangan biner (basis 2) adalah bilangan yang memiliki 2 simbol angka, yaitu 0, 1. Aturan penulisannya diawali dengan 0b, misal ob11011001. Konversi bilangan: Konversi Biner ke Hexadesimal 0b10110011 = ? Bagi menjadi dua bagian nible atas (1011) dan nible bawah (0011) 1011 = 8+0+2+1 = B 0011 = 0+0+2+1 = 3 0b10110011 = 0xB3 Konversi Hexadesimal ke Biner 0x3F = ? Cari nible atas (4) dan nible bawah (F) 3 = 0+0+2+1 = 0011 biner F = 8+4+2+1 = 1111 biner 0x3F = 0b00111111 Konversi Biner ke Desimal 0b10110001 = ? 0b10110001 = (1×27)+(0×26)+(1×25)+ (1×24)+ (0×23)+(0×22)+(0×21)+(1×20) 0b10110001 = 128+0+32+16+0+0+0+1 = 177 Konversi Heksadesimal ke Desimal 0x2C = ? 0x2C = (2×161)+ (Ax160) 0x2C = 32+10 = 47 Konversi Desimal ke Heksadesimal 500 = ? 500/16 = 31 sisa 4 (lsd) 31/16 = 1 (msd) sisa 15 (dalam heksa = F) 500 = 14F Konversi Desimal ke Biner 200 = ? Ubah desimal ke heksadesimal lalu ke biner 200/16 = 12 (dalam heksa = C) sisa 8 200 = 0xC8 C = 8+4+0+0 = 1100 biner 8 = 8+0+0+0 = 1000 biner 200 = 0xC8 = 0b11001000 Bilangan kelipatan (2n) : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (2n) 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536 (desimal) 1, 2, 4, 8, 10, 20, 40, 80, 100, 200, 400, 800, 1000, 2000, 4000, 8000, 10000 (heksa desimal) Bagaimana jika kita sudah bermain dengan bilangan 16 sampai 32 bit? Alternatif termudah adalah kita dapat menggunakan kalkulator pada Microsoft Windows (klik Start – All Programs – Accecories – Calculator). Pilih programmer Klik Dec lalu isikan angka desimal, misal 255 Klik Hex, maka secara otomatis angka 255 akan berubah menjadi FF APLIKASI YANG DIPERLUKAN Untuk keperluan belajar mikrokontroler ada beberapa aplikasi yang akan kita gunakan untuk penulisan script, analisa program yang telah kita buat, simulasi hardware dan pembuatan rangkaian elektronik, yaitu: 1. CodeVisionAVR C Compiler Aplikasi CodeVisionAVR C Compiler digunakan untuk penulisan script dan mendownload script yang telah dibuat ke dalam chip. 2. AVR Studio 4 AVR Studio 4 digunakan untuk simulasi dan menganalisa script yang telah ditulis apakah sesuai dengan yang dikehendaki atau tidak. 3. Proteus 7 Professional H - ISIS 7 Professional ISIS 7 Professional digunakan untuk membuat simulasi hardware (rangkaian elektronik) sehingga script yang telah ditulis dapat diterapkan langsung ke dalam simulasi. - - ARES 7 Professional ARES 7 Professional digunakan untuk membuat rangkaian elektronik agar dapat dicetak di PCB. INTERRUPT Untuk memudahkan mengerti tentang interrupt kita dapat mengambil sebuah contoh berikut. Ketika kita menjalani aktivitas rutin seperti membaca koran pada pagi hari, tiba-tiba telpon berdering dan kita menghentikan aktivitas membaca tersebut untuk melakukan aktivitas lain yaitu mengangkat telpon, setelah selesai mengangkat telpon kita akan kembali untuk melanjutkan membaca koran. Interrupt dapat diartikan pula sebagai menyela, mengangkat telpon merupakan proses interrupt sedangkan membaca koran adalah aktivitas rutin yang kita lakukan. Untuk membangkitkan interrupt ada 4 kemungkinan, yaitu : Level rendah (setelah tombol dilepas) Datar (tombol ditekan lama) Perpindahan 1 ke 0 (saat mulai ditekan) Perpindahan 0 ke 1 (saat mulai dilepas) Sebelum menggunakan interrupt langkah mengatur konfigurasi pada CodeVisionAVR C Compiler . 1. Set MCU Control Register – MCUCR Bit registri interrupt Tabel untuk INT1 Tabel untuk INT0 Contoh : Jika yang diinginkan adalah The Rissing Edge (perpindahan 0 ke 1) artinya saat kita mulai menekan tombol maka interrupt terjadi dan kita akan menggunakan INT0. Lihat tabel untuk INT0, The Rissing Edge terdiri dari ISC01=1 dan ISC00=1 Lihat Bit registri interrupt, set MCUCR untuk ISC01 dan ISC00 berada pada bit 0 dan bit 1 Jadi untuk memberi nilai dari ISC01=1 dan ISC00=1 maka penulisannya adalah MCUCR=0×03. Sesuai dengan tabel untuk INT0 dan kondisi yang diinginkan 2. Set MCU Control Status Register – MCUCSR Digunakan untuk interrupt 2 (INT2) Penggunaannya sama seperti interrupt 0 dan interrupt 1. 3. Set General Interrupt Control Register – GICR Pilih interrupt mana yang akan digunakan, misal INT1 maka set GICR=0×80. General Interrupt Flag Register – GIFR Adalah penanda jika terjadi interrupt Secara otomatis GIFR akan menampilan flag mana yang dipakai untuk interrupt. TIMER0 Memiliki hingga 10 bit clock prescale (pemilh clock yang masuk ke timer/counter) Bagaimana perbedaan timer dan counter?? Perhatikan gambar di bawah ini. Timer (pembagi) Dari gambar tersebut X-tal 1 Mhz yang merupakan frekuensi dari luar software karena berasal dari hardware diseleksi dengan Prescaler 1024 sehingga Clock time yang didapat, yaitu: Clock time = Xtal/Prescaler Clock time = 1.000.000/1024 Clock time = 976 Hz Clock time = 0,976 kHz Clock time (f) = 1/ T Periode (T) = 1/ f Periode (T) =1/ 976 detik Pada mode normal TCNT akan mencacah hingga 0xFF (255) setelah itu akan terjadi overflow, keajadian ini akan terus berlangsung selama program berjalan. 1 overflow (OV) = jumlah cacahan x frekuensi 1 overflow (OV) =256 x (1/976) 1 overflow (OV) =0,26229508196721311475409836065574 detik Dalam 1 detik berapa kali terjadi overflow? S = 1/ 0,26229508196721311475409836065574 S =3,8125 kali Jadi TCNT akan mencacah hingga 3 kali overflow N1 = 256 x 3 N1 =768 N1 =0×0300 Ditambah dengan cacahan kedua N2 = 256 x 0, 8125 N2 =208 N2 =0xD0 “Jadi 1 detik diselesaikan dalam 3 kali overflow + cacahan hingga 0xD6” “T = 3 * (1 + 0xFF) + 0xD0” TIMER1 Timer (pembagi) Dari gambar tersebut X-tal 1 Mhz yang merupakan frekuensi dari luar software karena berasal dari hardware diseleksi dengan Prescaler 1024 sehingga Clock time yang didapat, yaitu: Clock time = Xtal/Prescaler Clock time =1000000/1024 Clock time =976,5625 Hz Clock time =0,976 kHz Clock time (f) = 1/ T Periode (T) = 1/ f Periode (T) =1/ 976,5625 detik Pada mode normal TCNT akan mencacah hingga 0xFFFF (65535) setelah itu akan terjadi overflow, keajadian ini akan terus berlangsung selama program berjalan. TCNT dibagi menjadi 2 nible (atas dan bawah) jika TCNT akan mencacah hingga 0xAECF TCNTH = 0xAE TCNTL = 0xCF 1 overflow (OV) = 65535 x frekuensi 1 overflow (OV) =65535 x (1/976,5625) 1 overflow (OV) =67,10784 detik Dalam 1 detik berapa kali terjadi overflow? S = 1/ 67,10784 S =0,01490138857099259937438010223545 kali Belum terjadi overflow! Jadi TCNT akan mencacah hingga cacahan N = 65535 x 0,01490138857099259937438010223545 N =976,5625 Jadi agar terjadi overflow maka TCNT diset pada nilai awal TCNT = Jumlah cacahan – N TCNT = 65535 – 976,5625 TCNT = 64558,4375 (desimal) TCNT = 0xFC2E (heksadesimal) “Jadi 1 detik diselesaikan dalam 1 kali overflow dengan nilai TCNT = FC2E” Rumus menentukan overflow M = (1 + 0xFFFF) adalah maksimal jumlah cacahan agar terjadi overflow (65535) f = X-Tal / Prescaler T = 1 / f OV = Max / T OV =Max / f OV =(Max * Prescaler) / X-Tal S = 1 / OV S =X-Tal / (Max * Prescaler) N = Max * (X-Tal / (Max * Prescaler)) N =X-Tal / Prescaler TCNT = Max – (t * N) Hitung ulang contoh : TCNT = Max – (t * N) TCNT =Max – (t * (X-Tal / Prescaler)) TCNT =(1 + 65535) – (1 * (1.000.000/1024)) TCNT =(1 + 65535) – 976,5625 TCNT =64559,4375 (desimal) TCNT =0xFC2F (heksadesimal) TCNTH = 0xFC TCNTL = 0x2F CONTOH CARA MENGESET TIMER0 1. Set TCCR0 dengan memilih presclaer dan mode operasi CS02, CS01, CS00 bertugas mendefinisikan pulsa yang masuk ke dalam timer/counter Clock/ 1024 Force output comparer = off Waveform generation mode= normal Comparer match output mode = disconnect Contoh : jika menggunakan X-Tal 1Mz dan set TCCR0=0×05, artinya prescaler yg dipilih adalah 1024 sehingga pulsa yg masuk akan diseleksi dan berubah menjadi 1Mz/1024= 976Hz bukan 1Mz lagi. 2. Set TCNT0 TCNT0 = 0×00; dimulai dari hitungan 0 TCNT0 = 0x0F; dimulai dari hitungan 128 3. Set OCR0 OCR0 = 0×00; karena tidak menggunakan pembanding, mode CTC dan PWM 4. Set TIMSK secara otomatis akan diset saat terjadi overflow atau comparer OCIE0 = 1; flag comparer TPIE0 = 0; flag timer/counter Jadi TIMSK = 0×01 5. Set TIFR secara otomatis akan diset saat terjadi overflow atau comparer OCF0 = 0; flag comparer TOV0 = 1; flag timer/counter atu overflow TIFR = 0×02 Mode operasi : Normal, TCNT0 menghitung hingga 0xFF dan kemudian terjadi overflow. CTC, TCNT0 menghitung hingga TCNT0 == OCR0 dan OCFO otomatis diset menjadi 1. Sumber : http://bennyadiwijaya.blogspot.com/2013/05/belajar-mikrokontroler-dengan-bahasa-c.html

http://smart-generation-bogor.blogspot.com

Phasellus facilisis convallis metus, ut imperdiet augue auctor nec. Duis at velit id augue lobortis porta. Sed varius, enim accumsan aliquam tincidunt, tortor urna vulputate quam, eget finibus urna est in augue.

1 komentar: