Program Membaca Remote Control TV dgn Atmel AT89c51

Data Remote Control Sony

Data yang ada pada remote Sony terdiri dari 12 bit, yang dimulai dengan
header yang kemudian diikuti dengan 12 bit datanya. Pengiriman dari data
tersebut dilakukan secara serial yaitu dimulai dengan header atau start bit lalu
diikuti dengan LSB kemudian diakhiri dengan MSBnya. Yang dapat dilihat dari
data tersebut bahwa perbedaan antara header, nilai logika satu dan nilai logika nol
terletak pada periode setiap data. Untuk melakukan penghitungan dari masingmasing
jenis data (header, logika satu, logika nol) dilakukan percobaan dengan
menghitung periode dari masing-masing logika terlebih dahulu.
berikut akan memperlihatkan data-data remote dari setiap tombol yang tampak
pada osiloskop.
Data remote control Sony pada osiloskop

Data remote control Sony pada osiloskop

Dari data diatas dapat dilihat bahwa panjang data remote Sony adalah 12
bit. Data dimulai dengan start bit/header yang panjang datanya sekitar 2,28 ms
(4T). Sedangkan untuk data nol terdiri dari low 0.57 ms high 0.57 ms, data satu
terdiri dari low 0.57 ms, high 1.14 ms. Data selalu dimulai dari start bit diikuti
dengan LSB dan diakhiri dengan MSB-nya. Jadi total panjang data sekitar 45 ms
dengan jarak antar data sekitar 25 ms.
Pada perancangan perangkat lunak berbasis mikrokontroler dilakukan
pembacaan data dari tombol remote yang ditekan. Dalam hal ini, mikrokontroler
tidak dapat langsung membedakan data mana yang termasuk header, logika nol,
atau logika satu. Oleh karena itu, diperlukan adanya suatu pembanding dimana
data-data remote yang diperoleh dari pengukuran osiloskop akan dikonversi
menjadi bilangan heksadesimal.
• Bilangan header
- Periode header = 4T + T
= 2.28 ms + 0.57 ms
= 2.85 ms = 2850 μs
Periode header = 2850 us merupakan bilangan desimal
sehingga harus dikonversi menjadi heksadesimal untuk
memperoleh bilangan header yaitu sebagai berikut :
- Bilangan header = 2850
= 0000 1011 0010 0010b
= 0B22H
Dari bilangan header yang diperoleh hanya akan diambil 2 byte
tertingginya saja karena bagian itu yang selalu memiliki nilai yang
tetap, sedangkan bagian 2 byte terendahnya akan selalu berubah
ubah tergantung dari jarak, sehingga yang dapat digunakan sebagai
pembanding adalah 0BH. Bilangan ini akan dibandingkan terhadap
nilai yang disimpan pada register TH0 sewaktu menerima sinyal
remote.
• Bilangan logika satu
- Periode logika satu = 2T + T
= 1.14 ms + 0.57 ms
= 1.71 ms = 1710 μs
Periode logika satu = 1710 μs merupakan bilangan desimal
sehingga harus dikonversi menjadi heksadesimal untuk
memperoleh bilangan logika satu yaitu sebagai berikut :
- Bilangan logika satu = 1710
= 0000 0110 1010 1110b
= 06AEH
Dari bilangan logika satu yang diperoleh hanya akan diambil 2 byte
tertingginya saja karena bagian itu yang selalu memiliki nilai yang
tetap, sedangkan bagian 2 byte terendahnya akan selalu berubahubah
tergantung dari jarak, sehingga yang dapat digunakan sebagai
pembanding adalah 06H. Bilangan ini akan dibandingkan terhadap
nilai yang disimpan pada register TH0 sewaktu menerima sinyal
remote.
• Bilangan logika nol
- Periode logika nol = T + T
= 0.57ms + 0.57 ms
= 1.14 ms = 1140 μs
Periode logika nol = 1140 μs merupakan bilangan desimal
sehingga harus dikonversi menjadi heksadesimal untuk
memperoleh bilangan logika nol yaitu sebagai berikut :
- Bilangan logika nol = 1140
= 0000 0100 0111 0100b
= 0474H
Dari bilangan logika nol yang diperoleh hanya akan diambil 2 byte tertingginya
saja karena bagian itu yang selalu memiliki nilai yang tetap, sedangkan bagian 2
byte terendahnya akan selalu berubah-ubah tergantung dari jarak, sehingga yang
dapat digunakan sebagai pembanding adalah 04H.
RANGKAIAN:
At89c51 Remote Control Receiver

At89c51 Remote Control Receiver

Program ini digunakan untuk mendeteksi adanya perubahan level yang
terjadi pada saluran kaki INT0 (P3.2) akibat sinyal yang dipancarkan oleh remote
Sony. Sinyal tersebut memiliki panjang data 12 bit yang terdiri atas 5 bit alamat
dan 7 bit sisanya adalah data itu sendiri. Setiap pengiriman data akan selalu
didahului dengan pengiriman start bit/header. Pengiriman dari data tersebut
dilakukan secara serial yaitu dimulai dengan header atau start bit lalu diikuti
dengan LSB kemudian diakhiri dengan MSBnya. Yang dapat dilihat dari data
tersebut bahwa perbedaan antara header, nilai logika satu dan nilai logika nol
terletak pada periode setiap data. Pada program ini, pertama akan dilakukan
pembacaan start bit dan kemudian diteruskan dengan pembacaan data yang
diterima.
Berikut diagram alir pembacaan data remote :
Flow chart pembacaan remote control  oleh AT8951
Flow chart pembacaan remote control  oleh AT8951

Flow chart pembacaan remote control oleh AT89c51

Berikut cuplikan program pembacaan data remote:

REMOT : 
CLR EX0                    ; MATIKAN INTERUPSI INT0
CLR ET1
MOV TH0,#0
MOV TL0,#0
SETB TR0                   ; START TIMER
JNB P3.2,$                 ; HITUNG 1 PERIODE
JB P3.2,$                  ; DARI START BIT REMOTE
CLR TR0                    ; STOP TIMER
MOV R2,TH0
CJNE R2,#0BH,TOLAK        ; PERIODE = 0BH ? TDK KE EXNOL
MOV R3,#12                ; YA, R3 = 12
NEXT :
RR A                       ; DATA DIGESER KANAN
MOV TH0,#0
MOV TL0,#0
SETB TR0                            ; START TIMER
JNB P3.2,$                          ; HITUNG 1 PERIODE
JB P3.2,$                           ; DARI 1 BIT DATA
CLR TR0                             ; STOP TIMER
MOV R4,TH0
CJNE R4,#06H,NOL                     ; PERIODE = 06H ?
SETB ACC.7                          ; JIKA YA SET ACC.7
SJMP JUMP
NOL :
CLR ACC.7                           ; JIKA TDK CLEAR ACC.7
JUMP :
DJNZ R3,CEK                         ; APA SUDAH 12 BIT ?
SWAP A                              ; JIKA SUDAH A DISWAP
CALL COMPARE                        ;MENYELEKSI DATA YANG DITERIMA
MOV 33H,32H                         ; 33H <- DATA RIBUAN
MOV 32H,31H                         ; 32H <- DATA RATUSAN
MOV 31H,30H                         ; 31H <- DATA PULUHAN
MOV 30H,R6                          ; 30H <- DATA SATUAN
CALL TUKAR
CALL DELAY
TOLAK :
RETI
CEK :
CJNE R3,#04,NEXT                     ; CEK SUDAH TERIMA 8 BIT DATA
MOV R5,A
MOV A,#0
SJMP NEXT                             ; AMBIL 4 BIT SISANYA

Program diawali dengan mematikan pelayanan interupsi kemudian Timer
0 akan aktif dan mulai menghitung periode dari start bit. Periode yang didapat
kemudian akan dibandingkan dengan data 0BH dimana jika tidak sama pelayanan
interupsi akan dihentikan dan kembali ke program utama, tetapi bila hasilnya
sama maka program akan dilanjutkan dengan pembacaan data yang dipancarkan
oleh remote Sony. Diketahui bahwa panjang data yang dikirim adalah 12 bit
sehingga penghitungan periode data dilakukan sebanyak 12 kali. Setiap periode
data yang didapat akan dibandingkan dengan 06H dimana apabila sama maka bit
ACC.7 akan diisi 1 dan bila tidak sama maka bit ACC.7 akan diisi 0. Lalu jika ada
data lagi maka data yang diterima sebelumnya digeser terlebih dahulu ke kanan
barulah bit ACC.7 dipakai oleh bit data yang baru. Hal ini dilakukan secara terusmenerus
sampai mencapai 8 bit data. Kalau sudah 8 bit data di akumulator A akan
ditransfer dahulu ke R6 lalu A dikosongkan lagi dan siap untuk menerima 4 bit
sisanya. Apabila 4 bit sisanya sudah diambil maka data pada bit A7-A4 akan
ditukar dengan bit A3-A0 dan sebaliknya agar pembacaan data remote secara
keseluruhan dilakukan dengan benar. Jadi data remote yang sebanyak 12 bit itu
telah dapat dibaca dengan meletakkannya ke akumulator A dan R6.
Penyeleksian Kode Remote Control
Setiap tombol pada remote memiliki kode-kode tersendiri. Oleh karena itu,
perlu dilakukan proses penyeleksian untuk mengetahui kode data yang dikirim
setiap penekanan tombol. Pada perancangan ini, hanya digunakan 11 tombol yaitu
tombol angka 0 sampai 9 serta tombol power.
Berikut diagram alir penyeleksian kode remote control.
Diagram alir program penyeleksian kode remote control

Diagram alir program penyeleksian kode remote control

Berikut cuplikan program pembacaan data remote:
COMPARE :
CJNE A,#0H,TOLAK1
CJNE R5,#89H,SATU ; JIKA TOMBOL 0 DITEKAN
MOV R6,#0 ; R6 <- 0
RET
SATU : CJNE R5,#80H,DUA ; JIKA TOMBOL 1 DITEKAN
MOV R6,#1 ; R6 <- 1
RET
DUA : CJNE R5,#81H,TIGA ; JIKA TOMBOL 2 DITEKAN
MOV R6,#2 ; R6 <- 2
RET
TIGA : CJNE R5,#82H,EMPAT ; JIKA TOMBOL 3 DITEKAN
MOV R6,#3 ; R6 <- 3
RET
EMPAT: CJNE R5,#83H,LIMA ; JIKA TOMBOL 4 DITEKAN
MOV R6,#4 ; R6 <- 4
RET
LIMA : CJNE R5,#84H,ENAM ; JIKA TOMBOL 5 DITEKAN
MOV R6,#5 ; R6 <- 5
RET
ENAM : CJNE R5,#85H,TUJUH ; JIKA TOMBOL 6 DITEKAN
MOV R6,#6 ; R6 <- 6
RET
TUJUH : CJNE R5,#86H,WOLU ; JIKA TOMBOL 7 DITEKAN
MOV R6,#7 ; R6 <-7
RET
WOLU : CJNE R5,#87H,SONGO ; JIKA TOMBOL 8 DITEKAN
MOV R6,#8 ; R6 <- 8
RET
SONGO : CJNE R5,#88H,POWER ; JIKA TOMBOL 9 DITEKAN
MOV R6,#9 ; R6 <- 9
RET
POWER :
CJNE R5,#95H,TOLAK1 ; JIKA TOMBOL POWER DITEKAN
MOV 40H,#0
MOV 41H,#0
MOV 50H,#0
MOV 51H,#0
MOV 60H,#0
MOV 61H,#0
MOV TH1,#0
MOV TL1,#0
RET
TOLAK1 :
LJMP TOLAK

Pada program pembacaan data remote, data remote sebanyak 12 bit telah
disimpan pada akumulator A dan R6. Selanjutnya, data tersebut akan diseleksi
untuk mengetahui tombol mana yang ditekan. Proses penyeleksian diawali dengan
membandingkan data pada akumulator A dengan data 0H dimana apabila tidak
sama maka program akan kembali ke pelayanan interupsi eksternal 0 ( INT0 ),
namun jika hasilnya sama maka penyeleksian akan dilanjutkan terhadap isi
register R6.
Dari program diatas, diketahui bahwa penekanan suatu tombol akan
menghasilkan pengisian suatu angka ke register R6 sesuai dengan masing-masing
nomor tombol. Oleh karena itu, penekanan tombol 0 akan menjadikan R6 = 0,
tombol 1 akan menjadikan R6 = 1, tombol 2 akan menjadikan R6 = 2, dan
seterusnya hingga penekanan tombol 9 akan menjadikan R6 = 9. Sedangkan
penekanan tombol power akan menyebabkan memori 40H, 41H, 50H, 51H, 60H,
61H, TH1, dan TL1 berisi nilai 0H, dimana penekanan tombol ini berguna untuk
mereset tampilan seven segment. Apabila terjadi penekanan selain tombol-tombol
yang digunakan maka program akan melompat ke label TOLAK dan keluar dari
pelayanan interupsi eksternal 0 ( INT 0 ).

Penggabungan Dua Bilangan BCD (Binary Coded Decimal)
Setiap penekanan tombol pada remote akan menyebabkan register R6 diisi
dengan suatu angka sesuai dengan nomor tombol tersebut. Adapun angka yang
diisikan tersebut berupa bilangan BCD (Binary Coded Decimal). Pada program
pembacaan data remote diatas telah dilakukan pemindahan data R6 ke memori
internal mikrokontroler dimana memori 30H berisi data satuan, 31H berisi data
puluhan, 32H berisi data ratusan, dan memori 33H berisi data ribuan. Oleh karena
setiap memori mempunyai kapasitas 8 bit maka memungkinkan untuk
menampung dua digit bilangan BCD dalam suatu memori.
Berikut diagram alir Penggabungan dua bilangan BCD.
Diagram alir program Penggabungan dua bilangan BCD

Diagram alir program Penggabungan dua bilangan BCD

Berikut cuplikan program pembacaan data remote:
TUKAR :
MOV A,31H ; A <- 31H
SWAP A
ADD A,30H ; A=A+30H
DA A
MOV 40H,A ; A <- 40H=PULUHAN+SATUAN
MOV A,33H ; A <- 33H
SWAP A
ADD A,32H ; A=A+32H
DA A
MOV 41H,A ; A <- 41H=RATUSAN+RIBUAN
RET

Pada program diatas terlihat bahwa memori 31H yang berisi data puluhan
akan dipindahkan ke akumulator A sehingga dapat dilakukan penukaran nibble
melalui instruksi SWAP A. Selanjutnya, dilakukan penjumlahan antara
akumulator A dengan data memori 30H dan hasilnya disimpan dalam memori
40H dimana berisi data puluhan dan satuan. Hal yang sama juga dilakukan pada
data memori 32H dimana memori ini berisi data ribuan. Isi pada memori 32H
dipindahkan ke akumulator A, kemudian dilakukan penukaran nibble sehingga isi
ACC.0-ACC.3 akan ditukar dengan isi ACC.4-ACC.7. Setelah itu, data pada
akumulator A akan dijumlahkan terhadap data memori 33H serta hasilnya
disimpan dalam memori 41H dimana telah berisi data ribuan dan ratusan. Setelah
program ini selesai dijalankan maka pengeksekusian akan dikembalikan ke proses
pelayanan interupsi eksternal 0 ( INT 0 ).
Advertisements

About pccontrol

Berisi Tutorial Menggunakan PC untuk mengontrol Peralatan dengan cara mudah & praktis untuk pemula.

Posted on 13/05/2011, in Contoh-contoh Aplikasi. Bookmark the permalink. 9 Comments.

  1. Gan boleh minta programnya lengkapnya.

  2. boleh minta source lengkapnya??

  3. minta program lengkapnya donk…!!

  4. Adajuga yang protokolnya seperti ini.
    Remote Control IC compatible NEC format:
    Header + Custom Code (16) + Data(8) + /Data(8) …+Repeat …+Repeat
    Header = 13.5ms
    Repeat = 11.5ms
    One = 2.24ms
    Zero = 1.12ms

  5. kalau data remote nya pasti carinya susah, tapi saya ketemu di web tetangga yang bisa membaca data dari remote apapun. mungkin bisa sedikit memberi pencerahan.
    http://dhuzell.site90.com/mcuavr/modulapikasi/app55tvrc.htm

  6. Mas Mau juga dong, untuk yang pake bahasa C pake AVR AT8535. and kalau bisa remote nya nggak harus sony, kalau bisa pake remote universal khan lebih OK’s Bangget

Komentar ,Saran atau Pertanyaan

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: