/Designs/HOPEwireless/SW_RX_RFM01/RX_RFM01.c
0,0 → 1,135
/* mija 2008
demo for RFM01 - RX 868MHz
 
PIC 16F876A
xtal = 4MHz
*/
#include "RX_RFM01.h"
 
//************************************************************************
 
#define SDI PIN_B0
#define SCK PIN_B1
#define SDO PIN_B2 // input for PIC
#define nIRQ PIN_B3
#define nSEL PIN_B4
#define LED PIN_B5
 
//************************************************************************
unsigned char RF_RXBUF[22];
int1 led_trg;
 
//************************************************************************
 
void RF_INIT(void)
{
output_high(nSEL);
output_high(SDI);
output_low(SCK);
input(SDO);
}
 
void RF_WRITE_CMD(unsigned int16 cmd)
{
unsigned int8 i;
 
output_low(SCK);
output_low(nSEL);
for (i=0;i<16;i++)
{
output_low(SCK);
if (cmd & 0x8000) output_high(SDI);
else output_low(SDI);
output_high(SCK);
cmd <<= 1;
}
output_low(SCK);
output_high(nSEL);
}
 
int8 RF_RDFIFO(void)
{
unsigned int8 i,Result;
 
output_low(SCK);
output_low(nSEL);
output_low(SDI);
for (i=0;i<16;i++) // skip satus bits
{
output_high(SCK);
output_high(SCK);
output_low(SCK);
output_low(SCK);
}
Result = 0;
for (i=0;i<8;i++)
{
Result <<= 1;
if (input(SDO)) Result |= 1;
output_high(SCK);
output_high(SCK);
output_low(SCK);
output_low(SCK);
}
output_high(nSEL);
return Result;
}
 
void main()
{
unsigned int8 i,j,ChkSum;
 
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_4);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
 
output_high(LED);
delay_ms(1000);
output_low(LED);
 
RF_INIT();
 
RF_WRITE_CMD(0x0000);
RF_WRITE_CMD(0x918A); // 868BAND,134kHz
RF_WRITE_CMD(0xA640); // 876Mhz
RF_WRITE_CMD(0xC847); // 4.8kbps
RF_WRITE_CMD(0xC69B); // AFC setting
RF_WRITE_CMD(0xC42A); // Clock recovery manualcontrol,Dig. filter, DQD=4
RF_WRITE_CMD(0xC240); // output 1.66Mhz
RF_WRITE_CMD(0xC080);
RF_WRITE_CMD(0xCE88); // use FIFO 8bit
RF_WRITE_CMD(0xCE8B);
RF_WRITE_CMD(0xC081); // open RX
 
led_trg = 0;
i = 0;
while (1)
{
while (!input(nIRQ))
{
RF_RXBUF[i++] = RF_RDFIFO();
putc(RF_RXBUF[i-1]);
if (i == 18)
{
i = 0;
RF_WRITE_CMD(0xCE88);
RF_WRITE_CMD(0xCE8B);
ChkSum = 0;
for (j=0;j<16;j++) ChkSum += RF_RXBUF[j];
if (ChkSum == RF_RXBUF[16])
{
led_trg = ~led_trg;
output_bit(LED,led_trg);
}
}
}
}
}
 
 
 
/Designs/HOPEwireless/SW_RX_RFM01/RX_RFM01.h
0,0 → 1,9
#include <16F876A.h>
#device adc=8
 
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT,NOLVP,NOBROWNOUT
 
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
 
/Designs/HOPEwireless/SW_RX_RFM01/RX_RFM01.hex
0,0 → 1,52
:1000000000308A00AD2800003C308400000803194D
:1000100018280130F800F701F70B0C28F80B0B2813
:100020004A30F700F70B122800000000800B092867
:100030008A110A12FE2883160612831206168316E8
:1000400006108312061483168610831286108316F8
:10005000061583128A110A12052983168610831247
:1000600086108316061283120612BD013D080F3C4E
:10007000031C592883168610831286100039F70056
:100080003C088039FA0077087A0403194C28831653
:1000900006108312061450288316061083120610C9
:1000A00083168610831286140310BB0DBC0DBD0A87
:1000B0003628831686108312861083160612831242
:1000C00006160034831686108312861083160612D5
:1000D000831206128316061083120610BD013D0816
:1000E0000F3C031C85288316861083128614831602
:1000F0008610831286148316861083128610831648
:10010000861083128610BD0A6F28BE01BD013D080E
:10011000073C031CA4280310BE0D8316061583128A
:1001200006193E14831686108312861483168610D1
:100130008312861483168610831286108316861007
:1001400083128610BD0A87288316061283120616AC
:100150003E08F8008A110A12462984011F308305DF
:100160001930831699002630980090308312980039
:1001700083161F149F141F159F1107309C00FF301A
:100180008312B70083161F149F141F159F1183122B
:100190001F109412B7123708831687008312371680
:1001A0003708831687008312B71137088316870034
:1001B0002030831294000030831694000108C73960
:1001C00008388100831290010030F800920000305E
:1001D0008316920007309C0005080330F700F70BE8
:1001E000EF281C0883120D1383169D0186128312BB
:1001F00086160430BB00FA30BC000428BB0BFB2879
:1002000083168612831286121B28BC01BB012D2087
:100210009130BC008A30BB002D20A630BC0040309D
:10022000BB002D20C830BC004730BB002D20C6309D
:10023000BC009B30BB002D20C430BC002A30BB006A
:100240002D20C230BC004030BB002D20C030BC008F
:100250008030BB002D20CE30BC008830BB002D206C
:10026000CE30BC008B30BB002D20C030BC008130B4
:10027000BB002D203610B80183168615831286190F
:100280007F293808B80A203EBC0062283C08840058
:100290007808800001303802203E84000008BC004D
:1002A0003C080C1E512999003808123C031D7E2978
:1002B000B801CE30BC008830BB002D20CE30BC0051
:1002C0008B30BB002D20BA01B90139080F3C031C4B
:1002D00070292030390784000008BA07B90A652957
:1002E00030083A02031D7E290130B60636187A29F5
:1002F00086127B2986168316861283123C293C2996
:02030000630098
:02400E00393F38
:00000001FF
;PIC16F876A