{"id":224,"date":"2008-09-22T10:27:44","date_gmt":"2008-09-22T03:27:44","guid":{"rendered":"http:\/\/sulhansetiawan.com\/?p=224"},"modified":"2014-04-12T19:27:48","modified_gmt":"2014-04-12T12:27:48","slug":"counter-3-digit","status":"publish","type":"post","link":"https:\/\/sulhansetiawan.com\/id\/counter-3-digit\/","title":{"rendered":"Counter 3 Digit"},"content":{"rendered":"<p><\/p>\n<p>Seorang teman meminta tolong kepada saya untuk membuat program untuk melakukan perhitungan yang bisa naik atau turun. Data ditampilkan pada seven segment tiga digit. Sedangkan untuk menaikkan atau menurunkan hitungan dipasang tombol pada port 3.<\/p>\n<p>Sebenarnya dia meminta saya untuk menempatkan pengaturan digit menggunakan P0, dan P2 sebagai data segment. Akan tetapi karena sebelumnya saya telah membuat program dengan P0 sebagai data segment, dan P1 sebagai pengaturan digit, maka agar saya tidak perlu melakukan konfigurasi ulang saat saya mencoba pada simulator, saya tetap menggunakan P0 sebagai data segment, dan P1 sebagai pengatur digit. Oleh karena itu, jika Anda telah terlanjur menggunakan P0 sebagai pengatur digit, dan P2 sebagai data segment, maka Anda perlu mengubah konstanta PortDigit dan PortData pada bagian atas program.<\/p>\n<p>Untuk mewujudkan permintaan teman tersebut, saya menggunakan cara seperti yang biasa saya lakukan jika ingin menampilkan data pada seven segment, yaitu menempatkan prosedur pengatur seven segment pada interupsi timer. Hal ini menjamin program kita untuk bisa menampilkan data pada seven segment dengan kecerahan yang baik. Ada beberapa contoh program penampil seven segment yang menempatkan proses scanning pada program utama. Padahal kita tahu bahwa seven segment yang dipasang secara multipleks harus secara terus menerus di-scan untuk bisa menampilkan datanya. Jika program kita kurang jeli dalam melakukan scanning, maka tampilan akan terganggu. Mungkin akan padam, dan ini adalah yang paling buruk, atau setidaknya intensitas nyala seven segment akan menjadi redup. Dan hal tersebut sangat tidak menyenangkan. Dengan menggunakan timer interupt untuk melakukan scanning, kita bisa melepaskan perhatian kita dari proses scanning, karena hal tersebut telah sepenuhnya kita serahkan pada interupt handler. Jadi cara ini adalah cara terbaik (setidaknya menurut saya begitu, Anda boleh memberi komentar jika tidak setuju).<\/p>\n<p>Kemudian, karena program yang sedang kita buat ini memang program yang sangat sederhana, maka kita bisa menggunakan seluruh fasilitas yang dimiliki oleh mikrokontroler tanpa harus banyak pertimbangan. Untuk lebih mudah dalam menangani tombol penambah atau tombol pengurang hitungan, kita bisa menggunakan interupt external, yaitu ext0 dan ext1. Jadi kita tinggal memasang tombol pada P3.2 (ext0) dan P3.3 (ext1). Tentu saja tombol yang kita pasang harus benar-benar tombol yang bebas bounce (<em>bounceless<\/em>), sehingga jika kita menekan tombol sekali, maka kita juga mendapatkan hitungan sekali. Untuk menaikkan hitungan, kita menggunakan ext0. Sedangkan untuk menurunkan hitungan, kita menggunakan ext1. Pada program utama, kita bahkan tidak melakukan apapun.<\/p>\n<p>Menggunakan interupt untuk menangani tombol memang sangat sederhana dalam hal respons. Akan tetapi kelemahannya adalah bahwa tombol yang harus digunakan adalah tipe bounceless. Disamping itu, hanya P3.2 dan P3.3 saja yang bisa digunakan. Oleh karena itu, menggunakan teknik debouncing seperti yang pernah saya bahas pada buku <a title=\"Mudah dan Menyenangkan Belajar Mikrokontroler\" href=\"\/id\/?p=20\"><strong>Mudah dan Menyenangkan Belajar Mikrokontroler<\/strong><\/a> mungkin akan menjadi solusi yang lebih baik dalam menangani tombol. Untuk itu, saya juga akan menampilkan program yang menangani tombol tidak pada interupsi eksternal, tetapi ditempatkan pada interupsi timer. Dengan demikian, interupsi timer selain digunakan untuk melakukan scanning seven segment juga digunakan untuk scanning tombol.<\/p>\n<p>Pada scanning tombol melalui interupsi timer, kita bisa menggunakan sembarang tombol, tidak harus menggunakan tombol bounceless. Kita hanya perlu mengatur seberapa cepat bounce tombol akan ditanggapi. Untuk mencobanya, Anda bisa mengubah nilai MaxWait hingga 255 untuk melambatkan respon dari bounce tombol. Jika Anda menggunakan simulator, dan komputer yang digunakan tergolong komputer cepat, mungkin respon tombol akan masih terlalu cepat. Anda cukup mengubah tipe TimeOutUp dan TimeOutDown menjadi <span style=\"color: #800000;\">unsigned int<\/span>, dan mengganti nilai MaxWait dengan angka yang lebih tinggi lagi. Setelah itu, cobalah untuk menekan tombol pada Tombol.exe dengan frekuensi yang tinggi. Anda akan menemukan bahwa jika tombol ditekan terlalu cepat, maka penekanan tombol yang terlalu cepat itu akan dianggap sebagai bounce. Dengan demikian, kita bisa menggunakan tombol yang tidak benar-benar bebas bounce. Yang perlu Anda lakukan tinggal mengatur seberapa sensitif tombol Anda, yaitu dengan mengatur nilai MaxWait. Dan secara umum, Anda tidak akan menggunakan angka yang lebih tinggi dari 255. Oleh karena itu, tipe data yang saya gunakan adalah <span style=\"color: #800000;\">unsigned char<\/span>.<\/p>\n<p>Ingat, jika Anda menggunakan Tombol.exe sebagai simulasi tombol, maka Anda harus mengatur port yang digunakan (dalam hal ini adalah P3) pada simulator agar dilink secara Link Message. Hal ini perlu dilakukan karena Tombol.exe mengirim sinyal penekanan tombol ke simulator melalui Window Message. Sedangkan untuk program yang menangani tombol melalui interupsi external, maka Anda tidak bisa menggunakan Tombol.exe, karena Tombol.exe tidak bisa memberikan sinyal interupsi kepada simulator. Anda harus menggunakan tombol yang ada pada simulator. Cara menampilkannya adalah dengan menampilkan jendela port dari menu <strong>View-Port<\/strong>. Kemudian dari jendela tersebut, klik ganda pada port yang diinginkan, yaitu pada nama port, bukan pada value-nya, karena jika Anda klik ganda pada bagian value, maka akan dimunculkan dialog untuk mengganti value dari port atau register yang bersangkutan.<\/p>\n<p>Seorang teman yang lain bertanya kepada saya,&#8221;Bagaimana caranya membuat program yang terus-menerus mengawasi penekanan tombol, tetapi operasi yang lain tetap berjalan tanpa terganggu oleh pengawasan terhadap tombol tersebut?&#8221;. Nah, dua contoh program di atas, baik yang menggunakan interupsi eksternal maupun yang menggunakan scan tombol pada interupsi timer, telah melakukan pengawasan terhadap penekanan tombol secara terus-menerus, sementara pada bagian program utama bahkan tidak melakukan apapun. Jadi, contoh di atas juga merupakan jawaban dari pertanyaan ini. Anda cukup menempatkan operasi-operasi yang lain pada bagian program utama, sementara pengawasan terhadap tombol telah secara terus-menerus terawasi.<\/p>\n<p><strong><a title=\"Counter3Digit.7z\" href=\"https:\/\/sulhansetiawan.com\/_gdrive_\/download&#038;id=0BySPQ_LZsdXvRFpNckFlRnZJdHM\">Program saya tulis hanya dalam bahasa c dan M51<\/a><\/strong>. Jadi jika Anda baru memiliki Micro v5.4, yaitu IDE yang saya sertakan pada buku <strong><a title=\"Mudah dan Menyenangkan Belajar Mikrokontroler\" href=\"\/id\/?p=20\">Mudah dan Menyenangkan Belajar Mikrokontroler<\/a><\/strong>, maka sebaiknya Anda mendownload dulu <strong><a title=\"Microcontroller Project\" href=\"\/id\/?p=1010#download\">IDE versi terbaru yang mendukung bahasa c.<\/a><\/strong><\/p>\n<p>Selamat mencoba, semoga bermanfaat.<\/p>\n<p><figure id=\"download\" aria-describedby=\"caption-download\" style=\"width: 87px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/sulhansetiawan.com\/_gdrive_\/download&#038;id=0BySPQ_LZsdXvRFpNckFlRnZJdHM\"><img loading=\"lazy\" decoding=\"async\" class=\"  \" title=\"Source\" src=\"https:\/\/sulhansetiawan.com\/_wordpress_\/2013\/01\/download.gif\" alt=\"Source\" width=\"87\" height=\"30\" \/><\/a><figcaption id=\"caption-download\" class=\"wp-caption-text\">Source<\/figcaption><\/figure><\/p>","protected":false},"excerpt":{"rendered":"<p>Seorang teman meminta tolong kepada saya untuk membuat program untuk melakukan perhitungan yang bisa naik atau turun. Data ditampilkan pada seven segment tiga digit. Sedangkan untuk menaikkan atau menurunkan hitungan dipasang tombol pada port 3. Sebenarnya dia meminta saya untuk menempatkan pengaturan digit menggunakan P0, dan P2 sebagai data segment. Akan tetapi karena sebelumnya saya&hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,4,96],"tags":[136,86,79,135,134,73],"class_list":["post-224","post","type-post","status-publish","format-standard","hentry","category-eksperimen","category-mikrokontroler","category-all","tag-counter-3-digit","tag-microcontroller-learning","tag-counter","tag-counter-down","tag-counter-up","tag-microcontroler"],"_links":{"self":[{"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/posts\/224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/comments?post=224"}],"version-history":[{"count":0,"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/posts\/224\/revisions"}],"wp:attachment":[{"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/media?parent=224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/categories?post=224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sulhansetiawan.com\/id\/wp-json\/wp\/v2\/tags?post=224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}