Перейти к содержанию

    

Alex_Golubev

Участник
  • Публикаций

    303
  • Зарегистрирован

  • Посещение

Весь контент Alex_Golubev


  1. Привет. Уж очень интересует вопрос . Сколько будет приносить денег 4 видеокарты gtx1080ti ? Также прошу подсказать (рассказать) как правильно считается прибыль.
  2. Добрый день. Вот не знаю будет работать или нет. На выход LMR14050 подключена нагрузка в 4 Ом. Напряжение стабилизации 9В. Минимальное время включение нагрузки 1 мкС, максимальное не ограничено. Как отреагирует (переходной процесс) LMR14050 если будет включена нагрузка на 1 мкС, 4 Ом? Просядит напряжение? Мне нужна хорошая опора на 9В которая сможет держать напряжение в импульсном режиме.
  3. Эта картинка для 300КГц, а если сделать 2МГц? Для меня допустимая просадка не более 1 мВ через 0,6 мкС после подключения нагрузки. То есть весь переходной процесс не более 0,6мкС.
  4. Привет. Как убрать возбуждение ОУ ? На схеме изображен стабилизатор напряжения на 9В. В качестве управляющего элемента выбран полевой транзистор P проводимости. Управляет транзистором ОУ. 1.rar
  5. Спаял схему чтобы посмотреть как будет работать на практике. Схема такая же как представлена выше. ОУ взял AD8027 полевой транзистор fr9024. На осциллографе увидел возбуждение на затворе и выходе. Шунтирование резистора R2 не помогает.
  6. И потом ставить на выходе инвертор? Не понял смысла. Сделал так вроде помогло.
  7. Добрый день. Кто нибудь, когда нибудь, пытались сделать широкополосный приемник сигнала? Ну так скажем от 300 МГц до 915 МГц. На микросхеме cc1101? Как понимаю для этого нужно сначала каким-то образом найти несущею, а после настроить входной фильтр. На рынки есть широкополосные балуны пример B0310J50100AHF но нужна еще широкополосная антенна.
  8. Привет. Есть в nrf52832 такая область памяти флешь в которую можно записывать данные и не бояться что они потеряются после перепрошивки через bootloader?
  9. Вопрос по cc1101.

    Добрый день. Подскажите можно инвертировать вход GDO0 в микросхеме cc1101 в асинхронном режиме? Я использую GDO0 data input. Получается в режиме асинхронной передачи, когда на GDO0 логическая 1 он не передает данные а когда логический нулю передает. Это очень неудобно. Можно инвертировать и сделать наоборот?
  10. Привет. Не могу понять так должно быть или нет? B0310J50100A0HF pin 2 звонится на pin4.
  11. Библиотеки для ili9341

    Привет. Поделитесь пожалуйста библиотеками для работы с ili9341. Интерфейс spi.
  12. Добрый день!Нужно найти ключ шлагбаума в массиве данных. В массив записываются данные периода и скважности сигнала. Сигнал состоит из логического нуля и единицы. Логический нуль кодируется периодом в 960 мкс и длительностью 640 мкс. Логическая единица кодируется периодом 960 мкс и длительность 320 мкс. Форма сигнала представлена на рисунки 1.Также сигнала имеет пилотный период равный примерно 15 000 мкс рисунок 2. Преамбула сигнала составляет 320 мкс. Длина ключа 12 бит с преамбулой 13 бит. Что сделал инициализировал периферию мк для поиска периода и длительности. Настроил так периферию что в процессе поиска периода и длительности участвует только аппаратная часть мк, не каких программных обработок нет. Только забираю данные периода и длительности в прерывании (конечно пропуск возможен но маловероятно). Счет периода от спадающего до спадающего фронта, по растущему фронту длительность. Приложил два файла (сделанные в разное время) с данными периода и длительности. Как видим из фалов, в массиве присутствуют шумы и повторение кодирования логических нулей и единиц отличаются. Написал код: uint8_t search_key(void) // поиск ключа { static uint8_t error_cade = 0; // код ошибки counter_T = 0; for(i = 0; i < 128 - 1; i++){ if((captur_0[i+1] - captur_0[i]) > captur_0[i]){ switch(counter_T){ case 0: T1 = i+1; counter_T ++; break; // координата пилотного периода 1 case 1: T2 = i+1; counter_T ++; break; // координата пилотного периода 2 case 2: T3 = i+1; // координата пилотного периода 3 if(((T3 - T2) == (T2 - T1)) && ((T3 - T2) >= 12)){ // меньше 12 бит не видал ключей T1 ++; T2 ++; T3 ++; counter_T ++; for(j = 0; j < (T3 - T2) - 1; j++){ if(!(((captur_0[j+T3] - captur_1[j+T3]) - (captur_0[j+T2] - captur_1[j+T2])) > -64 && ((captur_0[j+T3] - captur_1[j+T3]) - (captur_0[j+T2] - captur_1[j+T2])) < 64)){ counter_T = 0; error_cade = 0; break; } else{ if((((captur_0[j+T3] - captur_1[j+T3]) - (captur_0[j+T2] - captur_1[j+T2])) > -64 && ((captur_0[j+T3] - captur_1[j+T3]) - (captur_0[j+T2] - captur_1[j+T2])) < 64)){ if (CheckValue(320, captur_1[j+T2]) && CheckValue(640, (captur_0[j+T2] - captur_1[j+T2]))) // valid 1 { set_bit(BARRIER_LIST[0].key,j); } else if (CheckValue(640, captur_1[j+T2]) && CheckValue(320, (captur_0[j+T2] - captur_1[j+T2]))) // valid 0 { clear_bit(BARRIER_LIST[0].key,j); } error_cade = 1; } } } if(error_cade == 0 && i > 72){ return(error_cade); } __NOP(); } else{ counter_T = 0; } break; } } } return(error_cade); } Код работает, проверял повторяемость получаемого ключа. Но мне код не нравится. Думаю что есть что-то более простое и надежно и с быстрым поиском ключа.
  13. Switch и прием команд

    Добрый день. Подскажите как проще всего распознать входную команду составленную из нескольких байт и выполнить необходимое действие? Пример. У нас на входе есть последовательность байт вида: пришла команда 0x01 0x02 0x01 -> вызываем обработчик команды 0x01 0x02 0x01 пришла команда 0x01 0x02 0x02 -> вызываем обработчик команды 0x01 0x02 0x02 пришла команда 0x01 0x02 0x03 -> вызываем обработчик команды 0x01 0x02 0x03 пришла команда 0x01 0x03 0x01 -> вызываем обработчик команды 0x01 0x03 0x01 пришла команда 0x03 0x03 0x01 -> вызываем обработчик команды 0x03 0x03 0x01 и так далее. На if else не охота будет много ветвлений и плохо читабельный код. С помощью хэш тоже не охота из - за коллизии.
  14. nrf52832 Buttonless security DFU

    Привет. Не могу ни как запустить ble_app_buttonless_dfu.С DFU разобрался научился прошивать и запускать программу. Научился делать настройки для bootloader с помощью команды nrfutil settings generate .... И сшивать две прошивки вмести с помощью mergehex --merge hexfile1.hex hexfile2.hex --output output.hex.Но вот buttonless не как. Прошиваю заведомо рабочий bootloader и softdevice. После запускаю отладку в IAR а программа не стартует (показал на рисунки). В чем дело?
  15. Привет. Не смог найти в документации https://www.segger.com/products/debug-probes/j-link/tools/rtt-viewer/ как это сделать. Нужно поменять вывод данных с ascii на hex. Как это сделать?
  16. Привет. В примере от Nordic BLE_UART подключен seria port (обычный UART). Для вывода они задействовали printf();. И где-то в коде разместили putchar или еще какую функцию. Но где они ее разместили найти не могу. Можете подсказать как найти функцию вывода из printf в UART? Мне нужно отключить этот UART и подключить SWO. А я сделать этого не могу.
  17. PCB антенна small size 433 МГц для cc1101

    Привет. Можете поделится pcb small size антенной на 433 МГц для cc1101?
  18. Привет. Как лучше включить, встроенный операционный усилитель с коэффициентом усиления 10 в STM32F303VET6 для измерения дифференциального напряжения с последующей оцифровкой АЦП? Нужно поднять точность, измерения сопротивления, включенного в измерительный мост. Для этого нужен коэффициент усиления хотя бы 10. Нет возможности использовать специализированный инструментальный усилитель, нужно обойтись встроенным. Как понял в stm32f303 ОУ обычный не инструментальный. Как следствие нужно городить схему включения диф. усилителя с вытекающими от суда проблемами. Или собирать из трех инструментальный усилитель. Блога в stm32f303 их 4 штуки. В общем не знаю как быть.
  19. NRF52832 PWM capture

    Привет. Не могу понять как лучше сделать захват PWM сигнала на nrf52832, чтобы можно было детектировать период и скважность. У nrf52832 внутри нет специализированного таймера для этого, как у stm32, но зато есть PPI с помощью которого можно объединить вход с таймером. Вот пример инициализируем, допустим pin 5 на вход. После инициализируем GPIOTE на создание двух событий роста фронта и спада. Через PPI привязываем к росту фронта Start Timer а к спаду TASKS_CAPTURE[0], а как остановить таймер? Какое еще событие создать, чтобы таймер остановился и вызвал вектор прерывания для обработки данных? Или нужно как-то по другому инициализировать таймер.
  20. Привет. Можете поделится рабочем примером для cc1101? Нужен пример настройки режима PWM-ASK. Частота 433.
  21. Вроде уже все правильно сделал но все равно не работает зараза. На выходе 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 }
  22. Хочу уточнить. Нужно ждать на MISO перехода в нуль при установки cs в нуль?
  23. Прям открытие для меня какое то. А на какой вы странице в даташите прочитали, что нужно ждать логического нуля на MISO? Мне бы хотелось посмотреть временные диаграммы работы SPI в связки с cc1101.
  24. А почему программный SPI ? Аппаратный не подошел ? Почему вы ждете ? while (CC1101_MISO() != 0);
  25. Вот не знаю в чем может быть дело, вроде должно работать а не работает. Начну из далека. Хочу сделать пульт для открытия шлагбаума. Выбор пал на cc1101, но купил еще и CHJ-9921. Дождался наконец то прихода cc1101 и CHJ-9921 c али. Подключил к nrf52832 по spi, предварительно проверил SPI путем замыкания MOSI on MISO и правильность работы CS. Все работало нормально. После подключил cc1101 и тут начались проблемы, CHJ-9921 видит сигнал с пульта от шлагбаума, а cc1101 нет. Проверял выход сигнала на ножки – GDO2 осциллографом, как понимаю должен увидать на PIN – GDO2 сигнал похожий на то что выдала CHJ-9921 рис.1. А его нет. Настроил с помощью rf smart studio cc1101. Сгенерировал там код вставил в проект, но не работает. Модуляция ASK как понимаю простая азбука морзе, когда есть несущая логическая '1', когда нет логический '0'. Пробовал подключал китайский приемник CHJ-9921, он кажет сигнал на выходе рис.1. Посмотрел сигнал на SPI, тоже все нормально рис.2. Смотрел на ножках SCLK и SI. Сигнал SC есть проверял. Прикрепил схему по которой подключал cc1101. Вот последней код: 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 } Может, кто подскажет куда копать?