IR Up Counter 0-99 Menggunakan ATmega16


IR up counter adalah suatu device pencacah elektronik dengan input berdasarkan dari pantauan sensor IR. Dalam dunia industri, sistem ini sering digunakan dalam pengepakan barang dengan mencacah jumlah barang dalam satu paketnya.
Dalam device ini digunakan 1 pasangan sensor  IR, mikrokontroler ATmega16 sebagai pencacah serta pengolah pada display sevent segment. Dalam kondisi real pasangan sensor IR yaitu infra red dan phototransistor di pasangan secara secara berhadapan langsung atau line of sight (LOS) dengan memberikan celah diantaranya sebagai area track barang.
gambar rangkaian sensor
Sistem kerja dari rangkaian sensor IR tersebut yaitu ketika kondisi tidak terdapat barang lewat diantara pasanga sensor maka terjadi pancaran sinar dari infrared ke phototransistor. Dengan adanya pancaran sinar infrared pada phototransistor maka phototransistor bersifat jenuh sehingga memberikan logika low pada basis transistor Q1 dan Q2 sehingga transistor bersifat cut off dan output berlogika high (led indikator padam) . Ketika terdapat barang lewat melalui sensor maka sinar pancaran infra red tidak sampai pada sensor cahaya phototransistor. Dengan tidak adanya pancaran sinar infrared pada phototransistor maka phototransistor bersifat cut off sehingga memberikan logika high pada basis transistor Q1 dan Q2  sehingga tansistor bersifat jenuh dan output berlogika low (led indikator nyala).
gambar rangkaian display seven segment
Dalam sistem display sevent segment digunakan sistem switching dengan mengirimkan data 8 bit (D0-D7) untuk ditampilkan pada display seven segment dan dikontrol melalui jalur CNTL1 dan CNTL2 untuk mengontrol display mana yang aktif untuk data yang dikirimkan melalui D0-D7. misalnya untuk menampilkan nilai 9 (0×10) pada display 1 (puluhan) dan nilai 8 (0×00) pada display 2 (satuan) maka untuk menampilkannya kita kirim terlebih dahulu data nilai 9 (0×10) melalui D0-D7 lalu aktifkan display 1 dengan memberikan logika low pada pin CNTL2  dan logika high pada CNTL1. Kemudian kirimkan data nilai 8 (0×00) melalui D0-D7 lalu aktifkan display 2 dengan memberikan logika high pada pin CNTL2  dan logika low pada CNTL1. Dengan demikian pada display seven segment akan menampilkan nilai 98.
Dengan sistem switching ini maka display nyala secara bergantian, namun dengan timing switching yang sangat cepat ( dalam milisecond) sehingga seolah-olah display tampil secara bersamaan. Sistem switching ini sangat efektif digunakan untuk display seven segment dalam jumlah yang banyak karena data hanya dikirim melaui 8 jalur data dan jalur kontrol untuk setiap seven segmentnya.
Untuk unit pencacah dan pengontrol display digunakan ATmega16.  Pada dasarnya output sensor dapat diinputkan pada sembarang I/O ATmega 16, namun dalam hal ini output dari sensor di inputkan pada pin INT0 ATmega16 karena pemantauan terhadap adanya perubahan logika input akibat sensor mendeteksi adanya barang lewat lebih mudah. Dalam hal ini digunakan pemantauan interrupt rising edge yaitu pemantauan perubahan logika input dari logika low ke logika high (tebing positif). Berikut contoh listing programnya
interrupt [EXT_INT0] void ext_int0_isr(void)
{
 delay_ms(50);
 x++;                          //up counter satuan
 if(x>9)
  {
   x=0;
   y++;                       //up counter puluhan
  }
if(y>9)
  {
   y=0;
  }
}
Sedangkan untuk jalur data 8 bit dan kontrol bisa menggunakan sembarang I/O ATmega16 yang belum di gunakan. Dalam job sheet ini jalur data 8 bit yang digunakan adalah PORTA.0-PORTA.7 dengan urutan konfigurasi D0-D1 dan PORTD.1 untuk CNTL1 serta PORTD.0 untuk CNTL2. sebagai mana yang dijelaskan diatas bahwa sistem display pada seven segment menggunakan sistem switching dengan timing yang sangat cepat sehingga walaupun kedua display aktif secara bergantian namun seolah-aktif secara bersamaan. berikut contoh listing prog
void display()
{
for(z=0;z<100;z++)
 {
  PORTD.0=0;                    //aktifkan display 7 segment puluhan
  PORTD.1=1;
  PORTA=data[y];            //kirim data puluhan
  delay_ms(5);

  PORTD.0=1;
  PORTD.1=0;                     //aktifkan display 7 segment satuan
  PORTA=data[x];            //kirim data satuan
  delay_ms(5);
 }
}
demikianlah sistem IR up counter 0-99 dengan ATmega16. Untuk rangkaian lengkap dan listing program upCounter.c bisa didownload disini.

Komentar

Postingan Populer