Interface barcode ke mikrokontroler AVR atmega.
Barcode Scanner banyak digunakan di toko-toko retail untuk men-scan barang barang yang akan dibayar pembeli di kasir atau digunakan di perpustakaan untuk mempercepat petugas mendaftar buku-buku yang akan dipinjam. Dengan adanya alat ini semuanya menjadi cepat dan mudah, karena setiap jenis barang memiliki kode barcode sendiri yang unik sehingga bisa dikelompokkan dengan mudah. Seperti halnya keyboard dan mouse , terdapat banyak macam tipe barcode scanner berdasarkan jenis komunikasinya, misalnya barcode scanner serial, PS/2, dan USB. Pada proyek kali ini barcode scanner PS/2 yang akan digunakan, sehingga penanganannya sama dengan keyboard PS/2. Komunikasi PS/2 adalah komunikasi serial asinkronous yang menggunakan 2 kabel yaitu data dan clock. Namun jangan salah sangka, serial sinkronous disini bukanlah protokol I2C(eis to see atau twi, atau apalah). konektor yang digunakan yaitu mini Din female. barcode scanner disini akan digunakan sebagai validator apakah seseorang berhak menggunakan peralatan tersebut atau tidak, jadi siapa orang yang memiliki kartu dengan nomor barcode yang sesuai berhak menggunakannya. Dan untuk mengetahui apakah ada orang yang menggunakan scan barcode tersebut, data hasil scanning dikirim melalui SMS ke nomor tertentu. Ide awal proyek ini bukan dari saya sendiri, namun dari orang lain , sehingga seberapa efektif alat akan berguna, saya sendiri meragukannya :-) . mikrokontroler yang digunakan yaitu avr Atmega32(sebenarnya terlalu berlebihan, dapat digunakan tipe lain) dari Atmel. PORTD.2 digunakan untuk clock, dan data di PORTD.7. PORTD.2 difungsikan sebagai pin untuk interupt eksternal, sedangkan PORTD.7 sebagai input biasa. berikut koneksinya :
Resistor pull-up yang digunakan sebesar 10 kOhm. Timing diagram dari data yang akan ditangkap adalah sebagai berikut :
(seperti halnya untuk keyboard PS/2)
Fungsi utama pengambilan data ada di rutin interupt eksternal :
interrupt [EXT_INT0] void ext_int0_isr(void)
{
static unsigned char data;
if (!edge)
{
if(bitcount < 11 && bitcount > 2) // 1=start,8 bit //data,1=parity =1 stop bit //,Bit 3 to 10 is data. Parity bit,
{ // start and stop bits tidak masuk
data = (data » 1);
if(PIND & 8)
data = data | 0x80; // ‘1’
}
if(bitcount==11)
{
mycount++;
}
MCUCR = 3;
edge = 1;
}
else {
MCUCR = 2;
edge = 0;
if(–bitcount == 0) // All bits received
{
decode(data);
bitcount = 11;
}
}
}
rutin rutin yang lain adalah untuk men-decode byte-byte yang masuk menjadi karakter ASCII, melalui sebuah look-up tabel. Untuk keperluan pengiriman SMS, digunakan handphone Siemes M45, dengan koneksi serial RS232. PDU yang dikirim disini tidak berubah-ubah(static) sehingga tidak perlu membuat generator PDU sendiri, cukup copy paste dari PDU generator yang sudah ada, misalnya http://www.rednaxela.net/pdu.php . Gambar alat :
file proyek ini sebenarnya sudah lama bercokol di HD ku (kira-kira sejak 2007, August), saya posting semoga berguna. (listing dengan bahasa C, IDE Code VisionAVR).
Referensi : Atmel Application Notes