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.hex - Прошивка IR-удлинителя UART
079-source-IR-remote-UART.zip - Исходник удлинителя

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

Для 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 1 931 times, 9 visits today)

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

  1. iliich246

    По поводу книг. Трехтомник Дональда Кнута «Искусство программирования» пожалуй лучшее, что существует по технологии программирования на сегодняшний день. Книга достаточно сложна, да и матан там в некоторых местах довольно суровый, однако нет воды и повествование ведется с тонким «научным» юморком. читать и разбираться — одно удовольствие. Эта книга для программиста тоже самое, что для электронщика «Искусство схемотехники» П. Хоровица.

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

    Спасибо — поищу.

  3. iliich246

    Могу кидануть на мыло.

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

    Кидай. Мыло в закладке «О проекте».

  5. FDoich

    И на схемке транзистор поправь, NPN.

  6. Malasay

    О, свежая статья!
    Спасибо за блог.

    Вопрос немного не по теме:
    На каком максимальном расстоянии два устройства по UART (проводному) возможно соединить?
    10-15 метров потянут уровни TTL, или однозначно RS232/RS485 конвертеры использовать?

  7. aui2002

    Malasay :
    На каком максимальном расстоянии два устройства по UART (проводному) возможно соединить?

    По ходу, расстояние очень сильно зависит от уровня помех в помещении. В цеху с кучей электрооборудования у меня 5м с экранированным проводом работали через раз, а у знакомых физиков в лаборатории 10м на 4-х жильном телефонном проводе работают как часы…

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

    FDoich :

    И на схемке транзистор поправь, NPN.

    Спасибо, исправил.

  9. Malasay

    @aui2002
    Спасибо за ответ.
    Значит будем эксперементировать.

  10. maintumanov

    В данном устройстве можно заменить контроллер на обычный таймер, настроенный на частоту в 36кГц, при этом, проведенные тесты показали передачу данных без ошибок на скорости 2400 бод, тестировал до 3 метров, а так же, был уверенный прием/передача на отражение.
    Очень нравится ваш блог!

  11. vpashko

    На сколько я понял с описания то можно эти устройства вставить в ЮСБ разьем скажем 3-м компам и обмениваться информацией (пересылка вордовских файлов,музыки,кино???)

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

    maintumanov :

    В данном устройстве можно заменить контроллер на обычный таймер, настроенный на частоту в 36кГц, при этом, проведенные тесты показали передачу данных без ошибок на скорости 2400 бод, тестировал до 3 метров, а так же, был уверенный прием/передача на отражение.
    Очень нравится ваш блог!

    Согласен, действительно проще (и дешевле) сделать на таймере (кстати, в статье я привел ссылку на такое устройство), но цель данного устройства не создание UART удлинителя как такового. Главная цель — отработка протокола 1W-IR сети, который позволит создавать интересные устройства.

    vpashko :

    На сколько я понял с описания то можно эти устройства вставить в ЮСБ разьем скажем 3-м компам и обмениваться информацией (пересылка вордовских файлов,музыки,кино???)

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

  13. derik536

    Уважаемый автор, подскажите на каком движке сделан ваш сайт и если не трудно какой скрипт вы применили для организации комментариев.

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

    В подвале есть запись: «Powered by WordPress, Theme by cuikai.» — коменты родные с темы.

  15. Orcinus Orca

    ATtiny13 не шьется AVRProg, там просто отсутствует подобный кристалл.

  16. Zalognik

    Блин. Не работает хоть тресни. Ни у кого нету рекомендаций по проверки работоспособности TSOP4838 (ну типо не спалил ли).Заранее спасибо.

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

    Orcinus Orca :

    ATtiny13 не шьется AVRProg, там просто отсутствует подобный кристалл.

    Кристалл довольно новый … может старая AVRProg?
    В любом случае есть другие программы.

    Zalognik :

    Блин. Не работает хоть тресни. Ни у кого нету рекомендаций по проверки работоспособности TSOP4838 (ну типо не спалил ли).Заранее спасибо.

    Подробней, как не работает? Будем запускать вместе!
    По поводу TSOP — лучшая проверка — осциллограф. Как вариант косвенной проверки вешаешь на выход TSOP вольтметр и смотришь — в режиме «покоя» должен быть уровень напряжение питания, если нажать кнопку на пульте (и ее удерживать) напряжение упадет примерно на треть.

  18. Zalognik

    Все заработало. Оказалось что ир светодиоды которые я купил были странные (длинная можка была — (теперь буду постоянно проверять светодиоды)). Но когда я отсоединил один из модулей и запитал через юсб другого компа то отказалось работать, вернул и молчание. =(

  19. Zalognik

    Полярный конденсатор на 10мкф обязательно. Просто мысль появилась что изза него (просто небыло — того и не поставил)=(

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

    TSOP довольно нежен в плане помех, поэтому конденсаторы очень желательны полярный + керамика.
    Попробуйте перепрошить плату — мало-ли…

    На какое расстоянии пробовали разносить платки?

  21. Zalognik

    Спасибо. Помогла впайка полярного конденсатора =). Не думал что TSOP на столько нежная вещь. Работает достаточно хорошо. На 10 метрах идет передача без помех (в пределах зала). Дальше идет небольшая помеха при передаче (не долечает часть символов). Воще замечательная вещь. Спасибо за вашу работу.

  22. Zalognik

    Но «-» на длинной ножке это странно. Купил еще пару разных моделей — везде нормально («+» на длинной ноге). Кстати вопрос — можна ли снять с одного TSOP, а с другого — диод (типа односторонняя передача) и не будет ли при єтом сбоить вся схема. Заранее спасибо.

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

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

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

    В принципе, все в наших руках…

  25. Zalognik

    А можна точные характеристики устройства по таким параметрам:
    – скорость;
    – размер посылки;
    – стоп бит;
    – бита четности.
    Просто в одной ваше статье одни цыфры, а в этой другие.
    Просто делаю устройство которое выдает себя за клавиатуру ПК и скан коды отправляютса по uart (ну типа навешать ваше устройство и получить пульт).
    П.С. Сенсор прекрасно работает при площатке 0,95х0,95см.
    Заранее спасибо 🙂

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

    UART работает с такими параметрами: Boudrate=600, Parity=NO, Stopbit=1

  27. Zalognik

    Ок, значит значения с етой статьи, спасибо.

  28. aui2002

    Доброго времени суток!
    У меня возникли некоторые проблемы с приобретением светиков TSAL6400.
    В наличие имеются: TSAL6200, TSAL5300, TSAL5100, TSAL4400.
    Можно ли использовать какой-либо из них вместо TSAL6400?
    И вообще, по каким критериям в данном случае нужно подбирать замену?
    Заранее спасибо.

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

    В даташите TSOPа указывается тип наиболее подходящего IR-светодиода.
    Но можно на это забить! Ставьте какой есть — разницу вряд ли будет заметно.

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

    P.S. Уже развел плату LCD индикатора для работы в 1W-IR сети и планирую на базе этих платок делать различные выносные датчики.

  31. aui2002

    GetChiper :
    В даташите TSOPа указывается тип наиболее подходящего IR-светодиода.

    Внимательно «раскурил» даташит из 70-го поста. Прямого указания на TSAL6400 не нашел. Только в правом нижнем углу первой странице на схеме подключения (APPLICATION CIRCUIT) нашел надпись «Transmitter with TSALxxxx».
    Если проморгал, ткните, плиз, пальцем. Просто для понимания всей полноты картины, а то имею я периодически гемморой с заменой деталек…

    GetChiper :
    Но можно на это забить! Ставьте какой есть – разницу вряд ли будет заметно.

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

    Большое спасибо!

    P.S.
    А LSD — дисплей какой предполагается использовать?

  32. aui2002

    *LCD, опечатался ))

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

    1602 символьный

  34. aui2002

    ЗдОрово!
    У меня на DIHALTовской плате как раз WH1602B-YGK-CTK.
    Можно будет на нем поэкспериментировать.

  35. VladosXPOM

    Что-то подвисает пара радиомодулей если один с перемычкой. В готовых устройствах такого никто не замечал? Если через вэбку посмотреть, то оба ИК диода горят. Передергивание питания помогает. В программе случайно сторожевой таймер не задействован? Может имеет смысл?

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

    Подвисают сразу или через какое то время?
    Подвисают даже если находятся рядом?
    Прием-передача идет нормально (без перемычки)?

  37. VladosXPOM

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

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

    Если буфер переполняется ничего страшного — просто будут стираться старые данные.

    Попробуйте так: на одну плату выход UART на вторую — вход и погонять.
    С проблемой нужно разобраться. У меня такого не случалось.

  39. VladosXPOM

    Окей, как только до рабочего стола доберусь- сразу буду тестить. Модули лежали практически вплотную друг к другу. Может ли это влиять (сильная засветка TSOPа например? Последовательно с диодом резистор на 20 Ом.

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

    Близкое расположение тут не должно играть роли. А вот резистор лучше поставить поменьше — ом эдак 10.

  41. SVN

    Правильно ли я понял? Если на одну платку повесить перемычку и подать с пульта посылку, то ИК-светодиод её повторит? Это как бы получится копир дистанционки. Или не получится?

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

    Нет, дистанционку устройство проигнорирует, так как идет проверка сообщений на их принадлежность к сети.

  43. SVN

    Спасибо за ответ. В моём случае это плохо, а вот для сети это отлично.

  44. SvC

    Возможен ли вариант приема сигнала с пульта и передача его в юарт? Необходимо для подключения к кому через макс232 и разбор посылок на компьютере с последующей реакцией на заветные

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

    Очень даже возможен 🙂
    — на ATtiny2313 http://www.getchip.net/posts/074-preobrazovatel-ir-to-uart-na-attiny2313/
    — Attiny13 http://www.getchip.net/posts/071-preobrazovatel-ir-signalov-ot-pultov-v-uart/
    — программа для «разбора посылок на компьютере с последующей реакцией на заветные» 🙂 http://www.getchip.net/posts/081-upravlenie-kompyuterom-pri-pomoshhi-lyubogo-ir-pulta/

  46. SvC

    в схеме для ик светодиода резистор на 10 ом всего? не мало?

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

    Нет, не мало. Чем меньше резистор, тем больше радиус действия. Ток IR светодиода 80мА — это номинал, а в импульсном режиме его можно загонять в единицы ампер.

  48. SvC

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

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