Вт апр 22, 2014 19:22:37
Ср апр 23, 2014 10:11:39
void setChannel(uint8_t cnum)
{
writeRegVal( RFM70_CMD_WRITE_REG | RFM70_REG_RF_CH, cnum);
}
Чт апр 24, 2014 10:09:44
uint8_t sendPayload(int8_t * payload, uint8_t len, int8_t toAck) // choose 0=nAck, 1=AckRequest
{
// check TX_FIFO
uint8_t status;
status = readRegVal(RFM70_REG_FIFO_STATUS);
if (status & RFM70_FIFO_STATUS_TX_FULL)
{
debug(RFM70_DEBUG_FIFO_FULL);
return 0;
}
// send payload
PORT_SPI &=~ (1<<CSN);
_delay_ms(RFM70_CS_DELAY);
if(toAck == -1)
transmitSPI(RFM70_CMD_W_ACK_PAYLOAD);
else if (toAck == 0)
transmitSPI(RFM70_CMD_W_TX_PAYLOAD_NOACK);
else
transmitSPI(RFM70_CMD_WR_TX_PLOAD);
while(len--)
{
transmitSPI(*(payload++));
//uart_putc(*payload);
//uart_puts(", ");
}
PORT_SPI |= (1<<CSN);
_delay_ms(RFM70_CS_DELAY);
//uart_puts("\n");
//PORTA ^= (1<<PA4);
return 1;
}
Пт апр 25, 2014 13:54:35
unsigned int receivePayload(unsigned int *payload)
{
unsigned int len;
// check RX_FIFO
unsigned int status;
status = readRegVal(RFM70_REG_STATUS);
if (status & RFM70_IRQ_STATUS_RX_DR) { // RX_DR
//PORTA ^= (1<<PA4);
//while(1) {
unsigned int fifo_sta;
len = readRegVal(RFM70_CMD_RX_PL_WID); // Payload width
readRegBuf(RFM70_CMD_RD_RX_PLOAD, payload, len);
fifo_sta = readRegVal(RFM70_REG_FIFO_STATUS);
//if (fifo_sta & RFM70_FIFO_STATUS_RX_EMPTY) break; // read until RX_FIFO empty
//}
if (fifo_sta & RFM70_FIFO_STATUS_RX_EMPTY) {
status|= 0x40 & 0xCF; // clear status bit rx_dr
writeRegVal(RFM70_CMD_WRITE_REG | RFM70_REG_STATUS, status);
}
//showstr("что-то приняли",0,120,0,0,255); //это строка для проверки
return len;
}
else
{
//showstr("Ничего не приняли",0,130,0,0,255); //это строка для проверки
return 0;
}
}
unsigned int readRegVal(unsigned int cmd)
{
unsigned int res;
PORT_SPI &=~ (1<<CSN);
_delay_ms(RFM70_CS_DELAY);
transmitSPI(cmd); //отправка 0х07 команды
res=transmitSPI(0); //отправка 0 и получение результата
PORT_SPI |= (1<<CSN);
_delay_ms(RFM70_CS_DELAY);
return res;
}
Пт апр 25, 2014 19:02:14
Все правильно CE в 1.The RX mode is an active mode where the RFM73 radio is configured to be a receiver. To enter this mode from standby-I mode, the PRX device must have the PWR_UP bit set high, PRIM_RX bit set high and the CE pin set high.
Пт апр 25, 2014 21:44:58
Сб апр 26, 2014 10:08:58
Сб апр 26, 2014 17:48:36
Вс апр 27, 2014 16:57:56
Пн апр 28, 2014 11:07:03
void initSPI(uint8_t clk_div)
uint8_t transmitSPI(uint8_t val)
Пн апр 28, 2014 13:02:22
setMode(1);
setChannel(28);
setMode(1); // resive
Пн апр 28, 2014 13:30:36
Сб май 03, 2014 23:51:31
Пн май 05, 2014 10:59:11
asylumist писал(а):работаю с rfm73. проект взял, как и eess9, у немца с сайта http://projects.weber-itam.de/rfm70-funkmodul/
переделка с rfm70 на rfm73 заключалась в изменении седьмого регистра из нулевого банка на 0x0F (как вариант) вместо 0x3F. иначе модули не связывались...
while (len--)
{
uart_putc(*payload);
uart_puts(", ");
transmitSPI(*(payload++));
}
uint8_t sendPayload(int16_t payload, uint8_t len, int8_t toAck) // choose 0=nAck, 1=AckRequest
...
while (len--)
{
//uart_putc(payload); //uart я не использую
//uart_puts(", ");
transmitSPI(payload++);
}
...
Ср май 07, 2014 15:19:24
Ср май 07, 2014 17:54:22
asylumist писал(а):...тестировал дальность. у меня два rfm73 связываются между собой на 50 метрах!
Чт май 08, 2014 18:54:28
Чт май 08, 2014 20:07:02
Чт май 08, 2014 22:16:18
Чт май 08, 2014 22:59:18