Реклама ⓘ
Главная » Электроудочки
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Пейджер для сигнализатора поклевки

elud12-1.jpg

В виду некоторого оживления интереса к моему сигнализатору поклевки, давно гуляющего на просторах интернета, (сначала ryba45, потом ryba13) , решил продолжить возню. Тем более, что давно хотел испытать на практике некоторые свои соображения по поводу выдуманного мною (а может он и существует, но я об этом не знаю) самосинхронизирующегося протокола  радиоканала. Для использования под простейшие радиомодули.

Что в результате получилось?

Поскольку сигналом с UART промодулировать несущую радиомодулей не является делом эффективным, приходится использовать манчестероподобные методы кодирования. Но в них есть одно ограничение, которое захотелось обойти. Заранее нужно знать, на какой скорости идет передача. Обошел это так:
Каждый бит передается импульсом и паузой. Длительность импульса и длительность паузы несут информацию о том, какой бит (0 или 1 или синхросигнал) передаются. Временной интервал передачи бита условно поделен на 5 интервалов. Если 1 интервал импульс а 4 интервала пауза, то передается синхроимпульс вида 0. Чтобы исключить постоянную составляющую во время синхронизации, есть синхроимпульс вида 1, в котором все наоборот. 4 интервала импульс и 1 интервал пауза.
Эти синхроимпульсы передаются поочередно. Сколько их нужно, чтобы приемник надежно вышел на режим, нужно еще исследовать. Но в моем, несколько модифицированном приемнике, собранном по подобию http://vrtp.ru/index.php?act=categories&CODE=article&article=1418 с (сверхрегенератор тот же)

elud12-2.jpg

Надежный выход на режим уже через несколько миллисекунд. При небольших скоростях, от пары сотен до тысяч бит в секунду было достаточно 4 таких синхросигналов. Последним синхроимпульсом перед началом передачи собственно байта, я принял, что должен быть синхроимпульс вида 1. Назовем его старт. Логическая единица байта передается импульсом в 3 интервала, пауза 2 интервала. Логический ноль байта передается импульсом в 2 интервала, пауза 3 интервала. После передачи всего байта передается синхроимпульс вида 0. Назовем его стоп. Прием байта считается удачным, если мы приняли правильный старт, 8 правильных информационных бита и правильный стоп. Если нет - байт бракуется и опять прием с самого начала. Правильный старт,...

Такой способ по моему не требовательный к стабильности тактовых генераторов и передатчика и приемника. Причем нам совсем необязательно знать, на какой скорости идет передача. Если соотношения импульсов и пауз выдержаны и не было помехи, он примется правильно. Единственное, что важно, чтобы таймер приемника во время приема самого длинного сигнала (паузы или импульса) не переполнился. И чтобы при приеме самого короткого сигнала он успел насчитать хотя бы до единицы. Для этого нужно выбрать нужный прескалер.

Очень сильно упростить условия можно выбрав в качестве приемного таймера 16-битный таймер. Но это несколько удлинит процедуры анализа принятой информации в прерывании. Дойдут руки - попробую. Сейчас все оттестировано и отмакетировано с 8-битными таймерами. С моим комплектом радиомодулей на скоростях от нескольких сот бит в секунду до выше тысячи, прием-передача правильная на расстояниях от нескольких сантиметров до 90 метров. Правда, в диапазоне 433.92 в моих условиях очень шумно. Поэтому часто происходят потери байтов из-за помех. Каждые 20-40 секунд в эфире что-то жужжыт.

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

В моем случае, передатчиком была тинька13, тактируемая 1МГЦ от внутреннего генератора. Приемником - тинька2313 тактируемая 8.2МГЦ от внутреннего генератора. После выхода генераторов на режим (секунда-две) ограничение по скорости работало очень точно. Сбои в приеме начинались, если я задавал отклонение от реальной скорости менее 2 процентов.
В общем, про систему передачи хватит.

Что собой представляет пейджер.

Стандартный радиомодуль подключенный к тиньке2313. При сработке какого-то из сигнализаторов, пейджер продублирует своим бузером сигналы с сигнализатора. После этого он на индикаторе будет моргать заданное в программе количество раз номер сработавшего сигнализатора. Если одновременно (в широком смысле слова) сработают несколько сигнализаторов, то он продублирует их сигналы и на индикаторе будет последовательно вымаргивать их номера. Если не закончено вымаргивание, а снова есть поклевка, независимо от номера сработавшего сигнализатора, моргание начнется сначала. Если номер сработавшего еще не принимался, он добавится в буфер для индикации. Таким образом, после утихания сигнализаторов гарантировано пейджер выморгает заданное количество раз с интервалом в 500мс.
Номера задаются при компиляции прошивки сигнализаторов. Они могут быть в диапазоне от 0 до 15. Отображаются на индикаторе следующим образом:
0 1 2 3 4 5 6 7 8 9 A b C d E F
Сигнализаторами они передаются одним байтом, у которого оба полубайта одинаковы и соответствуют номеру сигнализатора. Это еще один из способов защиты от приема ложных сигналов от брелков сигнализаций, работающих в этом диапазоне.

Буфер пейджера может принять до 4 сигналов с разных сигнализаторов. Это оэначает, что могут "одновременно" сработать 4 штуки. И они будут зафиксированы. Мне бы такой клев!

В комплекте есть исходник самого пейджера под ИАР-компилятор.
Он конфигурируется при помощи директив #define в файлике setting.h
Имеется возможность свободного выбора пинов для бузера и семисегментного индикатора. Входом выбран пин PCINT0. Его смена не предусмотрена. Но при желании это тоже возможно.

Также есть возможность определять тип подключенного индикатора - с общим анодом или катодом. Это позволяет подключать любые индикаторы хоть напрямую, хоть через буферные ключи. Я свой подключил напрямую. Но стоит помнить об ограничении тока потребления с каждого пина контроллера.

Можно использовать радиомодули с инверсией сигнала или без таковой. Обычно они с инверсией. Мой модифицированный без инверсии. И много других параметров определяются директивами #define.

Исходник подробно прокомментирован. Смотрите, модифицируйте...

Я не жмот. Расстраиваться от того, что их кто-то использует, не буду. Если они кому-то будут полезными, выпейте за меня рюмку чаю. Но если кому-то они покажутся гавнокодом, прошу воздержаться от эмоций.

Для правильной компиляции на вкладке Options/C/C++ Compiler/Code в окошке Register utilisations резервируем все 12 регистров.
на вкладке options/General Options ставим птичку Enable bit definitions...

Естественно, просим компилятор сгенерировать понятный вашему программатору выходной файл прошивки. У меня это intel standart. Оптимизация - по вкусу.

В комплекте лежит откомпилированная прошивка, которая полностью соответствует приложенной схеме. Радиоканал выбран с инверсией. Индикатор с общим анодом.

Сами радиомодули естественно можно использовать любые. Хоть самопальные, хоть покупные. Но не модемы. Лишь бы они работали на одинаковых частотах.

От мощности передатчика и чувствительности приемника будет зависеть дальность.

Про фьюзы...

Fuses
 OSCCALs   = 4D 4A - Можно не трогать. В Вашем случае могут быть другими. Но если хотите точно подогнать частоту, можно поиграться.
_LOW = 0xE4
 CKDIV   = 1   - Пусть так будет. Если поставите 0, то будет работать не на 8МГЦ.
 CKOUT   = 1
 SUT   = 2
 CKSEL   = 4   - Работаем от внутреннего генератора.
_HIGH = 0xDF
 DWEN   = 1
 EESAVE   = 1
 WDTON   = 1
 BODLEVEL  = 7
 RSTDISBL   = 1   - Не трогать! Угробите контроллер. Снять можно только параллельным.
_EXT = 0xFF
 SELFPRGEN = 1

Версия 01 Поменял инициализацию портов. Был кратковременный перегруз выхода приемника.

Кроме того, спалил операционник в приемнике. Пришлось менять. Переделал саму схему усилителя.

Теперь выглядит так:

elud12-3.jpg

Из преимуществ, не требует пилота. Первый же импульс с усилителя в полную амплитуду, поскольку усиливает сигнал, приподнятый от земли (на С1 около 0.6в со сверхрегенератора). Имеет большое входное сопротивление. По постоянному напряжению-повторитель напряжения. Компаратор со схемотехники Блейза. Среднюю точку на компаратор можно бы брать с С2, как в предыдущем варианте, но тогда усилитель превращается в своеобразный фильтр, подрезающий низкие частоты. На высоких скоростях это благо а на низких - зло. Тут надо будет подумать...

Прикрепленные файлы:

Теги:

Грегуль Алексей Опубликована: 2011 г. 0 0
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 1 чел.

Комментарии (4) | Я собрал (0) | Подписаться

0
suninterbrew #
Собрал сигнализатор и пейджер - всё работает.
На пейджере при поклёвки высвечивается "0".
Хочу собрать ещё 15 сигнализаторов.
Выложите пожалуйста hex коды прошивок для сигнализаторов с номерами от "1" до "F".
Ответить
0
suninterbrew #
Выкладываю 15 hex-ов для сигнализаторов.
Прикрепленный файл: Ryba13_v1_Sign.rar
Ответить
0
suninterbrew #
Приёмник и передатчик я заказывал на aliexpress за 65 руб.
Вот ссылка для заказа: http://ru.aliexpress.com/item/1pair-2pcs-433mhz-rf-transmitter-and-receiver-kit-For-Wireless-Power-switch-socket-remote-control-LED/32311933574.html
Прикрепленный файл: Антена.JPG
Прикрепленный файл: Передатчик.JPG
Прикрепленный файл: Приёмник- 1.JPG
Прикрепленный файл: Приёмник- 2.JPG
Прикрепленный файл: Приёмник.JPG
Ответить
0
andrey #
Добрый день, не могли бы Вы выложить прошивку под индикатор с общим катодом. Просто никак не получается переделать прошивку.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Конструктор - темброблок на LM1036
Конструктор - темброблок на LM1036
Discovery V8 Квадрокоптер Syma X11
вверх