rfm12b langaton lÄhetin/vastaanotin …hasseb.fi/reports/rfm12b langaton...
TRANSCRIPT
3.1.2010
RAPORTTI
RFM12B LANGATON LÄHETIN/VASTAANOTIN –MODULI
SULAUTETUISSA JÄRJESTELMISSÄ
0278116 Hans Baumgartner
1
SISÄLTÖ
KÄYTETYT MERKINNÄT JA LYHENTEET ................................................................... 2
1. JOHDANTO .................................................................................................................. 3
2. LYHYEN KANTAMAN LANGATON TIEDONSIIRTO ........................................... 4
2.1 Langattomat tiedonsiirtotekniikat .......................................................................... 4
2.2 Tiedonsiirtonopeudet ............................................................................................. 5
2.3 Tekniikoiden kustannukset .................................................................................... 5
2.4 Käyttökohteet ......................................................................................................... 6
3. RFM12B ........................................................................................................................ 7
3.1 Modulaatio ............................................................................................................. 8
3.2 Lähetysteho ............................................................................................................ 8
3.3 Ajurit ...................................................................................................................... 9
3.4 Tietoliikenneprotokolla .......................................................................................... 9
4. Testaus ......................................................................................................................... 11
4.1 Lähetin ................................................................................................................. 11
4.2 Vastaanotin .......................................................................................................... 12
5. YHTEENVETO ........................................................................................................... 14
LÄHTEET ........................................................................................................................... 15
2
KÄYTETYT MERKINNÄT JA LYHENTEET
Fc kantoaaltotaajuus
FSK Frequency Shift Keying
IEEE Institute of Electrical and Electronics Engineers
IrDA Infrared Data Association
ISM Industrial, Scientific and Medical
ISP In-System Programming
PC Personal Computer
RF Radio Frequency
WLAN Wireless Local Area Network
3
1. JOHDANTO
Langattoman tiedonsiirron avulla voidaan kasvattaa sulautettujen järjestelmien
sovelluskohteiden määrää sekä laajennettavuutta. Lyhyen kantaman langattomalla
tiedonsiirrolla voidaan yhdistää eri laitteita toisiinsa sekä lähettää langattomasti
esimerkiksi mittausdataa. Seminaarityössä on tarkasteltu langattoman lyhyen kantaman
tiedonsiirron käyttökohteita ja toimintaa yleisesti sekä perehdytty tarkemmin Hope
Microelectronics Co., Ltd. RFM12B -moduulin ominaisuuksiin. Kaksi RFM12B-moduulia
on lisäksi implementoitu AVR-mikrokontrollereiden avulla testiympäristöön.
4
2. LYHYEN KANTAMAN LANGATON TIEDONSIIRTO
Lyhyen kantaman langattoman tiedonsiirron avulla voidaan yhdistää laitteita ja
mittausantureita toisiinsa. Käytettävät moduulit toimivat tavallisesti lisenssivapailla
kantoaaltotaajuuksilla, alhaisilla lähetystehoilla, joten radiolaitteiden käyttö ei vaadi
erityisiä lupia. Usein moduulit käyttävät hajaspektritekniikoita, kuten taajuushyppelyä,
jolloin todennäköisyys, että kaksi laitetta toimivat samaan aikaan samalla taajuudella on
pieni. Lisäksi, koska lähetystehot ovat pieniä, eivät vastaanottimet häiriinny mahdollisesti
muista samalla taajuudella toimivista vastaavista laitteista, mikäli laitteiden välinen
etäisyys on riittävä.
Mikäli samanlaisia laitteita joudutaan käyttämään samalla alueella, voidaan laitteiden
kantoaaltotaajuutta muuttaa tai käyttää protokollaa, joka erottelee datavirrasta kullekin
laitteelle kuuluvan datan. Lisäksi osa valmiista protokollista määrittelee, kuinka samalla
alueella sijaitsevat laitteet kommunikoivat keskenään [1].
2.1 Langattomat tiedonsiirtotekniikat
Lyhyen kantaman langattomia RF-tekniikoita (Radio Frequency) on useita eri
käyttötarkoituksiin. Esimerkiksi kodinelektroniikassa yleisesti käytössä olevia tekniikoita
ovat WLAN (Wireless Local Area Network) ja Bluetooth. Myös IrDA (Infrared Data
Association) eli infrapuna voidaan laskea kuuluvaksi lyhyen kantaman langattomaksi
tekniikaksi. Radiotaajuuksiin perustuva tiedonsiirto tosin on syrjäyttänyt monissa laitteissa
infrapunaan perustuvan linkin. RF-taajuudet eivät vaadi näköyhteyttä, jolloin niiden
luotettavuus on parempi. Infrapunan näköyhteyteen perustuva linkki tosin suojaa
tehokkaasti salakuuntelulta ja samalla taajuudella toimivat laitteet eivät häiritse toisiaan.
Myös teollisuudessa käytetään kodinelektroniikasta tuttuja tekniikoita WLAN:a,
Bluetooth:a ja infrapunaa. Lisäksi teollisuuden kenttälaitteissa käytetään erityisesti
teollisuusympäristöön suunniteltuja tekniikoita kuten ZigBee, Wireless Profibus ja
Wireless HART sekä standardoimattomia radiopiirejä [2].
5
Standardoimattomalla radiopiirillä tarkoitetaan piiriä, jonka yhteensopivuus on rajoittunut
jopa laitevalmistajatasolle [2]. Lähemmän tarkastelun kohteena oleva RFM12B-moduuli
voidaan laskea kuuluvaksi standardoimattomiin piireihin. Kyseinen piiri ei oletusarvoisesti
tue mitään kaupallisesti saatavilla olevaa protokollaa, joten kyseinen moduuli pystyy
keskustelemaan vain saman valmistajan moduuleiden kanssa.
2.2 Tiedonsiirtonopeudet
Kodinelektroniikassa käytettävät protokollat kykenevät parhaimmillaan jopa 54 Mbit/s
nopeuksin (WLAN) [3]. Tavallisesti teollisuudessa siirrettävä data on kuitenkin hitaasti
päivittyvää ohjaus- tai oloarvotietoa, joka ei vaadi suurta tiedonsiirtonopeutta. Suurempia
nopeuksia tarvitaan vain erityiskohteissa kuten videokuvan siirrossa tai erittäin nopeassa
säädössä.
Muiden langattomien tekniikoiden nopeudet jäävätkin huomattavasti WLAN:n nopeudesta.
Esimerkiksi Wireless HART kykenee 250 kbit/s nopeuteen ja Bluetooth lyhytaikaisesti
parhaimmillaan 3 Mbit/s nopeuteen. Lähemmin tarkasteltava RFM12B kykenee ilman
ulkoisia komponentteja tiedonsiirtonopeuteen 115.2 kbit/s, joka riittää moniin
yksinkertaisiin sovelluksiin.
Tiedonsiirtonopeuksia tarkasteltaessa on hyvä ottaa huomioon, että useimmiten
tarkoitetaan fyysisen kerroksen bittinopeutta, joka sisältää usein huomattavankin määrän
otsikkotietoja. Hyötydatan siirtonopeus on siis fyysisen kerroksen siirtonopeutta pienempi.
2.3 Tekniikoiden kustannukset
Radiomoduuleiden hinnat vaihtelevat huomattavasti. Yleisesti käytössä, niin
kodinelektroniikassa, kuin teollisuudessakin olevia WLAN-laitteita on hyvin saatavilla.
Tekniikan monimutkaisuus rajoittaa kuitenkin WLAN-tekniikan käytön valmiisiin
laitteisiin. WLAN:n vaatima TCP/IP-protokollapino on erittäin raskas eikä tavallisesti
mahdu yksinkertaiseen mikrokontrolleriin. Osa WLAN-moduleista hoitaa
6
verkkoprotokollat rautatasolla tai omalla prosessorillaan, jolloin protokollapinon
implementoinnista ei tarvitse huolehtia.
Muista langattomista tekniikoista esimerkiksi Bluetooth-moduulit maksava noin 10 euroa
(lynx-dev.com) ja ZigBee 15 euroa (sparkfun.com). Lähemmin tarkasteltava RFM12B-
moduuli maksaa alle 5 euroa (lynx-dev.com).
2.4 Käyttökohteet
Langattomat radiomoduulit laajentavat huomattavasti sulautettujen järjestelmien
käyttökohteita ja monipuolisuutta. Yksinkertaisia esimerkkejä langattomien lähettimien
käytöstä ovat esimerkiksi langaton lämpömittari tai periaatteessa mikä tahansa anturi,
johon on liitetty langaton lähetin. Langattomuus pienentää anturin asennuskustannuksia,
kun kaapeleita ei tarvita. Lisäksi joissain sovelluksissa langattomuus on ainoa tapa
toteuttaa mittaus, sillä mittari voi olla liikkuva tai kaapeleita on mahdotonta jälkikäteen
asentaa esimerkiksi suljettuun säiliöön.
Tarkasteltava RFM12B on suunniteltu tulevan langattomaksi ohjausyksiköksi
satamanosturin etäisyysmittariin. Laitteessa ultraäänitoimiset etäisyysmittarit kirjoittavat
nosturin ja nostettavan kontin välisen etäisyyden kohdetta kuvaavan videokameran kuvan
päälle. Kuva lähetetään langattomasti ohjauskoppiin, josta voidaan langattomasti ohjata
mm. etäisyysanturin offset-arvoa, hälytyksiä ja näkyykö etäisyys ylipäänsä näytöllä.
Kyseisessä kohteessa käytetään langatonta tekniikkaa, sillä nosturille tulee ainoastaan
sähköt. Tarvittavalle video- ja ohjaussignaalille olisi ilman langatonta tekniikkaa pitänyt
vetää omat johdotukset, joka olisi ollut erittäin kallista, sillä nosturin liikerata on yli 20
metriä ja kaapeleilta vaaditaan suurta rasituksen- ja säänkestävyyttä.
7
3. RFM12B
RFM12B on edullinen, ISM-taajuusalueella (Industrial, Scientific and Medical) toimiva
lähetin-vastaanotin. Käytettävät taajuusalueet ovat 433, 868 ja 915 MHz:a. Käytettävä
taajuusalue voidaan valita täysin ohjelmallisesti. Moduulin tärkeimmät ominaisuudet on
listattu alla.
- edullinen, hinta alle 5 € yksittäni ostettuna
- ei vaadi ulkoisia komponentteja, antennin lisäksi
- datanopeus jopa 256 kbit/s, sisäisellä demodulaattorilla 115.2 kbit/s
- automaattinen antennin viritys
- SPI-väylä
- 2.2 – 3.8 V toimintajännite
- matala tehonkulutus, enintään 26 mA lähetysmoodissa, 15 mA
vastaanottomoodissa
- standby-virta alle 0.3 µA
- tukee pientä pakettikokoa, 3 tavua
Kuva 1 Lähetinyksikkö. RFM21B-moduuli merkitty punaisella ympyrällä.
8
3.1 Modulaatio
RFM12B moduloi lähetettävän signaalin FSK-modulaatiolla (Frequency Shift Keying).
FSK on taajuusmodulaatiotekniikka, jossa digitaalisen signaalin bitit esitetään eri
kantoaaltotaajuuksina. Kuvassa 2 on esitetty FSK-modulaation periaate.
Kuva 2 FSK-modulaation periaate [4]
Kuvasta 2 voidaan havaita 0- ja 1-bittejä kuvattavan eri kantoaaltotaajuuksilla. RFM12B-
modulilla voidaan ohjelmallisesti määrittää kilohertseinä kyseinen taajuusdeviaatio välillä
15 – 240 kHz:ä. Deviaation kasvattaminen tekee bittien havaitsemisen helpommaksi, mutta
kasvattaa tarvittavaa kaistanleveyttä. Deviaation suuruuden lisäksi voidaan valita
deviaation polariteetti eli kuvaako korkeampi taajuus ykköstä vai nollaa.
3.2 Lähetysteho
Lähetysteho voidaan valita ohjelmallisesti välillä -21 – 0 dBm. Yksikkö dBm kuvaa
lähetystehoa suhteessa 1 mW lähetystehoon. 0 dBm on absoluuttisena tehona 1 mW ja -21
dBm 0.008 mW.
9
Moduulin tehoa testattiin Lappeenrannan Pesuparkki Oy:ssa, jonka toimitilat ovat metalli-
ja betoniseinäisiä. 0 dBm lähetysteholla kiinteistön sisällä olevan lähettimen lähettämä
datasignaali pystyttiin vastaanottamaan virheettömästi koko kiinteistön alueella. Lähetin
toimii siis erinomaisesti myös sisätiloissa teollisuusympäristössä ainakin kymmeniä
metrejä.
Saatavilla on myös tehokkaampia 500 mW lähetin-vastaanottimia. Kyseisille moduuleille
luvataan jopa 3 km kantosädettä. Viestintävirasto tosin rajoittaa ISM-taajuuksien
lähetystehoja huomattavasti, joten tehokkaiden lähettimien käyttö jää henkilökohtaisen
harkinnan ja riskinottokyvyn varaan. [5]
3.3 Ajurit
RFM12B-moduulille on saatavilla ilmaiset ajurikoodit suoraan AVR- ja PIC-
mikrokontrollereille. Hyvin kommentoitu esimerkkikoodi on myös helppo portata muille
prosessoreille, sillä moduulin vaatimat alustukset ovat selkeitä ja suoraviivaisia. Valmiit
esimerkkikoodit ovat yhdessä .c-lähdekooditiedostossa, joten koodien käyttö sellaisenaan
ajureina omiin sovelluksiin ei onnistu. Ajurikoodit olisi hyvä lajitella omiin .h- ja .c-
tiedostoihinsa, jolloin koodien uudelleenkäyttö on huomattavasti joustavampaa.
Vastaanottimen esimerkkikoodi on toteutettu pollaavana, joskin moduuli tukee myös
keskeytykseen perustuvaa vastaanottoa. Kyseisistä puutteista johtuen esimerkkiajurit eivät
ole täysin valmiita, vaan vaativat omaa työtä. Seminaarityöhön kuuluvassa
implementoinnissa onkin hieman siistitty esimerkkiajureita ja siirretty lähetinpään koodit
omiin .h- ja .c-tiedostoihinsa. Vastaanotin tosin on edelleen toteutettu pollaavana, eikä
keskeytykseen perustuvana.
3.4 Tietoliikenneprotokolla
Testiympäristössä käytetty moduuli ei sisältänyt minkäänlaista tietoliikenneprotokollaa.
Lähetetty paketti sisältää ainoastaan siirrettävät tavut eikä lainkaan otsikkotietoa.
Yksinkertaisessa sovelluksessa ei protokollaa välttämättä tarvita, mutta esimerkiksi
jonkinlainen virheentarkistus on hyvä olla aina.
10
Mikäli useampi moduuleja halutaan käyttää samalla alueella, jolloin moduulit kuulevat
toistensa liikenteen on jonkinlainen tietoliikenneprotokolla välttämätön. Jokaiselle
laitteelle voidaan asettaa esimerkiksi osoite, jonka perusteella päätetään tarvitseeko
vastaanotettuun dataan reagoida. IEEE määrittelee myös avoimia tietoliikennestandardeja
joita voidaan käyttää tietoliikenteen suunnittelussa.
RFM12B-moduulilla voidaan myös ohjelmallisesti muuttaa kantoaaltotaajuutta
kantoaaltotaajuuden ympäristössä. Esimerkiksi 868 MHz kantoaaltotaajuutta voidaan
säätää yhtälön (1) mukaan
Fc = 860 + F*0.005Mhz, (1)
jossa 36≤F≤3903
Yhtälön (1) parametri F määritellään 12-bittisenä kokonaislukuna RFM12B-moduulin
rekisterissä 0xA6.
Muuttamalla kantoaaltotaajuutta voivat samalla kuuluvuusalueella olevat laitteet toimia
toisistaan häiriintymättä. Esimerkiksi 868 MHz keskikantoaaltotaajuus voi vaihdella välillä
860.18 - 879.515 MHz. Mikäli kaistanleveys on 500 kHz, voi samalla alueella
kommunikoida 40 eri laitetta.
Laitteet voivat toimia myös samalla kantoaaltotaajuudella eri aikaikkunoissa, mutta tällöin
laitteet täytyy suunnitella toimimaan yhdessä.
11
4. TESTAUS
RFM12B-moduuleita testattiin AVR-mikrokontrollereiden ja PC-tietokoneen avulla.
Lähetinyksikkö muodostui RF-modulista sekä Arduino kehitysalusta. Vastaanottimena
toimi STK500-kehitysalusta sekä PC-tietokone.
4.1 Lähetin
Lähetin muodostuu Arduino-kehitysympäristöstä sekä RFM12B-moduulista, kuva 1.
Arduino käyttää ATmega328p-mikroprosessoria ja sitä voidaan ohjelmoida, joko
ohjelmointikaapelin avulla tai Arduinon omalla ohjelmointikielellä usb-väylällä.
Testauksessa käytettiin ensimmäistä vaihtoehtoa ja käytettynä ohjelmointilaitteena oli
AVR ISP-mk2.
Lähettimen koodi on esitetty alla.
#include <avr/io.h>
#include "rfm12b.h"
int main(void) {
volatile unsigned int i,j;
for(i=0;i<1000;i++)for(j=0;j<123;j++);
rfm12b_portInit();
rfm12b_init();
rfm12b_writeCmd(0x0000);
rfm12b_send(0xAA); // PREAMBLE
rfm12b_send(0xAA);
rfm12b_send(0xAA);
rfm12b_send(0x2D); // SYNC
rfm12b_send(0xD4);
for(i=0; i<1; i++) {
rfm12b_send(0x30+i);
}
rfm12b_send(0xAA); // DUMMY BYTES
12
rfm12b_send(0xAA);
rfm12b_send(0xAA);
return 0;
}
Koodissa alustetaan RF-modulin portit ja itse moduli. Alustuksessa rfm12b_init()
määritellään mm. käytettävä kantoaaltotaajuus, lähetysteho sekä lähetysnopeus. Ennen
varsinaisen hyötydatan lähetystä lähetetään kolmen tavun preamble
rfm12b_send(0xAA) sekä sykronointitavut 0x2D ja 0xD4. Näiden tavujen avulla
vastaanotin huomaan, että dataa on tulossa ja valmistautuu vastaanottamaan dataa.
Dataosio koostuu 16 tavusta, jotka ovat ascii-merkit 0x30-0x46. Lopussa olevat 0xAA
tavut eivät ole välttämättömiä.
Lähetin lähettää uuden paketin aina käynnistyttyään ja lopettaa toimintansa tämän jälkeen.
Uusi paketti voidaan lähettää painamalla Arduino-kehitysalustan reset-painiketta.
4.2 Vastaanotin
Vastaanotin muodostuu STK500-kehitysalustasta sekä PC-tietokoneesta. STK500-
kehitysalustassa oleva ATtiny2313-mikroprosessori on liitetty RFM12B-moduuliin, kuva
3.
Kuva 3 Vastaanotin
13
Mikrokontrolleri lähettää vastaanotetut tavut sarjaportin välityksellä PC-tietokoneelle.
Havaitessaan tulevaa liikennettä sarjaportissa, PC-tietokoneen sovellus kirjoittaa näytölle
tekstin ”hello, world” sekä soittaa äänimerkin, kuva 4.
Kuva 4 Moduulin toimintaa havainnollistava Windows-ohjelma
Kuvan 4 sovellus on toteutettu Microsoft Visual Studio 2008 –ohjelmistolla, C++/CLI-
ohjelmointikielellä (Common Language Infrastructure). Sovellus kirjoittaa tekstin näytölle
vastaanotettuaan sarjaportista minkä tahansa tavun.
Vastaanottavan AVR-mikrokontrollerin koodi on kopioitu lähes suoraan
esimerkkikoodeista, joten siinä ei ole erillisiä ajuritiedostoja, vaan kaikki toiminnallisuus
on toteutettu yhdessä .c-tiedostossa. Koodi on melko pitkä ja sekava, joten se on raportin
liitteenä. Lisäksi mikrokontrollerin ohjelma on pollaava, joten se soveltuu melko huonosti
mihinkään todelliseen käyttöön.
14
5. YHTEENVETO
Seminaarityössä perehdyttiin Hope Microelectronics RFM12B -langattomaan
tiedonsiirtomoduuliin. Raportissa käytiin läpi yleisesti langatonta tiedonsiirtoa
sulautetuissa järjestelmissä ja testattiin käytännön laitteessa tutkittua RFM12B-moduulia.
Raportissa on selostettu RFM12B-moduulin ominaisuuksia ja toimintaa. Lisäksi raportissa
on esitetty moduulin liittäminen AVR-mikrokontrolleriin sekä liitteenä tarvittavat
ohjelmistokoodit.
15
LÄHTEET
[1] ZigBee, Wikipedia, viitattu 16.11.2009
[2] Kaupallisten lyhyen kantaman radiotekniikoiden kartoitus ja soveltuvuus
analyysi metallisorvin ohjauksessa käytettävään point-to-point yhteyteen,
kandidaatintyö, Niskanen, V., 2009
[3] WLAN, Wikipedia, viitattu 16.11.2009
[4] FSK, Wikipedia, viitattu 16.11.2009
[5] Määräys 15 (15 Z/2009 M), Viestintävirasto,
http://www.ficora.fi/attachments/suomiry/5l1x1FIIk/Viestintavirasto15Z2009
M.pdf,
viitattu 3.1.2010
Lisätietoa:
RFM12B datalehti, Hope Microelectronics Co. Ltd.
RFM12B programming guide, Hope Microelectronics Co. Ltd.
RFM12B and AVR – quick start,
http://zenburn.net/~goroux/rfm12b/rfm12b_and_avr%20quick_start.pdf,
16.11.2009
LIITE
#define SCK 7 // SPI clock
#define SDO 5 // SPI Data output (RFM12B side)
#define SDI 6 // SPI Data input (RFM12B side)
#define CS 4 // SPI SS (chip select)
#define NIRQ 2 // (PORTD)
#define HI(x) PORTB |= (1<<(x))
#define LO(x) PORTB &= ~(1<<(x))
#define WAIT_NIRQ_LOW() while(PIND&(1<<NIRQ))
#define LED 6
#define LED_OFF() PORTD &= ~(1<<LED)
#define LED_ON() PORTD |= (1<<LED)
#define BAUDRATE 25 // 19200 at 8MHz
#include <avr/io.h>
void rsInit(unsigned char baud) {
UBRRL = baud;
UCSRC = (1<<UCSZ0) | (1<<UCSZ1); // 8N1
UCSRB = (1<<RXEN) | (1<<TXEN); // enable tx and rx
}
void rsSend(unsigned char data) {
while( !(UCSRA & (1<<UDRE)));
UDR = data;
}
unsigned char rsRecv() {
while( !(UCSRA & (1<<RXC)));
return UDR;
}
void portInit() {
HI(CS);
HI(SDI);
LO(SCK);
DDRB = (1<<CS) | (1<<SDI) | (1<<SCK);
DDRD = (1<<LED);
}
unsigned int writeCmd(unsigned int cmd) {
unsigned char i;
unsigned int recv;
recv = 0;
LO(SCK);
LO(CS);
for(i=0; i<16; i++) {
if(cmd&0x8000) {
HI(SDI);
}
else {
LO(SDI);
}
HI(SCK);
recv<<=1;
if( PINB&(1<<SDO) ) {
recv|=0x0001;
}
LO(SCK);
cmd<<=1;
}
HI(CS);
return recv;
}
void FIFOReset() {
writeCmd(0xCA81);
writeCmd(0xCA83);
}
void waitForData() {
unsigned int status;
while(1) {
status = writeCmd(0x0000);
if ( (status&0x8000) ) {
return;
}
}
}
void rfInit() {
writeCmd(0x80E7); //EL,EF,868band,12.0pF
writeCmd(0x8299); //er,!ebb,ET,ES,EX,!eb,!ew,DC
writeCmd(0xA640); //freq select
writeCmd(0xC647); //4.8kbps
writeCmd(0x94A0); //VDI,FAST,134kHz,0dBm,-103dBm
writeCmd(0xC2AC); //AL,!ml,DIG,DQD4
writeCmd(0xCA81); //FIFO8,SYNC,!ff,DR
writeCmd(0xCED4); //SYNC=2DD4;
writeCmd(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN
writeCmd(0x9850); //!mp,90kHz,MAX OUT
writeCmd(0xCC17); //!OB1,!OB0, LPX,!ddy,DDIT,BW0
writeCmd(0xE000); //NOT USE
writeCmd(0xC800); //NOT USE
writeCmd(0xC040); //1.66MHz,2.2V
}
/*
unsigned char rfRecv() {
unsigned int data;
writeCmd(0x0000);
data = writeCmd(0xB000);
return (data&0x00FF);
}
*/
unsigned char rfRecv() {
unsigned int data;
while(1) {
data = writeCmd(0x0000);
if ( (data&0x8000) ) {
data = writeCmd(0xB000);
return (data&0x00FF);
}
}
}
int main(void) {
unsigned char data, i;
LED_ON();
portInit();
rfInit();
rsInit(BAUDRATE);
FIFOReset();
while(1) {
waitForData();
for (i=0; i<16; i++) {
data = rfRecv();
rsSend(data);
}
FIFOReset();
}
return 0;
}