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

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

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

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

Поскольку сигналом с UART промодулировать несущую радиомодулей не является делом эффективным, приходится использовать манчестероподобные методы кодирования. Но в них есть одно ограничение, которое захотелось обойти. Заранее нужно знать, на какой скорости идет передача. Обошел это так:

Каждый бит передается импульсом и паузой. Длительность импульса и длительность паузы несут информацию о том, какой бит (0 или 1 или синхросигнал) передаются. Временной интервал передачи бита условно поделен на 5 интервалов. Если 1 интервал импульс а 4 интервала пауза, то передается синхроимпульс вида 0. Чтобы исключить постоянную составляющую во время синхронизации, есть синхроимпульс вида 1, в котором все наоборот. 4 интервала импульс и 1 интервал пауза.

Эти синхроимпульсы передаются поочередно. Сколько их нужно, чтобы приемник надежно вышел на режим, нужно еще исследовать. Но в моем, несколько модифицированном приемнике, собранном по подобию http://vrtp.ru/index.php?act=categories&CODE=article&article=1418 с (сверхрегенератор тот же)

надежный выход на режим уже через несколько милисекунд. При небольших скоростях, от пары сотен до тысяч бит в секунду было достаточно 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 Поменял инициализацию портов. Был кратковременный перегруз выхода приемника.

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

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

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

Скачать исходники, прошивку и печатную плату в формате LAY (Автор ПП: vetall81)

С уважением Грегуль Алексей (grezincmp@mail.ru)


Категория: Электроудочки

Написать коментарий

*
= 3 + 3

Добавить изображение

Последние статьи