Форум РадиоКот https://radiokot.ru/forum/ |
|
Вопрос по микросхеме cc1101 https://radiokot.ru/forum/viewtopic.php?f=28&t=157413 |
Страница 1 из 3 |
Автор: | Alex_Golubev [ Пт сен 14, 2018 13:32:46 ] | ||
Заголовок сообщения: | Вопрос по микросхеме cc1101 | ||
Привет. Хочу сделать брелок для открытия шлагбаума. Частота 433 МГц. Модуляция PWM-ASK показал на рисунки (если назвал не правильно то поправьте). Снял осциллограмму с брелка который открывает шлагбаум с помощью приемника CHJ-9921 купленного на алиэкспрес. Увидал, что кодировка похожа на pwm-ask (?) т.е. кодировка '0' и '1' происходит с помощью скважности, период сигнала остается тем же. Плюс в начале преамбула. Вот думаю, можно такой же сигнал сделать с помощью cc1101 от ti?
|
Автор: | Ser60 [ Пт сен 14, 2018 14:34:51 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
Мжно, используя сс1101 в асинхроннопм режиме с модуляцией OOK/ASK. См. секцию 27 в ДШ. |
Автор: | Alex_Golubev [ Пт сен 14, 2018 14:55:02 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
А временные интервалы '0' и '1' формировать микроконтроллером? Или можно сс1101 ? |
Автор: | Ser60 [ Пт сен 14, 2018 19:52:03 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
В этом случае только микроконтроллером. |
Автор: | Alex_Golubev [ Сб сен 15, 2018 03:59:22 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
Спасибо. Всю нужную информацию по cc1101 узнал. Теперь осталось разобраться с настройками данного модуля. Хотел еще спросить. Вот мне надо две несущей частоты 433 и 868 МГц. Для решения можно пойти тремя путями (которые я вижу): 1. Применить две микросхемы cc1101. 2. Применить мультиплексор для коммутации. 3. Поставить одну антенну (допустим на 433) и просто переключать частоту в сс1101. Тогда получается на 868 будет большее затухание. Как бы вы решили? Можно попросить дать ссылку на pcb антенны 433 и 868 МГц? |
Автор: | Alex_Golubev [ Сб окт 20, 2018 17:38:16 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
А как у cc1101 выключить преамбулу и синх. слово? |
Автор: | Ser60 [ Сб окт 20, 2018 22:56:47 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
См. таблицу 30 в ДШ. По поводу переключения диапазонов, я поставил-бы две сс1101 со своими фильтрами на каждый диапазон. |
Автор: | Alex_Golubev [ Вс окт 21, 2018 12:56:10 ] | ||
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 | ||
Не могу найти в rf studio как настроить pin (GDO2 and GDO0) как отключить преамбулу и синх. слово. Чтобы можно было формировать pwm.
|
Автор: | Ser60 [ Вс окт 21, 2018 16:44:10 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
За один клик это не делается. В правой части экрана студио видны регистры настройки чипа. Для их изменения нужно кликнуть на регистр мышкой. Описание регистров приведено в ДШ на чип. Какие места в ДШ читать я указал выше. Для настройки функций пинов см. описание регистров IOCFG. |
Автор: | Alex_Golubev [ Пн окт 22, 2018 08:27:10 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
Не понял в каком регистре меняется мощность передатчика? Создавал два проекта в smart rf studio с разными мощностями передатчика. В одном случаи ставил 0 db в другом 10 db, другие параметры не трогал. Увидал, что сгенерированный код в одном случаи и в другом одинаковый. |
Автор: | Ser60 [ Пн окт 22, 2018 13:52:31 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
См. описание регистра 0х3Е в секции 24 ДШ. |
Автор: | Alex_Golubev [ Пн окт 22, 2018 16:28:03 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
не нашел регистра 0x3E в даташите на cc1101. |
Автор: | Ser60 [ Пн окт 22, 2018 18:52:59 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
Читайте секцию 24 в ДШ. Там рассказано как работать с этим регистром. |
Автор: | Alex_Golubev [ Вт окт 23, 2018 14:51:52 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
Настроил пока на прием, мощность передатчика не трогал, вот код: СпойлерКод: 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 все работали. |
Автор: | Ser60 [ Вт окт 23, 2018 21:39:00 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
Проверьте соответствие частот и методов модуляции передатчика и приёмника. Другого на расстоянии, не видя кода, схемы, и всего проекта в целом, мне трудно что-то советовать. |
Автор: | Alex_Golubev [ Ср окт 24, 2018 15:32:10 ] | ||||
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 | ||||
Цитата: методов модуляции передатчика и приёмника модуляция 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 } Прикрепил схему.
|
Автор: | Alex_Golubev [ Чт ноя 01, 2018 07:06:55 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
Вроде уже все правильно сделал но все равно не работает зараза. На выходе 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 } куда можно еще посмотреть ? |
Автор: | Ser60 [ Чт ноя 01, 2018 15:45:29 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
Алекс, я сейчас в отезде до выходных. По приезду будет время - сконфигурирую свой чип на асинхронный приём. Странно, что статус 0х0F даже в режиме приёма. А на приёме-ли он вообще? Без этого на выходе точно ничего не будет. |
Автор: | Alex_Golubev [ Пт ноя 02, 2018 06:25:44 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
Цитата: По приезду будет время - сконфигурирую свой чип на асинхронный приём Буду, очень благодарен Вам.
|
Автор: | Alex_Golubev [ Сб ноя 03, 2018 17:01:52 ] |
Заголовок сообщения: | Re: Вопрос по микросхеме cc1101 |
Вроде получилось принять данные с пульта на 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? |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |