079-IR-удлиннитель для UART на ATtiny13.

Автор: | 12.10.2011

1 Отмазки.

Смотрю я на дату последней статьи и вижу — давненько я ничего не писал для блога :(. И причина даже не в том, что писать было не о чем, скорее наоборот, сразу взялся за столько проектов, что трудно было довести до ума хоть один из них. Кроме того, на работе в последнее время много работы 🙂 – не получается посидеть, поделать что-то для себя. Еще, начал двигать проект 1W-IR сети (устройство этой статьи является пилотным устройством сети) – хотелось сделать все правильно, поэтому и ушло много времени на создание алгоритмов и логики работы.

Ну вот, с отмазками закончили, переходим, наконец, к устройству.

2 Введение (ни о чем).

IR-удлинитель для UART специфичное устройство и в электронных проектах оно не будет сильно востребованным. Причины: небольшая скорость передачи, присутствие микроконтроллера в схеме, соответственно, увеличенная стоимость проекта. Существуют более простые и быстрые устройства (например, совсем свежая статья с avrdevices.ru). Несмотря на это было потрачено много времени на создание данного устройства, для того, чтобы отработать и обкатать алгоритмы реализации 1W-IR-сети.

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

— Во-первых — это реализация проекта на ATtiny13. С самого начала было решено реализовать работу сети именно на ATtiny13 (хватит тини – будет работать где угодно!). Из-за ограниченных ресурсов выбранного микроконтроллера (512 слов памяти, 1 таймер) было интересно продумывать и реализовывать алгоритм работы сети, формирование модулированного IR-сигнала, его прием TSOPом. В итоге вышел компактный и не ресурсоемкий код.

— Во-вторых, я использовал несколько новых для себя приемов программирования. В устройстве реализован полнодуплексный программный UART (прием и передача ведутся параллельно, независимо друг от друга) и, как бы это не странно звучало, полнодуплексный IR приемо-передатчик (при передаче IR сигнала передающее устройство принимает свою посылку). Для того чтобы заставить все это дело работать совместно и независимо друг от друга на одном 8-ми битном таймере (и не сломать себе голову при реализации этого) пришлось соорудить нечто наподобие операционной системы реального времени (RTOS).

Создание диспетчера задач было интересной задачей и, похоже, я буду широко использовать его и далее в своих проектах – очень удобно получилось! (обязательно сделаю подробное описание с примерами здесь в блоге или на форуме – может сгодиться не только мне.)

— В-третьих, проект показал мне недостаточность (необходимость) академических знаний по программированию — все приходилось придумывать с нуля. Был-бы профессиональным (читай обученным) программистом — было-бы намного легче. Ничего – будем восполнять пробелы в знаниях. Кто подскажет толковую книгу по программированию? Имеется в виду не определенному языку, а именно организации процесса создания программы/алгоритма.

3 Принцип работы удлинителя (уже ближе к теме).

Все довольно просто. Плата удлинителя является приемо-передатчиком IR-сигнала. Две платы ставятся в разрыв линий UART (TxD, RxD) между двумя устройствами. Далее устройства можно разнести на некоторое расстояние (не проверял предельную дальность, но в пределах комнаты работает без нареканий), при этом устройства не заметят, что сигнал UART передается не по 3 линиям (TxD, RxD , земля), а по IR каналу.

Связь по IR каналу

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

Несмотря на небольшие возможности микроконтроллера ATtiny13 в нем получилось реализовать полноценного участника 1W-IR сети. Если Вам понадобиться обмениваться сообщения между тремя устройствами или более, изготавливайте нужное количество плат, и они будут совместно работать, сколько бы их не было. Более того, совместно в этой сети будут работать, не мешая друг другу, и другие устройства (в ближайшем времени сделаем несколько).
На плате есть выход на светодиод индикации работы сети. Он ставиться без каких либо сопротивлений — напрямую к ножкам. Распиновка платы имеет вот такой вид:
распиновка удлинителя

 

4 Удлинитель (1W-IR  сеть) максимально бережно относиться к передаваемым данным:

— UART приемник имеет буфер, а это значит, что Вам не нужно беспокоиться о том, прошло ли предыдущее сообщение по сети или нет – просто передавайте сообщения по UART (в разумных пределах, конечно – буфер всего 16 байт), а устройство само будет контролировать передачу их по IR-сети.

— Удлинитель никогда не начнет передачу если в IR-эфире есть шумы, другая передача или сигналы от IR-пульта, он дождется освобождения эфира, сделает контрольную паузу и лишь потом начнет передачу.

— Каждая отправляемая посылка, имеет специальные калибровочные биты. Принимающее устройство по этим битам калибрует модуль IR-приемника — это исключает ошибки приема при уходе частоты задающего генератора передающего (или принимающего) устройства или, даже, при разных скоростях передачи.

— Так как модули IR-приемника и IR-передатчика в удлинителе независимы друг от друга и работают параллельно, свою передаваемую посылку удлинитель одновременно и принимает. По окончании приема посылка проверяется на целостность (при передаче возможны помехи от ламп, наложение передач от слепых устройств, IR-пультов и т.д.). В случае если посылка принялась с ошибкой удлинитель ее автоматически повторит.

— Все исходящие посылки дополняются циклическим избыточным кодом CRC8, полностью идентичному применяемому в Dallas/Maxim-устройствах для работы в 1Wire сети. Каждая принятая посылка проверяется на целостность при помощи этого кода. Сбойные или ошибочные посылки никогда не пройдут, удлинитель не будет реагировать на посторонние сигналы. Кроме того, если приемник обнаруживает ошибку, то он сразу выдает запрос на повторную передачу этой посылки, а передатчик, приняв этот запрос, повторит посылку.

В текущей версии устройства автоматические запросы повторов сбойных посылок отключены с целью максимальной разгрузки IR канала, но Вы всегда можете подавать эти команды в ручном режиме.

— Устройства 1W-IR-сети передают свои посылки поочередно, т.е. после каждой передачи посылки, устройство уступает приоритет передачи другому устройству и если другое устройство молчит, продолжает передавать следующую посылку. Это исключает случаи, когда цепочка посылок от одного устройства блокирует работу остальных устройств в сети;

— В алгоритме реализован механизм решения коллизий при передаче посылок (например одновременное начало передачи посылок от разных устройств).

5 Параметры работы удлинителя:

— Скорость передачи по IR каналу, составляет около 25 посылок в секунду (реализация протокола позволяет «на ходу» менять параметры посылки, поэтому скорость будет зависить от устройства);

— Дальность передачи зависит от применяемых IR-LED, TSOP, компонентов удлинителя, но в пределах комнаты работает без сбоев. Если необходима передача на большие расстояния, можно применить более мощные IR-светодиоды или сделать узконаправленное излучение у обычных;

— Частота IR-модуляции (тип TSOP) – 36 или 38кГц;

— Прием и передача по UART осуществляется на скорости 600 бод (можно и больше, но это не имеет смыла в виду малой скорости IR-передачи)

Boudrate=600, Parity=NO, Stopbit=1

6 Сборка удлинителя.

Собирать особо ничего и не нужно. Удлинитель работает на универсальной плате для IR устройств. Кто такой платы еще не имеет,  идет по ссылке и читает как ее сделать >>. Единственным изменением будет замена обычного светодиода на IR-светодиод и замена токоограничивающего резистора для этого светодиода (на схеме указаны изменения для IR-светодиода).

Схема IR driver

Величина сопротивления, включенного последовательно со IR-светодиодом, обратно пропорциональна дальности передачи (мощности передачи). Занижать это сопротивление особо не рекомендую, так как IR-светодиод начинает работать в области за предельно допустимыми параметрами. Подберите достаточное, для каждой конкретной задачи, сопротивление.

7 Прошиваем плату.

Программатор подключаем к выходным штырькам платы — все необходимые сигналы там присутствуют.
Пины для программатора
079-IR-remote-UART.zip (2683 Загрузки)
079-source-IR-remote-UART.zip (2952 Загрузки)

Фьюзы:
фьюзы удлинителя

Для Algorithm Builder и UniProf галочки ставятся как на картинке.
Для PonyProg, AVR Studio, SinaProg галочки ставяться инверсно.
Как правильно прошить AVR фьюзы

8 Запуск в работу.

Особых операций производить нет необходимости – все работает в автомате. Для проверки работоспособности установите в одной из плат перемычку на ножки UART TxD и RxD. Вторую плату подключите к терминалу (не забываем, на прямую к COM порту UART не подключается – нужен преобразователь MAX232). Отосланные из терминала строки будут эхом возвращаться назад. Для начала платы расположите рядом. Получив нормальную связь – разносите их дальше. Так можно найти предельный радиус уверенной работы.

Тестовая проверка модулей

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

Нужно понимать, что на качество связи влияют несколько факторов:

— наличие люминесцентного освещения (включая экономки) существенно уменьшает расстояние уверенного приема (особенно это сказывается, если TSOP напрямую направлен в лампу);

— незначительно сказывается освещенность в комнате. Старайтесь избегать прямой засветки TSOPа, но в общем случае это не критично;

— напряжение питания удлинителей может варьироваться в пределах от 3 до 6 вольт (это верно при использовании TSOP4836/38, другие типы TSOP могут быть жестко привязаны к 5 вольтам). Естественно, при пониженном питании мощность IR-передачи снизиться.

— IR- пульты особого влияния на связь не оказывают, так как сеть с ними работает как с устройствами сети (удлинитель даже умеет всовывать свои посылки в паузах автоповтора при непрерывном удержании клавиши пульта). Из этого утверждения могут быть исключения – пульты с экзотическими протоколами передачи данных. В худшем случае такие пульты просто будут блокировать передачу в сети на время нажатия клавиши.

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

9 Чего не_хватает/не_влезло в устройство:

Это то, что я планирую добавить в протокол в будующем

— при переполнении буфера хорошо был-бы возвращать по UART сигнал переполнения, соответственно, если буфер освободился – сигнал опустошения буфера. Это позволит контролировать ход передачи;

— каждое устройство 1W-IR сети имеет свой тип/идентификатор (удлинитель UART имеет тип «общие данные» (general-purpose data)). Кроме типа, устройство имеет номер, при помощи которого устройства одного типа можно различать. Удлинитель имеет нулевой номер – это значит, что все устройства «общие данные» будут участвовать в обмене в независимости от их номера. Нужна команда (или переключатель на ножках) которая смогла бы присвоить произвольный номер, любому устройству – это позволит отделять различные группы устройств друг от друга (они будут передавать данные только в пределах своей группы, не мешая другим);

— автоподстройка скорости UART – сомнительная необходимость, так как при такой низкой скорости (600 бод) допускается довольно значительные уходы частоты. Если появятся нарекания по работе модуля UART – сделаю автоподстройку;

— работа с посылками IR-пультов уже заложена в алгоритме, необходимо лишь разработать способ их (посылок) участия в работе устройства;

— в алгоритме передаче IR-посылок заложена возможность гибкого изменения параметров посылки – это можно использовать, например, для передачи повторов более мощным сигналом или для автоматической подстройки формата посылки под конкретные условия передачи.

— формат посылки подразумевает, что данные будут передаваться побайтно, но если есть необходимость передать массив данных в формате посылке зарезервированы поля для возможности организации длинных посылок – это позволит увеличить скорость передачи при больших объемах данных;

— изначально задумывалась инфракрасная сеть с возможностью соединения устройств помимо IR канала еще и по одному проводу (поэтому и название такое 1Wire-IR). Это будет удобно если разные модули расположены в одном устройстве (например, в роботе) и цеплять на каждый модуль пару светодиод-TSOP нецелесообразно. Реализовать это не сложно, необходима лиш одна ножка микроконтроллера.

В общем, все еще в стадии наработки … пишите здесь, в комментах, или на форуме, если есть предложения по развитию сети 1W-IR.

(Visited 7 561 times, 1 visits today)

079-IR-удлиннитель для UART на ATtiny13.: 75 комментариев

  1. admin Автор записи

    Нет. Это два разных устройства, между собой они никак не будут контактировать.

    Можно увеличить дальность датчика приближения применив более мощный ИК-светодиод.

  2. tika

    Здравствуйте Админ- Я понимаю если один блок прошить из Вашего проекта «094-Датчик приближения на ИК-лучах (ATtiny13)» а другой блок с перемычкой «079-IR-удлиннитель для UART на ATtiny13»
    То получим БАРЬЕР с увеличенным расстоянием как минимум в 2-вое.?
    Будит работать такой вариант. Я нуждаюсь в таком варианте.

  3. ankar

    Да нет .Не похоже. Я сделал 3 блока и у всех то же самое. Может из-за того,что они с буквой Attiny13A-SSU. Раньше использовал Attiny13A-SU. Правда по даташитам разницы не нашел. Ну ниче.Завтра сяду поглубже. Разберемся.Скорее всего сам где-то косячу.

  4. GetChiper Автор записи

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

  5. ankar

    В том, то и дело,что не обрабатываются.
    Там может быть дела с прошивкой. Самая первая прошивка.года 3 назад,работала более мене нормально.Но я ее ,увы потерял.

  6. GetChiper Автор записи

    Когда по UART подавать символы они отрабатываются IR-светодиодом?

  7. ankar

    Здравствуйте. Что-то у меня совершенно не хочет работать . При запуске светодиод моргает. Пульт тоже видит.Но при подаче на передачу ничего нет.

  8. pino24

    pino24 :
    @GetChiper по поводу номера устройств, есть ведь миниатюрные ряды переключателей. 5 позиционный переключатель http://i00.i.aliimg.com/wsphoto/v0/1402889360/5-Pcs-0-1-Pitch-Dual-Rows-5-Ways-Side-Piano-DIP-Switch.jpg_220×220.jpg с головой хватит вариаций для устройств!!! Но придется видоименять схему и придумывать новый алгоритм для них((

    Или придумать чтоб ID устройсва менялся IR команда с пульта, но тут вопрос, как отследить изменение ID в таком случаее или же поменять через UART, причем программка была универсальной для всех устройств связанных с IR на нашем сайте)))

  9. pino24

    @GetChiper по поводу номера устройств, есть ведь миниатюрные ряды переключателей. 5 позиционный переключатель http://i00.i.aliimg.com/wsphoto/v0/1402889360/5-Pcs-0-1-Pitch-Dual-Rows-5-Ways-Side-Piano-DIP-Switch.jpg_220x220.jpg с головой хватит вариаций для устройств!!! Но придется видоименять схему и придумывать новый алгоритм для них((

  10. GetChiper Автор записи

    UART — http://www.getchip.net/posts/044-uart-primenenie-v-ehlektronnykh-proektakh/
    Подключить можно к USB специальным преобразователем USB-UART. Или чемто таким http://www.getchip.net/posts/067-data-kabel-ot-mobilnogo-rkak-preobrazovatel-usb-to-uart/
    Программа для работы с посылками для UART называется «терминал» их много — в поисковике можно выбрать на свой вкус

  11. aptemka99

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

  12. GetChiper Автор записи

    Причин может быть несколько.
    — Так как МК тактируется от внутреннего RC генератора — возможен уход частоты и от этого нестабильный прием/передача самим ПК.
    Нужно сделать следующее: одно устройство удлинителя подключить к выходу преобразователя (USB-UART), другое устройство ко входу. Посылать с терминала сообщения и смотреть что будет приходить. Потом попробовать поменять местами удлинители.
    — Чаще всего при нестабильной работе проблемой является малая мощность ИК-передачи. Нужно попробовать увеличить ток ИК-светодиода (уменьшить сопротивление резистора в цепи ИК светодиода).
    — Еще можно попробовать поменять TSOP/ИК-светодиод — может они плохо подходят друг к другу.

  13. nikolos

    собрал. один к компу второй с перемычкой. работает нестабильно- приходит не то что послал или вообще ничего не приходит. 1 из 10 приходит то что послал в чем может быть проблема ламп дневного света нет прямой засветки доже.

  14. GetChiper Автор записи

    Скорости большие — не получится (без применения спец средств).

  15. winzewul

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

  16. GetChiper Автор записи

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

    У меня до 6м работает стабильно.

  17. denium

    здравствуйте. очень понравился ваш проект. реализовал, но столкнулся с некоторыми вопросами. собрал 2 устройства, строго по схеме (электролиты керамика и полярный + резистор на ir 10ом). устройство работает (приём/передача). на небольших расстояниях (от 5 до 10 см без ошибок) вопросов нет, всё хокей. но если развести подальше (15-20 см), то на входе либо задвается первый символ посылки, либо не доходит первый/последний (ошибочных символов не приходило). Посылка: строка «ABC «. проверял оба устройства (принимающий-передающий менял ролями) — одинаковый эффект. самое странное, что когда использовал прошивку для RC5 (пульт ДУ), сигнал ловит и передаёт устройство отлично с 3 метров. подозреваю что дело в ir диоде (не помню какой, но не дешовый) или транзисторе (bc547b, резистор к процу 330ом) ,но может кто подскажет где ещё капнуть? очень интересен проект, подскажите, замучался.

  18. AlexeyByckov

    Спасибо за ответ!

  19. GetChiper Автор записи

    Нужно ставить оба, и TSOP, и ИК-светодиод. Устройство при передаче само-себя контролирует, исключая ошибки при передаче.

  20. AlexeyByckov

    Здравствуйте. Скажите пожалуйста, для правильной работы двух таких устройств при передаче данных только в одном направлении (то есть, один только принимает, другой только передает) на на каждом из них обязательно должен стоять и TSOP, и ИК-светодиод? Или на первой плате (которая принимает данные) может стоять только TSOP, а на второй плате (которая отправляет данные) может стоять только ИК-светодиод?
    Заранее спасибо

  21. GetChiper Автор записи

    Лучше перепаять светодиоды — на всякий случай.

  22. SvC

    @GetChiper
    Хотелось просто собрать удлинитель и заодно глянуть как приемник для компа работает

  23. GetChiper Автор записи

    SvC :

    если собрать эту платку, а прошить прошивку для передачи сигнала с пульта в компьютер (разные светодиоды, один видимого спектра другой ир) то оно не будет конфликтовать? А именно моргающий в ик диапазоне светодиод не будет улавливаться приемником?

    Даже не знаю. А точно нужно именно так их включать?

  24. GetChiper Автор записи

    Все будет нормально — ставьте 10 Ом. Иначе дальность будет никакая.

  25. SvC

    @GetChiper
    У меня ик светодиод, согласно дш, имеет максимальный ток в 20 мА. Какой тогда туда нужно резистор? на 150 Ом?

Добавить комментарий