#include #include #include "global.h" #include "rf01.h" #define F_CPU 16000000UL #include #define RF_PORT PORTB #define CS_PORT PORTA #define CS_DDR DDRA #define RF_DDR DDRB #define RF_PIN PINB #define SDI 5 // SDI, -> RF02 #define SCK 7 // SCK, -> RF02 #define CS 0 // nSEL, -> RF02 #define SDO 6 // SDO, <- RF02 // nFFS: 1-10k Pullup an Vcc !!! static unsigned char sdrssi, sgain; void rf01_trans(unsigned short wert) { unsigned char i; cbi(CS_PORT, CS); for (i=0; i<16; i++) { if (wert&32768) sbi(RF_PORT, SDI); else cbi(RF_PORT, SDI); sbi(RF_PORT, SCK); wert<<=1; _delay_us(0.2); cbi(RF_PORT, SCK); } sbi(CS_PORT, CS); } void rf01_init(void) { unsigned char i; CS_PORT=(1<3903) // 439,7575MHz freq=3903; rf01_trans(0xA000|freq); } void rf01_setbaud(unsigned short baud) { if (baud<336) return; if (baud<5400) // Baudrate= 344827,58621/(R+1)/(1+CS*7) rf01_trans(0xC880|((43104/baud)-1)); else rf01_trans(0xC800|((344828UL/baud)-1)); } void rf01_rxdata(unsigned char *data, unsigned char number) { unsigned char i,j,c; DDRD = 0xFF; rf01_trans(0xC0C1|((sgain&3)<<4)|((sdrssi&7)<<1)); // RX on rf01_trans(0xCE48); // set FIFO mode rf01_trans(0xCE8F); // enable FIFO cbi(RF_PORT, SDI); for (i=0; i