Jump to content

carlogulliani

Members
  • Content Count

    51
  • Joined

  • Last visited

Community Reputation

0 Обычный

About carlogulliani

  • Rank
    Осваивающийся

Электроника

  • Стаж в электронике
    Менее года

Recent Profile Visitors

1385 profile views
  1. Спасибо за ответы. Прочитал заново, что написал, да, скорей всего не понятно. Собрал плату, следуя инструкции из апноута радио устройства, но не посмотрев, сделал петлю фидера в 3-4 см, естественно, ничего не ловлю, вернее ловлю на очень маленьком расстоянии, поэтому хочу согласовать антенный тракт с учетом своего фидера. Посмотрел, как это делается, в разрыв цепи паяятся кабель от анализатора, перед фидером у меня стоит П-фильтр и емкость. Вроде как вижу такой процесс, паяю провод до П-фильра, а на месте катушки паяю перемычку, замеряю R антенты и по калькулятору высчитываю катушку и емкость, чтобы КСВ был приближен к 1. Далее беру номиналы катушки и емкости и также припаиваю на плату, замеряю заново. Процесс повторяю, пока не достигну приемленного КСВ. Верно? Второй вопрос по самому проводу, который идет от анализатора до точек пайки на плате. В силу того, что на плате не предусмотрен разъем sma для согласования антенны (антенна пружинчитая, паяится на плату), снимаю с одного конца провода этот раъем и получаю две точки пайки: само жало и оплетку, жало паяю на линию к антенне, оплетку к земле, вопрос в том, есть ли особенности пайки этих двух точек? Например, при сильной скрутки оплетки меняются характеристики кабеля (сопротивление) или еще что-то. Еще третий вопрос возник, радио часть платы содержит компоненты в 0402 корпусе и из-за этого сложно подпаяться и жалом и оплеткой к ним, можно ли согласовывать на пустой плате (где ничего не припаяно) или обязательно нужен генератор для согласования? Вопрос возник, потому что изначально к анализатору подсоединяют антенну (через фидер или напрямую) и вроде как генератор в процессе не участвует.
  2. Подскажите, при согласовании антенны жало коаксила надо припаивать до п-фильтра или до фидера? Ещё вопрос, есть ли особенности в пайке оплётки коаксила к земле(скручивание и тд), особенности, чтобы увеличить чистоту замера КСВ?
  3. Поторопился я с выводами, похоже дело именно в инициализации трансмиттера, так как проверил плату в режиме приемника ассинхронного последовательного порта и с помощью логического анализатора четко увидел мои данные с пульта (не энкодировал их, но по преамбуле и величине пакета понял, а еще нога входа микроконтроллера дрыгается в момент передачи)
  4. Прошу прощения за долгий ответ. Спасибо за ссылку, но данный форум отключил регистрацию, а проштудировав все страницы топика, не смог найти ответ. По коду вопросов нет, скорей всего, что-то не так с платой, а конкретно с антенной частью, тк чип по SPI читается. Но даже не знаю, как проверить эту часть
  5. Глухо, наверное, не правильное слово использовал. Диапазон рабочий и я вижу данные от сенсоров соседей (если быть точным, то частота у меня 433,92), которые используют эту же частоту. Имеется ввиду, что от моего трансмиттера глухо, то есть данные ни на спектре, ни на кодировщике не вижу. Попробовал несколько инструментов, и cubicSDR, и rtl_433, и urh, нигде нет моего сигнала, хотя есть китайская железка с резонатором на 433,92 МГц, его я вижу, когда отправляю данные. По коду, уточнял у специалистов TI как работают режимы, вопросов нет. Полосу разную пробовал, в целом всегда беру с запасом или максимальную 5 кГц Дабы удостовериться, что код рабочий, заказал на Али этот чип CC1101 с выводами для подключения к MCU, чтобы протестить готовое решение. Вообще такой чип уже есть, но борда с ним использует 8-битник stm8, что немного ограничивает возможности чипа, но даже там на анализаторе я видел свой сигнал
  6. Сделал себе плату с трансивером TI CC1101, схемотехнику и разводку ревьювил у Texas Instrumets, всю пассивку взял согласно BOM листу, в итоге запаял плату, написал тест код и слушаю эфир на этой частоте с помощью RTL-SDR, все глухо. Сам чип рабочий, так как по SPI получаю значения регистров как в референсах, а также контрольные значения самого чипа (версию, и тд.) Сам трансивер имеет 2 режима передачи данных, прозрачный режим, когда MCU дергает ногу трансмиттера, а он эти биты передает и пакетный режим. Скажу, что изначально регистры для работы чипа настроил с помощью TI SmartRF, когда в прозрачном режиме дергаю ногу, анализатором вижу те биты, что передаю, в эфире не вижу. Также собрал и настроил пакетный режим, и также ничего в эфире нет. Качество пайки проверил прозвоном дорожек и микроскопом, обрывов и спайки нескольких контактов нет. Схему и трасировку приаттачил, к сожалению, не силен в радиочастотной электронике, поэтому прошу помощи сообщества подсказать или направить на поиск неисправности и решение проблемы. Хочется получить борд с 3 радио модулями WIFI/BLE/Radio. Коллизий по радио части (наложение частот) нет, так как в момент тестирования WIFI и блютуз выключены. Вся радио часть находится в верхней части платы. Сами характеристики платы стандартные, FR-4, 1.6mm,
  7. Да и так объявлял и через дефайны, в main.asm видно, что в таблице векторов данное прерывание есть - только толку от этого 0, как писал выше из прерываний все убрал, оставил только сброс флага (и установкой 0 в SR1, SR2, и чтением CC1L) печать символа, чтобы протестить, что срабатывает.
  8. Короче, ерунда какая-то с этим микроконтроллером, и флаги сбрасывал и перепроверил все - так и не входит в прерывание. Думаю забить на него, основная цель была считать и вывести декодированный сигнал, но я его анализатором считал и руками на бумаге декодировал.
  9. Компилю SDCC, первая ошибка была, что прототип обработчика прерываний должен быть в файле с main функцией, иначе он ее не линкует. В итоге вынес сам обработчик в main.c. Теперь смотрю ассемблер код (таблицу векторов) и доташит, вектор совпадает, но результат все тот же. Убрал из обработчика все лишнее, вывожу только printf, в последовательном порту ничего, ну кроме того, что не ребутится больше. Упростил еще больше, в обработчике оставил только одну строчку, которая переключает флаг и в main функции в цикле, если флаг true, то печатаю printf , тоже ничего (поднял приоритет прерывание до High) Таблица векторов прерывания (первый столбик - номер прерывания, последний адрес) ;-------------------------------------------------------- ; interrupt vector ;-------------------------------------------------------- .area HOME __interrupt_vect: int s_GSINIT ; reset int 0x000000 ; trap int 0x000000 ; int0 int 0x000000 ; int1 int 0x000000 ; int2 int 0x000000 ; int3 int 0x000000 ; int4 int 0x000000 ; int5 int 0x000000 ; int6 int 0x000000 ; int7 int 0x000000 ; int8 int 0x000000 ; int9 int 0x000000 ; int10 int 0x000000 ; int11 int 0x000000 ; int12 int 0x000000 ; int13 int _TIM2_CAP_COM ; int14 ISR_TIM2_CC(TIM2_CAP_COM) { TIM2_CC_FLAG = 1; } void main(void) { ... while(1){ if(TIM2_CC_FLAG) { TIM2_CC_FLAG = 0; printf("/\r\n"); } } }
  10. Ребутится из-за таймера, как только не включаю его, то все ок (еще были проблемы с проводами, контакт отходил). По таймеру не входит в прерывание по захвату, в ДШ написано, что флаг прерывания стирается при чтении младших битов регистра CCR2, закомментил все в прерывании и оставил две строчки TIM2_SR1 = 0; // еще пробовал так uint16_t r = (TIM2_CCR2H << 8) | TIM2_CCR2L; printf("|\r\n"); Но так и не увидел printf, сигнал на ноге есть (вижу логическим анализатором), да и тупо подавал на пин контроллера высокий и низкий сигнал с питания 3.3v Вообще перечитал несколько раз блок про TIM2 в ДШ, перепроверил все настройки, ошибок не нашел - но почему-то не хочет работать
  11. Да, так и хочу сделать, но схема постоянное ребутится и даже до прерывания не доходит. Вот так настроил прерывание, нога настроена на вход void tim2_init(void) { tim2_DeInit(); TIM2_PSCR = 0x04;// 16/2^4 = 1MHz // set up capture compare //(N=4 samples filter, input for CH1=TI2FP1) TIM2_CCMR1 |= (1 << 1); // CC1 channel is configured as input, IC1 is mapped on TI2FP1 TIM2_CCMR1 |= (1 << 5); // Input capture 1 filter, N = 4 //(N=4 samples filter, input for CH2=TI2FP2) TIM2_CCMR2 |= (1 << 0); // CC2 channel is configured as input, IC2 is mapped on TI2FP2 TIM2_CCMR2 |= (1 << 5); // Input capture 2 filter, N = 4 TIM2_CCER1 |= (1 << 4); // Capture enable for CC2IE TIM2_CCER1 |= (1 << 0); // Capture enable for CC1IE // Enable interruption and start timer TIM2_IER |= (1 << 0); // set bit CC2IE TIM2_IER |= (1 << 1); // set bit CC1IE TIM2_IER |= (1 << 2); // set bit UIE // start timer TIM2_CR1 = 0x01; }
  12. Вот его как раз и смотрю, получается, что если у меня пришел передний фронт, то надо смотреть на вход IC1, задний - IC2. Соответственно, на прерывании проверяю регистр TIM2_SR1 if (TIM2_SR1 & 0x02){} // передний фронт if (TIM2_SR1 & 0x04){} // задний фронт
  13. К сожалению, пришлось с данным контроллером разбираться, тк китайская плата с радиочипом работает с этой схемой. Период, а вернее скваженость собираюсь декодировать, зная длину пакета. Посмотрел в референсы, захват здесь тоже можно настроить по обоим фронтам, например, так Но пока не могу понять, как мне определить, прерывание вызвало передний или задний фронт
  14. Есть stm8s003 с подключенной к ноге PD3 периферией, которая генерирует ШИМ сигнал с +- одинаковым периодом, но с разной шириной пульса, где ширина пульса < половины периода - это 0, а ширина пульса > Т/2 - это 1. Для решения данной задачи хочу настроить таймер на режим захват/сравнение. Так как сигнал на ноге D3, то беру таймер 2 со 2 каналом Частоту контроллера ставлю 16МГц, а таймера 1МГц CLK_CKDIVR = 0; // 16MHz CLK_PCKENR1 = 0xFF; // Тактирование периферии CLK_PCKENR2 = 0; А далее инициирую таймер, запускаю и слушаю прерывания ISR_TIM2_CC(TIM2_CAP_COM) { // как считать ширину пульса и период? } void tim2_DeInit(void) { TIM2_CR1 = 0; TIM2_IER = 0; TIM2_SR1 = 0; TIM2_SR2 = 0; TIM2_EGR = 0; TIM2_CCMR1 = 0; TIM2_CCMR2 = 0; TIM2_CCMR3 = 0; TIM2_CCER1 = 0; TIM2_CCER2 = 0; TIM2_CNTRH = 0; TIM2_CNTRL = 0; TIM2_PSCR = 0; TIM2_ARRH = 0xFF; TIM2_ARRL = 0xFF; TIM2_CCR1H = 0; TIM2_CCR1L = 0; TIM2_CCR2H = 0; TIM2_CCR2L = 0; TIM2_CCR3H = 0; TIM2_CCR3L = 0; } void tim2_init(void) { tim2_DeInit(); TIM2_PSCR = 0x04;// 16/2^4 = 1MHz // Настройка режима захвата сравнения TIM2_CCMR2 = 0x01; TIM2_CCER2 = 0x20 | 0x11; // Прерывание и включение TIM2_IER |= (1 << 2); // канал 2 для захвата/сравнения TIM2_CR1 = TIM2_CR1_ARPE | TIM2_CR1_CEN; } Есть неуверенность в настройке захвата и я так понимаю, что прерывание срабатывает по каждому переднему фронту, и чтобы посчитать ширину пульса, мне надо ввести некий флаг, если flag = 0, но как посчитать ширину пульса, ведь захват по переднему фронту, а пульс заканчивается на заднем фронте, еще и период считать
×
×
  • Create New...