{"id":1347,"date":"2024-08-26T00:45:05","date_gmt":"2024-08-25T17:45:05","guid":{"rendered":"https:\/\/delta-electronic.com\/Design\/Hardwares\/?p=1347"},"modified":"2024-08-26T05:46:24","modified_gmt":"2024-08-25T22:46:24","slug":"dasar-mikrokontroler-avr-i-arsitektur-hardware-atmega8535","status":"publish","type":"post","link":"https:\/\/delta-electronic.com\/Design\/Hardwares\/dasar-mikrokontroler-avr-i-arsitektur-hardware-atmega8535\/","title":{"rendered":"Dasar Mikrokontroler AVR I &#8211; Arsitektur Hardware ATMega8535"},"content":{"rendered":"<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-1348\" src=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/struktur-memori.jpg\" alt=\"\" width=\"1032\" height=\"1598\" srcset=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/struktur-memori.jpg 1032w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/struktur-memori-194x300.jpg 194w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/struktur-memori-661x1024.jpg 661w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/struktur-memori-768x1189.jpg 768w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/struktur-memori-992x1536.jpg 992w\" sizes=\"(max-width: 1032px) 100vw, 1032px\" \/><\/p>\n<p>ATMega8535 adalah merupakan mikrokontroler keluarga AVR yaitu keluarga mikrokontroler produksi Atmel yang menggunakan RISC CPU (Reduced Instruction Set Computing Central Processing Unit) yaitu teknologi pengkode-an yang lebih efisien dari mikrokontroler konvensional yang menggunakan CISC CPU (Complex Instruction Set Computing Central Processing Unit) hingga 10 kali lebih cepat.<\/p>\n<p>Mikrokontroler ini memiliki 8Kb Flash PEROM untuk penyimpanan kode program yang dapat diisikan dengan menggunakan teknik ISP (In System Programming) sehingga tidak memerlukan unit programmer yang kompleks dalam proses pengisian ini. Juga tersedia 512 byte EEPROM untuk penyimpanan data, 512 byte SRAM untuk variabel, 32 I\/O, 3 timer\/counter yang fleksibel, serial USART, 8 channel 10 bit ADC.<\/p>\n<p>Dengan kemampuan menjalankan instruksi hanya dalam satu siklus clock saja maka hal ini merupakan optimasi kecepatan dan konsumsi daya dari mikrokontroler ini.<\/p>\n<p><strong><span class=\"Apple-style-span\">PortX Driver<\/span><\/strong><\/p>\n<p>Adalah bagian rangkaian kendali dari I\/O-I\/O ATMega8535 yaitu Port A, Port B, Port C dan Port D.<\/p>\n<p><strong><span class=\"Apple-style-span\">Data Dir PortX<\/span><\/strong><\/p>\n<p>Bagian pengatur arah dari port-port ATMega8535 yaitu sebagai input atau sebagai output<\/p>\n<p><strong><span class=\"Apple-style-span\">Oscillator<\/span><\/strong><\/p>\n<p>Merupakan jantung dari mikrokontroler yang berdetak di mana setiap detaknya adalah merupakan siklus kerja dari mikrokontroler tersebut.<\/p>\n<p><strong><span class=\"Apple-style-span\">Program Counter<\/span><\/strong><\/p>\n<p>Merupakan register yang menyimpan alamat dari kode program yang sedang dijalankan atau dieksekusi saat itu.<\/p>\n<p><strong><span class=\"Apple-style-span\">Stack Pointer<\/span><\/strong><\/p>\n<p>Merupakan register yang menunjukkan poisisi stack saat ini berada.<\/p>\n<p><strong><span class=\"Apple-style-span\">Program Flash<\/span><\/strong><\/p>\n<p>Lokasi tempat penyimpanan kode-kode program yang didownload secara In System Programming ke dalam mikrokontroler ini. Di sinilah tempat pengguna mikrokontroler mengisikan program rancangannya.<\/p>\n<p><strong><span class=\"Apple-style-span\">Instruction Register<\/span><\/strong><\/p>\n<p>Lokasi tempat penyimpanan kode-kode instruksi ATMega8535. Kode-kode ini akan didecode atau diterjemahkan saat program counter menunjuk ke lokasi penyimpanannya.<\/p>\n<p><strong><span class=\"Apple-style-span\">SRAM<\/span><\/strong><\/p>\n<p>Static RAM adalah merupakan lokasi penyimpanan variabel-variabel dalam suatu program yang dirancang di mana SRAM mempunyai kecepatan baca tulis yang sangat cepat.<\/p>\n<p><strong><span class=\"Apple-style-span\">General Purpose Register<\/span><\/strong><\/p>\n<p>Register-register untuk keperluan umum di mana pengguna juga dapat menyimpan variabel ke dalamnya.<\/p>\n<p><strong><span class=\"Apple-style-span\">Timer\/Counter<\/span><\/strong><\/p>\n<p>Timer adalah merupakan pewaktu yang berfungsi menghitung lama waktu dalam sebuah event yang terjadi sedangkan counter berfungsi menghitung jumlah pulsa selama periode waktu tertentu.<\/p>\n<p><strong><span class=\"Apple-style-span\">Interrupt<\/span><\/strong><\/p>\n<p>Interrupt adalah merupakan suatu kejadian di mana jalannya program harus terhenti sesaat untuk menjalankan kode-kode program yang ada dalam vektor interupsi tersebut.<\/p>\n<p><strong><span class=\"Apple-style-span\">EEPROM<\/span><\/strong><\/p>\n<p>Merupakan memory yang tetap menyimpan data walau power supply dinon aktifkan. Memory ini hanya terhapus bila terjadi penumpukkan data pada lokasi tersebut.<\/p>\n<p><strong><span class=\"Apple-style-span\">USART<\/span><\/strong><\/p>\n<p>Merupakan antarmuka ATTMega8535 ini dengan port serial PC di mana komunikasi dapat dilakukan secara Duplex<\/p>\n<p><strong><span class=\"Apple-style-span\">SPI<\/span><\/strong><\/p>\n<p>Serial Peripheral Interface adalah merupakan teknik akses I\/O dengan menggunakan metode 3 wire yaitu SI\/SO (Serial In \/ Serial Out), SCK (Serial Clock), SS (Slave select).<\/p>\n<p><strong><span class=\"Apple-style-span\">ADC Interface<\/span><\/strong><\/p>\n<p>Merupakan bagian pengkonversi sinyal analog ke digital sebanyak 8 channel dan terletak di PortA<\/p>\n<p><strong><span class=\"Apple-style-span\">I\/O Mikrokontroler<\/span><\/strong><\/p>\n<p style=\"text-align: center;\"><strong>Tabel 1.1 Deskripsi Pin ATMega8535<\/strong><\/p>\n<table style=\"height: 1809px;\" border=\"1\" width=\"715\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td style=\"text-align: center;\" valign=\"top\" width=\"196\"><strong>Kaki<\/strong><\/td>\n<td style=\"text-align: center;\" valign=\"top\" width=\"368\"><strong>Deskripsi<\/strong><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"196\">VCC<\/td>\n<td valign=\"top\" width=\"368\">Input sumber tegangan positif<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"196\">GND<\/td>\n<td valign=\"top\" width=\"368\">Ground atau input sumber tegangan negatif<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"196\">Port A (PA0 \u2013 PA2)<\/td>\n<td valign=\"top\" width=\"368\">Port A terdiri dari 3 bit dan bersifat bidirectional sehingga dapat digunakan sebagai input maupun output. Masing-masing pin dalam port tersebut dapat diatur agar terhubung dengan internal pull up ataupun tidak.<\/p>\n<p>Sebagai output, port ini memiliki karakteristik yang sama baik sebagai current sink ataupun current source.<\/p>\n<p>Sebagai input, port ini akan mengalirkan arus apabila terhubung ke ground melalui resistansi (pull down) dan internal pull up aktif (Gambar 1.2).<\/p>\n<p>Port ini akan berada pada kondisi tri-state saat kondisi reset aktif walaupun pulsa clock belum aktif.<\/p>\n<p>Port ini juga memiliki fungsi alternatif seperti yang dijelaskan pada Tabel 1.3<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"196\">Port B (PB0 \u2013 PB7)<\/td>\n<td valign=\"top\" width=\"368\">Port B terdiri dari 8 bit dan bersifat bidirectional sehingga dapat digunakan sebagai input maupun output. Masing-masing pin dalam port tersebut dapat diatur agar terhubung dengan internal pull up ataupun tidak.<\/p>\n<p>Sebagai output, port ini memiliki karakteristik yang sama baik sebagai current sink ataupun current source.<\/p>\n<p>Sebagai input, port ini akan mengalirkan arus apabila terhubung ke ground melalui resistansi (pull down) dan internal pull up aktif (Gambar 1.2).<\/p>\n<p>Port ini akan berada pada kondisi tri-state saat kondisi reset aktif walaupun pulsa clock belum aktif.<\/p>\n<p>Port ini juga memiliki fungsi alternatif seperti yang dijelaskan pada Tabel 1.3<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"196\">Port D (PD0 \u2013 PD6)<\/td>\n<td valign=\"top\" width=\"368\">Port A terdiri dari 7 bit dan bersifat bidirectional sehingga dapat digunakan sebagai input maupun output. Masing-masing pin dalam port tersebut dapat diatur agar terhubung dengan internal pull up ataupun tidak.<\/p>\n<p>Sebagai output, port ini memiliki karakteristik yang sama baik sebagai current sink ataupun current source.<\/p>\n<p>Sebagai input, port ini akan mengalirkan arus apabila terhubung ke ground melalui resistansi (pull down) dan internal pull up aktif (Gambar 1.2).<\/p>\n<p>Port ini akan berada pada kondisi tri-state saat kondisi reset aktif walaupun pulsa clock belum aktif.<\/p>\n<p>Port ini juga memiliki fungsi alternatif seperti yang dijelaskan pada Tabel 1.3<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"196\">Reset<\/td>\n<td valign=\"top\" width=\"368\">Kondisi logika rendah dengan waktu yang lebih lama dari minimum lebar pulsa akan membangkitkan kondisi reset walaupun clock tidak aktif. Input reset ini adalah fungsi alternatif dari PA2 dan dW<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"196\">Xtal1<\/td>\n<td valign=\"top\" width=\"368\">Pin ini berfungsi sebagai alternatif dari PA0 atau sebagai input internal clock<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"196\">Xtal2<\/td>\n<td valign=\"top\" width=\"368\">Pin ini berfungsi sebagai alternatif dari PA1 atau sebagai output osilator yang tela<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><img decoding=\"async\" class=\"size-full wp-image-1349 aligncenter\" src=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler.png\" alt=\"\" width=\"575\" height=\"543\" srcset=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler.png 575w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler-300x283.png 300w\" sizes=\"(max-width: 575px) 100vw, 575px\" \/><\/p>\n<p style=\"text-align: center;\"><strong><span class=\"Apple-style-span\">Gambar 1.2<\/span><\/strong><\/p>\n<p style=\"text-align: center;\"><strong><span class=\"Apple-style-span\">Aliran arus saat internal pull up aktif dan external pull down terpasang<\/span><\/strong><\/p>\n<p>Masing-masing port dari ATMega8535 dilengkapi dengan dua buah dioda yang terhubung antara kaki port dengan ground dan kaki port dengan VCC untuk memproteksi port tersebut dari tegangan berlebih yang biasa ditimbulkan oleh noise ataupun elektro statis. Masing-masing port ini juga mempunyai arus yang mampu mengaktifkan LED secara langsung.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-1350 aligncenter\" src=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler2.png\" alt=\"\" width=\"514\" height=\"300\" srcset=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler2.png 514w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler2-300x175.png 300w\" sizes=\"(max-width: 514px) 100vw, 514px\" \/><\/p>\n<p style=\"text-align: center;\"><strong>Gambar 1.3 Rangkaian Ekivalen Pin I\/O<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>Pxn adalah merupakan kaki I\/O dari ATMega8535 di mana x adalah nama port (Port A, Port B atau Port D) dan n adalah nomor urutnya. Masing-masing port memiliki tiga buah register yaitu Data Register (Portx), Data Direction Register (DDRx) dan Port Input Pin (PINx)<\/p>\n<p>Portx atau Data Register berfungsi sebagai register data keluaran dari port. Apabila port diatur sebagai output atau keluaran maka kondisi data pada register ini akan merupakan kondisi logika dari kaki-kaki port tersebut.<\/p>\n<p>Sedangkan Data Direction Register berfungsi sebagai register pengatur arah dari port. Logika 0 pada register ini adalah merupakan indikasi port sebagai input atau masukan dan logika 1 merupakan indikasi port sebagai output atau keluaran. Port ini dapat diatur secara terpisah untuk setiap bitnya. Contoh untuk data 81h atau 1000 0001 biner maka dalam hal ini Px7 dan Px0 adalah keluaran dan Px6 hingga Px1 adalah masukan.<\/p>\n<p>Port Input Pin (PinX) adalah merupakan register yang menyimpan kondisi masukan dari port.<\/p>\n<p>Masing-masing port memiliki internal pull up yang dapat diatur berdasarkan kondisi logika pada bit PUD (Pull up disable) yang ada di register MCUCR. Apabila bit ini berlogika 1 maka dinyatakan bahwa internal pull up disable atau tidak aktif sedangkan bila bit ini berlogika 0 maka dinyatakan bahwa internal pull up aktif.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1351 aligncenter\" src=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler3.png\" alt=\"\" width=\"550\" height=\"471\" srcset=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler3.png 550w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler3-300x257.png 300w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/p>\n<p style=\"text-align: center;\"><strong>Gambar 1.4 Konstruksi I\/O Digital<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>Dari gambar 1.4 terlihat bahwa internal pull up diatur oleh kondisi bit PUD, DDRxn dan Portxn. Apabila PUD berlogika 0 , DDRxn berlogika 0 (sebagai masukan) dan Portxn berlogika 1 maka internal pull up akan aktif.<\/p>\n<p>Apabila kondisi Sleep\/Reset terjadi dan DDRxn = 1 maka Pxn akan berada dalam kondisi tri-state..<\/p>\n<p>Dengan memberikan logika 1 pada Portxn pada saat DDRx = 1 (sebagai keluaran) maka Pxn akan terhubung ke VCC dan logika 0 akan membuat Pxn terhubung ke ground.<\/p>\n<p>Pxn dapat diubah kondisinya secara toggle (dari 0 ke 1 atau sebaliknya dari 1 ke 0) dengan menuliskan logika 1 pada PINx.<\/p>\n<p>Dengan konstruksi I\/O seperti pada gambar 1.4 maka ada beberapa hal yang perlu diperhatikan pada saat melakukan perubahan konfigurasi dari masukan menjadi keluaran. Pada saat Pxn berada pada konfigurasi sebagai masukan dengan internal pull up dan akan diubah menjadi keluaran dengan logika 0, Pxn akan melewati kondisi tertentu sebagai berikut.<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Pada saat kondisi input dengan internal pull up, maka Portxn akan berlogika 1 dan DDRxn berlogika 0<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Untuk mengubah menjadi keluaran dengan logika 0 maka terlebih dahulu DDRxn diubah menjadi logika 1. Pada saat tersebut, Pxn akan terhubung ke VCC sehingga menjadi logika 1 terlebih dahulu sebelum PortXn diubah menjadi logika 0 (gambar 1.5a)<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Atau bila dilakukan dengan mengubah Portxn menjadi logika 0 maka Pxn akan berada pada kondisi tri-state terlebih dahulu sebelum DDRxn diatur menjadi keluaran (logika 1) (gambar 1.5b)<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Pxn akan berlogika 0 saat DDRxn berlogika 1 dan Portxn berlogika 0.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1352 aligncenter\" src=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler4.png\" alt=\"\" width=\"550\" height=\"405\" srcset=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler4.png 550w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler4-300x221.png 300w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/p>\n<p style=\"text-align: center;\"><strong>Gambar 1.5 Perubahan dari input dengan internal pull up menjadi output logika 0<\/strong><\/p>\n<p>Kondisi-kondisi ini perlu diketahui sebagai pertimbangan dalam merancang antarmuka dengan I\/O ATMega8535.<\/p>\n<p>Pada saat Pxn berada pada konfigurasi masukan dengan tri-state dan akan diubah menjadi keluaran dengan logika 1 maka akan terjadi kondisi sebagai berikut.<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Pada saat kondisi input dengan kondisi tri-state, maka Portxn akan berlogika 1 dan DDRxn berlogika 0<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Untuk mengubah menjadi keluaran dengan logika 1 maka terlebih dahulu DDRxn diubah menjadi logika 1. Pada saat tersebut, Pxn akan terhubung ke ground terlebih dahulu sebelum PortXn diubah menjadi logika 1<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Atau bila diletakkan dengan mengubah Portxn menjadi logika 1 maka Pxn akan berada pada kondisi internal pull up terlebih dahulu sebelum DDRxn diatur menjadi keluaran (logika 1), kecuali bila PUD bit diatur pada kondisi logika 0.<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Pxn akan berlogika 1 saat DDRxn berlogika 1 dan Portxn berlogika 1<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1355 aligncenter\" src=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler5.png\" alt=\"\" width=\"551\" height=\"485\" srcset=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler5.png 551w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler5-300x264.png 300w\" sizes=\"(max-width: 551px) 100vw, 551px\" \/><\/p>\n<p style=\"text-align: center;\"><strong>Gambar 1.6 perubahan dari input tri-state menjadi output dengan logika 1<\/strong><\/p>\n<p style=\"text-align: center;\"><strong><span class=\"Apple-style-span\">Tabel 1.2 Konfigurasi Port Pin<\/span><\/strong><\/p>\n<table style=\"height: 171px;\" border=\"1\" width=\"711\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"57\"><strong>DDRxn<\/strong><\/td>\n<td valign=\"top\" width=\"54\"><strong>Portxn<\/strong><\/td>\n<td valign=\"top\" width=\"47\"><strong>PUD<\/strong><\/td>\n<td valign=\"top\" width=\"57\"><strong>I\/O<\/strong><\/td>\n<td valign=\"top\" width=\"66\"><strong>Pull up<\/strong><\/td>\n<td valign=\"top\" width=\"283\"><strong>Keterangan<\/strong><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"57\">0<\/td>\n<td valign=\"top\" width=\"54\">0<\/td>\n<td valign=\"top\" width=\"47\">X<\/td>\n<td valign=\"top\" width=\"57\">Input<\/td>\n<td valign=\"top\" width=\"66\">Tidak<\/td>\n<td valign=\"top\" width=\"283\">Tri-state<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"57\">0<\/td>\n<td valign=\"top\" width=\"54\">1<\/td>\n<td valign=\"top\" width=\"47\">0<\/td>\n<td valign=\"top\" width=\"57\">Input<\/td>\n<td valign=\"top\" width=\"66\">Ya<\/td>\n<td valign=\"top\" width=\"283\">Akan menjadi sumber arus apabila diberi beban<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"57\">0<\/td>\n<td valign=\"top\" width=\"54\">1<\/td>\n<td valign=\"top\" width=\"47\">1<\/td>\n<td valign=\"top\" width=\"57\">Input<\/td>\n<td valign=\"top\" width=\"66\">Tidak<\/td>\n<td valign=\"top\" width=\"283\">Tri-state<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"57\">1<\/td>\n<td valign=\"top\" width=\"54\">0<\/td>\n<td valign=\"top\" width=\"47\">X<\/td>\n<td valign=\"top\" width=\"57\">Output<\/td>\n<td valign=\"top\" width=\"66\">Tidak<\/td>\n<td valign=\"top\" width=\"283\">Keluaran 0<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"57\">1<\/td>\n<td valign=\"top\" width=\"54\">1<\/td>\n<td valign=\"top\" width=\"47\">X<\/td>\n<td valign=\"top\" width=\"57\">Output<\/td>\n<td valign=\"top\" width=\"66\">Tidak<\/td>\n<td valign=\"top\" width=\"283\">Keluaran 1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong><span class=\"Apple-style-span\">Pemrograman Port I\/O<\/span><\/strong><\/p>\n<p>Pada bagian berikut ini kita akan membahas contoh-contoh program yang mengakses Port I\/O ATMega8535. Untuk pemrograman ini kita butuhkan:<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 8 buah LED yang terhubung pada Port B (digunakan Modul 8 bit LED Logic Tester)<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 8 buah switch yang terhubung pada Port C (digunakan Modul 8 bit Switch Logic)<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1 buah system minimum ATMega8535 (digunakan ST-8535)<\/p>\n<p>Rangkaian tersebut akan membentuk skema sebagai berikut:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1356 aligncenter\" src=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/mikrokontroler-atmega8535.png\" alt=\"\" width=\"628\" height=\"337\" srcset=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/mikrokontroler-atmega8535.png 628w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/mikrokontroler-atmega8535-300x161.png 300w\" sizes=\"(max-width: 628px) 100vw, 628px\" \/><\/p>\n<p>Listing C 1.1<\/p>\n<p><span class=\"Apple-style-span\">PORTB=0x55;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ PB0=1,PB1=0,PB2=1,PB3=0,PB4=1,PB5=0,PB6=1,PB7=0<\/span><\/p>\n<p>Listing tersebut adalah contoh untuk memberikan kondisi keluaran pada PortB secara parallel<\/p>\n<p>Tampilan pada LED akan terlihat sebagai berikut:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1357 aligncenter\" src=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler6.png\" alt=\"\" width=\"369\" height=\"174\" srcset=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler6.png 369w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler6-300x141.png 300w\" sizes=\"(max-width: 369px) 100vw, 369px\" \/><\/p>\n<p style=\"text-align: center;\"><strong>Gambar 1.7 kondisi LED pada keluaran 0x55 atau 01010101b<\/strong><\/p>\n<p>8 bit LED Logic Tester mempunyai common yang terhubung ke anoda (VCC) dan input yang terhubung ke katoda LED melalui resistor, oleh karena itu logic 0 (tegangan 0 volt) akan diwakili dengan nyala LED dan logic 1 (tegangan 5 volt) akan diwakili dengan LED yang padam<\/p>\n<p>Listing C 1.2<\/p>\n<p><span class=\"Apple-style-span\">int main(void)<\/span><\/p>\n<p><span class=\"Apple-style-span\">{<\/span><\/p>\n<p><span class=\"Apple-style-span\">unsigned char data_port;<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span class=\"Apple-style-span\">data_port=0xAA;<\/span><\/p>\n<p><span class=\"Apple-style-span\">PORTB=data_port;<\/span><\/p>\n<p><span class=\"Apple-style-span\">while(1);<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span class=\"Apple-style-span\">}<\/span><\/p>\n<p>Listing program di atas adalah contoh untuk memberikan kondisi keluaran yang berasal dari sebuah variable di mana dalam hal ini adalah variable data_port.<\/p>\n<p>Hasil output pada LED adalah sebagai berikut<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1358 aligncenter\" src=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler7.png\" alt=\"\" width=\"382\" height=\"174\" srcset=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler7.png 382w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/io-avr-mikrokontroler7-300x137.png 300w\" sizes=\"(max-width: 382px) 100vw, 382px\" \/><\/p>\n<p>Listing C 1.3<\/p>\n<p><span class=\"Apple-style-span\">int main(void)<\/span><\/p>\n<p><span class=\"Apple-style-span\">{<\/span><\/p>\n<p><span class=\"Apple-style-span\">unsigned char data_port;<\/span><\/p>\n<p><span class=\"Apple-style-span\">DDRB=0xFF;<\/span><\/p>\n<p><span class=\"Apple-style-span\">data_port=0x1;<\/span><\/p>\n<p><span class=\"Apple-style-span\">PORTB=data_port;<\/span><\/p>\n<p><span class=\"Apple-style-span\">_delay_ms(1000);<\/span><\/p>\n<p><span class=\"Apple-style-span\">while(1){<\/span><\/p>\n<p><span class=\"Apple-style-span\">PORTB=data_port;<\/span><\/p>\n<p><span class=\"Apple-style-span\">for (int i=0;i&lt;8;i++){<\/span><\/p>\n<p><span class=\"Apple-style-span\">PORTB&lt;&lt;=1;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Geser Port B ke kiri<\/span><\/p>\n<p><span class=\"Apple-style-span\">_delay_ms(1000);<\/span><\/p>\n<p><span class=\"Apple-style-span\">}<\/span><\/p>\n<p><span class=\"Apple-style-span\">}<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span class=\"Apple-style-span\">}<\/span><\/p>\n<p>Pada listing program di atas adalah contoh melakukan pergeseran data pada Port mikrokontroler. Instruksi PORTB &lt;&lt;=1 adalah instruksi untuk menggeser 8 bit data pada PORTB ke kiri dan hasilnya disimpan lagi ke PORTB.<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Pada awalnya variable data_port diberi nilai awal 0x1<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Kemudian setelah data_port dikirim ke PORTB, data di PORTB digeser 1 bit ke kiri sebanyak 8 kali<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Hasilnya LED Logic Tester yang terpasang di PORTB akan bergeser ke kiri setiap 1000 mS atau 1 detik<\/p>\n<p>Listing C1.4<\/p>\n<p><span class=\"Apple-style-span\">DDRB=0xFF;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ set direction port B\u00a0 sebagai output<\/span><\/p>\n<p><span class=\"Apple-style-span\">DDRC=0x00;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/set direction port C sebagai input<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span class=\"Apple-style-span\">while(1)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ ambil data di Port C dan kirim ke Port B terus menerus<\/span><\/p>\n<p><span class=\"Apple-style-span\">PORTB=PINC;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>Pada listing program ini, data apapun yang ada di PortC akan langsung ditampilkan di PortB<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Pasang LED Logic Tester di PortB<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Pasang 8 bit Switch input di PortC<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Tekan tombol-tombol yang ada di 8 bit switch<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Tampak setiap penekanan tombol akan ditampilkan di Port B dalam nyala LED pada LED logic tester.<\/p>\n<p>Listing C1.5<\/p>\n<p><span class=\"Apple-style-span\">#define TOMBOLSTART\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/p>\n<p><span class=\"Apple-style-span\">#define PORTIN\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PINC<\/span><\/p>\n<p><span class=\"Apple-style-span\">void runled(){<\/span><\/p>\n<p><span class=\"Apple-style-span\">PORTB=0x1;<\/span><\/p>\n<p><span class=\"Apple-style-span\">for (int i=0;i&lt;8;i++){<\/span><\/p>\n<p><span class=\"Apple-style-span\">PORTB&lt;&lt;=1;<\/span><\/p>\n<p><span class=\"Apple-style-span\">_delay_ms(1000);<\/span><\/p>\n<p><span class=\"Apple-style-span\">}<\/span><\/p>\n<p><span class=\"Apple-style-span\">}<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span class=\"Apple-style-span\">int main(void)<\/span><\/p>\n<p><span class=\"Apple-style-span\">{<\/span><\/p>\n<p><span class=\"Apple-style-span\">unsigned char data_port;<\/span><\/p>\n<p><span class=\"Apple-style-span\">DDRB=0xFF;<\/span><\/p>\n<p><span class=\"Apple-style-span\">DDRC=0x00;<\/span><\/p>\n<p><span class=\"Apple-style-span\">while(1){<\/span><\/p>\n<p><span class=\"Apple-style-span\">if (!(PORTIN&amp;(1&lt;&lt;TOMBOLSTART)))<\/span><\/p>\n<p><span class=\"Apple-style-span\">runled();<\/span><\/p>\n<p><span class=\"Apple-style-span\">PORTB=PINC;<\/span><\/p>\n<p><span class=\"Apple-style-span\">}<\/span><\/p>\n<p>}<\/p>\n<p>Pada listing C1.5 kita mempelajari bagaimana masukan port diambil secara per bit, yaitu hanya di PC0 saja yang terhubung pada saklar. Pada saat saklar di PC0 ditekan maka fungsi running led akan diaktifkan dan LED di LED Logic Tester akan bergeser. Apabila saklar-saklar lain selain PC0 maka, kondisi PortC akan langsung ditampilkan di LED Logic Tester melalui PORTB<\/p>\n<p><span class=\"Apple-style-span\">Akses Port secara bit<\/span><\/p>\n<p>Kadang-kadang dibutuhkan untuk mengakses I\/O secara bit di mana akses tersebut tidak akan mengganggu bit-bit yang lain.<\/p>\n<p>Contoh Listing C1.6 pada saat kondisi PORTD = 0xFF dan ingin meng-clear PD0.<\/p>\n<p><span class=\"Apple-style-span\">Assembler:<\/span><\/p>\n<p><span class=\"Apple-style-span\">CBI\u00a0\u00a0\u00a0\u00a0\u00a0 PortD,0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span class=\"Apple-style-span\">C:<\/span><\/p>\n<p><span class=\"Apple-style-span\">PortD&amp;=~(1&lt;&lt;0);<\/span><\/p>\n<p>Contoh Listing C1.7 pada saat kondisi PORTD = 0x00 dan ingin men-set PD0<\/p>\n<p>Assembler:<\/p>\n<p><span class=\"Apple-style-span\">SBI\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PortD,0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span class=\"Apple-style-span\">C:<\/span><\/p>\n<p><span class=\"Apple-style-span\">PortD|=(1&lt;&lt;0);<\/span><\/p>\n<p>Sedangkan untuk mendeteksi input secara per bit dapat dilihat pada listing C1.5 pada syntax\u00a0<span class=\"Apple-style-span\">if(!(PORTIN&amp;(1&lt;&lt;TOMBOLSTART)))<\/span><\/p>\n<p><span class=\"Apple-style-span\">runled;<\/span><\/p>\n<p>Di sini PORTIN telah didefinisikan sebagai PINC dan TOMBOLSTART = 0, maka di sini berarti instruksi if berlaku pada saat kondisi adalah invers dari kondisi (PINC&amp;(1&lt;&lt;0)), yaitu kondisi input Port C yang di AND dengan nilai 1 yang digeser kiri sebanyak 0x. Maka di sini apabila input PC0:<\/p>\n<p>!(xxxxxx0 AND (1&lt;&lt;0))<\/p>\n<p>!(xxxxxx0 AND 00000001)<\/p>\n<p>!0 = 1<\/p>\n<p>Jadi instruksi runled akan dijalankan bila diperoleh kondisi PC0 adalah 0.<\/p>\n<p>Dalam source assembler syntaxnya adalah sebagai berikut<\/p>\n<p>TungguPD0:<\/p>\n<p>SBIC\u00a0\u00a0\u00a0 PortD,0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ;Skip instruksi dibawah apabila PD0 clear<\/p>\n<p>Rjmp\u00a0\u00a0\u00a0 tungguPD0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ;Kembali tunggu PD0 apabila PD0 masih set<\/p>\n<p>Rcall\u00a0\u00a0\u00a0\u00a0 Runled\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ;Runled dijalankan setelah PD0 clear dan instruksi Rjmp dilewati<\/p>\n<p>&nbsp;<\/p>\n<p><strong><span class=\"Apple-style-span\">DELTA ELECTRONIC<\/span><\/strong><\/p>\n<p><strong>Paulus Andi Nalwan, ST<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>ATMega8535 adalah merupakan mikrokontroler keluarga AVR yaitu keluarga mikrokontroler produksi Atmel yang menggunakan RISC CPU (Reduced Instruction Set Computing Central Processing Unit) yaitu teknologi pengkode-an yang lebih efisien dari mikrokontroler konvensional yang menggunakan CISC CPU (Complex Instruction Set Computing Central Processing Unit) hingga 10 kali lebih cepat. Mikrokontroler ini memiliki 8Kb Flash PEROM untuk penyimpanan [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[323],"tags":[94,137,165,96,95],"class_list":["post-1347","post","type-post","status-publish","format-standard","hentry","category-hardware-atmega8535","tag-arduino","tag-atmega8535","tag-avr","tag-microcontroller","tag-mikrokontroler"],"_links":{"self":[{"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/posts\/1347"}],"collection":[{"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/comments?post=1347"}],"version-history":[{"count":3,"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/posts\/1347\/revisions"}],"predecessor-version":[{"id":1359,"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/posts\/1347\/revisions\/1359"}],"wp:attachment":[{"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/media?parent=1347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/categories?post=1347"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/tags?post=1347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}