/Modules/CommRF/RFM02SMD01A/SW/RFM02.h |
---|
0,0 → 1,82 |
/* mija 2008 |
defines for module RFM02 - TX 868MHz |
*/ |
#define CMD_SETTING 0x8000 // b1, b0, d2..d0, x3..x0, ms, m2..m0 |
#define CMD_POWER 0xC000 // a1, a0, ex, es, ea, eb, et, dc |
#define CMD_POWER_OUT 0xB000 // p2..p0 -3*Pmax dBm |
#define CMD_FREQUENCY 0xA000 // f11..f0 860+F*0.005 MHz 36..3903 |
#define CMD_RATE 0xC800 // r7..r0 BR=10M/29/(R+1) |
#define CMD_WAKE_UP 0xE000 // r4..r0, m7..m0 T=M*2^R [ms] |
#define CMD_SLEEP 0xC400 // s7..s0 S stop CLK |
#define CMD_BATTERY 0xC200 // dwc, ebs , t4..t0 |
#define CMD_STATUS 0xCC00 // for read status |
// CMD_SETTING |
#define BAND_315 0x0000 |
#define BAND_433 0x800 |
#define BAND_868 0x1000 |
#define BADN_915 0x1800 |
#define C_8_5pF 0x00 |
#define C_9pF 0x10 |
#define C_9_5pF 0x20 |
#define C_10pF 0x30 |
#define C_10_5pF 0x40 |
#define C_11pF 0x50 |
#define C_11_5pF 0x60 |
#define C_12pF 0x70 |
#define C_12_5pF 0x80 |
#define C_13pF 0x90 |
#define C_13_5pF 0xA0 |
#define C_14pF 0xB0 |
#define C_14_5pF 0xC0 |
#define C_15pF 0xD0 |
#define C_15_5pF 0xE0 |
#define C_16pF 0xF0 |
#define SETTING_MS 0x08 // modulation polarity |
#define TX_DEV_30 0x00 // select frequency deviation |
#define TX_DEV_60 0x01 |
#define TX_DEV_90 0x02 |
#define TX_DEV_120 0x03 |
#define TX_DEV_150 0x04 |
#define TX_DEV_180 0x05 |
#define TX_DEV_210 0x06 |
// CMD_POWER |
#define POWER_A1 0x80 // enable crystal and syntheesizer by sleep |
#define POWER_A0 0x40 // enable PA by sleep |
#define POWER_EX 0x20 // enable transmitter |
#define POWER_ES 0x10 // enable synthesizer |
#define POWER_EA 0x08 // enable PA (power amplifier) |
#define POWER_EB 0x04 // enable low battery detector |
#define POWER_ET 0x02 // enable wake up timer |
#define POWER_DC 0x01 // disable clock output of CLK pin |
// CMD_POWER_OUT |
#define POWER_OUT_0 0xB000 // -0dBm |
#define POWER_OUT_3 0xB100 // -3dBm |
#define POWER_OUT_6 0xB200 // -6dBm |
#define POWER_OUT_9 0xB300 // -9dBm |
#define POWER_OUT_12 0xB400 // -12dBm |
#define POWER_OUT_15 0xB500 // -15dBm |
#define POWER_OUT_18 0xB600 // -18dBm |
#define POWER_OUT_21 0xB700 // -21dBm |
// CMD_FREQUENCY |
#define FREQUENCY_867 0x578 |
#define FREQUENCY_868 0x640 |
#define FREQUENCY_869 0x708 |
// CMD_RATE |
#define RATE_2400 0x8F |
#define RATE_4800 0x47 |
#define RATE_9600 0x23 |
#define RATE_19200 0x11 |
#define RATE_38400 0x8 |
#define RATE_57600 0x5 |
#define RATE_115200 0x2 |
// CMD_BATTERY |
#define WAKE_UP_DWC 0x80 // disable wake-up timer periodical calibration |
#define TX_EBS 0x20 // enable TX bit synchronization function |
/Modules/CommRF/RFM02SMD01A/SW/RFM02SMD01A.c |
---|
0,0 → 1,237 |
/* mija 2008 |
demo for RFM02 - TX 868MHz |
CPU ATtiny2313 |
fcpu = 1MHz |
!! define PIN,PORT,DDR for IOpin !! |
*/ |
#include <avr/io.h> |
#include <util/delay.h> |
#include "RFM02.h" |
//************************************************************************ |
#define LENGTH_MSG 20 |
#define SDI PA1 |
#define SDI_PORT PORTA |
#define SDI_DDR DDRA |
#define FSK PD4 |
#define FSK_PORT PORTD |
#define FSK_DDR DDRD |
/*#define SDO PB4 // input for mega |
#define SDO_PORT PORTB |
#define SDO_DDR DDRB |
#define SDO_PIN PINB |
*/ |
#define SCK PD2 |
#define SCK_PORT PORTD |
#define SCK_DDR DDRD |
#define nIRQ PD5 // input for mega |
#define nIRQ_PORT PORTD |
#define nIRQ_DDR DDRD |
#define nIRQ_PIN PIND |
#define nSEL PD3 |
#define nSEL_PORT PORTD |
#define nSEL_DDR DDRD |
#define LED PB0 |
#define LED_PORT PORTB |
#define LED_DDR DDRB |
// interni |
#define SDI_H SDI_PORT |= _BV(SDI) |
#define SDI_L SDI_PORT &= (~(_BV(SDI))) |
#define SDI_INIT SDI_DDR |= _BV(SDI) |
#define FSK_H FSK_PORT |= _BV(FSK) |
#define FSK_L FSK_PORT &= (~(_BV(FSK))) |
#define FSK_INIT FSK_DDR |= _BV(FSK) |
#define SDO_INPUT (SDO_PIN & _BV(SDO)) |
#define SDO_INIT SDO_DDR &= (~(_BV(SDO))) |
#define SCK_H SCK_PORT |= _BV(SCK) |
#define SCK_L SCK_PORT &= (~(_BV(SCK))) |
#define SCK_INIT SCK_DDR |= _BV(SCK) |
#define nIRQ_INPUT (nIRQ_PIN & _BV(nIRQ)) |
#define nIRQ_INIT nIRQ_DDR &= (~(_BV(nIRQ))) |
#define nSEL_H nSEL_PORT |= _BV(nSEL) |
#define nSEL_L nSEL_PORT &= (~(_BV(nSEL))) |
#define nSEL_INIT nSEL_DDR |= _BV(nSEL) |
#define LED_H LED_PORT |= _BV(LED) |
#define LED_L LED_PORT &= (~(_BV(LED))) |
#define LED_INIT LED_DDR |= _BV(LED) |
#define START_TX RF_WRITE_CMD(CMD_POWER|POWER_EX|POWER_ES|POWER_EA|POWER_DC) |
#define STOP_TX RF_WRITE_CMD(CMD_POWER|POWER_DC) |
#define RX_ENABLE UCSRB = _BV(RXEN) |
#define RX_DISABLE UCSRB &= ~(_BV(RXEN)) |
//************************************************************************ |
//uint8_t test[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x03b,0x3c,0x3d,0x3e,0x3f}; |
uint8_t test[LENGTH_MSG]; |
//uint8_t test[16]="0123456789abcdef"; |
//************************************************************************ |
void delay_ms(uint16_t time) |
{ |
while(time--) _delay_ms(1); |
} |
void IO_INIT(void) |
{ |
SDI_INIT; |
//SDO_INIT; |
SCK_INIT; |
nIRQ_INIT; |
nSEL_INIT; |
FSK_INIT; |
LED_INIT; |
} |
void rs232_init(void) |
{ |
//set baud rate fixed 9600 8N1 for fosc 1Mhz |
UCSRA = _BV(U2X) ; |
UBRRL = 12; |
UCSRB = _BV(RXEN) ; |
} |
void RF_INIT(void) |
{ |
nSEL_H; |
SDI_H; |
SCK_L; |
nIRQ_INPUT; |
//SDO_INPUT; |
FSK_H; |
} |
void RF_WRITE_CMD(uint16_t cmd) |
{ |
uint8_t i; |
SCK_L; |
nSEL_L; |
for (i=0;i<16;i++) |
{ |
SCK_L; |
SCK_L; |
if (cmd & 0x8000) SDI_H; |
else SDI_L; |
SCK_H; |
SCK_H; |
cmd <<= 1; |
} |
SCK_L; |
nSEL_H; |
} |
void RF_WRITE_DATA(uint8_t data) |
{ |
uint8_t i; |
for (i=0;i<8;i++) |
{ |
while (nIRQ_INPUT); |
while (!nIRQ_INPUT); |
if (data & 0x80)FSK_H; |
else FSK_L; |
data <<= 1; |
} |
} |
int main() |
{ |
uint8_t i,j,ChkSum; |
IO_INIT(); |
RF_INIT(); |
rs232_init(); |
LED_H; |
delay_ms(100); |
RF_WRITE_CMD(CMD_STATUS); |
RF_WRITE_CMD(CMD_SETTING |BAND_868 |C_12pF |TX_DEV_90); |
RF_WRITE_CMD(CMD_FREQUENCY |FREQUENCY_868); |
RF_WRITE_CMD(0xD040); |
RF_WRITE_CMD(CMD_RATE |RATE_19200); |
RF_WRITE_CMD(CMD_BATTERY |TX_EBS); |
RF_WRITE_CMD(CMD_POWER |POWER_DC); |
RF_WRITE_CMD(POWER_OUT_0); |
j= 0; |
while (1) |
{ |
LED_L; |
RX_ENABLE; |
while ( !(UCSRA & (_BV(RXC)))); |
test[0]= UDR; |
for (i=1;i<LENGTH_MSG;i++) |
{ |
j=255; |
while ( !(UCSRA & (_BV(RXC))) && --j); |
{ |
/*asm volatile( "nop" "\n\t" |
"nop" "\n\t" |
"nop" "\n\t" |
"nop" "\n\t" |
: |
: |
);*/ |
} |
if(j) test[i]= UDR; |
else while (i<LENGTH_MSG) test[i++] = 0; |
} |
i=UDR; |
RX_DISABLE; |
LED_H; |
START_TX; |
ChkSum = 0; |
for (i=0;i<3;i++) RF_WRITE_DATA(0xAA); |
RF_WRITE_DATA(0x2D); |
RF_WRITE_DATA(0xD4); |
for (i=0;i<LENGTH_MSG;i++) |
{ |
RF_WRITE_DATA(test[i]); |
//putc |
ChkSum += test[i]; |
} |
RF_WRITE_DATA(ChkSum); |
RF_WRITE_DATA(0xAA); |
RF_WRITE_DATA(0xAA); |
STOP_TX; |
//delay_ms(5000); |
//j++; |
//test[13]=(j/100)+0x30; |
//test[14]=((j%100)/10)+0x30; |
//test[15]=((j%100)%10)+0x30; |
} |
return 0; |
} |
/Modules/CommRF/RFM02SMD01A/SW/default/RFM02SMD01A.hex |
---|
0,0 → 1,32 |
:1000000012C02AC029C028C027C026C025C024C0CD |
:1000100023C022C021C020C01FC01EC01DC01CC0E4 |
:100020001BC01AC019C011241FBECFEDCDBF10E0F8 |
:10003000A0E6B0E0E6EEF1E002C005900D92A03639 |
:10004000B107D9F710E0A0E6B0E001C01D92A437D7 |
:10005000B107E1F74AD0C6C0D3CFAC01892B59F024 |
:1000600020E030E08AEF90E00197F1F72F5F3F4FFB |
:1000700024173507B9F70895D19A8A9A8D988B9AE3 |
:100080008C9AB89A089582E08BB98CE089B980E1A6 |
:100090008AB90895939AD99A929880B3949A0895B8 |
:1000A0009298939820E092989298992314F4D99A70 |
:1000B00001C0D998929A929A2F5F203119F0880F37 |
:1000C000991FF1CF9298939A089590E08599FECF69 |
:1000D000859BFECF882314F4949A01C094989F5F67 |
:1000E000983010F4880FF2CF0895CF92DF92EF92FC |
:1000F000FF921F93CF93DF93BFDFCCDFC4DFC09AA3 |
:1001000084E690E0AADF80E09CECCADF82E790E919 |
:10011000C7DF80E496EAC4DF80E490EDC1DF81E1CF |
:1001200098ECBEDF80E292ECBBDF81E090ECB8DFC0 |
:1001300080E090EBB5DF0F2EF0E6EF2EF0E0FF2E23 |
:10014000F02D0F2EF4E1CF2EDD24F02DCE0CDF1C90 |
:10015000C09880E18AB95F9BFECF8CB1809360002C |
:100160008FEF91E001C08FEF5F9903C08150E1F7FD |
:1001700002C0882319F4943138F00EC08CB1F70115 |
:10018000E90FF11D808308C0F701E90FF11D10820E |
:100190009F5F943121F0F8CF9F5F943120F38CB1B1 |
:1001A0005498C09A89E390EC7BDF10E08AEA8DDFF7 |
:1001B0001F5F1330D9F78DE288DF84ED86DFE7011A |
:1001C00010E0888182DF8991180FCC15DD05C9F711 |
:1001D000812F7BDF8AEA79DF8AEA77DF81E090ECA2 |
:0601E0005FDFB6CFFFCF88 |
:00000001FF |
/Modules/CommRF/RFM02SMD01A/SW/default/dep/RFM02SMD01A.o.d |
---|
0,0 → 1,39 |
RFM02SMD01A.o: ../RFM02SMD01A.c \ |
c:/winavr-20071221/bin/../avr/include/avr/io.h \ |
c:/winavr-20071221/bin/../avr/include/avr/sfr_defs.h \ |
c:/winavr-20071221/bin/../avr/include/inttypes.h \ |
c:/winavr-20071221/bin/../avr/include/stdint.h \ |
c:/winavr-20071221/bin/../avr/include/avr/iotn2313.h \ |
c:/winavr-20071221/bin/../avr/include/avr/portpins.h \ |
c:/winavr-20071221/bin/../avr/include/avr/common.h \ |
c:/winavr-20071221/bin/../avr/include/avr/version.h \ |
c:/winavr-20071221/bin/../avr/include/avr/fuse.h \ |
c:/winavr-20071221/bin/../avr/include/avr/lock.h \ |
c:/winavr-20071221/bin/../avr/include/util/delay.h \ |
c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ../RFM02.h |
c:/winavr-20071221/bin/../avr/include/avr/io.h: |
c:/winavr-20071221/bin/../avr/include/avr/sfr_defs.h: |
c:/winavr-20071221/bin/../avr/include/inttypes.h: |
c:/winavr-20071221/bin/../avr/include/stdint.h: |
c:/winavr-20071221/bin/../avr/include/avr/iotn2313.h: |
c:/winavr-20071221/bin/../avr/include/avr/portpins.h: |
c:/winavr-20071221/bin/../avr/include/avr/common.h: |
c:/winavr-20071221/bin/../avr/include/avr/version.h: |
c:/winavr-20071221/bin/../avr/include/avr/fuse.h: |
c:/winavr-20071221/bin/../avr/include/avr/lock.h: |
c:/winavr-20071221/bin/../avr/include/util/delay.h: |
c:/winavr-20071221/bin/../avr/include/util/delay_basic.h: |
../RFM02.h: |