Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите запустить пару модулей RFM22-868S2
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Rf & Microwave Design
west329_
Добрый день. Поделитесь рабочей конфигурацией на 800мгц.
Любой канал лишь бы была уже проверена в железе на 800.

Уже двое суток не встаю из за кампа. Попробовал несколько конфигураций пока безрезультатно.
Попаду домой выставлю схемку и инициализацию свою. Уже переехал с аппаратного SPI на програмный.

Благодарю.
west329_
Моя инициализация на 800 мгц. Взят с сети. Разарботал немецкий программист. Большенство ссылаются именно на этот код как самы рабочий sm.gif

Код
    for(unsigned long a = 0;a<100000;a++){asm("nop");}; // wait until POR done
    rf22_write(0x07, 0x80);        // software reset
    for(unsigned long a = 0;a<100000;a++){asm("nop");}; // wait until software reset done

    rf22_write(0x05, 0x02);        // valid packed received interrupt on

    rf22_write(0x06, 0x00);        // all interrupts off
    rf22_write(0x07, 0x01);        // operating mode: ready mode
    rf22_write(0x09, 0x7f);        // xtal load capacitance
    rf22_write(0x0A, 0x02);        // uC CLK: 10MHz
    
    rf22_write(0x0b, 0xf2);        // GPIO0: TX_ANT - f2
    rf22_write(0x0c, 0xf5);        // GPIO1: RX ANT - f5
    rf22_write(0x0d, 0x00);        // GPIO2: uC Clock out
    rf22_write(0x0e, 0x00);        
    rf22_write(0x0f, 0x70);        // ADC Input: GND
    rf22_write(0x10, 0x00);        // ADC offset: 0
    rf22_write(0x12, 0x00);        // temp sensor calibration off
    rf22_write(0x13, 0x00);        // temp sensor offset: 0
    rf22_write(0x1d, 0x40);        // enable AFC
    rf22_write(0x1e, 0x0A);        // afc timing
    rf22_write(0x1f, 0x03);        // afc timing

    rf22_write(0x1C, 0x05);        // IF bandwidth
    rf22_write(0x20, 0x83);        // Clock Recovery Oversampling Rate
    rf22_write(0x21, 0xC0);        // Clock Recovery Offset 2
    rf22_write(0x22, 0x13);        // Clock Recovery Offset 1
    rf22_write(0x23, 0xA9);        // Clock Recovery Offset 0
    rf22_write(0x24, 0x00);        // Clock Recovery Timing Loop Gain 1
    rf22_write(0x25, 0x04);        // Clock Recovery Timing Loop Gain 0
    rf22_write(0x2A, 0x24);

    rf22_write(0x27, 0x10);        // RSSI Threashold: -120dB

    rf22_write(0x30, 0x8c);        // data access: RX/TX packet handling, enable crc: CCIT
    rf22_write(0x32, 0xff);        // header check enable
    rf22_write(0x33, 0x42);        // 2 word synchronisation
    rf22_write(0x34, 0x10);        // preamble length: 16 nibbles, = 64bits
    rf22_write(0x35, 0x30);        // preamble detection control: 6 nibbles = 24bits
    rf22_write(0x36, 0x2d);        // sync word 3
    rf22_write(0x37, 0xd4);        // sync word 2
    rf22_write(0x38, 0xAA);        // sync word 1
    rf22_write(0x39, 0xAA);        // sync word 0
    rf22_write(0x3a, 'h');        // transmit header 3
    rf22_write(0x3b, 'o');        // transmit header 2
    rf22_write(0x3c, 'p');        // transmit header 1
    rf22_write(0x3d, 'e');        // transmit header 0
    rf22_write(0x3e, 17);        // packet length
    rf22_write(0x3f, 'h');        // check header 3
    rf22_write(0x40, 'o');        // check header 2
    rf22_write(0x41, 'p');        // check header 1
    rf22_write(0x42, 'e');        // check header 0
    rf22_write(0x43, 0xff);        // header enable mask 3
    rf22_write(0x44, 0xff);        // header enable mask 2
    rf22_write(0x45, 0xff);        // header enable mask 1
    rf22_write(0x46, 0xff);        // header enable mask 0

    rf22_write(0x69, 0x60);        // AGC on
    rf22_write(0x6a, 0x0b);        // agc override 2
    rf22_write(0x6d, 0x0F);        // tx power: +17dBm
    
    rf22_write(0x6E,0x13);        // set baud high
    rf22_write(0x6F,0xa9);        // set baud low

    rf22_write(0x70, 0x2C);        // modulation control
    rf22_write(0x71, 0x22);        // modulation control 2: FIFO mode, OOK  //0x21 / 0x00
    
    rf22_write(0x72, 0x50);        // frequency deviation: 45kHz
    rf22_write(0x73, 0x00);        // offset: 0
    rf22_write(0x74, 0x00);        // offset: 0
    
    rf22_write(0x79, 0x0);        // frequency hopping off
    rf22_write(0x7a, 0x0);        // frequency hopping off
    
#ifdef BAND_868
    rf22_write(0x75, 0x73);        // 860-880MHz range
#else
    rf22_write(0x75, 0x53);        // 430-440MHz range
#endif








Сейчас тестировал такой код. Програмный SPI. Вручную дёргаю ногами передача прием. Уже не знаю на что грешить.



Код
void SPI_RFM_INIT (void)
{
    SPI_WRITE(0x06, 0x00); // interrupt all disable
    SPI_WRITE(0x07, 01); // to ready mode
    SPI_WRITE(0x09, 0x7f); // cap = 12.5pf
    SPI_WRITE(0x0a, 0x05); //clk output is 2MHz
    
    SPI_WRITE(0x0C,3);//SPI_WRITE(0x0C,0b00010111); //SPI_WRITE(0x0C,0b00010111);     // GPIO Configuration 0.
    SPI_WRITE(0x0B,3);//SPI_WRITE(0x0B,0b00011000);     // GPIO Configuration 1.    
    
    SPI_WRITE(0x0d, 0x00); // GPIO2 for MCLK output
    SPI_WRITE(0x0e, 0x00); //GPIO port use default value
    SPI_WRITE(0x0f, 0x70); // NO ADC used
    SPI_WRITE(0x10, 0x00); //no adc used
    SPI_WRITE(0x12, 0x00); // no temperature sensor used
    SPI_WRITE(0x13, 0x00); // no temperature sensor used
    SPI_WRITE(0x70, 0x20); // no mancheset code, no data whiting, data rate < 30Kbps
    SPI_WRITE(0x1c, 0x04); // IF filter bandwidth
    SPI_WRITE(0x1d, 0x40); // AFC LOOP
    SPI_WRITE(0x1e, 0x08); //AFC timing
    SPI_WRITE(0x20, 0x41); //clock recovery
    SPI_WRITE(0x21, 0x60); //clock recovery
    SPI_WRITE(0x22, 0x27); //clock recovery
    SPI_WRITE(0x23, 0x52); //clock recovery
    SPI_WRITE(0x24, 0x00); //clock recovery timing
    SPI_WRITE(0x25, 0x06); //clock recovery timing
    SPI_WRITE(0x6e, 0x27); // Tx data rate 1
    SPI_WRITE(0x6f, 0x52); // Tx data rate 0
    SPI_WRITE(0x30, 0x8c); // data access control
    SPI_WRITE(0x32, 0xff); // header control
    SPI_WRITE(0x33, 0x42); // // header 3, 2, 1,0 used for head length, fixed packet length, synchronize word length 3, 2,
    SPI_WRITE(0x34, 64); // 64 nibble = 32byte preamble
    SPI_WRITE(0x35, 0x20); //0x35 need to detect 20bit preamble
    SPI_WRITE(0x36, 0x2d); // synchronize word
    SPI_WRITE(0x37, 0xd4);
    SPI_WRITE(0x38, 0x00);
    SPI_WRITE(0x39, 0x00);
    SPI_WRITE(0x3a, 's'); // set tx header
    SPI_WRITE(0x3b, 'o');
    SPI_WRITE(0x3c, 'n');
    SPI_WRITE(0x3d, 'g');
    SPI_WRITE(0x3e, 1); // total tx 17 byte
    SPI_WRITE(0x3f, 's'); // set rx header
    SPI_WRITE(0x40, 'o');
    SPI_WRITE(0x41, 'n');
    SPI_WRITE(0x42, 'g');
    SPI_WRITE(0x43, 0xff); // all the bit to be checked
    SPI_WRITE(0x44, 0xff); // all the bit to be checked
    SPI_WRITE(0x45, 0xff); // all the bit to be checked
    SPI_WRITE(0x46, 0xff); // all the bit to be checked
    
    SPI_WRITE(0x6d, 0x03); // tx power to Max
    SPI_WRITE(0x79, 0x0); // no frequency hopping
    SPI_WRITE(0x7a, 0x0); // no frequency hopping
    SPI_WRITE(0x71, 0x22); // Gfsk, fd[8] =0, no invert for Tx/Rx data, fifo mode, txclk -->gpio
    SPI_WRITE(0x72, 0x48); // frequency deviation setting to 45k = 72*625
    SPI_WRITE(0x73, 0x0); // no frequency offset
    SPI_WRITE(0x74, 0x0); // no frequency offset
    SPI_WRITE(0x75, 0x53); // frequency set to 434MHz
    SPI_WRITE(0x76, 0x64); // frequency set to 434MHz
    SPI_WRITE(0x77, 0x00);// frequency set to 434MHz
    

    
    SPI_WRITE(0x08, 0x03); // fifo reset
    SPI_WRITE(0x08, 0x00);
algidim
Если еще надо могу поделится ! Скачал откудато пример - переделал за 1 час по stm32f103 - сразу заработало, но пока не пригодилось ! (правда особо глубоко невникл , но данные от одного к другому модулю передает без проблем). Кстати удивила дальность уверенного приема – очень прилично для такого модуля !
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.