РМ: rfm23b-433
МК: ATMega128 (кварц 16 МГц) (у меня они как отладочные платы)
Задача стоит тривиальная: переслать данные с одного РМ на другой.
Платы собраны идентично.
Пишу в codevisionAVR=)
Проблема: Не могу ничего передать/получить (не могу сказать, на какОм этапе...) - модули на расстоянии 5 см друг от друга.
Ниже есть полные исходники, тут сокращенные:
приемник:
Код: Выделить всё
rf22_init();
//оригинал был на 868 МГц, тут переделал - правильно?
rf22_setfreq(RF22FREQ(434+1.545));
rf22_rxmode();
while(1)
{
cnt = rf22_getpacket(rx_tmp);
//и вот этот cnt НИКОГДА не становится отличным от нуля!
sprintf (lcd_buf, "cnt[%u]nIRQ[%u]",cnt,nIRQ);
LcdString(1,2);
sprintf (lcd_buf, "ver[%u]len[%u]",rf22_read(REGISTER_DEVICE_VERSION),rf22_read(REGISTER_RECEIVER_PACKET_LENGTH));
LcdString(1,3);
sprintf (lcd_buf, "stat[%u]",rf22_read(REGISTER_DEVICE_STATUS));
LcdString(1,4);
sprintf (lcd_buf, "P[%u]rssi[%u]",rf22_read(REGISTER_TX_POWER),rf22_read(REGISTER_RSSI));
LcdString(1,5);
sprintf (lcd_buf, "try[%u]",++i);
LcdString(1,6);
delay_ms(500);
}
Код: Выделить всё
rf22_init();
//оригинал был на 868 МГц, тут переделал - правильно?
rf22_setfreq(RF22FREQ(434+1.545));
rf22_rxmode();//так было в "Жестком немецком исходнике"
while(1)
{
rf22_sendpacket((unsigned char*)"HALLO",5);
delay_ms(500);
}
Код: Выделить всё
void rf22_init(void)
{
delay_ms(50);//por (16ms)
rf22_write(REGISTER_OPERATING_FUNCTION_CONTROL_1, 0x80); // software reset
//for(unsigned long a = 0;a<100000;a++){asm("nop");}; // wait until software reset done
delay_ms(10);//soft reset: 100 us
rf22_write(REGISTER_INTERRUPT_ENABLE_1, 0x02); // valid packed received interrupt on
rf22_write(REGISTER_INTERRUPT_ENABLE_2, 0x00); // all interrupts off
rf22_write(REGISTER_OPERATING_FUNCTION_CONTROL_1, 0x01); // operating mode: ready mode
rf22_write(REGISTER_CRYSTAL_OSCILLATOR_LOAD_CAPACITANCE, 0x7f); // xtal load capacitance
rf22_write(REGISTER_MICROCONTROLLER_OUTPUT_CLOCK, 0x02); // uC CLK: 10MHz
rf22_write(REGISTER_GPIO_0_CONFIGURATION, 0xf2); // GPIO0: TX_ANT - f2
rf22_write(REGISTER_GPIO_1_CONFIGURATION, 0xf5); // GPIO1: RX ANT - f5
rf22_write(REGISTER_GPIO_2_CONFIGURATION, 0x00); // GPIO2: uC Clock out
rf22_write(REGISTER_IO_PORT_CONFIGURATION, 0x00);
rf22_write(REGISTER_ADC_CONFIGURATION, 0x70); // ADC Input: GND
rf22_write(REGISTER_ADC_SENSOR_AMPLIFIER_OFFSET, 0x00); // ADC offset: 0
rf22_write(REGISTER_TEMPERATURE_SENSOR_CONTROL, 0x00); // temp sensor calibration off
rf22_write(REGISTER_TEMPERATURE_VALUE_OFFSET, 0x00); // temp sensor offset: 0
rf22_write(REGISTER_AFC_LOOP_GEARSHIFT_OVERRIDE, 0x40); // enable AFC
rf22_write(REGISTER_AFC_TIMING_CONTROL, 0x0A); // afc timing
rf22_write(REGISTER_CLOCK_RECOVERY_GEARSHIFT_OVERRIDE, 0x03); // afc timing
rf22_write(REGISTER_IF_FILTER_BANDWIDTH, 0x05); // IF bandwidth
rf22_write(REGISTER_CLOCK_RECOVERY_OVERSAMPLING_RATIO, 0x83); // Clock Recovery Oversampling Rate
rf22_write(REGISTER_CLOCK_RECOVERY_OFFSET_2, 0xC0); // Clock Recovery Offset 2
rf22_write(REGISTER_CLOCK_RECOVERY_OFFSET_1, 0x13); // Clock Recovery Offset 1
rf22_write(REGISTER_CLOCK_RECOVERY_OFFSET_0, 0xA9); // Clock Recovery Offset 0
rf22_write(REGISTER_CLOCK_RECOVERY_TIMING_LOOP_GAIN_1, 0x00); // Clock Recovery Timing Loop Gain 1
rf22_write(REGISTER_CLOCK_RECOVERY_TIMING_LOOP_GAIN_0, 0x04); // Clock Recovery Timing Loop Gain 0
rf22_write(REGISTER_AFC_LIMITER, 0x24);
rf22_write(REGISTER_RSSI_THRESHOLD_FOR_CLEAR_CHANNEL_INDICATOR, 0x10); // RSSI Threashold: -120dB
rf22_write(REGISTER_DATA_ACCESS_CONTROL, 0x8c); // data access: RX/TX packet handling, enable crc: CCIT
rf22_write(REGISTER_HEADER_CONTROL_1, 0xff); // header check enable
rf22_write(REGISTER_HEADER_CONTROL_2, 0x42); // 2 word synchronisation
rf22_write(REGISTER_PREAMBLE_LENGTH, 0x10); // preamble length: 16 nibbles, = 64bits
rf22_write(REGISTER_PREAMBLE_DETECTION_CONTROL, 0x30); // preamble detection control: 6 nibbles = 24bits
rf22_write(REGISTER_SYNC_WORD_3, 0x2d); // sync word 3
rf22_write(REGISTER_SYNC_WORD_2, 0xd4); // sync word 2
rf22_write(REGISTER_SYNC_WORD_1, 0xAA); // sync word 1
rf22_write(REGISTER_SYNC_WORD_0, 0xAA); // sync word 0
rf22_write(REGISTER_TRANSMIT_HEADER_3, 'h'); // transmit header 3
rf22_write(REGISTER_TRANSMIT_HEADER_2, 'o'); // transmit header 2
rf22_write(REGISTER_TRANSMIT_HEADER_1, 'p'); // transmit header 1
rf22_write(REGISTER_TRANSMIT_HEADER_0, 'e'); // transmit header 0
rf22_write(REGISTER_TRANSMIT_PACKET_LENGTH, 17); // packet length
rf22_write(REGISTER_CHECK_HEADER_3, 'h'); // check header 3
rf22_write(REGISTER_CHECK_HEADER_2, 'o'); // check header 2
rf22_write(REGISTER_CHECK_HEADER_1, 'p'); // check header 1
rf22_write(REGISTER_CHECK_HEADER_0, 'e'); // check header 0
rf22_write(REGISTER_HEADER_ENABLE_3, 0xff); // header enable mask 3
rf22_write(REGISTER_HEADER_ENABLE_2, 0xff); // header enable mask 2
rf22_write(REGISTER_HEADER_ENABLE_1, 0xff); // header enable mask 1
rf22_write(REGISTER_HEADER_ENABLE_0, 0xff); // header enable mask 0
// rf22_write(0x69, 0x60); // AGC on
rf22_write(REGISTER_AGC_OVERRIDE, 0x60); // AGC on
rf22_write(0x6a, 0x0b); // agc override 2 [!????????!!!!!!!]
rf22_write(REGISTER_TX_POWER, 0x0F); // tx power: +17dBm
rf22_write(REGISTER_TX_DATA_RATE_1, 0x13); // set baud high
rf22_write(REGISTER_TX_DATA_RATE_0, 0xa9); // set baud low
rf22_write(REGISTER_MODULATION_MODE_CONTROL_1, 0x2C); // modulation control
rf22_write(REGISTER_MODULATION_MODE_CONTROL_2, 0x22); // modulation control 2: FIFO mode, OOK //0x21 / 0x00
rf22_write(REGISTER_FREQUENCY_DEVIATION, 0x50); // frequency deviation: 45kHz
rf22_write(REGISTER_FREQUENCY_OFFSET_1, 0x00); // offset: 0
rf22_write(REGISTER_FREQUENCY_OFFSET_2, 0x00); // offset: 0
rf22_write(REGISTER_FREQUENCY_HOPPING_CHANNEL_SELECT, 0x0); // frequency hopping off
rf22_write(REGISTER_FREQUENCY_HOPPING_STEP_SIZE, 0x0); // frequency hopping off
#ifdef BAND_868
rf22_write(REGISTER_FREQUENCY_BAND_SELECT, 0x73); // 860-880MHz range
#else
rf22_write(REGISTER_FREQUENCY_BAND_SELECT, 0x53); // 430-440MHz range
#endif
}
МК:ATMega128
Дисплей: Софт SPI - Nokia 3310 Lcd
РМ: подключаются через 10ти контактный разъем
РМ: Hard SPI
-: В цепи питания нет фильтр. конд. (неуж-то так принципиально)
Помогите пожалуйста справиться с этим ГАДОМ.(или хоть дайте рабочий пример приемника-передатчика)
ЗЫ: Обещаюсь в случае успеха разработать и выложить нормальные либы под сей девайс, т.к. планирую с ним далее работать=)
ЗЗЫ: Есть на сайте производителя (с)эксель с настройками - вот только КАК с ним работать - не очень понятно.
Схема:

Инфо (некоторая информация что я посчитал нужной вывести на экран):

RSSI - изменяющиеся значения в районе "40"
Сам РМ:




Заранее спасибо=)
- Вложения
-
- rf22.c
- (11.49 КБ) 503 скачивания
-
- rf22.h
- (1001 байт) 584 скачивания
-
- n3310lcd.c
- (34.36 КБ) 275 скачиваний
-
- a.c
- (2.68 КБ) 558 скачиваний


