Гудвин, волшебник (29.05.2012 00:16, просмотров: 218) ответил carlosh на Безнадёга. Использовал библиотеки и инициализацию регистров от Hoperf, использовал библиотеки и инициализацию регистров от Voti. Инициализация модулей у приемника и передатчика одинаковая. Результат один. Приемник и передачик не видят друг друга.
Вот этотим простейшим куском кода тестировал передачу с автоподтверждением от приемника, пользуясь вышеописанной библиотекой. На меге168 с тактовой 4 МГц получилась скорость более 20 кбайт/сек. И расстояние 20 м без потерь и ~50-60 м максимально возможное расстояние со штатной антенной.
void main(void)
{
unsigned char stat;
unsigned char value;
unsigned int counter; // количество переданных пакетв, на которые пришло подтверждение от приемника
unsigned int counter_err; // количество ошибочных попыток передачи
rfm70_init();
// rfm70_air_data_rate(1);
rfm70_channel(100);
//rfm70_lna_low();
rfm70_retransmit_delay_attempts(0,15);
if (KEY_U) stat=1; // проверяем нажата ли кнопка KEY_U при сбросе для выбора приемник/передатчик
if (stat) // это приемник
{
rfm70_mode_receive();
while (1) // цикл для приемника
{
if( rfm70_receive( &pipe, buff, &len ))
{
// rfm70_register_write( RFM70_CMD_FLUSH_RX,0 );
// lcd_pos(3,0);
// sprintf(disp,"ПРИНЯТО: %3d",++counter);
// lcd_str(disp);
}
}
}
else // передатчик
{
while (1) // цикл для передатчика
{
rfm70_mode_transmit();
rfm70_transmit_message(buff,32);
while (1)
{
value = rfm70_register_read( RFM70_REG_STATUS );
if (value & 0x30)
{
rfm70_register_write( RFM70_REG_STATUS ,value );
break;
}
}
if (value & 0x20) ++counter;
if (value & 0x10) ++counter_err;
}
}
}