Всем привет,
инициализирую чип RFM01 как китайском в примере (на прием), и нифига не приходит, не выставляется бит фифо, не приходит прерывание. (уже перепробовал несколько вариантов - из документации и 2 примера отсюда)
статус в цикле вычитывается одно из следущего
(описания битов статуса я взял от другого чипа, тк в даташите нету описания статуса!! они скорее неправильные)
0x4104 (LB CRLCK 01)
0x4105 (LB RSSI_AT CRLCK 01)
0xC104 (LB GDQD CRLCK 01)
0xC105 (LB RSSI_AT GDQD CRLCK 01)
Если пробовать читать фифо в цикле - там всегда все по нулям.
помогите
Антенка керамическая RainSun я вот думаю может мне ее на 868Мгц подсунули вместь 433
void RFXX_PORT_INIT(void)
{
PORTC = 0b00000000;
DDRC = 0b00000000;
PORTD = 0b00000000;
DDRD = 0b00000000;
HI_SEL();
HI_SDI();
LOW_SCK();
SEL_OUTPUT();
SDI_OUTPUT();
SDO_INPUT();
SCK_OUTPUT();
}
void RF01_ChipInit()
{
SendWordRF(0x0000);
SendWordRF(0xA000 | (unsigned int)(((434-430)/0.0025)));//434MHz
SendWordRF(0x8978);//898A - 433BAND,167kHz; 898C - 67kHz 0x8978-200kHz
SendWordRF(0xC800|((344828UL/19200)-1));//19200
SendWordRF(0xC6F7);//AFC setting
SendWordRF(0xC42A);//autolock-off, slowmode,,Digital filter,DQD=3
SendWordRF(0xC260);//output 2MHz
SendWordRF(0xC008);
SendWordRF(0xCE88);//use FIFO
SendWordRF(0xCE8B);
SendWordRF(0xC009);//OPEN RX
}
unsigned int RFXX_WRT_CMD(unsigned int aCmd)
{
unsigned char i;
unsigned int temp = 0;
LOW_SCK();
LOW_SEL(); // chip select
for (i=0; i<16; i++)
{
temp<<=1;
if (SDO_HI())
temp |= 0x0001;
LOW_SCK2();
if (aCmd & 0x8000)
HI_SDI();
else
LOW_SDI();
HI_SCK2();
aCmd <<= 1;
}
LOW_SCK();
HI_SEL();
return temp;
}
void RFXX_TEST()
{
_delay_ms(500);
RFXX_PORT_INIT();
RF01_ChipInit();
INT_INPUT();
MCUCR |= (1<<ISC01)|(0<<ISC00);
GICR |= (1<<INT0); // INT0 enabled
while (1)
{
if (INT_LOW())
{
Togle_LED_on();
}
Ret = RFXX_WRT_CMD(0b00000000);
if (Ret) // & 0b1000000000000000)
{
Print_Word(Ret); Send_UART(" "); PrintStatus(Ret);
}
}
}
тут дефинишины для полноты картины
#define PORT_SEL PORTC
#define PIN_SEL PINC
#define DDR_SEL DDRC
#define PORT_SDI PORTC
#define PIN_SDI PINC
#define DDR_SDI DDRC
#define PORT_SCK PORTC
#define PIN_SCK PINC
#define DDR_SCK DDRC
#define PORT_SDO PORTC
#define PIN_SDO PINC
#define DDR_SDO DDRC
#define PORT_INT PORTD
#define PIN_INT PIND
#define DDR_INT DDRD
#define RFXX_SCK 4 // PC4
#define RFXX_SDI 5 // PC5
#define RFXX_SEL 6 // PC6
#define RFXX_SDO 7 // PC7
#define RFXX_INT 2 // PD2
#define SEL_OUTPUT() DDR_SEL |= (1<<RFXX_SEL)
#define HI_SEL() PORT_SEL |= (1<<RFXX_SEL)
#define LOW_SEL() PORT_SEL &= ~(1<<RFXX_SEL)
#define SDI_OUTPUT() DDR_SDI |= (1<<RFXX_SDI)
#define HI_SDI() PORT_SDI |= (1<<RFXX_SDI)
#define LOW_SDI() PORT_SDI &= ~(1<<RFXX_SDI)
#define SDO_INPUT() DDR_SDO &= ~(1<<RFXX_SDO)
#define SDO_HI() PIN_SDO & (1<<RFXX_SDO)
#define SCK_OUTPUT() DDR_SCK |= (1<<RFXX_SCK)
#define HI_SCK() PORT_SCK |= (1<<RFXX_SCK)
#define LOW_SCK() PORT_SCK &= ~(1<<RFXX_SCK)
#define INT_INPUT() DDR_INT &= ~(1<<RFXX_INT)
#define INT_HI() (PIN_INT & (1<<RFXX_INT))
#define INT_LOW() (!INT_HI())
Сообщение отредактировал Mad-man - Jun 26 2010, 17:24