Counter 3 Digit

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 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.

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).

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 (bounceless), 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.

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 Mudah dan Menyenangkan Belajar Mikrokontroler 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.

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 unsigned int, 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 unsigned char.

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 View-Port. 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.

Seorang teman yang lain bertanya kepada saya,”Bagaimana caranya membuat program yang terus-menerus mengawasi penekanan tombol, tetapi operasi yang lain tetap berjalan tanpa terganggu oleh pengawasan terhadap tombol tersebut?”. 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.

Program saya tulis hanya dalam bahasa c dan M51. Jadi jika Anda baru memiliki Micro v5.4, yaitu IDE yang saya sertakan pada buku Mudah dan Menyenangkan Belajar Mikrokontroler, maka sebaiknya Anda mendownload dulu IDE versi terbaru yang mendukung bahasa c.

Selamat mencoba, semoga bermanfaat.

Source

Source

Apakah Anda menyukai post ini? Mengapa tidak memberikan komentar di bawah dan melanjutkan perbincangan, atau berlangganan my feed dan dapatkan artikel semacam ini yang dikirm secara otomatis feed reader Anda.
Harap diperhatikan bahwa komentar atau pertanyaan yang disampaikan haruslah sesuai dengan topik yang sedang dibahas. Komentar atau pertanyaan yang tidak sesuai dengan topik akan kami hapus :!:

16 Komentar
  1. mas yoko saya adalah pemula dan saya ingin tahu cara memultifleks 7 segmen, oleh karena itu saya berharap mau memberikan pencerahan kepada saya.dan saya mohon kepada mas yoko memberi penjelasasan mengenai perintah dalam program counter 3 digit ini. mohon jika tidak keberatan jawaban nya dikirim ke email saya saja.
    atas kebaikan nya saya ucapkan terima kasih.

    • Coba deh, Mas Iman baca buku “Mudah dan Menyenangkan Belajar Mikrokontroler”. Di situ ada pembahasan yang cukup jelas dan mudah dipahami untuk mengendalikan seven segment secara multipleks. Kalau sulit untuk mendapatkan buku tersebut di toko buku, Mas Iman bisa juga pesan melalui toko buku online. Dalam listing program Counter 3 digit yang bisa didownload tersebut, saya juga menyisipkan beberapa komentar untuk menjelaskan bagaimana cara kerja dari program tersebut.

    • Terima Kasih Atas Jawaban mas Sulhan. Saya Akan kumpul2 uang untuk membeli bukunya mas Sulhan, Maklum lah kalo doku nya Pelajar SMA di daerah tertinggal Kab Bandung seperti saya ini
      kempis melulu. tapi saya udah niat nabung nich Mas.
      saya mau berterima kasih sama mas Sulhan karena Program Counter 3 digit dari mas Sulhan Sangat bermanfaat, karena saya
      Aplikasikan di puskesmas Di daerah saya sebagai display Antrian.
      Mas saya mau bertanya lagi nih? saya sudah mendownload Program counter 3 Digit dan membuat Hardwarenya. di listing program tersebut saya rubah Max count nya menjadi 999999 dan menambah digit nya menjadi 6 digit tapi, mengapa ngak jalan Ya? Bagaimana Solusinya?
      Satu lagi mas saya pernah melihat rangkaian AT89C51 dimana rangkaian tersebut Hanya bertugas menyalakan lampu led secara berurutan dari LED1 Sampai Led100.Namun yang saya Ketahui Pin Yang dapat Berfungsi Sebagai input/output hanya berjumlah 32. jadi jika dipasang lampuled pun Maksimal Hanya32. Jadi Bagaimana Cara Menyalakan led hingga 100 itu?
      terima kasih sebelumnya.

    • Contoh tersebut hanya bisa digunakan untuk maksimal 4 digit (yang *.M51) karena kita hanya menggunakan variabel Counter bertipe Word. Jika kita ingin meningkatkan hingga 6 digit, maka kita harus menggunakan array 3 byte. Dan proses perhitungannya juga harus dikaskade.
      Saya menyarankan untuk menggunakan bahasa C saja biar lebih mudah. Caranya adalah mengganti tipe Counter menjadi unsigned long, karena unsigned int hanya bisa sampai 65565. Kita harus mengubah beberapa baris menjadi seperti berikut (saya kumpulkan menjadi satu, tidak seperti pada contoh program)

      unsigned long Counter;
      code unsigned char KodeDigit[]={0x1,0x2,0x4,0x8,0x10,0x20};
      #ifdef UseSimulator
      #define MaskDigit 0
      #else
      #define MaskDigit 0xc0
      #endif
      
      void isiBuffer(){  
        unsigned long ctr;  
        unsigned char bf; 
        ctr=Counter; 
        for(bf=0;bf<JumlahDigit;bf++){
          Buffer[bf]=Konversi[ctr%10];
          ctr/=10;
        }
      }
      

      Dengan cara diatas, kita bisa menambah maksimal hitungan hingga 999999. Bahkan dengan menambah KodeDigit menjadi {0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80} dan MaskDigit menjadi selalu 0 baik untuk simulator maupun bukan, maka kita bisa membuah hitungan hingga 8 digit,yaitu 99999999. Karena sesungguhnya unsigned long itu batasnya adalah 4294967295.
      Untuk led hingga 100 buah, caranya adalah dengan multiplex. Lihat pada led matiks dan susunlah led tersebut tidak sebagai matriks, tetapi sebagai led yang berjarar. Jadi jumlahnya kan bisa sebanyak yang kita mau. Akan tetapi tentu saja mengatur variasi nyala lampu hingga 100 buah juga bukan hal yang sederhana lho.
      Akan lebih mudah jika kita memparalel beberapa led. Jadi nyala led ke 8, ke 16, ke 24, dst, akan sama dengan led pertama. Suatu saat akan saya tampilkan artikel untuk contoh tersebut. Tunggu saja ya.
      OK, semoga berhasil.
      BTW, Mas Iman itu hebat, baru SMA sudah main-main mikrokontroler. Keep learning!

  2. mas, saya sudah beli bukunya.
    terimakasih banyak, buku tersebut sangat bermanfaat.
    tapi karena saya belajar sendiri, maklum waktu kuliah alat dan informasi masih terbatas. saya kesulitan tuk memahami
    untuk mengirim data ke led matrix. sudikah mas menolong saya tuk membuat tutorial mengirim data ke led matrix dengan ppi
    ic dipakai 74hc595 dan uln 2003.. oh iya mas saya hanya paham pakai bahasa assembly, karena lebih gampang..

    • pertanyaan yang sulit untuk dijawab jika informasinya tidak lengkap. pertama saya harus tahu bagaimana rangkaian led matriksnya dan bagaimana hubungannya dengan ppi (tidak harus skema yang lengkap, tp minimal blok diagramnya). kedua, pengiriman data ke led matriks disini maksudnya pengiriman data bagaimana? saya tunggu informasinya yang lebih lengkap. (tolong kirim langsung ke email saja).

  3. assalamulaikum.
    saya mau nanya ni,
    gimana cara untuk membuat tanggal lahir 3 digit dari seven segment ?

    atas jawabannya saya ucapkan terima kasih.

    • @novfalah: masih bingung dengan pertanyaannya. maksudnya gimana tuh, membuat tanggal lahir 3 digit? bisa lebih detil?

  4. asslmualikum…..
    mas gmn carA membuat counterup dan down…..3digit…
    1. data lagi naik disimpan dimemori menggunakan interup up
    2. data yg disimpan ditampilkan turun menggunakan interup down
    trimakasih sebelumnya saya lagi belajar microcntroller….

    • ga paham dg interupt up dan interupt down, apaan tuh?
      tp contoh di sini jg salah satunya menggunakan interupt, yg satu untuk menaikkan hitungan, dan yg lainnya untuk menurunkannya. jd kalo maksdumu adalah begitu, ya tinggal donlot aja kan?

  5. mas sulhan saya sudah coba counter 3 digit mas sulhan dan berhasil yang jadi pertanyaannya saya kalau mas sulhan g keberatan kalau dalam hitungan mundur di bawah angka 10 untuk 0 digit kedua di non aktif kan gmana caranya yah mas sulhan sebagai contoh angka 8 saja yang muncul tetapi tidak muncul angka 08 semoga mas sulhan bisa memberi saya pencerahaannya.

    • owh, itu gampang aja, hanya perlu mengubah prosedur IsiBuffer menjadi seperti:

      IsiBuffer:
                push  B
                push  Acc
                mov   a,Counter
                mov   B,#10
                div   ab
                acall Konversi
                mov   Buffer+1,a
                mov   a,b
                acall Konversi
                mov   Buffer,a
                mov   a,Counter+1
                acall Konversi
                mov   Buffer+2,a
      ;---------hapus 0 di awal
                cjne  A,#11000000b,isbfin ; 11000000b=0
                mov   Buffer+2,#0         ; 0=padam
                mov   A,Buffer+1
                cjne  A,#11000000b,isbfin
                mov   Buffer+1,#0
      isbfin:   pop   Acc
                pop   B
                ret
      

      gampang kan? 😀

    • sudah saya coba mas sulhan ok tks y.

    • mas sulhan untuk program 3 digit saya belum coba menggunakan c dan baru mau coba menggunkana bahasa C , pertanyaan saya kalau mas sulhan g keberatan kalau dalam hitungan mundur di bawah angka 10 untuk 0 digit kedua di non aktif kan gmana caranya yah mas sulhan sebagai contoh angka 8 saja yang muncul tetapi tidak muncul angka 08 semoga mas sulhan bisa memberi saya pencerahaannya.

    • Caranya tidak ada bedanya dengan yang menggunakan assembly. Tinggal menganti bagian IsiBuffer agar memadamkan display paling kanan jika isinya menunjukkan bilangan nol.

  6. Lumayan nih ada versi SDCC-nya, bisa buat studi banding.
    Thanks…

Tinggalkan komentar

Sebelum membuat komentar, pastikan Anda telah membaca komentar-komentar sebelumnya. Jangan membuat pertanyaan yang telah ditanyakan. Perhatikan pula link-link dalam artikel. Lihatlah link tersebut sebelum membuat pertanyaan, karena mungkin penjelasan dari pertanyaan Anda telah di jawab dalam link tersebut.

Komentar yang tidak mengikuti aturan ini akan dihapus!

(wajib)

(wajib)


Time limit is exhausted. Please reload the CAPTCHA.