Pengetahuan dasar pemrograman remote sony dan Contoh kode Codevision

Pengetahuan dasar pemrograman remote sony dengan codevision

Rangkaian 

sensor TV type TSOP 17xx

tsop17

senor tv type TSOP 22xx,24xx, 44xx, 48xx

tsop23

Output Ir sensor atau sensor TV dihubungkan ke pin interupsi AVR dalam hal ini pin INT0

sony

contoh sinyal beberapa tombol

sinyaltombolir

Penjelasan Protokol remote sony

seperti tampak pada gambar diatas sinyal remote  terdiri dari  3 bagian

1. pulsa start  dengan panjang pulsa /periode 2,4 ms (0.0024 detik)

2. pulsa command terdiri dari 7 bit    dimulai dgn  bit LSB.  periode high bit 0 = 600us (0,0006s) dan bit 1=1,2 ms

3. pulsa address/alamat terdiri dari 5 bit  ,  kita menggunakan remote TV,  alamat untuk TV adalah 1  (00001)

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

Panjang pulsa dan jumlah counting yg terhitung di TCNT0

clocktimer

perbedaan panjang pulsa high start, bit 0 dan bit 1 akan menghasilkan nilai counter di TCNT0 yg berbeda pula, jadi nilai TCNT0 bisa digunakan untuk membedakan pulsa start ,pulsa bit 0 dan pulsa bit 1.

Cara menghitung nilai counter pulsa

Setiap perubahan low ke high pada pin  INT0 pada AVR akan menyebabkan  interupsi ->kemudian timer dihidupkan -> TCNT0 akan mulai berhitung->  ketika pulsa menjadi low, timer dimatikan. nilai TCNT0 mewakili panjang pulsa.

/*****************************************************
Chip type : ATmega8535
Clock frequency : 11.059200 MHz

*****************************************************/

#include mega8535.h      // jgn lupa  beri tanda kurung
#include delay.h
#include stdlib.h
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include lcd.h

#define INT0 6

char lcd[25] ;
unsigned int data_ir;
unsigned char cnt_ir;
unsigned char flag_ir_start;
unsigned char flag_ir_ok;

void start_timer0()
{TCCR0=0x4;}
void stop_timer0()
{TCCR0=0x0;}

void enableint0()
{GICR|=(1<<INT0);}
void disableint0()
{GICR&=~(1<<INT0);} // External Interrupt 0 service routine

interrupt [EXT_INT0]void ext_int0_isr(void)
{
TCNT0 = 0;
start_timer0();
back:
if(PIND.2) goto back;    // jika pulsa masih high berputar disini
stop_timer0();
if(cnt_ir==0) {
if((TCNT0>90)&&(TCNT0<120)) // jika nilai TCNT0 antara 90 s/d 120 maka pulsa start
{
flag_ir_start=1;
cnt_ir++; }
}

if((flag_ir_start== 1)&&(cnt_ir>0))
{
cnt_ir–; //0
/ /kalau nilai caunter lebih dari 25 (untuk amannya lebihkan jadi 30) maka bit =1
if(TCNT0 > 30)
{
data_ir|=(1<<cnt_ir);
}
else                                  // kalau couter kurang dari 25 maka bit = 0
{
data_ir&=~(1<<cnt_ir);
}

cnt_ir = cnt_ir + 2;

if (cnt_ir > 11)
{
data_ir=data_ir>>1;
flag_ir_start=0;
flag_ir_ok=1;
cnt_ir = 0;
}
}
}

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x00;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
PORTA=0x00;
DDRA=0x00;

// Port D initialization
PORTD=0x06;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 10.800 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x04;
TCNT0=0x00;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Rising Edge

GICR|=0x40;
MCUCR=0x03;
MCUCSR=0x00;
GIFR=0x40;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
delay_ms(1000);

enableint0();
cnt_ir=0;
// LCD module initialization
lcd_init(16);

// Global enable interrupts
#asm(“sei”)

while (1)
{
// Place your code here
if(flag_ir_ok==1)
{

flag_ir_ok=0;
disableint0();
itoa(data_ir , lcd);
lcd_puts(lcd);

flag_ir_ok=0;
enableint0();
}
delay_ms(1000);

};
}

tabel sinyal remote yg diterima(command & addres) , tombol ditekan  dan data_ir antara lain

101010 10000 tombol power nilai data_ir= 1001 0101 (149)

000000 10000 tombol 1 nilai data_ir= 1000 0000 (128)
100000 10000 tombol 2 nilai data_ir= 1000 0001 (129)
010000 10000 tombol 3 nilai data_ir= 1000 0010 (130)
110000 10000 tombol 4 nilai data_ir= 1000 0011 (131)
001000 10000 tombol 5 nilai data_ir= 1000 0100 (132)
101000 10000 tombol 6 nilai data_ir= 1000 0101 (133)
011000 10000 tombol 7 nilai data_ir= 1000 0110 (134)
111000 10000 tombol 8 nilai data_ir= 1000 0111 (135)
000100 10000 tombol 9 nilai data_ir= 1000 1000 (136)
100100 10000 tombol 0 nilai data_ir= 1000 1001 (137)

referensi:

https://learn.adafruit.com/ir-sensor/ir-remote-signals

https://yusisukmalia.wordpress.com/2012/12/07/remote-yk-002-nec-protocol/

http://www.micropik.com/PDF/tsop17xx.pdf

http://www.vishay.com/docs/82459/tsop48.pdf

Advertisements

About pccontrol

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

Posted on 16/05/2015, in AVR, Daftar isi and tagged . Bookmark the permalink. 2 Comments.

  1. mas, ada source code lengkapnya ? kode di atas saya coba error…

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: