Aplikasi Remote Control - 2
Dengan melihat karakteristik ini maka remote control menggunakan frekuensi carrier sekitar 36-40kHz. Untuk membangkitkan sinyal dengan frekuensi 40kHz tidak sulit tetapi untuk menerima sinyal dengan frekuensi 40 kHZ itu membutuhkan filters, penguatan sinyal, dan menghilangkan sinyal carrier sehingga data yang diterima benar-benar valid. Remote yang digunakan dalam hal ini adalah remote TV Sony. Format data dari remote Sony terdiri dari 12 bits data. Data yang dikirimkan pertama kali adalah header selanjutnya baru data.
xxxxxx : command
yyyyyy : address
Jarak antara data dengan data adalah 25ms.
Remote Sony ini memiliki karakteristik yaitu memiliki periode (1T)=550 ms dan carrier 40Khz. Untuk remote Sony memiliki header high 4T dan low 1T, untuk logic 1 memiliki pulsa high sepanjang 2T dan low 1T, dan untuk logic 0 memiliki pulsa high 1T dan low 1T. Ini merupakan format aslinya sedangkan jika mengamati sinyal yang dikirimkan remote melalui IR modul kebalikannya karena padda IR modul ada inverternya. Berikut contoh bentuk gambar pulsa dari header, logic 1 dan logic 0 dari remote TV Sony yang sebenarnya (belum melalui gerbang inverter).
Untuk dapat mengamati bentuk sinyal yang dipancarkan oleh remote maka diperlukan osiloskop. Dengan osiloskop akan diketahui bentuk sinyal dari masing-masing tombol pada remote.
Berikut ini adalah bentuk-bentuk sinyal dari remote Sony setelah keluar dari titik B pada gambar 2 (setelah melalui gerbang inverter).
Untuk membaca berapa besarnya header, logika1 dan logika 0, maka digunakan timer untuk menghitungnya jadi yang dibaca high dan lownya.
1: .DATA
2: TMP DS 15
3:
4: .CODE
5: CLR EX0 ;MATIKAN INTERUPT
6: MOV R0,#TMP ;Isi R0 dengan alamat TMP
7: MOV TH1,#0 ;TH1 DIISI 0
8: MOV TL1,#0 ;TL1 DIISI 0
9: SETB TR1 ;JALANKAN TIMER 1
1: LOP1:
2: JNB P3.2,* ;CEK P3.2 LOW TETAP KE LOP1
3: LOP2:
4: JNB P3.2,LOP3 ;P3.2, APAKAH SUDAH LOW ? JIKA SUDAH KE LOP3
5: MOV A,TH1 ;TH1 DIISIKAN KE A
6: CJNE A,#$0C,LOP2 ;TUNGGU SAMPAI OVERFLOW
7: SJMP EXIT ;DATA SELESAI DITERIMA SEMUA,
8: ;LOMPAT KE EXIT
9: LOP3: CLR TR1 ;MATIKAN TIMER 1
10: MOV @R0,TH1 ;TH1 DIMASUKKAN KE ALAMAT DARI R0
11: INC R0 ;NAIKKAN R0
12: SJMP IR ;KEMBALI AMBIL DATA
13: EXIT:
Setelah datanya diambil maka dilihat apakah datanya berupa header, logic 1, logic 0. Dengan menggunakan timer maka dapat diketahui nilai dari headernya sebesar 0A, untuk logika 1 sebesar 06, sedangkan data highnya sebesar 06 dan untuk data lownya sebesar 04. Kemudian data yang masuk dikurangi oleh 05 jika ada carry berarti data low sebaliknya jika tidak ada carry berarti data high. Kemudian carrynya dikomplemen dan selanjutnya digeser dengan perintah RRC(rotate right dengan carry). Proses ini akan dilakukan sebanyak 8 kali pergeseran. Berikut ini program untuk mengolah data yang masuk. Proses ini akan dilakukan sebanyak 8 kali pergeseran.
Potongan Program 2 :
1: EXIT:
2: CLR TR1 ;MATIKAN TIMER
3: MOV R0,#TMP ;ALAMAT TEMP DIISIKAN KE R0
4: MOV A,@R0 ;ISINYA R0 DIISIKAN KE A
5: CLR C ;CLEAR CARRY
6: SUBB A,#9 ;CEK APAKAH HEADERNYA SONY
7: ;DENGAN DIKURANGI 9(HEADERNYA SONY=0A)
8: JNC SONY ;TIDAK
9: SETB EX0 ;
10: SJMP COBA
11: SONY:
12: INC R0 ;R0 DIINCREMENT
13: DATA:
14: MOV R7,#8 ;DIAMBIL 8 BIT DATA
15: MOV R6,#0 ;NILAI AWAL R6 DIISI 0
16: LDATA:
17: MOV A,@R0 ;ALAMAT DARI R1 DISIKAN KE A
18: CEKBIT:
19: CLR C ;CLEAR CARRY
20: SUBB A,#5 ;DIKURANGI 5(DATA HIGH SONY=06
21: ;DATA LOW SONY=04)
22: CPL C ;CARRY DIKOMPLEMEN
23: MOV A,R6 ;R6 DIISIKAN KE A
24: RRC A ;A DIGESER BERSAMA CARRY
25: MOV R6,A ;DISIMPAN DI R6
26: INC R0
27: DJNZ R7,LDATA ;TERUS SAMPAI 8 BIT DATA
Pengaturan Kecepatan Putar Kipas
Untuk menjalankan kipas digunakan rangkaian transistor yang disusun secara
Gambar 9
Rangkaian Untuk Menjalankan Motor
Potongan Program 3 :Pengaturan Kecepatan Kipas
1: PWM:
2: MOV A,R4 ;NILAI AWAL R4 DIISIKAN KE A
3: MOV DPTR,#TABELH1 ;ALAMAT TABELH1 DIISIKAN KE DPTR
4: MOVC A,@A+DPTR ;A SEBAGAI PENUNJUK TABELH1 KEMUDIAN DIISIKAN KE A
5: MOV TABH,A ;TABH DIISI A
6: MOV A,R4
7: MOV DPTR,#TABELH2 ;ALAMAT TABELH2 DIISIKAN KE DPTR
8: MOVC A,@A+DPTR ;A SEBAGAI PENUNJUK TABELH2 KEMUDIAN DIISIKAN KE A
9: MOV TABH+1,A ;A DIISIKAN KE TABH+1
10: CLR TR0
11: CJNE R3,#0,LOW ;BANDINGKAN R3 DENGAN 0 TIDAK SAMA KE LOW
12: SETB P3.1
13: MOV TH0,TABH ;TABH DIISIKAN KE TH0
14: MOV TL0,TABH+1 ;TABH+1 DIISIKAN KE TL0
15: MOV R3,#1 ;R3 DIISI 1
16: SETB TR0 ;JALANKAN TIMER
17: SJMP SELESAI
18: LOW:
19: MOV A,R4
20: MOV DPTR,#TABELL1
21: MOVC A,@A+DPTR
22: MOV TABL,A
23: MOV A,R4
24: MOV DPTR,#TABELL2
25: MOVC A,@A+DPTR
26: MOV TABL+1,A
27: CLR P3.1
28: MOV TH0,TABL
29: MOV TL0,TABL+1
30: SETB TR0
31: RET
32: TABELH1 DB $FF,$FF,$FE,$FE,$FE,$FD,$FD,$FC,$FC,$FC
33: TABELH2 DB $FF,$38,$D4,$70,$0C,$A8,$44,$E0,$7C,$19
34: TABELL1 DB $FC,$FC,$FD,$FD,$FE,$FE,$FE,$FF,$FF,$FF
35: TABELL2 DB $19,$E0,$44,$A8,$0C,$70,$D4,$38,$9C,$FF
Penghitungan Kecepatan Putar Kipas
Untuk menghitung kecepatan dari motor maka digunakan rangkaian photo transistor. Prinsip dari photo transistor ini adalah mirip dengan transistor lainnya. Wujud dari rangkaian photo transistor ini dapat dilihat pada gambar 10:
Gambar 10
Rangkaian Photo Transistor Dan 74LS14
Prinsip dari rangkaian ini adalah :
- Jika antara transistor dan LED dihalangi maka transistor akan off sehingga output dari kolektor akan berlogic high
- Sebaliknya jika antara transistor dan LED tidak dihalangi maka transistor akan on sehingga outputnya akan berlogic low.
Dengan mengetahui prinsip dari photo transistor ini maka harus dibuat penghalang antara transistor dan LED, pada penghalang itu diberi lobang sedikit. Penghalang itu harus dibuat seporos dengan kipas dc tersebut. Sehingga ketika berputar output dari transistor akan mengalami high dan low. Agar output dari rangkaian ini menjadi lebih akurat maka ditambahkan schmitt trigger (74LS14). Program untuk menghitung kecepatan dapat dilihat sebagai berikut:
Potongan Program 3 : Menghitung kecepatan Putar Kipas
1:
2: JB P3.4,*
3: JNB P3.4,*
4: INC COUNT
5: SJMP
Tampilan-SED1200
Tampilan yang dipakai adalah LCD Epson SED1200. LCD ini digunakan untuk menampilkan kecepatan putaran dari kipas dalam satuan RPS (Rotation per second). LCD Epson SED1200 ini dilengkapi dengan 4 jalur data (DB0…DB3) yang dipakai untuk menampilkan kode ASCII maupun perintah untuk mengatur kerjamya SED1200. Kode ASCII maupun perintah tersebut semuanya merupakan kode 8 bit maka kode-kode itu dikirimkan dua kali, yang pertama dikirimkan adalah 4 bit yang bernilai besar (D4..D7). baru kemudian 4 bit sisanya(D0..D3). Selain dilengkapi dengan jalur data maka LCD Epson SED1200 ini dilengkapi dengan CS,WR, dan A0. A0 digunakan untuk membedakan data yang dikirimkan berupa perintah atau kode ASCII. Jika A0=0 maka data yang dikirimkan adalah perintah untuk mengatur kerja SED1200 sebaliknya jika A0=1 maka data yang dikirim adalah kode ASCII yang ingin ditampilkan.
· Sinyal CS digunakan untuk mengaktifkan proses pengiriman data, selama proses ini berlangsung CS diaktifkan pada level tegangan ‘0’
· Data yang dikirimkan ke SED1200 disiapkan di DB0..DB3, seperti yang telah dibicarakan dipecah menjadi 2 kali pengiriman yaitu pengiriman D4..D7 dan selanjutnya D0..D3.
· Sinyal WR dijadikan sebagai sinyal ’komando’, pengambilan data terjadi pada saat WR berubah dari ‘0’ menjadi ‘1’
Gambar 11
Hubungan SED1200 ke AT89C2051
Pada potongan program 4 ini akan ditunjukkan bagaimana mengendalikan SED1200.
· Subrutin KirimPerintah bekerja pada saat A0=’0’ berarti data yang dikirimkan AT89C2051 ke SED1200 berupa perintah untuk mengatur tata kerja SED1200. Subrutin KirimASCII bekerja pada saat A0=’1’ berarti data yang dikirimkan AT89C2051 sebagai kode ASCII yang akan ditampilkan.
· Selama proses pengiriman data CS diaktifkan pada level tegangan ‘0’.
· Data pada Akumulator A dikirimkan sebanyak dua kali yaitu 4 bit pertama A4..A7 dan 4 bit kedua A0..A3.
· Karena AT89C2051 tidak mempunyai sinyal ALE maka dibuat 16 pulsa clock yang dibutuhkan oleh SED1200
Potongan Program 4 : Mengatur Tampilan LCD
1: ;****DAFTAR PERINTAH PENGATUR SED1200*****
1: RESETSED1200 EQU %00010000
2: TAMPILAN1BARIS EQU %00010010
3: TAMPILAN2BARIS EQU %00010011
4: DISPLAYOFF EQU %00001100
5: DISPLAYON EQU %00001101
6: TANPACURSOR EQU %00001110
7: PAKAICURSOR EQU %00001111
8: GARISBAWAH EQU %00001000
9: BLOK EQU %00001001
10: TIDAKKEDIP EQU %00001010
11: BERKEDIP EQU %00001011
12: CURSORKEKANAN EQU %00000100
13: CURSORKEKIRI EQU %00000101
14: KEBARISSATU EQU %10000000
15: KEBARISDUA EQU %11000000
16:
17: ;****Konfigurasi PIN LCD****
18: WRITE BIT P1.4
19: A0 BIT P1.5
20: CS BIT P1.6
21: CLK BIT P1.7
22: LCD:
23: ACALL SIAPKANSED1200
24: ACALL HAPUSTAMPILAN
25: MOV A,#KEBARISSATU
26: ACALL KIRIMPERINTAH
27: MOV A,R1
28: MOV B,#100
29: DIV AB
30: ADD A,#$30
31: ACALL TAMPILKANHURUF
32: MOV A,B
33: MOV B,#10
34: DIV AB
35: ADD A,#$30
36: ACALL TAMPILKANHURUF
37: MOV A,B
38: ADD A,#$30
39: ACALL TAMPILKANHURUF
40: MOV A,#$52
41: ACALL TAMPILKANHURUF
42: MOV A,#$50
43: ACALL TAMPILKANHURUF
44: MOV A,#$53
45: ACALL TAMPILKANHURUF
46: MOV A,R4
47: ADD A,#$30
48: ACALL TAMPILKANHURUF
49: MOV A,#KEBARISDUA
50: ACALL KIRIMPERINTAH
51: RET
52:
53: ;****MEMPERSIAPKAN TATA KERJA SED1200*****
54: SIAPKANSED1200:
55: SETB Write ;LEVEL TEGANGAN
56: SETB CLK
57: CLR CS
58: MOV A,#RESETSED1200
59: ACALL KIRIMPERINTAH
60: MOV A,#TAMPILAN2BARIS
61: ACALL KIRIMPERINTAH
62: MOV A,#KEBARISSATU
63: ACALL KIRIMPERINTAH
64: MOV A,#GARISBAWAH
65: ACALL KIRIMPERINTAH
66: MOV A,#PAKAICURSOR
67: ACALL KIRIMPERINTAH
68: MOV A,#BERKEDIP
69: ACALL KIRIMPERINTAH
70: MOV A,#DISPLAYON
71: ACALL KIRIMPERINTAH
72: MOV A,#KEBARISDUA
73: ACALL KIRIMPERINTAH
74: MOV A,#GARISBAWAH
75: ACALL KIRIMPERINTAH
76: MOV A,#PAKAICURSOR
77: ACALL KIRIMPERINTAH
78: MOV A,#BERKEDIP
79: ACALL KIRIMPERINTAH
80: MOV A,#DISPLAYON
81: ACALL KIRIMPERINTAH
82: RET
83:
84: ; ***** Menghapus Tampilan SED1200 *****
85: HapusTampilan:
86: MOV A,#KeBarisSatu ;BARIS SATU DIHAPUS
87: ACALL HapusBaris
88: MOV A,#KEBARISDUA
89: ACALL HAPUSBARIS
90: HapusBaris:
91: ACALL KirimPerintah ;UNTUK PINDAH BARIS
92: MOV R7,#10 ;10 HURUF PER BARIS
93: HapusLagi:
94: MOV A,#' ' ;MENAMPILKAN SPASI
95: ACALL TAMPILKANHURUF ;TAMPILKAN SPASI
96: DJNZ R7,HapusLagi
97: RET
98:
99: ;***** Tampilkan String yang ada di Memori Program *****
100: TAMPILKANHURUF:
101: ACALL KIRIMASCII
102: RET
103:
104: ;*****SUBRUTIN SED1200****
105: KirimPerintah:
106: CLR A0 ; A0=0 : COMMAND MODE
107: SJMP OutByte
108: KirimASCII:
109: SETB A0 ; A0=1 : CHARACTER MODE
110: OutByte:
111: CLR CS
112: PUSH A ; SIMPAN DULU
113: SWAP A ; A0..A3 DAN A4..A7 TUKAR TEMPAT
114: ACALL OutNibble ; OUTPUTKAN A4..A7
115: POP A ; AMBIL KEMBALI SIMPANAN
116: ACALL OutNibble ; OUTPUTKAN A0..A3
117: SETB CS
118:
119: ;***** Membuat 16 pulsa CLK ****
120: MOV R6,#32
121: Buat16CLK:
122: CPL CLK ; CLK DIBALIK, '0'->'1' DAN '1'->'0'
123: DJNZ R6,Buat16CLK ; SEBANYAK 32 KALI
124: RET
125: OutNibble:
126: ANL A,#$0F ; HANYA A.0..A.3 YANG DIPAKAI
127: MOV R6,A ; SIMPAN DULU
128: MOV A,P1 ; AMBIL NILAI YANG SUDAH
129: ANL A,#$F0 ; PERTAHANKAN NILAI A.4..A.7
130: ORL A,R6 ; GABUNGKAN DENGAN SIMPANAN A.0..A.3
131: MOV P1,A ; SIAPKAN KE SED1200
132: CLR Write ; '0'-
133: SETB Write ; DATA DIAMBIL SED1200
134: RET
Materi Yang Dapat Di download :
· Skematik proyek 12VDC Motor Controller dan skematik penerima infra merah dalam format PDF.
2 comments:
mas apa program2 itu dah ada diROMnya ic AT89c2051
salam kenal mas...? kalau masih ada programnya...saya minta iy...?
o...ya mas..mau mau nnya...yang dipasang infra merah...port yang mana? untuk programnya kirim ke alamat saya: jack_adrian88@yahoo.com.
maksih bnyak mas....!
salam,
Post a Comment