You are on page 1of 32

MODUL THU PHT RF

Modul ny cn s dng 2 chip vi iu khin:

1 chip PIC 16F84 lm nhim v x l tay cm iu khin :c phm,


m ha tn hiu a ra mch pht RF.

1 chip PIC 16F84 lm nhim v x l tn hiu thu t mch thu RF: gii
m tn hiu ri truyn thng tin ni tip sang mch trung tm AVR.
CHNG I: GII THIU

1. Vi iu khin 16F84A:
S chn:

c tnh ni bt ca b vi x l:
+ Tc hot ng ln ti 20 MHz.
+ 68 byes Ram
+ 64 byes EEPROM
Kh nng ca b vi x l:
+ C th hot ng vi thch anh ni ln ti 8 MHz.
+ Truy nhp b nh trc tip hoc gin tip.
+ C 4 ngun ngt:
Ngt ngoi chn RB0/INT
Trn timer TMRO
PORTB <7:4> ngt bin i

Hon thnh ghi d liu EEPROM


+ Ngun khi ng li c m chng trnh bo v.
Kh nng c bit :
+ Lu tr d liu trong EEPROM trn 40 nm.
+ B nh Flash c th xa/ghi 10,000 ln.
+ B nh EEPROM c th xa/ghi 10,000,000 ln.
+ X l c ghi ti b nh chng trnh.
+ Ch ng ca ngun
S khi b vi diu khin PIC16F84A:

2 . Modul thu pht RF

y nhm khng i su vo thit k modul RF m s dng trc tip modul c


bn trn th trng. Cc modul ny c ch to vi kch thc nh gn d s dng

a. Modul pht:
Modul pht truyn d liu s cha c thnh phn m ha c
thit k vi 4 chn vo ra chnh l:
+ Chn 1:VCC cp ngun 1 chiu 5V.
+ Chn 2: Data in : chn ny a cc tn hiu 0, 1 vo y (mc
tn hiu chun ca TTL l 0 : 0 vn v 1 : 5 vn ).
Khi a tn hiu 0 vo chn data in th mch pht vn khng c g
xy ra, khi a tn hiu 1 vo chn data in th mch pht c kch hot v
pht sng in t.
C da xung lien tc 0, 1 vo chn data in khi mch s
ngng, pht, ngng, pht
Hnh di y m t vic sng in t c pht thnh chm
hnh sin ngt qung khi u data in c cc tn hiu 0 v 1

+ Chn 3: GND ni t.
+ Chn 4: ANT ni vi anten pht (Ngoi tr nhng module pht
c ch to c bit c anten t sn trn mch) th phi ni anten ngoi
vo m ny. Mt module pht RF phi c anten th mi c th pht sng
ra xa ngoi khng gian.

b. Modul thu
Modul thu cu to gm cc chn:
+ Chn 1:VCC ngun nui 5V.
+ Chn 2: Data d liu thu a ra.
+ Chn 3: GND ni t.
+ Chn 4: GND ni t.
+ Chn 5: ANT ni vi anten thu.
c im ca module thu: bnh thng khi cp ngun cho module thu th u ra data out
c mc 0, 1 ngu nhin khng xc nh. Mc 0 hoc 1 ny do yu t mi trng tc
ng. Bi th khi lp trnh gii m cho cc b thu th ta khng s dng ngt nhn
u vo m ta s dung phng php hi vng, loi tr. Khi dung ngt nhn tn hiu th
b nhy vo ngt lin tc v kt qu chng nhn c ci g.
y cng l im khc bit gia module thu RF v module thu IR (hng ngoi). tn hiu
t module thu IR l rt sch v th c th dng ngt nhn tn hiu t module IR cn RF
th khng

c im ca modul thu_pht:
+Tn s hot ng l: 315 MHz
+ Hot ng mc TTL nn c th kt ni trc tip vi cng vo/ra ca
vi iu khin.
+Cng sut tiu th thp
+ Khong cch truyn nhn ti a: 300m(khi c anten)
+ Tc truyn d liu c th t t 300bps ti 100kbps.
+ Di nhit hot ng: -35o ti 80o.

CHNG II : GII PHP IU KHIN

2.1 Gii thiu v m Manchester


a. gii thiu

Ti sao phi m ha/gii m? l cu hi t ra ca rt nhiu ngi khi bt u tip


xc vi truyn thng, nht li l truyn thng khng dy(wireless). Trong mt mc no
, a phn cc tn hiu truyn i qua sng v tuyn(RF: radio frequency) u phi c
m ha m bo tnh n nh ca thng tin. Mt my pht c m ha v my thu c
gii m s t b nhn sai d liu hoc cng c th sa sai d liu, kh b can nhiu hn so
vi khng m ha. C rt nhiu kiu m ha v gii m, c th m ha trc tip sng
mang nh m xung, m pha, m tn s, . . .hay cng c th m ha tn hiu (d liu)
truyn i.
C rt nhiu kiu thit k trong RF, c th nh sn xut lm b m ha/gii m trong
cc module n gin, bi tnh nng linh hot v vic ci mt b m ha/gii m mc nh
vo s i gi thnh ln cao (nhng li khng ng ngha ca ngi ng dng) v nh

vy vic ng dng pht trin cc sn phm s khng c y cao, tnh sng to s mt


i, i khi to ra s lng ph khng cn thit.
Trong mi trng t nhin, c rt nhiu yu t nh hng n tn hiu t my pht truyn
n my thu, my thu rt d b nhiu v ngoi mi trng khng gian c rt nhiu nhiu
sng in t, in tch, cc ngun nhiu pht sinh tc ng vo my thu v nhng d liu
ta thu c c th b sai v nhiu tc ng.
M ha Manchester l phng php m ha cc bits d liu s dng trong vic truyn
cc tn hiu dng s. y l phng php m ha cc bit d liu dng 0, 1 thnh cc
chui tn hiu c mc tn hiu thay i lin tc d bit d liu l cc dy 0 hoc 1 lin tip.
Do , u m ca m ha Manchester l d dng to ra s ng b gia bn pht v bn
thu.
b.ng dng
y l phng php c s dng rng ri trong lnh vc truyn thng v tuyn, hu
tuyn, Ethernet . . .
Trong lnh vc truyn thng iu khin s dng vi iu khin, m Manchester d hin
thc lp trnh cng vi kh nng pht hin li khi pht hin c s vi phm m.

2.2 Phng php m ha


M ha Manchester l mt phng php m ha cc bit d liu s dng trong
vic truyn cc tn hiu dng s. y l phng php m ha cc bit d liu 1,0

thnh cc chui tn hiu c mc tn hiu thay i lin tc d dy bit d liu l 1 hoc


0 lin tip. Do , u im ca m ha Manchester l d dng to s t ng b
gia bn pht v bn nhn.
Phng php m ha Manchester theo nguyn tc sau:
Mi bit s c khong thi gian truyn c nh.
D liu c xc nh vo thi khong gia ca bit.
Mc 1 biu din low to high, mc 0 biu din high to low hoc ngc li ty theo
qui c o m Manchester.

Biu din bng cng XOR

M ha Manchester l kt qu XOR gia d liu v xung clock.


Kh nng t ng b:

Cc setup point ng b.
V d m ha chui 00110111011 c kt qu: 1010010110010101100101

2.3 Mach thu pht RF


a. Mch pht RF
thng dng l loi module pht OOK(ON/OFF keyring) v ASK(iu bin) chuyn
cc tn hiu dng s 1 v 0 thnh trng thi c hoc khng c tn hiu mch thu.
ng ten pht lm tng kh nng pht xa cc tn hiu ra mi trng. c thit k hp l
tng ng vi tn s ang hot ng.
S nguyn l mach pht:

v cc

Y 1

R 4
R

J1

R 5
R

sw 9

C 2
33

R 3
R

sw 10

C R Y S TA L
gnd

R 2
R

sw 12

C 1
33

osc2

sw 11

osc1

U 1

2
1
C O N 2

s
d
s
s
s

R 1
R

w9
a ta
w10
w11
w12

17
18
1
2
3

osc1
osc2

16
15

R
R
R
R
R

R B 0 /IN
R B
R B
R B
R B
R B
O S C 1 /C L K IN
R B
O S C 2 /C L K O U T
R B

4
v cc

A
A
A
A
A

0
1
2
3
4 /TO C K I

T
1
2
3
4
5
6
7

6
7
8
9
10
11
12
13

s
s
s
s
s
s
s
s

w
w
w
w
w
w
w
w

1
2
3
4
5
6
7
8

MC LR

14

VD D
P IC 1 6 F 8 4

E1
A N TE N N A
J2

C 3
104

d a ta

1
2
3
4
C O N 4

J3
s
s
s
s
s
s
s
s
s
s
s
s

w
w
w
w
w
w
w
w
w
w
w
w

1
2
3
4
5
6
7
8
9
10
11
12

1
2
3
4
5
6
7
8
9
10
11
12
C O N 12

b. Mch thu RF
S dng thu li cc tn hiu t mch pht, bin cc trng thi pht hoc khng pht
thnh dng s 1 hoc 0.
Nguyn tc khi mch thu rnh khng nhn d liu t mch pht th mch vn c th thu
cc tn hiu nhiu t mi trng lm cho u ra ca n c nhng tn hiu 1, 0 khng xc
nh. Hoc trong qu trnh pht c mt chui di bit 1 hoc 0 lin tc.
loi b nhiu t mi trng pha mch pht cn pht mt chui tn hiu trong mt
khong thi gian(ty vo mch thu, khong 25ms), trc khi chnh thc pht d liu,
iu ny s m bo mch thu thu ng d liu t pha mch pht. y l bc cn thit
chnh li li(gain) cho b thu trc khi hot ng.
nhy ca mch thu ph thuc rt nhiu vo ngten

S nguyn l mch thu:


VC C
PVN 1

R 2
100k

4
17
18
1
2
3
15

d a ta

SW 1
S W T A C T -S P S T /S M
C 1

16

33p

5
Y 1

C 2

M
R
R
R
R
R
O

J4
C
A
A
A
A
A
S

LR
R B 0 /IN T
0
R B1
1
R B2
2
R B3
3
R B4
4 /T0 C K I
R B5
C 2 /C L K O
R B6
R B7

6
7
8
9
10
11
12
13

1
2
3
4
C O N 4

O S C 1 /C L K I
Vss

Vdd

VC C

14

P IC 1 6 F 8 4 A

C R Y S TA L

33p

R 1
100R

J1
2
1
C 3

D 12
VC C

J2

104

C O N 5

1
2
3
4
5

E1
A N TE N N A

d a ta

2.4 Lp trnh m ha gii m:


Code demo, sua lai tuy muc dich .
Code pht:
#include "D:\RF\trans_test84a.h"

#use delay(clock=4M)
// dinh nghia chan data

#define TX PIN_A1

C O N 2

LED
VC C

// dinh nghia dia chi mach thu

#define adr 0x02;

// dinh nghia cac phim bam

#DEFINE BUTTON1 input(PIN_B0)


#DEFINE BUTTON2 input(PIN_B1)
#DEFINE BUTTON3 input(PIN_B2)
#DEFINE BUTTON4 input(PIN_B3)
#DEFINE BUTTON5 input(PIN_B4)
#DEFINE BUTTON6 input(PIN_B5)
#DEFINE BUTTON7 input(PIN_B6)
#DEFINE BUTTON8 input(PIN_B7)
#DEFINE BUTTON9 input(PIN_A0)
#DEFINE BUTTON10 input(PIN_A2)
#DEFINE BUTTON11 input(PIN_A4)
#DEFINE BUTTON12 input(PIN_A3)

// khai bao bien

char buff[3],i;
INT b1=0;

INT b2=0;
INT b3=0;
INT b4=0;
INT b5=0;
INT b6=0;
INT b7=0;
INT b8=0;
INT b9=0;
INT b10=0;
INT b11=0;
INT b12=0;

// chuong trinh con

void send_data(char*buff)
{
char i,j;
delay_cycles(1);//same a NOP
//---------------chuoi init------------------for(i=1;i<=35;i++)
{
output_high(TX);
delay_us(416);
output_low(TX);
delay_us(416);

}
//--------------dong bo-----------------delay_us(416);
delay_us(416);
delay_us(416);
//---------------start bit--------------output_high(TX);
delay_us(416);
output_low(TX);
delay_us(416);
//--------------send data-------------for(j=0;j<3;j++)
{
for(i=0;i<8;i++)
{
if((buff[j] & 0x80)==0x80)
{
output_high(TX);
delay_us(416);
output_low(TX);
delay_us(416);
}
else
{
output_low(TX);

delay_us(416);
output_high(TX);
delay_us(416);
}
buff[j]=buff[j]<<1;
}
}
//--------------stop bit-------------------output_high(TX);
delay_us(416);
output_low(TX);
delay_us(416);
}

//----------------------------

void read_button1(char cmd)


{
if(BUTTON1==0)
{
do
{
buff[0]=adr;
buff[1]=cmd;
buff[2]=buff[0]^buff[1];

send_data(buff);
}
while(!BUTTON1);
delay_us(20);
}
}

void read_button2(char cmd)


{
if(BUTTON2==0)
{
do
{
buff[0]=adr;
buff[1]=cmd;
buff[2]=buff[0]^buff[1];
send_data(buff);
}
while(!BUTTON2);
delay_us(20);
}
}
void read_button3(char cmd)
{
if(BUTTON3==0)

{
do
{
buff[0]=adr;
buff[1]=cmd;
buff[2]=buff[0]^buff[1];
send_data(buff);
}
while(!BUTTON3);
delay_us(20);
}
}
void read_button4(char cmd)
{
if(BUTTON4==0)
{
do
{
buff[0]=adr;
buff[1]=cmd;
buff[2]=buff[0]^buff[1];
send_data(buff);
}
while(!BUTTON4);
delay_us(20);

}
}
void read_button5(char cmd)
{
if(BUTTON5==0)
{
do
{
buff[0]=adr;
buff[1]=cmd;
buff[2]=buff[0]^buff[1];
send_data(buff);
}
while(!BUTTON5);
delay_us(20);
}
}
void read_button6(char cmd)
{
if(BUTTON6==0)
{
do
{
buff[0]=adr;
buff[1]=cmd;

buff[2]=buff[0]^buff[1];
send_data(buff);
}
while(!BUTTON6);
delay_us(20);
}
}
void read_button7(char cmd)
{
if(BUTTON7==0)
{
do
{
buff[0]=adr;
buff[1]=cmd;
buff[2]=buff[0]^buff[1];
send_data(buff);
}
while(!BUTTON7);
delay_us(20);
}
}
void read_button8(char cmd)
{
if(BUTTON8==0)

{
do
{
buff[0]=adr;
buff[1]=cmd;
buff[2]=buff[0]^buff[1];
send_data(buff);
}
while(!BUTTON8);
delay_us(20);
}
}
void read_button9(char cmd)
{
if(BUTTON9==0)
{
do
{
buff[0]=adr;
buff[1]=cmd;
buff[2]=buff[0]^buff[1];
send_data(buff);
}
while(!BUTTON9);
delay_us(20);

}
}
void read_button10(char cmd)
{
if(BUTTON10==0)
{
do
{
buff[0]=adr;
buff[1]=cmd;
buff[2]=buff[0]^buff[1];
send_data(buff);
}
while(!BUTTON10);
delay_us(20);
}
}
void read_button11(char cmd)
{
if(BUTTON11==0)
{
do
{
buff[0]=adr;
buff[1]=cmd;

buff[2]=buff[0]^buff[1];
send_data(buff);
}
while(!BUTTON11);
delay_us(20);
}
}
void read_button12(char cmd)
{
if(BUTTON12==0)
{
do
{
buff[0]=adr;
buff[1]=cmd;
buff[2]=buff[0]^buff[1];
send_data(buff);
}
while(!BUTTON12);
delay_us(20);
}
}

void main()
{

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

// TODO: USER CODE!!

delay_us(5);
set_tris_b(0xff);

// cac chan cua PORTB deu la dau vao

set_tris_a(0xfd);

// PIN_A1(TX) la dau ra

output_low(TX);
port_b_pullups(true);
while(TRUE)
{
IF(BUTTON1==0)
{
if(b1==0)
{read_button1(0x01);b1=1;}
else
{read_button1(0x11);b1=0;}
}
IF(BUTTON2==0)

if(b2==0)
{read_button2(0x02);b2=1;}
else
{read_button2(0x12);b2=0;}
}
IF(BUTTON3==0)

{
if(b3==0)
{read_button3(0x03);b3=1;}
else
{read_button3(0x13);b3=0;}
}
IF(BUTTON4==0)

{
if(b4==0)
{read_button4(0x04);b4=1;}
else
{read_button4(0x14);b4=0;}
}
IF(BUTTON5==0)

{
if(b5==0)

{read_button5(0x05);b5=1;}
else
{read_button5(0x15);b5=0;}
}
IF(BUTTON6==0)

{
if(b6==0)
{read_button6(0x06);b6=1;}
else
{read_button6(0x16);b6=0;}
}
IF(BUTTON7==0)

{
if(b7==0)
{read_button7(0x07);b7=1;}
else
{read_button7(0x17);b7=0;}
}
IF(BUTTON8==0)

{
if(b8==0)
{read_button8(0x08);b8=1;}

else
{read_button8(0x18);b8=0;}
}
IF(BUTTON9==0)

{
if(b9==0)
{read_button9(0x09);b9=1;}
else
{read_button9(0x19);b9=0;}
}
IF(BUTTON10==0)

{
if(b10==0)
{read_button10(0x10);b10=1;}
else
{read_button10(0x20);b10=0;}
}
IF(BUTTON11==0)

{
if(b11==0)
{read_button11(0x21);b11=1;}
else

{read_button11(0x22);b11=0;}
}
IF(BUTTON12==0)

{
if(b12==0)
{read_button12(0x23);b12=1;}
else
{read_button12(0x24);b12=0;}
}
}

Code thu

#include "D:\RF\RECEIV 84A.h"

#use delay(clock=4M)
#define RX input(PIN_A0)
#define adr 0x02

char data[3];

short rx_bit;
short get_data(char*buff);

void main()
{

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

// TODO: USER CODE!!


set_tris_a(0x01);
set_tris_b(0);
output_a(0x00);
output_b(0x00);
port_b_pullups(TRUE);
while(TRUE)
{

while(get_data(data));
if((data[2])==(data[0]^data[1]))
{
if(data[0]==adr)
{

//if(data[1]==0x00)
{output_b(0x00);output_low(PIN_A2);output_low(PIN_A3);}
if(data[1]==0x01){output_high(PIN_B0);}
else if(data[1]==0x02){output_high(PIN_B1);}
else if(data[1]==0x03){output_high(PIN_B2);}
else if(data[1]==0x04){output_high(PIN_B3);}
else if(data[1]==0x05){output_high(PIN_B4);}
else if(data[1]==0x06){output_high(PIN_B5);}
else if(data[1]==0x07){output_high(PIN_B6);}
else if(data[1]==0x08){output_high(PIN_B7);}
else if(data[1]==0x09){output_high(PIN_A2);}
else if(data[1]==0x10){output_high(PIN_A3);}
else if(data[1]==0x11){output_low(PIN_B0);}
else if(data[1]==0x12){output_low(PIN_B1);}
else if(data[1]==0x13){output_low(PIN_B2);}
else if(data[1]==0x14){output_low(PIN_B3);}
else if(data[1]==0x15){output_low(PIN_B4);}
else if(data[1]==0x16){output_low(PIN_B5);}
else if(data[1]==0x17){output_low(PIN_B6);}
else if(data[1]==0x18){output_low(PIN_B7);}
else if(data[1]==0x19){output_low(PIN_A2);}
else if(data[1]==0x20){output_low(PIN_A3);}
else if(data[1]==0x21){output_b(0xff);output_a(0xff);}
else if(data[1]==0x22){output_b(0x00);output_a(0x00);}
else if(data[1]==0x23){output_b(0xff);output_a(0x00);}

else if(data[1]==0x24){output_b(0x00);output_a(0xff);}

}
}
short get_data(char*buff)
{
char i,j,time,count;
i=35;
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
// chuoi 35 xung INit
while(--i)
{
delay_cycles(1);
delay_cycles(1);
delay_cycles(1);
while(RX);
set_rtcc(0);
delay_cycles(3);
while(!RX);
time=get_rtcc();
if(time==255)return 1;

if((time>198)&&(time<218))
{
count++;
if((count>1)||(i==0))break;
}
}
if(i==0)return 1;

// bit start
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);
time=0;
while(!((time>=94)&&(time<=114)))
{
delay_cycles(3);
while(RX);
set_rtcc(0);
delay_cycles(4);
while(!RX);
time=get_rtcc();
}

while(RX);
delay_us(624);

// nhan 3 byte data

for(j=0;j<3;j++)
{
i=8;
buff[j]=0;
while(i--)
{
buff[j]=buff[j]<<1;
rx_bit=RX;
buff[j]=buff[j]|rx_bit;
if(rx_bit==0)
while(!RX);
else
while(RX);
delay_us(624);
}
}
if(rx_bit==0)
if(!RX)return 1 ;
else
if(!RX)return 1;
return 0;
}

You might also like