Например TDA7294

Форум РадиоКот • Просмотр темы - Приемник WL101-341 и передатчик WL102-341 + Передача данных.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб июн 14, 2025 14:31:38

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 41 ]  1, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Приемник WL101-341 и передатчик WL102-341 + Передача данных.
СообщениеДобавлено: Чт дек 15, 2016 21:59:06 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
Приветствую форумчан!
Как всегда - прижало :) .
В этот раз нужно сделать передачу данных с одного МК на другой по радиоканалу (провод не проложить, ИК не пройдет, расстояние около 100 м., 1-2 кирпичные стены).
Для решения проблемы были пущены в ход давно завалявшиеся в закромах модули WL101-341 и WL102-341. Антенки намотал спиралькой проводом 1мм. на оправке 3мм. 21 виток (вычитал в одной статье такие параметры).
Хочу сказать, что шум у них действительно ох*тельный - ловят, наверное, даже электромагнитное излучение американского марсохода :) . Для ликвидации проблемы было принято решение закодировать передаваемые данные.
Кодировка следующая: Начало передачи определяется установкой ЛОГ0 в течении 60мс., далее идёт 1 байт синхронизации (8 раз меняем лог уровни каждые 20мс.), далее пачка данных, затем пачка инвертированных данных и завершается все выставлением ЛОГ1 в течении 20мс. (чтоб дать нормально распознать команду начала приема данных).
Данные кодируются следующим образом: если передается ЛОГ0, то в течении 30мс. выставляется ЛОГ0, а затем в течении 20мс. ЛОГ1. Если передаем ЛОГ1, то в течении 30мс. выставляется ЛОГ1, а затем в течении 20мс. ЛОГ0. Сделано так для того, чтоб не задерживаться в одном логическом состоянии на долго (иначе можно получить ложную команду начала приема данных либо превысить максимальную длительность установки одного логического состояния модулями радиосвязи (есть у них такое ограничение)).
Приемником проверяется наличие сигнала начала передачи, правильность прохода синхроимпульсов, соответствие принятых данных принятым инвертированным данным (просто инвертируем инвертированные данные и проверяем соответствие принятым неинвертированным данным :) ) и в конце правильность установки ЛОГ1 после передачи данных. Если все правильно, то на 1 секунду загорается светодиод. Для начала количество передаваемых полезных данных сделал 4 бита.
Все было быстро собрано на макетных платах STM32 на рабочем столе. Результат меня обрадовал, но не на долго. Информация на МК передавалась как часы (для моих целей хватает за уши), но только на расстоянии до ~3-ёх метров. Пробовал растягивать антенны - результат нулевой. Затем уменьшил длительность импульсов в 100 раз и ..... приемник затих. Затем увеличил в 10 раз и связь восстановилась, одновременно и ускорился отклик приемника (по началу видно было задержку между нажатием на кнопку начала передачи и загоранием светодиода на приемнике).
Начал грешить на помехи с питания приемника от USB. Подрубил его к двум батарейкам и поставил по керамике на вход питания на каждый модуль - результата нет. Хотел было погрешить на отсутствие кварцев на МК, но потом сообразил, что если приемник принимает сигналы на маленьком расстоянии, то дело не в таймингах, а в самих модулях.
Знает ли кто-нибудь решение данной проблемы? Я с радиосвязью сталкиваюсь впервые, поэтому опыта в наладке таких устройств нет никакого :dont_know: .


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Пт дек 16, 2016 14:05:51 
Друг Кота

Карма: 2
Рейтинг сообщений: 59
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8033
Откуда: .ru
Рейтинг сообщения: 0
isx писал(а):
Знает ли кто-нибудь решение данной проблемы? Я с радиосвязью сталкиваюсь впервые, поэтому опыта в наладке таких устройств нет никакого

Знаем. Делали.

Данные у меня кодируются следующим образом (такое же кодирование в автосигнализации):
-Если передается ЛОГ0, то в течении 0,5 мс. выставляется ЛОГ0, а затем в течении 0,5 мс. выставляется ЛОГ1.
-Если передаем ЛОГ1, то в течении 0,5 мс. выставляется ЛОГ1, а затем в течении 0,5 мс выставляется ЛОГ0.
Это называется манчестерское кодирование. https://ru.wikipedia.org/wiki/Манчестерское_кодирование

А синхронизацию можно сделать проще, например как в UART: один длинный импульс, например ЛОГ1 в течении 4 мс.

И вместо инверсии лучше использовать контрольную сумму. Пакет получается короче и соответственно выше скорость передачи пакетов.

А вообще, если хотите изучить подробно как работает приёмник, то для этого нужны приборы, как минимум осциллограф.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Сб дек 17, 2016 14:13:09 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
roman.com писал(а):
А синхронизацию можно сделать проще, например как в UART: один длинный импульс, например ЛОГ1 в течении 4 мс.

Читал на форума каком-то, что для нормальной работы необходимо не менее 2 байт синхронизации (как у меня). Я так понял, что приемник в это время "раскачивается", чтоб надежнее передавать данные. А вообще, суть синхронизации мне не очень понятна - приемник же настроен резонатором на определенную частоту, что толку тогда от наших дёрганий? :dont_know:
roman.com писал(а):
И вместо инверсии лучше использовать контрольную сумму. Пакет получается короче и соответственно выше скорость передачи пакетов.

Да я передавать буду максимум байта 2-3. И скорость пока не важна. Щас пока просто бы его завести на нормальную дистанцию :) .
roman.com писал(а):
А вообще, если хотите изучить подробно как работает приёмник, то для этого нужны приборы, как минимум осциллограф.

Да в том то и проблема - нет осциллографа с возможностью записи в память. А вообще, я цеплял светодиод на выход приемника и немного занижал частоту обмена информацией. После таких действий заметны были пакеты данных и команда начала передачи данных. Если отойти с приемником на пару метров, то обмен данными уже не заметен и приемник не принимает инфу с передатчика.
Вообще, грешу на модули, а не алгоритм. Возможно антенну сделал не правильно, или питания 3В не хватает для нормальной дальнобойности передатчика и чувствительности приемника.
Сегодня попробую просто передавать меандр герц на 20. Мигание светодиода в таком режиме хорошо видно на глаз. Проверку в приемнике сделаю по отслеживанию ЛОГ состояния на выходе модуля приемника каждые 50мс. (со смещением фазы, разумеется). Только подозреваю, что расстояние передачи от этого не возрастет.
П.С. Я все бы понял, еслиб он начал моросить хотя бы на 30 метрах, но 2-3 метра - это вообще перебор :) :kill: .


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Вс дек 18, 2016 15:46:55 
Друг Кота

Карма: 2
Рейтинг сообщений: 59
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8033
Откуда: .ru
Рейтинг сообщения: 1
isx писал(а):
Читал на форума каком-то, что для нормальной работы необходимо не менее 2 байт синхронизации (как у меня).

Да, в некоторых приёмниках надо сначала подать какой-нибудь сигнал для заряда/разряда конденсаторов, после этого приёмник входит в нормальный режим... а потом можно слать данные. Но это не во всех приёмниках.
isx писал(а):
А вообще, суть синхронизации мне не очень понятна - приемник же настроен резонатором на определенную частоту, что толку тогда от наших дёрганий?

Суть синхронизации в том, что передатчик передаёт последовательно биты. А приёмник должен записывать эти биты за передатчиком, причём приёмник должен это делать синхронно с передатчиком.
isx писал(а):
Да в том то и проблема - нет осциллографа с возможностью записи в память.

Можно записать сигнал на компьютер.
isx писал(а):
Возможно антенну сделал не правильно, или питания 3В не хватает для нормальной дальнобойности передатчика и чувствительности приемника.

Питание лучше делать как написано в даташите - 5 Вольт.

А антенну лучше не скручивать в спираль, а припаять обычный кусок провода: для частоты 433 Мгц - кусок провода 17 сантиметров.
http://radioskot.ru/publ/spravochnik/rf ... 2-1-0-1119

Эти радио модули можно проверять "на слух". Берём обычные наушники от любого приёмника и подключаем к выводу DATA через токоограничительный резистор, напрмиер 1кОм (чтобы не спалить наушники). Т.е. вместо светодиода подключить обычные наушники.
К передатчику лучше подключить простой генератор частотй 1кГц. В качестве генератора можно использовать любой МК.
Затем включаем передатчик и слышим сигнал в наушниках... Частоту 1кГц хорошо слышно.
Затем отходим подальше и смотрим расстояние, на котором слышен сигнал передатчика 1кГц. На каком расстоянии мы будем слышать в наушниках сигнал 1кГц, вот примерно на таком расстоянии у нас и будет работать передача данных.

Важно! Эти все простенькие приёмники бояться помех. Даже рядом работающий МК может заглушить приёмник. У меня рядом работающий МК на 4 Мгц сильно глушил приёмник... Вместо передатчика слышал как работает МК...)) После этого я всё рядом с приёмником отключил. Поэтому рядом с приёмнико не должно быть никаких МК и других устройств. Только аккумулятор (батарейки), наушники и приёмник.
Я проверял приёмник как тут http://radioskot.ru/publ/spravochnik/rf ... 2-1-0-1119

После этого будем точно знать максимальное расстояние этих радио модулей. Они должны пробивать как минимум несколько стен в доме.
У меня пробивали 3-4 этажа обычного многоэтажного дома... спокойно.))) А на улице - больше 100 метров. А с крыше дома - больше 600 метров стабильно)) И т.д. и т.п. ))

после проверки дальности.. можно уже говорить о протоколах и т.д. От протокола тоже зависит дальность.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Вс дек 18, 2016 18:39:05 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
Ну и понаписали Вы мне тут. Теперь придется такого же объема ответ готовить :) .
По порядку.
isx писал(а):
Сегодня попробую просто передавать меандр герц на 20. Мигание светодиода в таком режиме хорошо видно на глаз. Проверку в приемнике сделаю по отслеживанию ЛОГ состояния на выходе модуля приемника каждые 50мс. (со смещением фазы, разумеется). Только подозреваю, что расстояние передачи от этого не возрастет.

Подал, проверил, довода подтвердились - результат нулевой. На 2-3 метрах мигает, а потом тишина.
roman.com писал(а):
Да, в некоторых приёмниках надо сначала подать какой-нибудь сигнал для заряда/разряда конденсаторов, после этого приёмник входит в нормальный режим...

Не знал. Спасибо, учту :) .
roman.com писал(а):
Суть синхронизации в том, что передатчик передаёт последовательно биты. А приёмник должен записывать эти биты за передатчиком, причём приёмник должен это делать синхронно с передатчиком.

Я читал про другу теорию, мол, синхробиты позволяют вогнать приемник и передатчик на одну частоту. НО:
isx писал(а):
приемник же настроен резонатором на определенную частоту, что толку тогда от наших дёрганий?

roman.com писал(а):
Питание лучше делать как написано в даташите - 5 Вольт.

У меня у передатчика по даташиту предел 3.6В, а у приемника 5В. Только вот не знаю, измениться ли что-то от этих 2-х Вольт на приемнике что-то значительно :dont_know: .
Голова потихоньку вскипает от обилия радиоэфира на рабочем столе :) .
roman.com писал(а):
А антенну лучше не скручивать в спираль, а припаять обычный кусок провода: для частоты 433 Мгц - кусок провода 17 сантиметров.

Тоже пробовал. Дальность увеличивается метров до 7, а потом опять тишина.
roman.com писал(а):
Эти радио модули можно проверять "на слух". Берём обычные наушники...

А это очень интересно. Обязательно попробую.
roman.com писал(а):
Важно! Эти все простенькие приёмники бояться помех. Даже рядом работающий МК может заглушить приёмник.

Про это я тоже читал. Пробовал без МК принимать, но разницы не заметил. Да и данные передаются в устройстве на МК, тогда толку от приемника без МК ни какого не будет :dont_know: .
roman.com писал(а):
Я проверял приёмник как тут http://radioskot.ru/publ/spravochnik/rf ... 2-1-0-1119

У меня валялись и WL10X-341 и FS1000A, но после прочтения этой статьи http://radiolaba.ru/microcotrollers/rad ... vanie.html я отдал предпочтение первым.
Сейчас рисую печатки для приемника и передатчика с МК со всякими фильтрами, повышенным питанием приемника, правильной разводкой и прочей фигней. Посмотрим, что из этого получится.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Вс дек 18, 2016 19:21:33 
Друг Кота
Аватар пользователя

Карма: 75
Рейтинг сообщений: 611
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3728
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
isx - эти модули только для кружков ЮТ или первых настольных экспериментов для начинающих. Чего Вы хотите добиться от приёмника с чувствительностью -110dBm (1.5 микровольт) при полосе пропускания в 150 кгц? Свою задачу для Вас в плане экспериментов они уже выполнили, теперь их осталось только выбросить. Посмотрите на несравненно более серьёзные изделия таких фирм, как TI или Silicon Labs в режиме пакетного обена данными, например, здесь, здесь, и здесь.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Вс дек 18, 2016 19:55:38 
Друг Кота

Карма: 2
Рейтинг сообщений: 59
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8033
Откуда: .ru
Рейтинг сообщения: 1
Ser60 писал(а):
эти модули только для кружков ЮТ или первых настольных экспериментов для начинающих.

Я так понял isx просто хочет поэкпериментировать с передачей "цифры" по радиоканалу... Для простых экспериментов эти модули подходят))
isx писал(а):
Все было быстро собрано на макетных платах STM32 на рабочем столе... Я с радиосвязью сталкиваюсь впервые, поэтому опыта в наладке таких устройств нет никакого


isx писал(а):
синхробиты позволяют вогнать приемник и передатчик на одну частоту.

Тут под словом "передатчик" и "приёмник" имеется ввиду МК-передатчик (или шифратор) и МК-приёмник (или дешифратор).
Другими словами: один МК (он же шифратор, он же мастер) передаёт биты, а второй МК (он же дешифратор, он же слейв) принимает биты. Как и в обычном UART: есть TXD и есть RXD. Вот для этого и нужна синхронизация между двумя МК.

У меня частота синхронизации для МК была 1кГц.

Синхронизация двух МК не имеет никакого отношения к радиопередатчику и радиоприёмнику.
Радиопередатчик и радиоприёмник работают на своей радио частоте - 433 Мгц.)) Им синхронизация не нужна))

isx писал(а):
тогда толку от приемника без МК ни какого не будет

Можно отнести МК подальше от приёмника... )))
Я решил этот вопрос просто. МК даёт помехи не на всех радио частотах, а только на определённых... так получилось, что у меня МК работал с кварцем на 4 МГц. Это частота пересекалась с частотой приёмника 433 Мгц. Поэтому МК давал помехи приёмнику. Поэтому я просто изменил частоту МК... и больше от МК помех небыло))

Но прежде рекомендую просто проверить радио модули отдельно от МК. А потом уже думать... что делать дальше))
roman.com писал(а):
Да, в некоторых приёмниках надо сначала подать какой-нибудь сигнал для заряда/разряда конденсаторов, после этого приёмник входит в нормальный режим..

Это видно по приборам (осциллографу): при включении передатчика и передачи первого пакета, первые импульсы на выходе приёмника получаются "ломанные" (не той длительности) и их надо выкидывать)) А затем уже можно принимать нормальные импульсы. Я же говорю, что бы лучше разобраться в приёмнике, нужны приборы...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Ср дек 21, 2016 08:55:04 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
Вобщем, есть продвижения :) .
Сделал для передатчика генератор двухтонального сигнала (1кГц и 2кГц) с частотой изменения тональности 1Гц (получилась обычная сигнализация). От приемника отсоединил МК и повесил на выход пьезоизлучатель (пластинка от тамогочи) через резюк в 1КОм. Впаял штырьевые антенны по 173мм., запитал приемник от кроны через 7805 (МК и передатчик питались от отладчика в Discovery через USB порт) и пошел мерить дистанцию. На открытой местности сигнал в приемнике уверенно бомбил на 100м., а дальше начинались прослушиваться помехи, но сигнал еще было чётко слышно.
Сегодня буду разводить плату для приемника - теперь нужно снизить влияние МК на него. Посмотрим, что получится, но результаты меня уже очень порадовали :) .


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Ср дек 21, 2016 12:47:06 
Друг Кота

Карма: 2
Рейтинг сообщений: 59
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8033
Откуда: .ru
Рейтинг сообщения: 0
Да, примерно так и должно быть. До 100 метров по земле должно работать чётко. А если поднять передатчик повыше, то дальность будет в несколько раз больше.
Чтобы снизить влияние МК на приёмник можно отнести МК подальше от приёмника и/или изменить частоту приёмника или частоту МК.
Модули - приемник WL101-341 и передатчик WL102-341 - одноканальные. Поменять частоту мы не можем... :( Тогда остаётся только одно - поменять частоту МК. :)

Обычно больше всего похеми приёмникам даёт тактовый генератора МК.

В двух словах: тактовый генератор МК (как и любой генератор высокой частоты) представляет собой маломощный передатчик...

И самое интересное: если например тактовый генератор МК работает на частоте 1 МГц, то МК (как и любой высокочастотный генератор) даёт помехи на частоте: 1 Мгц, а так же на гармониках (т.е. частотах кратным основной частоте): 2 Мгц, 3 Мгц, 4 Мгц, 5 Мгц, 6 Мгц, 7 Мгц,... и т.д.

Есть приборы (спектроанализаторы) на которых можно помотреть эти гармоники... Вот пример простого спектроанализатора:
Вложение:
2.gif [18.88 KiB]
Скачиваний: 902

Короче... можно попытаться подобрать кварц МК так, чтобы ни одна из гармоник не пересекалась с частотой приёмника - 433 МГц.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Ср дек 21, 2016 21:34:07 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
roman.com писал(а):
Короче... можно попытаться подобрать кварц МК так, чтобы ни одна из гармоник не пересекалась с частотой приёмника - 433 МГц.

Вот тут не совсем ясно. Если частота приемника нечетная, то любая четная частота МК не должна пересекаться как с частотой приемника, так и с частотами гармоник. А у Вас помехи были с кварцем 4МГц. И PLL в таком случае на нечетную частоту не настроишь :dont_know: .


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Ср дек 21, 2016 22:44:01 
Друг Кота

Карма: 2
Рейтинг сообщений: 59
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8033
Откуда: .ru
Рейтинг сообщения: 1
Всё просто))

Во-первых на кварце написано 4 Мгц. Но если его включить в схему, то кварц будет работать не точно на 4МГц, а чуть больше или меньше этой частоты. Ещё есть разброс параметров самих кварцев.

Во-вторых кварц подключается к МК с помощью конденсаторов. Меняя ёмкость конденсаторов можно менять частоту тактового генератора на несколько килогерц. В современных модулях конденсаторы находятся внутри самого модуля и подстраиваются в зависимости от разброса параметров кварцев... теммпературы... и т.д. Например вот в даташите написано как меняется частота кварца и соотвественно меняется частота PLL радио модуля:
Вложение:
2.jpg [133.22 KiB]
Скачиваний: 472

Кварц может работать например на частоте 3,981 Мгц. Тогда 109 гармоника будет: 3,981 Мгц. х 109 = 433,929 Мгц. Напонминаю: у меня приёмник настроен на 433,92 Мгц.

В-третьих приёмник имеет полосу пропускания. Полоса пропускания приёмника ~ до 500 кгц. Это значит, что мой приёмник принимает частоты от 433,92 Мгц...до 434,42 Мгц.

А теперь считаем: у меня кварц 4 Мгц работал на частоте 3,985 Мгц. Соответственно МК даёт помеху на 109 гармонике т.е.: 434,365 Мгц

Как видим, помеха от моего МК частотой 434,365 Мгц попадает в полосу пропускания приёмника 433,92 Мгц...до 434,42 Мгц и создаёт помехи моему приёмнику... Я подключил наушники к приёмнику и слышу как рядом работает мой МК... Отключил МК, помехи пропали))

Можно изменить частоту тактового генератора подстройкой частоты кварца или просто взять кварц на другую частоту...
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Вс дек 25, 2016 00:21:22 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
Опыты продолжаются :) .
Развел плату немного не правильно, в итоге пришлось выкинуть. В итоге оказалось, что оно и к лучшему.
Сделал две небольшие макетки на STM32F030F4P6 - для приемника и передатчика. МК никак не повлияли на радиоканал. Начал передавать байты и обнаружил хорошую рассинхронизацию. Затем сделал мигалку на таймере на обеих платах с частотой 1 Гц, синхронизировал мигание и начал наблюдать. Примерно на 20-ой секунде одна из мигалок начала отставать (или торопиться - х.з. :) ). Затем решил посмотреть, что будет если подцепить МК через кварцы. Решено - сделано, синхронизировал мигание и снова начал наблюдать. 20 минут - синхронизация не нарушена. Так я впервые для себя провел наглядное сравнение внутреннего RC генератора и внешнего кварца :) .
Впечатленный новым открытием, я полез писать протокол передачи. В итоге родилось следующее (см. фото - 1 клетка - 20 мс.).
Изображение
Стартовый сигнал о начале передачи данных ЛОГ0 на 60 мс. (на фото виден не полностью), затем 1 байт синхроимпульсов, затем передаем данные. Данные кодируются так: 20мс. ЛОГ0 и затем 20мс. ЛОГ1 означает передачу ЛОГ0, а 20мс. ЛОГ1 и затем 20мс. ЛОГ0 означает передачу ЛОГ1 (вроде как манчестерское кодирование).Данные передаются следующие: 1 байт ID приемника, которому адресована посылка, затем 1 байт прочих данных, затем инвертированный байт ID, а затем инвертированный байт прочих данных. После всех операций на 20мс. ставим ЛОГ1 и поехали по второму кругу.
Алгоритм работы следующий.
Передатчик:
Тут все просто. Включаем таймер, и по прерыванию выставляем ЛОГ на ноге МК, подключенной к передатчику. Тут проблем вроде нет.

Приемник:
Тут немного геморойней. Включаем прерывание по восходящему фронту и после его срабатывания запускаем таймер (настраиваем прерывание таймера на 65мс.) и включаем прерывание по спадающему фронту. После срабатывания прерывания смотрим сколько натикало. Если больше 60мс., то отключаем внешнее прерывание и включаем прерывание таймера через 10мс. (смещаемся на половину фазы). Далее в прерывании настраиваем дальнейшие прерывания на 20мс. и производим опрос состояния ноги МК (к которой подключен сигнал с приемника) каждые 20мс. Полученные следующие 8 отчетов записываем в переменную и сверяем с синхробитами (дожно получиться 0x55 т.е. 0b01010101). Тут проблем тоже нет.
Далее настраиваем прерывания на каждые 40мс. (каждый бит данных кодируется двумя состояниями, и по используемой системе кодирования нас интересует только первое, так как оно совпадает с битом данных). Записываем каждый полученный байт в отдельную переменную (напоминаю, что у меня передается всего 2 байта полезных данных И 2 байта инвертированных). Так вот на середине первого байта происходит россинхронизация и дальше я принимаю всякую херотень. Пробовал делать интервалы опроса в зависимости от длины стартового бита (интервал опроса при приеме синхробитов = 1/3 от стартового бита, интервал при приеме данных = 2/3 от стартового бита, переходной интервал = 1/6 от стартового бита), но получается еще большая хрень... :dont_know:

Собственно вопрос: какой использовать алгоритм для регистрации сигнала с приемника? Весь день хвост грызу над этой проблемой...

Есть следующие варианты:
1) Попробовать синхронизировать приемник подгонкой значений предделителя таймера (только вот этот геморрой будет с каждым собранным приемником).
2) Попробовать регистрировать только изменения фронтов (опасаюсь, что единственная помеха, может запороть всю передачу).
А может для такого случая есть что-то особое? :) .


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Вс дек 25, 2016 08:01:41 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 444
Зарегистрирован: Чт дек 27, 2012 20:46:09
Сообщений: 2029
Откуда: Болгария, г. Лом
Рейтинг сообщения: 1
Вот я предлагал подобнъй вариант на одной ветке здесь.

Радиоуправление. Переходим на МК. Чт апр 02, 2015 16:50 писал(а):
Я вам предлагаю такой вариант. Грубо
1. в режиме захвата (capture) ждем, ищем синхро битов. Режим захват генерирует преръвание => в interrupte.
2. Знаем уже сколко "стоят" скажем 4 синхро битов (помечаем SBL - SinBitLen). (4 для елементарное деление). Ета информация в режиме захвата получается автоматом. Тоже в interrupte.
3. Въчисляем SBL/16 и SBL/4
4. Запускаем таймер генерирующии преръвание с SBL/16 и по преръвание читаем порта ето первъй Информационнъй бит. Смещение равное 1/4 инфо бита. Тоже в interrupte.
5. Запускаем таймер генерирующии преръвание еще 53 раза с SBL/4 и по преръвание читаем - порта ето следующие инфобитами. Смещение равное 1 инфо бита. Тоже в interrupte.

Етим методом мъ попадаем всегда на первую четверть следующего инфо бита. Произходит авто синхронизация с частотой передатчика и все попадает в interrupte

если хочется то можно опять читат несколько раз с порта для каждого бита и таким образом страховать себе. Я думаю что ето излишно. Мъ читает уже установившиесеся (как пишется ето слово - установени) сигнали всегда в середине первой половинъ инфо бита.

Надеюсь что написал разборчиво.
PS. После завершения чтение инфо битов и стоп бита проверяем валидности п. 1. Если сразу за стоп бита приходит синхро значит можем принять что пакет валиднъй. Передаем его для въдачи на въводах МК


Я в своей версии делаю только в режим захвата - работаю только времевъми интервалами. Получилось неплохо, но вот поледную версию - руки не доходят дописать.

isx писал(а):
какой использовать алгоритм для регистрации сигнала с приемника?

Не понимаю вопроса.
isx писал(а):
(опасаюсь, что единственная помеха, может запороть всю передачу).

Да можно. Вот поетому,если делать по фронтов надо бъть увереннъм что все принято. Ето я делаю простой проверки - место СИ. Если СИ оказался на свое место в конце пакета (начало следующего) то значит пакет принят вернъй.
Еще в последней своей версии (на 8 дискретнъх ) поставил и логику 2 из 3. Ради истинъ - увеличение дальности при плохом сигнале не заметил.
Для борбъ с помехами при захват фронтов использую след алгоритм:
1. Захват фронта
2. Ждем 5-6 ... uS - продолжителность пропускаемой помехи - подстройка
3. Проверяем состояние входа
---- если оно не изменилось - т.е. ето бъл фронт, а не помеха - идем далее по логике - подготовка к захвате следующего фронта
---- если изменилось - ето бъло помеха - игнорируем захвата и продолжаем ждать того-же фронта
Вложение:
Algol.png [94.04 KiB]
Скачиваний: 824

Вот здесь в левом верхнем угле графическое изображение етого алгоритма.

_________________
Лом - ето город в Болгарии, а не инструмент юстировки електроники.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Вс дек 25, 2016 21:45:59 
Друг Кота

Карма: 2
Рейтинг сообщений: 59
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8033
Откуда: .ru
Рейтинг сообщения: 1
isx писал(а):
я полез писать протокол передачи.

Прежде чем писать свой протокол, рекомендую открыть даташит МК и посмотреть как работают заводские протоколы. В даташите всё расписано по пунктам. Например UART...
Вложение:
5.jpg [124.86 KiB]
Скачиваний: 872

...
Передатчик:
Берём МК с кварцем. Это будет мастер.
Допустим надо передать байт из переменной 01010101. Берём таймер (таймер тактируется от кварца, поэтому все задержки получаем с кварцевой точностью), настраиваем предделитель. Разбиваем каждый бит например на 8 равных частей.

Передаём байт из переменной 01010101:
1- устанавливаем на выходе МК бит = 0 и считаем 8 прерываний (переполнений) таймера. 01010101
2- устанавливаем на выходе МК бит = 1 и считаем 8 прерываний (переполнений) таймера. 01010101
3- устанавливаем на выходе МК бит = 0 и считаем 8 прерываний (переполнений) таймера. 01010101
4- устанавливаем на выходе МК бит = 1 и считаем 8 прерываний (переполнений) таймера. 01010101
5- устанавливаем на выходе МК бит = 0 и считаем 8 прерываний (переполнений) таймера. 01010101
6- устанавливаем на выходе МК бит = 1 и считаем 8 прерываний (переполнений) таймера. 01010101
7- устанавливаем на выходе МК бит = 0 и считаем 8 прерываний (переполнений) таймера. 01010101
8- устанавливаем на выходе МК бит = 1 и считаем 8 прерываний (переполнений) таймера. 01010101
Вложение:
1.jpg [31.76 KiB]
Скачиваний: 799

Берём следующий байт и повторяем всё сначала))... и т.д. ...

Приёмник:
Тоже самое: Берём точно такой же МК с таким же кварцев. Это будет слейв.
Настаиваем таймер слейв точно так же как в мастер (таймер тактируется от кварца, поэтому все задержки получаем с кварцевой точностью), настраиваем предделитель. Разбиваем каждый бит на те же 8 равных частей. Таймеры в мастер и в слейв работают с одной частотой, задаётся предделителем (и верхним порогом). Остаётся только синхронизировать работу таймера мастер и слейв (их фазу). Дальше... для синхронизации таймеров мастер и слейв, читаем даташит...))

Для синхронизации лучше передавать высокий уровень. Дело в том, что радиомодули WL101-341 и WL102-341 используют амплитудную модуляцию (ASK), а точнее амплитудную манипуляцию (ООК).
http://radiolaba.ru/microcotrollers/rad ... vanie.html
http://roboshop.spb.ru/syperheterodin-433m
...
...
Получается так: при передачи 1 - передатчик включён, при передачи 0 - передатчик выключён. Проблема в том, что если передатчик выключен (0), то на выходе приёмника будут шумы. При этом МК будет трудно синхронизироваться в шумах (хотя может), поэтому лучше использовать для синхронизации высокий уровень (1).

В простейшем случае никакие преамбулы и синхробайты не нужны. Достаточно одного длинного импульса высокого уровня.

В простейшем случае - мастер подаёт высокий уровень на передатчик (включает передатчик) и держит некоторое время высокий уровень. Ну например 8х8=64 прерываний таймера.
При этом приёмник и слейв готовится к приёму данных...
Слейв определяет по высокому уровню, что это начало пакета. Далее слейв ждёт низкий уровень... Как только слейв получает низкий уровень, то сразу переходит к записи данных.
Вложение:
2.jpg [137.86 KiB]
Скачиваний: 835

Запись данных делается просто:
1- с момента получения низкого уровня слейв отсчитывает половину бита. У нас весь бит 8 прерываний таймера, значит пол бита - 4 прерывания таймера. Проверяем состояние вывода и записываем в память. Это будет первый бит данных.
2-дальше отсчитываем по 8 прерываний таймера и проверяем состояние вывода и записываем в память. Это будет второй, третий и т.д. бит данных.. (D0,D1,D2, ...):
Вложение:
3.jpg [133.42 KiB]
Скачиваний: 566

Вот и всё))

Если длина пакета постоянная, то окончание передачи (стоп-бит) можно не передавать. Просто слейв записывает нужное количество бит и всё)).
:tea:

Добавлено after 2 hours 8 minutes 39 seconds:
Добавлю...))
isx писал(а):
каждый бит данных кодируется двумя состояниями, и по используемой системе кодирования нас интересует только первое, так как оно совпадает с битом данных

Да, нас интересует только первое, так как оно совпадает с битом данных. Однако нас так же интересует и второе, для определения ошибки при передачи.

Всё просто. Манчестер это:
- или 1 и 0.
- или 0 и 1.

Используя этот принцип, можно обнаружить ошибку передачи. Например если будет так:
- или 1 и 1.
- или 0 и 0.

Это значит, что при передачи пакета произошла ошибка...

Короче.. получили протокол с обнаружением ошибок))
:tea:


Вложения:
1.jpg [31.76 KiB]
Скачиваний: 549
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Вс дек 25, 2016 22:30:54 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
Всем спасибо за участие в дискуссии :) . Картина очень медленно, но все же проявляется (наверное надо освежить раствор хлорного железа познания в теории радиосвязи).
botchin писал(а):
в режиме захвата (capture) ждем, ищем синхро битов. Режим захват генерирует преръвание => в interrupte.

А как вы разделяете синхробиты между собой? Также отсчеты по таймеру или в режиме захвата?
botchin писал(а):
3. Въчисляем SBL/16 и SBL/4
4. Запускаем таймер генерирующии преръвание с SBL/16 и по преръвание читаем порта ето первъй Информационнъй бит. Смещение равное 1/4 инфо бита. Тоже в interrupte.
5. Запускаем таймер генерирующии преръвание еще 53 раза с SBL/4 и по преръвание читаем - порта ето следующие инфобитами. Смещение равное 1 инфо бита. Тоже в interrupte.

Вот и я так пробовал, но через пару десятков прерывания на приемник начинает идти хрень всякая.... Причину так и не нашел, пока...
botchin писал(а):
Етим методом мъ попадаем всегда на первую четверть следующего инфо бита. Произходит авто синхронизация с частотой передатчика и все попадает в interrupte

В четверть-то мы попадаем, только не пойму, как происходит автосинхронизация?
roman.com писал(а):
Прежде чем писать свой протокол, рекомендую открыть даташит МК и посмотреть как работают заводские протоколы. В даташите всё расписано по пунктам. Например UART...

Тот же UART физически соединяется с приемником и передатчиком, поэтому помехи там не гуляют такие. Да и почти во многих протоколах (кроме дифферинциального подключения, 1-Wire и чего-нидь ещё) есть отдельная линия тактирования (CLOCK какой-нибудь). Поэтому я не сильно опирался на них.
roman.com писал(а):
считаем 8 прерываний

Вот тут вопрос. Почему нельзя сделать одно прерывание вместо восьми? Зачем разбивать?
roman.com писал(а):
Остаётся только синхронизировать работу таймера мастер и слейв (их фазу). Дальше... для синхронизации таймеров мастер и слейв, читаем даташит...

В даташите слейв синхронизируется от внешнего источника. Мы же не можем синхронизировать его напрямую от радиоканала, тогда любая помеха даст лишний отсчет.
Я синхронизирую у себя следующим образом: включаем прерывание по спадающему фронту и после его срабатывания запускаем таймер (настраиваем прерывание таймера на 65мс. - это означает что мы зависли, и нужно вернуться в изначальное состояние) и включаем прерывание по восходящему фронту. После срабатывания прерывания смотрим сколько натикало. Если больше 60мс., то отключаем внешнее прерывание и включаем таймер. После, я полагаю, таймеры должны синхронизироваться.
И еще. вопрос до кучи :) . Сколько по факту два таймера могут поддерживать синхронизацию при тактировании от кварцев? К примеру, если передаю я биты длительностью в 10мс., то на каком бите таймер приемника рассинхронизируется до такой степени, что слетит с фазы (примерно, чисто из практического опыта)?
И еще вопрос. Когда срабатывает прерывание таймера по переполнению, то новый отсчет таймера продолжается сразу, либо начинается только после выхода из прерывания. Склоняюсь к первому варианту, но хочу убедиться в истинности своих мыслей :) .
roman.com писал(а):
Проблема в том, что если передатчик выключен (0), то на выходе приёмника будут шумы. При этом МК будет трудно синхронизироваться в шумах (хотя может), поэтому лучше использовать для синхронизации высокий уровень (1).

Вот тут тоже непонятки. Я выбрал для синхронизации именно ЛОГ0 - и не просто так. Если к работающему приемнику на выход повесить светодиод, то при отключенном передатчике СД горит в пол накала (шумы). Если же включить передатчик и замкнуть его вход на + питания, то можно увидеть вспышку СД примерно на четверть секунды, после этого СД опять начинает гореть в полнакала (наверное передача прекращается по превышении какого-то определенного времени). НО, если замкнуть вход передатчика на землю, то СД погаснет на некоторое время, и это время заметно на глаз дольше, чем время вспышки при замыкании входа на + питания. Значит он не просто отключается, а делает что-то еще (либо как-то глушит, либо использует смещенную частоту для передачи другого логического состояния).
roman.com писал(а):
Запись данных делается просто:
1- с момента получения низкого уровня слейв отсчитывает половину бита. У нас весь бит 8 прерываний таймера, значит пол бита - 4 прерывания таймера. Проверяем состояние вывода и записываем в память. Это будет первый бит данных.
2-дальше отсчитываем по 8 прерываний таймера и проверяем состояние вывода и записываем в память. Это будет второй, третий и т.д. бит данных.. (D0,D1,D2, ...):

У меня сейчас такой же алгоритм.
roman.com писал(а):
Если длина пакета постоянная, то окончание передачи (стоп-бит) можно не передавать. Просто слейв записывает нужное количество бит и всё)).

Стоп бит у меня играет другую роль - он изменяет логическое состояние перед передачей стартового бита. Если "посылка" заканчивается передачей ЛОГ0, то при последующей передаче стартового бита, его длина искусственно увеличивается на 20мс. (длина одного бита в моем протоколе), и в итоге составляет 80мс., вместо 60мс. А если стартовый бит у меня превышает 65мс., то приемник считает его глюком, и сбрасывается в исходное состояние.
В зависимости от Ваших ответов буду копать дальше в указанном направлении. Пойду пока проверю работу передатчика, а то может я подкапываюсь к проблеме не с того края. :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Вс дек 25, 2016 22:53:23 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 444
Зарегистрирован: Чт дек 27, 2012 20:46:09
Сообщений: 2029
Откуда: Болгария, г. Лом
Рейтинг сообщения: 1
isx писал(а):
А как вы разделяете синхробиты между собой?

Ето одна длинная 0 или 1. Там в файле Algol.png видна и структура "моего" пакета даннъх
Цитата:
1. в режиме захвата (capture) ждем, ищем синхро битов.
2. Знаем уже сколко "стоят" скажем 4 синхро битов (помечаем SBL - SinBitLen). (4 для елементарное деление). Ета информация в режиме захвата получается автоматом.

Под "ищем синхро битов" - ето определить продолжителность импулса и если он совпадает с СИ то и отметить, что ето СИ. Зная продолжителность СИ мъ всегда попадаем в нашу 1/16 и 1/4 - т.е. изменение продолжителности СИ не влияет.

Пример даю как я определяю СИ - он у меня 0x05c0 - здесь я немножко хитрю - проверяю для валидности с 0x0580. Ето дает мне возможность "гуляние" СИ в пределах +/- 64 единиц.
Спойлер
Код:
   if (CCP1IF && CCP1IE)
   {
      TMR0 = 0;      //допълнителна задръжка за удължаване на (евентуално) пропускания импулс (шум)
      NOP();      //      
      NOP();      //   
      NOP();      //   
      NOP();      //   1uS   
      NOP();      //   
      NOP();      //   
      NOP();      //   
      NOP();      //  1uS   
      NOP();      //   
      NOP();      //   
      NOP();      //   
      NOP();      //   1uS   
      Tmp = PORTC;   //вземаме текущата стойност на PORTC
      asm("swapf _Tmp,f"); 
      asm("rrf _Tmp,f");  // в младшия бит стойността на RC5
      Tmp &= 0x01;
      CCP1IF=0;
      if (Tmp == (CCP1CON & 0x01))
      { // входа е с валидна стойност - не е шум
         CCP1CON ^=1; //сменяме фронта на захвата

         TI = CCPR1-PrevCCP;
         if(!SiLoad || cnt == 13)
         {   //не сме приели SI или сме приели и чакаме втори SI
            Tmp = TI  >> 4;
            Tmp =  Tmp & 0x00f8 ; //Привеждане на приетото в един байт 0x05C0 => 0x5C

            if (Tmp ^ MASK_SI )    // #define MASK_SI 0x58


Как-то так. Здесь присуствует и код для игнора маленких помех. Ето все еще не окончательнъй вариант ....
МК PIC16F1829.

_________________
Лом - ето город в Болгарии, а не инструмент юстировки електроники.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Пн дек 26, 2016 00:27:37 
Друг Кота

Карма: 2
Рейтинг сообщений: 59
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8033
Откуда: .ru
Рейтинг сообщения: 1
isx писал(а):
Тот же UART физически соединяется с приемником и передатчиком, поэтому помехи там не гуляют такие.

Смотря каким кабелем и как подключать)) Помехи в кабеле (проходящим например рядом с силовым кабелм, по которому идет 380 Вольт) могут быть больше чем по радиоканалу)) Помехи могут быть такие, что от высокого напряжения сгорит МК )))
И дифферинциальное подключение не спасёт...
isx писал(а):
Почему нельзя сделать одно прерывание вместо восьми?

Можно... но не рекомендуется)). Вообще в процессе работы таймер никто не дёргает... можно нарваться на глюки)).
Обычно таймер настраивается один раз (перед началом передачи или приёма) и больше его не трогают. Дальше считают только "тики" таймера:

-Для синхронизации мы проверяем состояние вывода МК через каждый "тик" таймера.
-Для записи бит мы проверяем состояние вывода МК через каждые 8 "тиков" таймера (но можно и через каждый "тик" таймера).

При этом сам таймер (предделитель таймера) мы не трогаем. Поэтому глюков таймера нет...
isx писал(а):
В даташите слейв синхронизируется от внешнего источника. Мы же не можем синхронизировать его напрямую от радиоканала, тогда любая помеха даст лишний отсчет.

Можем синхронизировать таймер мастер и слейв по количеству циклов ("тиков"). Один или несколько лишних отсчётов не влият на работу слейва. Отклонение фазы таймера мастера и слейва не должна превышать один бит (один импульс). В случае помехи получим небольшое отклонение фазы таймера мастера и слейва. Это не страшно. Слейв всё равно будет проверять состояние входа МК, когда на нём уже установился логический уровень (1 или 0).
isx писал(а):
botchin писал(а):
3. Въчисляем SBL/16 и SBL/4

Вот и я так пробовал, но через пару десятков прерывания на приемник начинает идти хрень всякая.... Причину так и не нашел, пока...

Для точного вычисления SBL/16, нужно чтобы длительность синхро была постоянная. А где гарантия что дилтельность синхро постоянная? )) Малейшая помеха.. и длительность синхро уже другая))

Так никто не делает. Во всех радиомодулях есть кварц. Частота мастера и слейва одинаковая, благодаря кварцу. Никто SBL/16 не вычисляет. Это не надёжный метод.
isx писал(а):
Я синхронизирую у себя следующим образом

А какой смысл дёргать туда-сюда таймер.. включать-отключать прерывания... Это как то улучшит программу? )) Или повысит быстродействие? Или меньше код программы?

А нельзя просто включить таймер и просто сидеть и спокойно считать прерывания ("тики") ? ))
isx писал(а):
Сколько по факту два таймера могут поддерживать синхронизацию при тактировании от кварцев?

Много... Можно точно посчитать. В даташитах точно пишут расчёты.

-Какий кварц... (у кварца есть добротность).
-С какой точностью настроен кварц. (в схеме есть подстроечные конденсаторы).
-Какая температура и напряжение питания...

Короче всё учитывается... Можно посчитать...
isx писал(а):
Когда срабатывает прерывание таймера по переполнению, то новый отсчет таймера продолжается сразу, либо начинается только после выхода из прерывания.

Таймер (согласно даташиту) работает пока включен предделитель. При переполнении выставляется флаг... уходим в прерывание.. А теймер продолжает спокойно работать дальше... Главное чтобы мы успели вернуть из прерывания пока таймер не успел переполниться... иначе опять выставится флаг и мы опять уйдём в прерывание... )) так и будем постоянно бегать в туда-сюда в прерывание... ))) Об этом всем написано в даташите - об опасности долгих прерываний))
isx писал(а):
Если к работающему приемнику на выход повесить светодиод, то при отключенном передатчике СД горит в пол накала (шумы). Если же включить передатчик и замкнуть его вход на + питания, то можно увидеть вспышку СД примерно на четверть секунды

Вот для этого есть приборы. В идеале нужно записат mcbuyfk приёмника и посмотреть что у него на выходе... Подозреваю что это работа следящей системы... у нас супергетеродин АМ с АРУ. Поэтому сущестует ограничение на максимальную длительность импульса.
isx писал(а):
Стоп бит у меня играет другую роль...

Если всё делать на "тиках" таймера, то не имеет значение сколько длится синхро бит...

С приёмником можно разобраться подробней... записать сигнал при разных импульсах.. и всё станет ясно))
Кратко так. При включении передатчика шумы в приёмнике уменьшаются, но полностью не исчезают. Это нормально. Судя по всему, просто большое усиление УНЧ. В момент включения передатчика, в приёмнике срабатывает АРУ, уменьшая усиление приёмника, а УНЧ продолжает усиливать шумы... ))

Вообще 20 мс - это слишком большая длительность. Обычно для пультов используют импульсы около 1мс.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Вт дек 27, 2016 01:09:32 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
roman.com писал(а):
Можно... но не рекомендуется)). Вообще в процессе работы таймер никто не дёргает... можно нарваться на глюки)).
Обычно таймер настраивается один раз (перед началом передачи или приёма) и больше его не трогают. Дальше считают только "тики" таймера:

Таймеру плохо не будет, если изменять регистр ARR при счете. Главное, чтоб при изменении CNT не успел проскочить устанавливаемое в ARR значение, иначе прерывание произойдет через лишние 65535 отсчетов. У меня в каждом моменте изменения регистра ARR регистр CNT ещё равен нулю (а минимальное значение, устанавливаемое у меня в ARR, равно 10), так что таймер еще и покурить сходить успеет :) .
Тогда мне все еще не ясна природа "восьми тиков"... :dont_know:
roman.com писал(а):
При этом сам таймер (предделитель таймера) мы не трогаем. Поэтому глюков таймера нет...

А предделитель и не трогаем. Только ARR :) .
roman.com писал(а):
Можем синхронизировать таймер мастер и слейв по количеству циклов ("тиков")

Вот теперь вообще не запутался. Чтоб синхронизировать по тикам мастера, слейву нужно как-то сначала их получить (тики), но по радиоканалу мы можем получить не только тики, но и пару помех, которые рассинхронизируют весь прием данных....
roman.com писал(а):
А где гарантия что дилтельность синхро постоянная? )) Малейшая помеха.. и длительность синхро уже другая))

Так никто не делает. Во всех радиомодулях есть кварц. Частота мастера и слейва одинаковая, благодаря кварцу. Никто SBL/16 не вычисляет. Это не надёжный метод.

Благодарю. Что-то похожее я и хотел услышать :) . Теперь можно отбросить мысли об этих вычислениях.
roman.com писал(а):
А какой смысл дёргать туда-сюда таймер.. включать-отключать прерывания... Это как то улучшит программу? )) Или повысит быстродействие? Или меньше код программы?

А нельзя просто включить таймер и просто сидеть и спокойно считать прерывания ("тики") ? ))

А прерывание я трогаю только при поиске и нахождении Стартового Импульса. В режиме ожидания СИ у меня на приемник заведено внешнее прерывание EXTI. Как только прерывание обнаружено, я задействую прерывания таймера, и до конца передачи только два раза корректирую регистр ARR. На этом все танцы заканчиваются. Я полагаю, что при подсчете только тиков (отвязавшись от значения ARR), код будет несколько больше и появятся 1-2 лишние переменные.
roman.com писал(а):
Много... Можно точно посчитать. В даташитах точно пишут расчёты.

То есть, с учетом моего небольшого объема данных грешить на несовершенство тактирования кварцев не стоит?
roman.com писал(а):
Таймер (согласно даташиту) работает пока включен предделитель.

Спасибо. Успокоили :) .
roman.com писал(а):
Вот для этого есть приборы.

Точнее сказать: "нет приборов" :) . Эх, надо пополнять свой измерительный арсенал. Чем дальше в лес, тем сложнее работать вслепую....
roman.com писал(а):
Вообще 20 мс - это слишком большая длительность. Обычно для пультов используют импульсы около 1мс.

Пробовал уменьшать в 10 раз - вообще перестает синхронизироваться.

Решил избавиться от самой "мутной" для меня цепочки - приемника и передатчика, соединив пины мастера и слейва напрямую. Ничего не изменилось, значит проблема в коде.
Пролапатил по новой все интервалы - ошибок нет. Увеличил длительность импульсов в 10 раз и все стало передаваться как надо. Если увеличить в 100 раз, то тоже все проходит гладко.
Даже не знаю куда дальше рыть, варианты почти кончились :dont_know:

Добавлено after 1 hour 6 minutes 29 seconds:
Re: Приемник WL101-341 и передатчик WL102-341 + Передача данных.
Косяк был там, где я его вообще не ждал. Я после определения СИ отключал маску прерывания EXTI, чтоб потом использовать пин как вход данных. Но при таком подходе, похоже, на пин летят наводки и он не всегда говорит все как есть. Если отключать не только маску, но и SYSCFG->EXTICR[1] &= ~SYSCFG_EXTICR2_EXTI4_PA; NVIC_DisableIRQ(EXTI4_15_IRQn);, тогда глюк пропадает и не проявляется даже при длительности импульса в 2 мс.
Все же решение мне кажется костыльным. Интересно, если сделать поиск СИ через захват таймера, а потом этот же пин использовать для снятия битов с приемника, то будут подобные глюки?
И все же, радиоканал так и не заработал. Не удается даже синхробиты считать. Единственное, что пока приходит в голову - сделать по несколько отсчетов на каждый импульс принятый приемником, и вычислять наиболее продолжительное состояние (надеюсь, это может устранить влияние помех). Однако, такое решение даст увеличение нагрузки на процессор в несколько раз. Да и сработат ли - не ясно :dont_know: .
Пойду, попробую выспаться, а то этот передатчик мне уже неделю спать нормально не дает :) .


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Вт дек 27, 2016 02:27:52 
Друг Кота
Аватар пользователя

Карма: 75
Рейтинг сообщений: 611
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3728
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Может кого заинтересует 10-импульсный протокол передачи байта. Когда-то собирал такой на 433-мгц и аналоговых модулях TXM-433 и RXM-433 типа ваших от Lynx. В этом случае можно и без кварцев у МК обойтись. Передача нулей и единиц кодируется длительностью между импульсами. Малая длительность - 0, большая - 1. В начале приёма байта передатчик посылает 2 импульса, длительность (reference) между которыми больше таковой для 0, но меньше таковой для 1. Эту длительность приёмник измеряет таймером и впоследствии использует для определения передачи 0 или 1. Таким образом, приёмник самосинхронизируется по передатчику. Большое преимущество такого метода ещё и в том, что передатчик включается только на передачу коротких импульсов, что способствует продлению жизни батареи. Кстати, интересовались какую максимальную длительность импульса можно передавать в России безлицензионно в этом диапазоне частот?

Выглядит этот протокол красиво в теории при отсутствии помех. В реальных условиях возникает проблема как отличить импульсы передатчика от помех. Для этого следует изучить характер помех в вашей местности с использованием логического анализатора. Обычно помехи представляют из себя кроткие импульсы на выходе приёмника, т.е. при приёме следует измерять длительность принятого импульса и сравнивать с порогом. Для конкретики приведу данные для своей местности. Длительность импульсов передатчика я выставлял 100μsec (микросекунд) и игнорировал импульсы короче 60μsec. Этим отсекались практически все помехи, но не знаю насколько это типично для других регионов (в моём сигнализации на авто никто не ставит). Длительность первой (reference) паузы у меня была 1350μsec при длительности пауз передачи 0 и 1, соответственно 810μsec и 1890μsec (здесь 1350 = (810 + 1890)/2). Таким образом, скорость передачи не превосходит порядка 5kbps и при передаче сообщений где-то в 20 байт неправильный их приём был крайне редок.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник WL101-341 и передатчик WL102-341 + Передача дан
СообщениеДобавлено: Вт дек 27, 2016 08:55:13 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 444
Зарегистрирован: Чт дек 27, 2012 20:46:09
Сообщений: 2029
Откуда: Болгария, г. Лом
Рейтинг сообщения: 0
Ser60 писал(а):
Может кого заинтересует 10-импульсный протокол передачи байта.

Тема мне начала нравится. Обсуждение есть .....

10-импульсный протокол передачи байта - очень узкие импулсъ (разграничители 0 и 1), ето кажется, ставить требования к пропускной полосе передатчика. Да и 10 импульса (дефакто 20 бода) для одного байта? Не много ли...
Ser60 писал(а):
Обычно помехи представляют из себя кроткие импульсы на выходе приёмника, т.е. при приёме следует измерять длительность принятого импульса и сравнивать с порогом.

Вот истина. О чем я и говорил. Только у меня порога нет. Я просто игнорирую узкие импулсъ - явная помеха. Кстати, можно и модифицировать алгоритм для повъшения помехо устоичивости. Внедрить какая-то "адаптивность", что ли? Подумаем. Как возвращусь на теме ......

Цитата:
И все же, радиоканал так и не заработал. Не удается даже синхробиты считать

Когда я начал делать свои кодер/декодер мне не бъло ясно - а не инвертирует ли радиотракт сигнала? Пришлось думать как сделать независимую от радиоканала кодировку. Мне сейчас по .... что делаеть радиоканал.
Вот структура пакета последней версии
Изображение
Видим, что следующии пакет является инверснъм текущего включая и СИ.

_________________
Лом - ето город в Болгарии, а не инструмент юстировки електроники.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  1, ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y