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

carlogulliani

Members
  • Постов

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

  • Посещение

Электроника

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

Посетители профиля

1 859 просмотров профиля

Достижения carlogulliani

Стажер

Стажер (3/14)

  • 10 постов на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  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, но как посчитать ширину пульса, ведь захват по переднему фронту, а пульс заканчивается на заднем фронте, еще и период считать
×
×
  • Создать...