Remote kontrol banyak kita jumpai di pasaran, biasanya digunakan untuk mengatur banyak hal di televisi, sound system, tv tuner, dll. Kali ini kita akan mencoba mengakses remote tersebut dan menggunakannya untuk keperluan lain. Langkah pertama yang harus diketahui adalah mengetaui protokol dari pengiriman sinyal dari remote tersebut. Disini dijelaskan mengenai berbagai protokol pengiriman data melalui beberapa merk remote. Disana dikatakan bahwa untuk remote sony memiliki feature 12-bit, 15-bit and 20-bit versions of the protocol exist (12-bit described here). 5-bit address and 7-bit command length (12-bit protocol). Untuk modulasi lebar pulsa saat “high” atau “low” adalah :
Dari gambar diatas, terlihat bahwa yang membedakan logika high dan low adalah lebar pulsa. Lebar pulsa low adalah 600us dan pulsa high bernilai lebih dari itu (1.2ms). Dapat dilihat protoko remote sony :
Dengan protokol diatas, data LSB dikirimkan pertama kali, pulsa diawali dengan start bit selama 2.4ms, kemudian diikuti standard low 0.6ms. data dikirimkan 7-bit command dan 5-bit address.
Berikut adalah tabel output data yang dikirim remote, dengan penekanan tombol (Device/Function).
Address Device
1 TV
2 VCR 1
3 VCR 2
6 Laser Disc Unit
12 Surround Sound
16 Cassette deck / Tuner
17 CD Player
18 Equalizer
Command Function
0 Digit key 1
1 Digit key 2
2 Digit key 3
3 Digit key 4
4 Digit key 5
5 Digit key 6
6 Digit key 7
7 Digit key 8
8 Digit key 9
9 Digit key 0
16 Channel +
17 Channel -
18 Volume +
19 Volume -
20 Mute
21 Power
22 Reset
23 Audio Mode
24 Contrast +
25 Contrast -
26 Colour +
27 Colour -
30 Brightness +
31 Brightness -
38 Balance Left
39 Balance Right
47 Standby
Yang digunakan sebagai penerima sinyal dari remote adalah menggunakan TSOP (perlu diperhatikan tiap tipe TSOP konfigurasi pin-nya terkadang berbeda).
Out-put dari TSOP dihubungkan dengan pin Interrupt pada mikrokontroler. Sebenarnya ada beberapa cara untuk mengakses remote, salah satunya yang dijelaskan disini menggunakan pin interrupt. Ketika ada penekan tombol maka terjadi interrupt pertama (start bit), pin interrupt (PIND.2) tersebut dijadikan sebagai input dimana mikrokontroller akan terjadi interrupt saat ada perubahan dari logika high ke low dan dari logika low ke high. Jadi semua pengambilan datanya diproses saat interrupt dengan memperhatikan lebar pulsa(menggunakan fasilitas timer pada mikrokontroler) dengan cara:
// External Interrupt 0 service routineDari potongan program diatas (interrupt external) terlihat bahwa, timer on dimulai ketika ada perubahan logika 0 ke 1 (interrupt pertama), kemudian timer off saat terjadi interupsi kedua yakni perubahan logika 1 ke 0 (dengan kata lain timer on saat logika high saja). Pada program diatas pada saat interrupt, mode interrupt diubah dari yang semula 0-1 menjadi 1-0 dan sebaliknya. kemudian data cacahan dari timer0 disimpan ke “count”.
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
tanda=~tanda;
if(tanda==1)
{
MCUCR=0×03; //mode interrupt diubah ke 1-0
timer0_init(); //timer on, value=0, mulai mencacah
return; //kembali keprogram utama
}
else {
TCCR0=0; //timer off, berhenti mencacah
count=TCNT0; //save timer0 value
MCUCR=0×02; //mode interrupt diubah ke 0-1
if(pulse_count>0)goto skip;Dalam program diatas 7bit data command di proses dan disimpan di varibale nilai(kami hanya mengakses 7bit data command-nya). Kemudian data divariable nilai yang berisi nilai command dari masing-masing tombol yang ditekan pada remote control tv-sony dapat kita olah untuk berbagai macam.
if(count 9){ //9*0.0853=0.7677ms
code = code | (1 << (pulse_count-1));}
else{
code = code & ~(1 << (pulse_count-1)); };
pulse_count=pulse_count+1;//sinyal pertama tanda=1
if(pulse_count==8){ //jika 7 bit data diterima
nilai=code; // simpan “command”
code=pulse_count=0; //kosongkan
};
0 komentar:
Posting Komentar