Senin, 09 Juli 2007

Aplikasi Remote Control - 2


Lanjutan dari sebelumnya ...


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.

Format 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).



Gambar 7
Pulsa Remote Control Sony

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).



Gambar 8
Format Sinyal Remote Control Sony

Untuk membaca berapa besarnya header, logika1 dan logika 0, maka digunakan timer untuk menghitungnya jadi yang dibaca high dan lownya.

Potongan Program 1: Program Untuk Membaca Remote

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 ADA CARRY,BERARTI SONY

9: SETB EX0 ;ADA CARRY AKTIFKAN EXTERNAL INTERUPT

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 Darlington. Transistor yang dipakai adalah transistor jenis NPN tipe BC 547 yang memiliki faktor penguatan dc (hfe) sebesar 125 dan mampu mengalirkan sampai arus 100 mA DC. Rangkaian untuk menjalankan transistor dapat dilihat pada gambar 9:


Gambar 9
Rangkaian Untuk Menjalankan Motor

Untuk mengatur kecepatan kipas digunakan teknik PWM( Pulse Width Modulation), yakni mengatur besarnya dutycycle, frekuensinya tetap tetapi lebar pulsa high dan lownya dapat diatur. Untuk itu digunakan timer untuk mengatur pulsa high dan pulsa lownya. Jadi dutycyclenya akan dimulai dari 20%,30%,40%,50%,60%,70%,80%,90%. Semakin besar dutycyclenya maka semakin cepat pula putaran dari motor. Berikut ini merupakan potongan program untuk menjalankan kipas dengan prinsip PWM:

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: LOOP:

2: JB P3.4,*

3: JNB P3.4,*

4: INC COUNT

5: SJMP LOOP

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 BAKU

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 ADA DI P1

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'-KAN DULU KAKI WR SEED1200

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.

Oleh Welly W
◄ Newer Post Older Post ►