Обсуждаем приемники, передатчики, радиомикрофоны, жучки, генераторы, ВЧ-усилители, антенны и прочее радиохозяйство
Ответить

Вопрос по микросхеме cc1101

Пт сен 14, 2018 13:32:46

Привет.
Хочу сделать брелок для открытия шлагбаума. Частота 433 МГц. Модуляция PWM-ASK показал на рисунки (если назвал не правильно то поправьте).
Снял осциллограмму с брелка который открывает шлагбаум с помощью приемника CHJ-9921 купленного на алиэкспрес. Увидал, что кодировка похожа на pwm-ask (?) т.е. кодировка '0' и '1' происходит с помощью скважности, период сигнала остается тем же. Плюс в начале преамбула.

Вот думаю, можно такой же сигнал сделать с помощью cc1101 от ti?
Вложения
NewFile0.jpg
(25.77 KiB) Скачиваний: 583

Re: Вопрос по микросхеме cc1101

Пт сен 14, 2018 14:34:51

Мжно, используя сс1101 в асинхроннопм режиме с модуляцией OOK/ASK. См. секцию 27 в ДШ.

Re: Вопрос по микросхеме cc1101

Пт сен 14, 2018 14:55:02

А временные интервалы '0' и '1' формировать микроконтроллером? Или можно сс1101 ?

Re: Вопрос по микросхеме cc1101

Пт сен 14, 2018 19:52:03

В этом случае только микроконтроллером.

Re: Вопрос по микросхеме cc1101

Сб сен 15, 2018 03:59:22

Спасибо. Всю нужную информацию по cc1101 узнал. Теперь осталось разобраться с настройками данного модуля.
Хотел еще спросить.
Вот мне надо две несущей частоты 433 и 868 МГц. Для решения можно пойти тремя путями (которые я вижу):
1. Применить две микросхемы cc1101.
2. Применить мультиплексор для коммутации.
3. Поставить одну антенну (допустим на 433) и просто переключать частоту в сс1101. Тогда получается на 868 будет большее затухание.
Как бы вы решили?

Можно попросить дать ссылку на pcb антенны 433 и 868 МГц?

Re: Вопрос по микросхеме cc1101

Сб окт 20, 2018 17:38:16

А как у cc1101 выключить преамбулу и синх. слово?

Re: Вопрос по микросхеме cc1101

Сб окт 20, 2018 22:56:47

См. таблицу 30 в ДШ. По поводу переключения диапазонов, я поставил-бы две сс1101 со своими фильтрами на каждый диапазон.

Re: Вопрос по микросхеме cc1101

Вс окт 21, 2018 12:56:10

Не могу найти в rf studio как настроить pin (GDO2 and GDO0) как отключить преамбулу и синх. слово. Чтобы можно было формировать pwm.
Вложения
1.png
(150.87 KiB) Скачиваний: 500

Re: Вопрос по микросхеме cc1101

Вс окт 21, 2018 16:44:10

За один клик это не делается. В правой части экрана студио видны регистры настройки чипа. Для их изменения нужно кликнуть на регистр мышкой. Описание регистров приведено в ДШ на чип. Какие места в ДШ читать я указал выше. Для настройки функций пинов см. описание регистров IOCFG.

Re: Вопрос по микросхеме cc1101

Пн окт 22, 2018 08:27:10

Не понял в каком регистре меняется мощность передатчика?
Создавал два проекта в smart rf studio с разными мощностями передатчика. В одном случаи ставил 0 db в другом 10 db, другие параметры не трогал. Увидал, что сгенерированный код в одном случаи и в другом одинаковый.

Re: Вопрос по микросхеме cc1101

Пн окт 22, 2018 13:52:31

См. описание регистра 0х3Е в секции 24 ДШ.

Re: Вопрос по микросхеме cc1101

Пн окт 22, 2018 16:28:03

не нашел регистра 0x3E в даташите на cc1101.

Re: Вопрос по микросхеме cc1101

Пн окт 22, 2018 18:52:59

Читайте секцию 24 в ДШ. Там рассказано как работать с этим регистром.

Re: Вопрос по микросхеме cc1101

Вт окт 23, 2018 14:51:52

Настроил пока на прием, мощность передатчика не трогал, вот код:
Спойлер
Код:

ItStatus1 = SpiReadRegister(0xf1); // возвращает 0x14.

halRfWriteReg(IOCFG0,0x0d);  //GDO0 Output Pin Configuration
halRfWriteReg(FIFOTHR,0x47); //RX FIFO and TX FIFO Thresholds
halRfWriteReg(SYNC1,0x00);   //Sync Word, High Byte
halRfWriteReg(SYNC0,0x00);   //Sync Word, Low Byte
halRfWriteReg(PKTLEN,0x00);  //Packet Length
halRfWriteReg(PKTCTRL0,0x32);//Packet Automation Control
halRfWriteReg(FSCTRL1,0x06); //Frequency Synthesizer Control
halRfWriteReg(FSCTRL0,0x00);
halRfWriteReg(FREQ2,0x10);   //Frequency Control Word, High Byte
halRfWriteReg(FREQ1,0xB0);   //Frequency Control Word, Middle Byte
halRfWriteReg(FREQ0,0x71);   //Frequency Control Word, Low Byte
halRfWriteReg(MDMCFG4,0xA7); //Modem Configuration
halRfWriteReg(MDMCFG3,0x32); //Modem Configuration
halRfWriteReg(MDMCFG2,0x30); //Modem Configuration
halRfWriteReg(MDMCFG1,0x22);
halRfWriteReg(MDMCFG0,0xF8);
halRfWriteReg(DEVIATN,0x40); //Modem Deviation Setting
halRfWriteReg(MCSM2,0x07);   //Main Radio Control State Machine Configuration
halRfWriteReg(MCSM1,0x30);   //Main Radio Control State Machine Configuration
halRfWriteReg(MCSM0,0x18);   //Main Radio Control State Machine Configuration
halRfWriteReg(FOCCFG,0x16);  //Frequency Offset Compensation Configuration
halRfWriteReg(AGCCTRL2,0x04);//AGC Control
halRfWriteReg(AGCCTRL1,0x00);//AGC Control
halRfWriteReg(AGCCTRL0,0x92);//AGC Control
halRfWriteReg(WORCTRL,0xFB); //Wake On Radio Control
halRfWriteReg(FREND1,0xB6);  //Front End TX Configuration
halRfWriteReg(FREND0,0x11);  //Front End TX Configuration
halRfWriteReg(FSCAL3,0xE9);  //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL2,0x2A);  //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL1,0x00);  //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL0,0x1F);  //Frequency Synthesizer Calibration
halRfWriteReg(TEST2,0x81);   //Various Test Settings
halRfWriteReg(TEST1,0x35);   //Various Test Settings
halRfWriteReg(TEST0,0x09);   //Various Test Settings


На ножки GDO0 в момент передачи с пульта информации, сигнала не обнаружено. Смотрел осциллографом.
Канал SPI проверял, подавал команды на ножку GDO0 CLK_XOSC/n все работали.

Re: Вопрос по микросхеме cc1101

Вт окт 23, 2018 21:39:00

Проверьте соответствие частот и методов модуляции передатчика и приёмника. Другого на расстоянии, не видя кода, схемы, и всего проекта в целом, мне трудно что-то советовать.

Re: Вопрос по микросхеме cc1101

Ср окт 24, 2018 15:32:10

методов модуляции передатчика и приёмника
модуляция ASK как понимаю простая азбука морзе, когда есть несущая логическая '1', когда нет логический '0'. Пробовал подключал китайский приемник CHJ-9921, он кажет сигнал на выходе рис.1. Посмотрел сигнал на SPI, тоже все нормально рис.2. Смотрел на ножках SCLK и SI. Сигнал SC есть проверял.
Вот последней код:
Спойлер
Код:

void halRfWriteReg(uint8_t reg, uint8_t value)
{

uint8_t buf[2]; 
buf[0] = reg;
buf[1] =  value;

spi_xfer_done = false;     
nrf_drv_spi_transfer(&spi, buf, 2, NULL, 0);
while (!spi_xfer_done)
{
__WFE();


}


uint8_t SpiReadRegister (uint8_t reg)
{
 
uint8_t buf[2]; 
buf[0] = reg;
buf[1] = 0;

spi_xfer_done = false;     
nrf_drv_spi_transfer(&spi, buf, 2, buf, 2);
while (!spi_xfer_done)
{
__WFE();
}
 
return(buf[1]);

}

void init_RF(void)
{
ItStatus1 = SpiReadRegister(0xf1);

halRfWriteReg(IOCFG2,0x0d);  //GDO0 Output Pin Configuration
//ItStatus1 = SpiReadRegister(IOCFG2);
halRfWriteReg(FIFOTHR,0x07); //RX FIFO and TX FIFO Thresholds
halRfWriteReg(SYNC1,0x00);   //Sync Word, High Byte
halRfWriteReg(SYNC0,0x00);   //Sync Word, Low Byte
halRfWriteReg(PKTLEN,0x00);  //Packet Length
halRfWriteReg(PKTCTRL0,0x32);//Packet Automation Control
halRfWriteReg(FSCTRL1,0x06); //Frequency Synthesizer Control
halRfWriteReg(FSCTRL0,0x00);
halRfWriteReg(FREQ2,0x10);   //Frequency Control Word, High Byte
halRfWriteReg(FREQ1,0xB0);   //Frequency Control Word, Middle Byte
halRfWriteReg(FREQ0,0x71);   //Frequency Control Word, Low Byte
halRfWriteReg(MDMCFG4,0xAC); //Modem Configuration
halRfWriteReg(MDMCFG3,0x22); //Modem Configuration
halRfWriteReg(MDMCFG2,0x30); //Modem Configuration
halRfWriteReg(MDMCFG1,0x22);
halRfWriteReg(MDMCFG0,0xF8);
halRfWriteReg(DEVIATN,0x40); //Modem Deviation Setting
halRfWriteReg(MCSM2,0x07);   //Main Radio Control State Machine Configuration
halRfWriteReg(MCSM1,0x30);   //Main Radio Control State Machine Configuration
halRfWriteReg(MCSM0,0x18);   //Main Radio Control State Machine Configuration
halRfWriteReg(FOCCFG,0x16);  //Frequency Offset Compensation Configuration
halRfWriteReg(AGCCTRL2,0x04);//AGC Control
halRfWriteReg(AGCCTRL1,0x00);//AGC Control
halRfWriteReg(AGCCTRL0,0x92);//AGC Control
halRfWriteReg(WORCTRL,0xFB); //Wake On Radio Control
halRfWriteReg(FREND1,0xB6);  //Front End TX Configuration
halRfWriteReg(FREND0,0x11);  //Front End TX Configuration
halRfWriteReg(FSCAL3,0xE9);  //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL2,0x2A);  //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL1,0x00);  //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL0,0x1F);  //Frequency Synthesizer Calibration
halRfWriteReg(TEST2,0x81);   //Various Test Settings
halRfWriteReg(TEST1,0x35);   //Various Test Settings
halRfWriteReg(TEST0,0x09);   //Various Test Settings
}


Прикрепил схему.
Вложения
1.png
(115.83 KiB) Скачиваний: 552
рис.2.jpg
(25.88 KiB) Скачиваний: 593
рис.1.jpg
(25.77 KiB) Скачиваний: 379

Re: Вопрос по микросхеме cc1101

Чт ноя 01, 2018 07:06:55

Вроде уже все правильно сделал но все равно не работает зараза. На выходе GOD2 меандр с частотой 6,5 МГц. На пульт нет реакции. Статус возвращается 0x0F.
Спойлер
Код:

int main(void)
{
    bool erase_bonds;

    NRF_POWER->DCDCEN = 1;
   
    // Initialize.
    uart_init();
    log_init();
    timers_init();
    buttons_leds_init(&erase_bonds);
    power_management_init();
    ble_stack_init();
    gap_params_init();
    gatt_init();
    services_init();
    advertising_init();
    conn_params_init();

    NRF_LOG_INFO("Debug logging for UART over RTT started.");
    advertising_start();
   
    nrf_fstorage_api_t * p_fs_api;
    p_fs_api = &nrf_fstorage_sd;
    nrf_fstorage_init(&fstorage, p_fs_api, NULL);
   
    init_button();
    init_Timer_1(); // инициализация таймера 1 обработка клавиатуры
   
     NRF_SAADC->CH[0].CONFIG = (SAADC_CH_CONFIG_GAIN_Gain1_4    << SAADC_CH_CONFIG_GAIN_Pos) |
                               (SAADC_CH_CONFIG_MODE_SE         << SAADC_CH_CONFIG_MODE_Pos) |
                               (SAADC_CH_CONFIG_REFSEL_VDD1_4 << SAADC_CH_CONFIG_REFSEL_Pos) |
                               (SAADC_CH_CONFIG_RESN_Bypass     << SAADC_CH_CONFIG_RESN_Pos) |
                               (SAADC_CH_CONFIG_RESP_Bypass     << SAADC_CH_CONFIG_RESP_Pos) |
                               (SAADC_CH_CONFIG_TACQ_40us        << SAADC_CH_CONFIG_TACQ_Pos);
     
    NRF_SAADC->CH[0].PSELP = SAADC_CH_PSELP_PSELP_AnalogInput0 << SAADC_CH_PSELP_PSELP_Pos;
    NRF_SAADC->CH[0].PSELN = SAADC_CH_PSELN_PSELN_NC << SAADC_CH_PSELN_PSELN_Pos;
   
    NRF_SAADC->RESOLUTION = SAADC_RESOLUTION_VAL_14bit << SAADC_RESOLUTION_VAL_Pos;
   
    NRF_SAADC->RESULT.MAXCNT = 16;
    NRF_SAADC->RESULT.PTR = (uint32_t)&result;
   
    NRF_SAADC->SAMPLERATE = 0x7FF | SAADC_SAMPLERATE_MODE_Timers << SAADC_SAMPLERATE_MODE_Pos;
   
    NRF_SAADC->ENABLE = SAADC_ENABLE_ENABLE_Enabled << SAADC_ENABLE_ENABLE_Pos;
   
   
    NRF_SAADC->TASKS_CALIBRATEOFFSET = 1;
    while (NRF_SAADC->EVENTS_CALIBRATEDONE == 0);
    NRF_SAADC->EVENTS_CALIBRATEDONE = 0;
    while (NRF_SAADC->STATUS == (SAADC_STATUS_STATUS_Busy <<SAADC_STATUS_STATUS_Pos));
   
    NRF_SAADC->TASKS_START = 1;
    while (NRF_SAADC->EVENTS_STARTED == 0);
    NRF_SAADC->EVENTS_STARTED = 0;

    NRF_SAADC->TASKS_SAMPLE = 1;
  //  while (NRF_SAADC->EVENTS_END == 0);
  //  NRF_SAADC->EVENTS_END = 0;
   
    array_test[0] = 0x8a;
    array_test[1] = 0xa0;
   
    NRF_GPIO->DIRSET |= (1UL << SDN);
    NRF_GPIO->PIN_CNF[SDN] = (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos) |
                             (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos) |
                             (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) |
                             (GPIO_PIN_CNF_DRIVE_Msk) |
                             (GPIO_PIN_CNF_SENSE_Msk);
 
   
   NRFX_IRQ_PRIORITY_SET(GPIOTE_IRQn, NRFX_GPIOTE_CONFIG_IRQ_PRIORITY);
   NVIC_EnableIRQ(GPIOTE_IRQn);

   NRF_GPIOTE->CONFIG[0] =  (GPIOTE_CONFIG_POLARITY_HiToLo << GPIOTE_CONFIG_POLARITY_Pos)
                           | (30 << GPIOTE_CONFIG_PSEL_Pos)
                           | (GPIOTE_CONFIG_MODE_Event << GPIOTE_CONFIG_MODE_Pos);
   
   NRF_GPIOTE->INTENSET  = GPIOTE_INTENSET_IN0_Set << GPIOTE_INTENSET_IN0_Pos;

   init_pin_RF(); // инициализируем порты ввода вывода cc1101
   POWER_UP_RESET_CC1100();
   init_RF(); // инициализация cc1101
   ItStatus1 = SpiTxRxByte(0x3D);
   nrf_delay_ms(10);
   ItStatus1 = SpiTxRxByte(0x34);
   
    // Enter main loop.
    for (;;)
    {
       
    idle_state_handle();
   
    Scan_Key();// сканирование клавиатуры
       
    }
}

void RESET_CC1100(void)
{
   Low_CC1100_CSN ;
   while( ((NRF_GPIO->IN >> SPI_MISO_PIN) & 1UL) != 0);
   SpiTxRxByte(CCxxx0_SRES);       //Reset command
   while( ((NRF_GPIO->IN >> SPI_MISO_PIN) & 1UL) != 0);
   Hign_CC1100_CSN;
}


void POWER_UP_RESET_CC1100(void)
{
   Hign_CC1100_CSN;
   for(unsigned char i = 0; i < 128; i++){__NOP();}
   Low_CC1100_CSN ;
   for(unsigned char i = 0; i < 128; i++){__NOP();}
   Hign_CC1100_CSN;
   nrf_delay_ms(5);
   RESET_CC1100();         // Reset CC1100
}


void init_pin_RF(void)
{

   NRF_GPIO->DIRSET |= (1UL << SPI_SCK_PIN);
   
   NRF_GPIO->DIRSET |= (1UL << SPI_MOSI_PIN);
   
   NRF_GPIO->DIRSET = (0UL << SPI_MISO_PIN);

   NRF_GPIO->PIN_CNF[SPI_MISO_PIN] = (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) |
                                       (GPIO_PIN_CNF_PULL_Pullup << GPIO_PIN_CNF_PULL_Pos); 
   Hign_CC1100_CSN; // установка cs в еденицу
}


void halRfWriteReg(uint8_t reg, uint8_t value)
{   
   uint8_t buf[2]; // локальный буфер для записи в cc1101
   buf[0] = reg; // регистр адреса
   buf[1] =  value; // что записываем в регистр

   NRF_SPIM0->ENABLE &= ~(SPIM_ENABLE_ENABLE_Enabled << SPIM_ENABLE_ENABLE_Pos); // выключаем SPI
   NRF_SPIM0->INTENSET = 0; // выключаем все прирывания
   NRF_SPIM0->PSEL.SCK  =  SPI_SCK_PIN; // вывод CLK
   NRF_SPIM0->PSEL.MOSI = SPI_MOSI_PIN; // вывод MOSI
   NRF_SPIM0->PSEL.MISO = SPI_MISO_PIN; // ввод MISO
   NRF_SPIM0->FREQUENCY = SPIM_FREQUENCY_FREQUENCY_M4; // установленая скорость 4 МГц
   NRF_SPIM0->RXD.PTR = NULL;
   NRF_SPIM0->RXD.MAXCNT = 0;
   NRF_SPIM0->RXD.LIST = (SPIM_RXD_LIST_LIST_Disabled << SPIM_RXD_LIST_LIST_Pos);
   NRF_SPIM0->TXD.PTR = (uint32_t)&buf;
   NRF_SPIM0->TXD.MAXCNT = sizeof(buf);
   NRF_SPIM0->TXD.LIST = (SPIM_RXD_LIST_LIST_Disabled << SPIM_RXD_LIST_LIST_Pos);
   
   NRF_SPIM0->CONFIG =  (SPIM_CONFIG_ORDER_MsbFirst << SPIM_CONFIG_ORDER_Pos) | (SPIM_CONFIG_CPHA_Leading << SPIM_CONFIG_CPHA_Pos) | (SPIM_CONFIG_CPOL_ActiveHigh << SPIM_CONFIG_CPOL_Pos);
   
   NRF_SPIM0->ENABLE |= (SPIM_ENABLE_ENABLE_Enabled << SPIM_ENABLE_ENABLE_Pos); // включаем SPI
   
   Low_CC1100_CSN;
   while( ((NRF_GPIO->IN >> SPI_MISO_PIN) & 1UL) != 0);
   
   NRF_SPIM0->EVENTS_ENDRX   = 0;
   NRF_SPIM0->EVENTS_ENDTX   = 0;
   NRF_SPIM0->EVENTS_END     = 0;
   NRF_SPIM0->EVENTS_STARTED = 0;
   NRF_SPIM0->EVENTS_STOPPED = 0;
   NRF_SPIM0->TASKS_START    = 1; // стартуем
   while (NRF_SPIM0->EVENTS_STARTED == 0); // ждем событие старта
   while(NRF_SPIM0->EVENTS_ENDTX == 0);    // ждем события окончания передачи данных
   NRF_SPIM0->EVENTS_ENDTX = 0;
   Hign_CC1100_CSN;
}


uint8_t SpiTxRxByte(uint8_t dat) // отправка одного байта в cc1101
{

   uint8_t buf[1], buf_RX[1]; // локальный буфер для записи в cc1101
   buf[0] = dat; // регистр адреса
   buf_RX[0] = 0;

   NRF_SPIM0->ENABLE &= ~(SPIM_ENABLE_ENABLE_Enabled << SPIM_ENABLE_ENABLE_Pos); // выключаем SPI
   NRF_SPIM0->INTENSET = 0; // выключаем все прирывания
   NRF_SPIM0->PSEL.SCK  =  SPI_SCK_PIN; // вывод CLK
   NRF_SPIM0->PSEL.MOSI = SPI_MOSI_PIN; // вывод MOSI
   NRF_SPIM0->PSEL.MISO = SPI_MISO_PIN; // ввод MISO
   NRF_SPIM0->FREQUENCY = SPIM_FREQUENCY_FREQUENCY_M4; // установленая скорость 4 МГц
   NRF_SPIM0->RXD.PTR = (uint32_t)&buf_RX;
   NRF_SPIM0->RXD.MAXCNT = sizeof(buf_RX);
   NRF_SPIM0->RXD.LIST = (SPIM_RXD_LIST_LIST_Disabled << SPIM_RXD_LIST_LIST_Pos);
   NRF_SPIM0->TXD.PTR = (uint32_t)&buf;
   NRF_SPIM0->TXD.MAXCNT = sizeof(buf);
   NRF_SPIM0->TXD.LIST = (SPIM_RXD_LIST_LIST_Disabled << SPIM_RXD_LIST_LIST_Pos);
   
   NRF_SPIM0->CONFIG =  (SPIM_CONFIG_ORDER_MsbFirst << SPIM_CONFIG_ORDER_Pos) | (SPIM_CONFIG_CPHA_Leading << SPIM_CONFIG_CPHA_Pos) | (SPIM_CONFIG_CPOL_ActiveHigh << SPIM_CONFIG_CPOL_Pos);
   
   NRF_SPIM0->ENABLE |= (SPIM_ENABLE_ENABLE_Enabled << SPIM_ENABLE_ENABLE_Pos); // включаем SPI
   
   Low_CC1100_CSN;
   while( ((NRF_GPIO->IN >> SPI_MISO_PIN) & 1UL) != 0);
   
   NRF_SPIM0->EVENTS_ENDRX   = 0;
   NRF_SPIM0->EVENTS_ENDTX   = 0;
   NRF_SPIM0->EVENTS_END     = 0;
   NRF_SPIM0->EVENTS_STARTED = 0;
   NRF_SPIM0->EVENTS_STOPPED = 0;
   NRF_SPIM0->TASKS_START    = 1; // стартуем
   while (NRF_SPIM0->EVENTS_STARTED == 0); // ждем событие старта
   while(NRF_SPIM0->EVENTS_END == 0);    // ждем события окончания передачи данных
   NRF_SPIM0->EVENTS_END = 0;
   Hign_CC1100_CSN;
   
   return(buf_RX[0]);
}


uint8_t SpiReadRegister (uint8_t reg)
{
   uint8_t buf[2]; // локальный буфер для записи в cc1101
   buf[0] = reg; // регистр адреса
   buf[1] = 0;

   NRF_SPIM0->ENABLE &= ~(SPIM_ENABLE_ENABLE_Enabled << SPIM_ENABLE_ENABLE_Pos); // выключаем SPI
   NRF_SPIM0->INTENSET = 0; // выключаем все прирывания
   NRF_SPIM0->PSEL.SCK  =  SPI_SCK_PIN; // вывод CLK
   NRF_SPIM0->PSEL.MOSI = SPI_MOSI_PIN; // вывод MOSI
   NRF_SPIM0->PSEL.MISO = SPI_MISO_PIN; // ввод MISO
   NRF_SPIM0->FREQUENCY = SPIM_FREQUENCY_FREQUENCY_M4; // установленая скорость 4 МГц
   NRF_SPIM0->RXD.PTR = (uint32_t)&buf;
   NRF_SPIM0->RXD.MAXCNT = sizeof(buf);
   NRF_SPIM0->RXD.LIST = (SPIM_RXD_LIST_LIST_Disabled << SPIM_RXD_LIST_LIST_Pos);
   NRF_SPIM0->TXD.PTR = (uint32_t)&buf;
   NRF_SPIM0->TXD.MAXCNT = sizeof(buf);
   NRF_SPIM0->TXD.LIST = (SPIM_RXD_LIST_LIST_Disabled << SPIM_RXD_LIST_LIST_Pos);
   
   NRF_SPIM0->CONFIG =  (SPIM_CONFIG_ORDER_MsbFirst << SPIM_CONFIG_ORDER_Pos) | (SPIM_CONFIG_CPHA_Leading << SPIM_CONFIG_CPHA_Pos) | (SPIM_CONFIG_CPOL_ActiveHigh << SPIM_CONFIG_CPOL_Pos);
   
   NRF_SPIM0->ENABLE |= (SPIM_ENABLE_ENABLE_Enabled << SPIM_ENABLE_ENABLE_Pos); // включаем SPI
   
   Low_CC1100_CSN;
   while( ((NRF_GPIO->IN >> SPI_MISO_PIN) & 1UL) != 0);
   
   NRF_SPIM0->EVENTS_ENDRX   = 0;
   NRF_SPIM0->EVENTS_ENDTX   = 0;
   NRF_SPIM0->EVENTS_END     = 0;
   NRF_SPIM0->EVENTS_STARTED = 0;
   NRF_SPIM0->EVENTS_STOPPED = 0;
   NRF_SPIM0->TASKS_START    = 1; // стартуем
   while (NRF_SPIM0->EVENTS_STARTED == 0); // ждем событие старта
   while(NRF_SPIM0->EVENTS_END == 0);    // ждем события окончания передачи данных
   NRF_SPIM0->EVENTS_END = 0;
   Hign_CC1100_CSN;
   
   return(buf[1]);
}


void init_RF(void)
{
ItStatus1 = SpiReadRegister(0xf1 | 0x80);

/*halRfWriteReg(IOCFG0,0x2E);  //GDO0 Output Pin Configuration
halRfWriteReg(IOCFG2,0x0d);  //GDO0 Output Pin Configuration
ItStatus1 = SpiReadRegister(IOCFG2 | 0x80);
halRfWriteReg(FIFOTHR,0x07); //RX FIFO and TX FIFO Thresholds
halRfWriteReg(SYNC1,0x00);   //Sync Word, High Byte
halRfWriteReg(SYNC0,0x00);   //Sync Word, Low Byte
halRfWriteReg(PKTLEN,0x00);  //Packet Length
halRfWriteReg(PKTCTRL1,0x00);//Packet Automation Control
halRfWriteReg(PKTCTRL0,0x32);//Packet Automation Control
halRfWriteReg(FSCTRL1,0x06); //Frequency Synthesizer Control
halRfWriteReg(FSCTRL0,0x00);
halRfWriteReg(FREQ2,0x10);   //Frequency Control Word, High Byte
halRfWriteReg(FREQ1,0xB1);   //Frequency Control Word, Middle Byte
halRfWriteReg(FREQ0,0x3b);   //Frequency Control Word, Low Byte
halRfWriteReg(MDMCFG4,0xAC); //Modem Configuration
halRfWriteReg(MDMCFG3,0x22); //Modem Configuration
halRfWriteReg(MDMCFG2,0x30); //Modem Configuration
halRfWriteReg(MDMCFG1,0x22);
halRfWriteReg(MDMCFG0,0xF8);
halRfWriteReg(DEVIATN,0x40); //Modem Deviation Setting
halRfWriteReg(MCSM2,0x07);   //Main Radio Control State Machine Configuration
halRfWriteReg(MCSM1,0x30);   //Main Radio Control State Machine Configuration
halRfWriteReg(MCSM0,0x18);   //Main Radio Control State Machine Configuration
halRfWriteReg(FOCCFG,0x16);  //Frequency Offset Compensation Configuration
halRfWriteReg(AGCCTRL2,0x04);//AGC Control
halRfWriteReg(AGCCTRL1,0x00);//AGC Control
halRfWriteReg(AGCCTRL0,0x92);//AGC Control
halRfWriteReg(WORCTRL,0xFB); //Wake On Radio Control
halRfWriteReg(FREND1,0xB6);  //Front End TX Configuration
halRfWriteReg(FREND0,0x11);  //Front End TX Configuration
halRfWriteReg(FSCAL3,0xE9);  //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL2,0x2A);  //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL1,0x00);  //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL0,0x1F);  //Frequency Synthesizer Calibration
halRfWriteReg(TEST2,0x81);   //Various Test Settings
halRfWriteReg(TEST1,0x35);   //Various Test Settings
halRfWriteReg(TEST0,0x09);   //Various Test Settings*/

halRfWriteReg(IOCFG2,0x0D);  //GDO2 Output Pin Configuration
halRfWriteReg(IOCFG0,0x2E);  //GDO0 Output Pin Configuration
halRfWriteReg(FIFOTHR,0x47); //RX FIFO and TX FIFO Thresholds
halRfWriteReg(SYNC1,0x7A);   //Sync Word, High Byte
halRfWriteReg(SYNC0,0x0E);   //Sync Word, Low Byte
halRfWriteReg(PKTLEN,0x14);  //Packet Length
halRfWriteReg(PKTCTRL0,0x32);//Packet Automation Control
halRfWriteReg(FSCTRL1,0x06); //Frequency Synthesizer Control
halRfWriteReg(FREQ2,0x10);   //Frequency Control Word, High Byte
halRfWriteReg(FREQ1,0xB0);   //Frequency Control Word, Middle Byte
halRfWriteReg(FREQ0,0x8A);   //Frequency Control Word, Low Byte
halRfWriteReg(MDMCFG4,0xAC); //Modem Configuration
halRfWriteReg(MDMCFG2,0x30); //Modem Configuration
halRfWriteReg(DEVIATN,0x40); //Modem Deviation Setting
halRfWriteReg(MCSM0,0x18);   //Main Radio Control State Machine Configuration
halRfWriteReg(FOCCFG,0x16);  //Frequency Offset Compensation Configuration
halRfWriteReg(AGCCTRL2,0x43);//AGC Control
halRfWriteReg(AGCCTRL1,0x49);//AGC Control
halRfWriteReg(WORCTRL,0xFB); //Wake On Radio Control
halRfWriteReg(FREND0,0x11);  //Front End TX Configuration
halRfWriteReg(FSCAL3,0xEA);  //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL2,0x2A);  //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL1,0x00);  //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL0,0x1F);  //Frequency Synthesizer Calibration
halRfWriteReg(TEST2,0x81);   //Various Test Settings
halRfWriteReg(TEST1,0x35);   //Various Test Settings
halRfWriteReg(TEST0,0x09);   //Various Test Settings

}


куда можно еще посмотреть ?

Re: Вопрос по микросхеме cc1101

Чт ноя 01, 2018 15:45:29

Алекс, я сейчас в отезде до выходных. По приезду будет время - сконфигурирую свой чип на асинхронный приём. Странно, что статус 0х0F даже в режиме приёма. А на приёме-ли он вообще? Без этого на выходе точно ничего не будет.

Re: Вопрос по микросхеме cc1101

Пт ноя 02, 2018 06:25:44

По приезду будет время - сконфигурирую свой чип на асинхронный приём
Буду, очень благодарен Вам.

Re: Вопрос по микросхеме cc1101

Сб ноя 03, 2018 17:01:52

Вроде получилось принять данные с пульта на 433.92 МГц.
Но мне не понятно почему статус возвращается 0x0F. Вот пример:
При старте, во основной функцие main:
Спойлер
Код:
   #define CCxxx0_SNOP         0x3D        // No operation. May be used to pad strobe commands to two
   POWER_UP_RESET_CC1100();
   ItStatus1 = SpiReadRegister(CCxxx0_SNOP);  // возврат 0x0f?


Где:
Спойлер
Код:

void RESET_CC1100(void)
{
   SpiTxRxByte(CCxxx0_SRES);       //Reset command
}


void POWER_UP_RESET_CC1100(void)
{
   Hign_CC1100_CSN;
  // for(unsigned int i = 0; i < 512; i++){__NOP();}
   nrf_delay_ms(1);
   Low_CC1100_CSN ;
   nrf_delay_ms(1);
   Hign_CC1100_CSN;
   nrf_delay_ms(1);
   RESET_CC1100();         // Reset CC1100
}



И не понял как выбрать скорость DATA RATE?
Ответить