И самый главный вопрос - вы когда писали программу учитывали фазовый шум на выходе RX... ? Может случится так что через провода импульсы ровненькие с крутыми фронтами... а на выходе RX импульсы искажаются и фаза... фронт... дрожит. Джиттер - учли?
неа, ибо не знаю, что это, и как это в программе делается
roman.com писал(а):
Если боитесь за реле.. то просто пока вместо реле поставьте светодиод ...
да там на плате уже все распаяно, так что не особо я его заменю.... припаял делитель напряжения - все также, на плате ДУ агрегатами как работала, так и работает, а на моей - ни в какую... написал тестовую прошивку просто передавать пин порта по усарт циклически, а на приемнике выставлять его.. дабы исключить траблы еще и от прошивки - и опять - напрямую все работает, а через радиомодули ведет себя странно: при выключенном передатчике на приемнике светодиоды на нужных ногах мерцают, а когда включаешь приемник - стабильно горят, на кнопки передатчика не реагируют...
написал тестовую прошивку просто передавать пин порта по усарт циклически, а на приемнике выставлять его.. дабы исключить траблы еще и от прошивки - и опять - напрямую все работает, а через радиомодули ведет себя странно: при выключенном передатчике на приемнике светодиоды на нужных ногах мерцают, а когда включаешь приемник - стабильно горят, на кнопки передатчика не реагируют...
Так... щас вам дядьки тут понарасказывают разных заумных слов... директная связь... всякие джиттеры...)) Джиттер - https://ru.wikipedia.org/wiki/%C4%E6%E8%F2%F2%E5%F0 Что такое джиттер ... это вас будет волновать когда вы будите писать свои алгоритмы обработки сигнала с RX... будете думать про фазовый шум на выходе RX... А пока мы просто используем аппаратный UART в ATmega8... изменить его работу мы не можем... поэтому джиттер нас мало волнует... Разработчики Atmel уже об этом позаботились))) Правда UART изначально планировалось перевадать только по проводам... разработчики както не подумали... что мы захотим его передавать по радиоканалу))) иначе они бы придумали другой алгоритм работы UART... и мне не пришлось бы изобретать велосипед - самодельный "радио" UART )))
Зачем вы пишите такие сложные тестовые программы... переменные... через таймеры.. прерывание... Там всё намного проще. Можно настроить UART вручную... а можно просто в cvavr... он сам сгенерирует начальные настройки.
Я тут уже писал как я издевался... т.е. тестировал UART ATmega8 viewtopic.php?f=28&t=108688 там все просто: берем осциллограф и подключаем один вывод осциллографа к TX, а второй вывод осциллографа к RX. Затем тупо закидываем "пустой" байт 0101010101 в буфер передатчика UDR через задержки (паузы) например delay_us(1000);... чтобы UART успевал передавать наш байт... На осциллографе видем такую картину: Если импульсы чёткие... то значит наши радиомодули пропускают UART нормально... светодиоды четко реагируют на кнопки передатчика.
В RX считываем принятый байт из буфера UDR и выводим на порт "D" (или куда хотим)... при этом светодиоды четко реагируют на кнопки передатчика - показывают принятый байт. Вот и всё.
Вот я для демонстрации подключил свои радиомодули к компьютеру... вижу что импульсы у меня нормальные. Мой UART чётко принимает пакеты по радиоканалу: (даже видно задержку передачи пакетов - 200 мкс. Т.е. мой TX передает пакеты, а мой RX их принимает через 200 микросекунд... Для UART это нормально.) А вот я специально расстоил свои модули... и вижу черти шо)))... Теперь мой RX не принимает пакеты: По "научному" это называется шум. Мои импульсы сильно исказились из-за слабого сигнала... или не правильной работы радиомодулей... например когда частоты TX 433 мгц и RX 433 мгц не совпадают... или что-то замкнуло в схеме... или что-то сгорело))) при этом все диоды начали перемигиватся как новогодняя гирлянда)) Это мой UART принимает шум - т.е. случайный набор цифр...
Проделайте тоже самое и сразу всё станет ясно.
Если окажется что виноваты радиомодули... то тогда три варианта: 1) ремонтировать сами радиомодули... Для этого нам нужен будет профессиональный осциллограф... 2) купить другие модули ))) 3) Попробывать уменьшить скорость передачи UART. Дело в том что сейчас UART передаёт на предельной скорости - 9600... поэтому настройка должна быть точной. Но можно уменьшить скорость передачи... просто для проверки. На меньшей скорости пакеты проходят лучше... даже при небольшой расстройки самих модулей пакеты могут проходить. Но это просто в качестве эксперимента.
Тогда надо думать, как сделать из ПК осцилограф... у вас случайно проверенной программы и схемы адаптера не завалялось?
Еще вот что нашел на просторах интернета... Комментарий одного из участников с сайта easyelectronics.ru Спойлерvadlm 3 Октябрь 2009 в 15:39 Я тоже искал «замену проводу». Почитал про Ваши проблемы с отсутствием Enable и сном передатчика, поискал по датшитам и прикупил на пробу фирмы Telecontrolli два модуля RTFQ1-433 и RRFQ1-433. На первый взгляд «честные» модули с Enable. НО! Как оказалось через них нельзя протолкнут лог «1» длительностью более 2.5-3мс, дальше на выходе приемника вместо «1» опять «0». (несущая «0» передается — помех на приемнике нет, просто лог «0»). Как результат, пришлось инвертировать UART («0″ передается сколь угодно долго, а «исходный» уровень UART «1» и держиться только 2.5-3мс). Но и с минимальной скоростью естественно тоже проблемы. Т.к. если старт_бит + 8 лог «0» -> и после инвертора = один «длинный» импульс «1», а его длительность ограничена. Т.е. теоритически миним. скорость в районе 3000 бит/с. А максимальная у него по датшиту 9600. При тестах так и получалось: на скоростях ниже 3000 происходили искажения байт с «длинной» последовательностью «0» (1,2,..,64,128). Стабильно работает только на 4800. На 9600 опять потери инфо. И об нюансе этом ни слова в датшитах, что мне попадались на него. И это тоже переписка с форума сforums.airbase.ru СпойлерApollo Apollo Yuran>Вчера купил модули для организации радиоканала RRFQ1, RTFQ1 на 433,9 MHz Хорошие штучки. По размерам нам очень подходят. Я их тоже прикупил недавно. Yuran>Никакие МК ненужны совсем! Не согласен. Я проводил измерения и опыты по передаче данных со скоростью 4800 ьит/сек и получил не очень утешительные результаты. Возникает много ошибок в определённые моменты. Дело в том, что у этих модулей есть один нюанс не описанный напрямую. Эти модули категорически не приемлют наличие постоянной составляющей в напряжении передаваемого сигнала. Поэтому, если возникает момент когда в передаваемой информации становится больше нулей или единиц (например 00h или FFh или, что ещё хуже целая серия такой информации), то возникают ошибки. Единственнло надёжный способ избежать ошибок, это манчестерское кодирование, в котором из-за обязательной смены за один такт уровня сигнала отсутствует постоянная составляющая. Нужен МК обеспечивающий перекодирование из UART в Манчестер. На приёмной части наоборот. Уже думал - нашел, где собака зарыта; поставил скорость 4800 бод, сократил интервал между пакетами до 3 мс - ничего не изменилось... Начинать уже сотреть, что такое манчестерское кодирование?!))
В общем, для платформы системы ДУ агрегатами, где радиомодули работают с родной прошивкой далал еще свою тестовую: на передатчике ногой дрыгать (типа импульсы) с задержкой, а на приемнике менять состояние светодиода по изменению состояния входа данных для детектирования хоть каких-то изменений в приемнике - что уж очевидней придумать !?... Все тщетно, напрямую работает (когда передатчик включен - на приемнике мигает светодиод, иначе - статичное состояние), а так нет... разные интервалы задержек ничего не дали (6-1 мс с шагом 500мкс)... Думаю проблема именно в принципе передачи где-то..., ведь платформа одна и таже! с одной прошивкой передает как-то, а с моей вообще никак
Тогда надо думать, как сделать из ПК осцилограф... у вас случайно проверенной программы и схемы адаптера не завалялось?
Вот архив программы самого простого осциллографа osc.rar Распакуйте в лубую папку... и наслаждайтесь))) Вот адаптер для компьютера. http://www.illari.ru/electro/osc/ Только я делаю проще: Можно поставить диоды в адаптер... чтобы случайно не спалить звуковую карту... А можно просто два переменных резистора... крутим на 1/3 ... короче чтобы на вход компьютера постыпало не более 2 вольт. Впринципе ничего страшного не будет если подать на вход ПК 5 вольт... но тогда мы не увидем импульсов т.к. при большом сигнале звуковая карта "перегружается"))) Да и не желательно подавать повышенное напряжение на линейный вход... ПК жалко ... Короче подключили к ПК, подкрутили резисторы и смотрим:
Кот Lancer писал(а):
Уже думал - нашел, где собака зарыта; поставил скорость 4800 бод, сократил интервал между пакетами до 3 мс - ничего не изменилось... Начинать уже сотреть, что такое манчестерское кодирование?!))
Вот теперь вы понимаете почему я отказался от идеи передачи UART в чистом виде по аналоговому радиоканалу...
Расскажу подробней. Если бы мы использовали цифровые радиомодули, с обработкой входного/выходного сигнала, то нам не важно как наши пакеты идут по радиоканалу... Закинул байт по UART на TX ... а на RX считали принятый байт.
Но ваши радиомодули аналоговые. Они работают по принципу обычного FM приёмника... Разница только в том что FM приёмник работает на 88...108 Мгц с девиацией 75 кГц, а ваши модули работают на 433 Мгц с девиацией 35 кГц. Больши они ничем не отличаются ))) Передатчик: собран на обычном синтезаторе 433 Мгц с управляемым опорным кварцевым генератором... Подаём импульсы на опорный генератор... частота опорного генератора меняется... в зависимости от частоты опорного генератора меняется частота на выходе синтезатора (частота синтезатора зависит от частоты опорного генератора)... а далее усилитель и антенна: Приёмник: обычный супергетеродинный приёмник с одним преобразованием (причём даже ПЧ 10,7 Мгц - такая же как в обычном FM приёмнике)... обычный синтезатор в гетеродине... затем обычный квадратурный детектор... затем обычный компаратор, который усиливает и ограничивает сигнал до 5 V... Т.е. передавать UART по вашим модулям - это всеравно что передавать UART с помощью обычного "FM жучка" на обычный FM приёмник... Или с помощью обычной рации с ЧМ.
Поэтому все что пишут про импульсы это правда. При передачи дли-и-и-и-нного импульса появляется постоянная составляющая... и поэтому появляются ошибки... Вот почему я отказался от идеи передавать UART в чистом виде по радиоканалу, а использую манчестер.
Как с этим бороться? Вариантов много.
вариант 1 паузы межлу посылками (байтами) должны быть как можно короче... в идеале bly или два бита... Примерно так: Но даже это не спасёт ситуацию... так как количество импульсов в одном байте разное... а значит появляется постоянная составляющая и ... ошибки...
вариант 2 передавать манчестером... с помощью UART. Для этого перед тем как передать байт... например 00000000 мы его сначала переводим в манчестер: 00000000 >> 0101010101010101 , где |01| = 0, |10| = 1. Получаем два байта: 0101010101010101 >> 01010101 и 01010101, затем закидываем поочереди два байта в UDR... получаем примерно такую картину: В приёмнике делаем обратную операцию: 01010101 и 01010101 >> 0101010101010101 >> 00000000
А чтобы совсем избавится от постоянной составляющей, то делаем паузы между пакетами минимальные... И ещё хорошо чтобы при отсутствии данных, наш радиоканал был заполнен "пустыми" пакетами... передача пакетов идёт непрерывно... тогда вообще никакой постоянной составляющей! )) Всё проходит чётко.
Вот и всё. И никаких постоянных составляющих у нас нет. Я именно так и делаю... только я ещё дополнительно фильтрую шумы.. ошибки и т.д и т.п. .... Но это уже по желанию.
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
спасибо за объяснение, roman.com)) поздно увидел ваше сообщение - делал осцилограф вот по этой ссылке http://www.mastervintik.ru/dvuxkanalnyj-oscilograf-iz-kompyutera/. Уже пробовал снимать сигнал с передатчика системы ДУ агрегатами - ... Сейчас сделаю переходники для подключения, как будут результаты - отпишусь)
Вот несколько осциллограмм со входа данных передатчика (зеленый) и приемника (соотв. красный) системы ДУ агрегатами. Отсюда я увидел следующее: пауза между пакетами около 7 мс; уровень не инвертированный, в отличии от USART; длительность импульса что-то около 0,25 мкс? Ну да ладно, самое интересное случилось, когда я подключил свою схему передатчика и приемника к осциллографу... Подключив передатчик, начал подключать к осциллографу приемник, и тут вдруг заметил, что приемник оказывается реагирует! Это сигналы со схем во время радиопередачи: Почему-то при подключении общего провода от осциллографа к земле приемника все начинает работать! Могу отключить от осциллографа пульт, ходить с ним по комнате - и все будет работать. Но как только отключаю землю осцилографа - все пропадает В чем может быть проблема? Приемнику типа нужна антенна, чтобы лучше принимать, или всетаки что-то не так с подключением в схеме? Я в недоумении
P.S. Может в схеме что-то не так...?
Запараллелил линию данных приемника на землю через 150кОм (как резисторы в схеме осцилографа) - все работает дистанционно! Неужели на вход 5 В много было? И как сделать по нормальному теперь, а не эмпирически?!)
1) переключайте развертку осциллографа ... вместо 1000 мкс/клетка ... ставьте или 200 или 500 мкс/клетка... чтобы лучше рассмотреть фронт импульсов...
2) ну вот ... значит проблема всётаки в радиомодулях. Любому приёмнику и передатчику нужна антенна. 433 Мгц ~ 0,69 метра длина волны. Кусок провода около 17 сантиметров - хорошая антенна (штырь 1/4 лямбда).
Или спиралька...
А вы что... подключаете модули без антенны? У вас же даже на схеме нарисована антенна... У вас модули с внешней антенной... Там в даташите так и написано (нарисовано)
Масса осциллографа - это противовес... при подключении куска провода к массе радиомодуля (TX и RX) - антенна у них работает лучше... и дальность связи увеличивается...
Последний раз редактировалось roman.com Ср апр 15, 2015 15:59:59, всего редактировалось 1 раз.
А вы что... подключаете модули без антенны? У вас же даже на схеме нарисована антенна...
у меня припаяны небольшие проводки на пробу.... ---------- Запараллелил линию данных приемника на землю через 150кОм (как резисторы в схеме осцилографа) - все работает дистанционно! Неужели на вход 5 В много было? И как сделать по нормальному теперь, а не эмпирически?!) ---------- антенны те же, так в чем фокус с резистором я так и не понял?
Да нет там фокуса... подключили противовес и всё заработало... Получается что модули не работают без антенны... Значит чувствительность приёмника слабенькая...
Ну проверить не проблема. У вас там с контактами всё нормально? Дорожки.. выводы на модулях не отпаялись? Спрашиваю на всякий случай... Бывает что на ножке "масса" ... или на ножке "антенна" ... пропадает контакт .. и модуль TX теряем мощность, а модуль RX теряет чувствительность... т.е. будет работать только если рядом поставить)) а чуть отойдешь.. и связь пропадает...
Запараллелил линию данных приемника на землю через 150кОм (как резисторы в схеме осцилографа) - все работает дистанционно! Неужели на вход 5 В много было? И как сделать по нормальному теперь, а не эмпирически?!)
это значит что уровень сигнала с приёмника амплитудой не 5 вольт а меньше! UART в ATmega8 просто не понимает такой сигнал... Для нормальной работы UART в ATmega8 уровень сигнала должен меняться от минимума (в идеале 0 вольт) до максимума (в идеале 5 вольт)... А ваш приёмник чето глючит.. и не даёт чёткий сигнал ...
Можно подтянуть вход UART или к + или к массе...
Я вот например делал так: Два резистора на входе UART ... подтягиваем порт МК к + 5 вольт. Т.е. чтобы напряжение на входе UART было около 2,6 вольт. И тогда UART может работать при слабом сигнале на входе...
Это просто как вариант. Я же писал... Если на входе у МК напряжение больше примерно 2,6 вольт, то UART думает что это "1" ... а если меньше 2,5 вольт... то UART думает что это "0" и начинает принимать код... Короче с двумя резисторами схема работает лучше (т.е. UART работает при меньшем уровне сигнала с приёмника). И конденсатор добавить... )) А можно и не добавлять. Просто выставить напряжение на входе UART +2,6 вольт при подключенном приёмнике...
А можно сделать и по другому...
Последний раз редактировалось roman.com Ср апр 15, 2015 16:25:26, всего редактировалось 1 раз.
Два резистора на входе UART ... подтягиваем порт МК к + 5 вольт.
просто изначально делитель напряжения на вход UART и туда же вход с радиомодуля? зачем там еще в вашей схеме последовательно резистор с выхода радиомодуля приемника? и номиналов не разгляжу...
У меня на схеме это просто стоит ограничитель на двух диодах + рещзистор 1 кОм + конденсатор ... чтобы не спалить вход UART ))) Я подавал можный сигнал на свой UART прямо с раци... до 10 вольт ))) Так же как и на вход осциллографа вы припаяли два диода ограничителя чтобы не спалить вход звуковой карты компьютера при сольном сигнале... )))
Вам диоды и конденсатор не нужен... у вас напряжение не поднимается выше 5 вольт)) так что вам просто достаточно поставить два резистора... Я ставил верхниё 22 кОм, нижний 33 кОм... или можно поставить один подстроечный резистор)))) ...
Короче... это все из-за слабенького компаратора модуля... и из-за этой постоянной составляющей на выходе радиомодуля... т.е. нет нормальной амплитуды на выходе приёмника - 0...5 вольт. Вот UART и глючит ))) Он не может понять толи на входе 1 толи 0 ))))
ну все, сейчас впаяю и буду заканчивать! спасибо Вам огромное, roman.com! Я уж было отчаялся, давно делал проект, уже охота была сделать, а тут такая непонятная штука приключилась...
Всетаки на всякий случай просто проверьте уровень сигнала со своего приёмника...
для начала откалибруйте свой осциллограф... Я подкрутил резистор и вижу - у меня 5 клеток = 5 вольт.
Вот я смотрю на ножке МК пульта (TX)... Уровень сигнала чётко 5 вольт. По проводам мой UART работает чётко:
А вот я пропустил сигнал по радиоканалу и смотрю амплитуду на выходе свого приёмника (RX)... амплитуда на выходе моего компаратора 4,5 вольт. Но UART при такой амплитуде работает нормально, т.к. импульсы точно или больше 2,5 вольт... или меньше 2,6 вольт... а значит мой UART понимает правильно где "1" а где "0". Поэтому все пакеты по радиоканалу у меня проходят чётко.
P.S. Вот сколько всё пишу ... говорю... никто не слушает... все опять тупо пихают свой UART в аналоговый радиомодуль... а потом сидят и думают почему ничего не работает... а то что при передачи UART идет постоянная составляющая ... никого не волнует... А то что компаратор на выходе приёмника перегружается от постоянной составляющей сигнала UART ... это вообще никого не волнует)) ... И что такое "режим по постоянному току" никто вообще не вкурсе ))) Эх... молодеж)))
Сейчас этот форум просматривают: Pablo Escobar и гости: 7
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения