AVR : membaca switch dengan pull-down resistor

input, avr, read, baca

Berbeda dengan output, untuk melakukan input (membaca pin) kita perlu repot sedikit dengan pull-up dan pull-down resistor. Apa itu pull-up dan pull down resistor ? bisa di lihat disini. Inti dari keduanya adalah untuk membuat nilai default pada pin ketika saklar pada posisi off jika di tinjau di rangkaiannya. Untuk kali ini dan bagi pemula biasanya pertama kali akan memilih pull-down resistor (default LOW ketika saklar off) karena terdenngar lebih nyaman dan logis di banding dengan pull-up (default HIGH ketika saklar off).
Jadi simplenya, setelah sumber tegangan -- saklar, pas di bagian koneksi ke pin IC di buat paralel dengan GND. Untuk prakteknya bisa memakai script di link ini. Rangkaiannya konekkan PB1 (pin 1 pada port b, ingat urutan nomor pin di mulai dari 0 bukan 1) ke saklar (sebenarnya saya menggunakan pushbutton tapi karena cara kerjanya sama akan kita anggap saklar) sebagai sumber tegangan dan PB0 ke led yang di jembatani resistor (rangkaian dasar menyalakan led). Oh iya, kali ini saya tidak bisa memberikan gambar rangkaian, padahal akan lebih mudah dengan begitu, karena ada beberapa alasan saya tidak bisa menyediakannya.

Di source code ada beberapa kode untuk membantu operasi bit dasar seperti : BIT_GET, BIT_SET, BIT_CLEAR dan lain-lain. Sangat penting untuk memahami operasi bit, di postingan saya sebelumnya sudah pernah di bahas tentang operasi bit ini.

Agar lebih menarik, dengan menambha kompleksitas, ini bisa di terapkan ke 7 segment dengan memakai kode di link ini. Untuk rangkaiannya sangat mirip di postingan sebelumnya tentang cara membuat timer 1 detik disini. Hanya saja dengan tambahan yaitu PD7 di hubungkan ke rangkaian pull-down resistor sebagai input untuk membaca state saklar. Selain itu source codenya memang source code dari postingan sebelumnya tapi dengan beberapa tambahan algoritma untuk membaca saklar :
if (BIT_GET(PIND, BIT(7))) {
            if (chk) {
                delapan(4);
                state = DEACT;
            } else {
                state = ACT;
                pause_timer();
                delapan(4);
            }
        } else {
            if (state == ACT) {
                satu(4);
                chk = 0xFF;
            } else if (state == DEACT) {
                resume_timer();
                state = 0;
                counter = 0;
            }
            else
                chk = 0;
        }
Cara kerjanya, ketika pushbutton pertama kali di tekan akan menghentikkan timernya, otomatis interrupt tidak akan terjadi. Saat di tekan 7 segment akan menunjukka angka 8 dan ketika di lepas akan menunjukkan angka 1. Ketika pushbutton di tekan lagi, akan kembali memulai timer dengan hitungan di ulang dari awal dan 7 segment pun akan kembali normal berganti angkanya setiap 1 detik seperti di postingan sebelumnya. Dan itulah garis besar cara kerjanya, sangat sederhana. Berikut dokumentasi dari percobaan kali ini.

refrensi :
http://www.seattlerobotics.org/encoder/mar97/basics.html

Komentar