Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Комплексный вопрос: прием RC5 в сложных условиях
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
ARV
я попал в тупик. пытаюсь сделать ДУ для своей RGB-лампы на мощном RGB-светодиоде. Пульт самодельный, все самодельное короче. И вот какая проблема: при малой яркости лампы ДУ работает уверенно на 5 метров и более, но стоит поднять яркость - дальность резко падает, доходя до буквально "впритыка".

я грешу на "засветку" светодиодом ИК-приемника, ведь они в непосредственной близости друг от друга, хотя прямое излучение на приемник не попадает. В общем, тупик sad.gif

может будут какие-то советы, идеи - как побороть проблему?

для справки вот ссылки
пульт: http://www.simple-devices.ru/prj/9-electr/...-remote-control
лампа: http://www.simple-devices.ru/prj/9-electr/...imple-mood-lamp

kovigor
Цитата(ARV @ Sep 12 2011, 20:29) *
может будут какие-то советы, идеи - как побороть проблему?


Стеклышком специальным приемник прикрыть, как в телевизорах, не пробовали ?
ARV
Цитата(kovigor @ Sep 12 2011, 21:35) *
Стеклышком специальным приемник прикрыть, как в телевизорах, не пробовали ?
вы же видели на фото конструкцию? там приемник вместе со всеми потрохами установлен внутри матового плафона... прикрыть нечем... если вставить какие-то шторки - они будут отбрасывать тень на плафон, что сведет на нет весь эстетический эффект sad.gif


kovigor
Цитата(ARV @ Sep 12 2011, 21:10) *
вы же видели на фото конструкцию? там приемник вместе со всеми потрохами установлен внутри матового плафона... прикрыть нечем... если вставить какие-то шторки - они будут отбрасывать тень на плафон, что сведет на нет весь эстетический эффект sad.gif


В телевизоре стеклышко очень темное, и это не случайно. У вас плафон такой же темный ? Едва ли. Вопрос ваш, похоже, чисто дизайнерский и технологический. Даже если вы и сможете разработать красивый корпус для лампы, который будет препятствовать засветке лампой своего же фотоприемника, то все равно в домашних условиях не сможете такой корпус изготовить.
ARV
Цитата(kovigor @ Sep 12 2011, 22:18) *
В телевизоре стеклышко очень темное, и это не случайно. У вас плафон такой же темный ? Едва ли. Вопрос ваш, похоже, чисто дизайнерский и технологический. Даже если вы и сможете разработать красивый корпус для лампы, который будет препятствовать засветке лампой своего же фотоприемника, то все равно в домашних условиях не сможете такой корпус изготовить.
странно: вроде ссылку я дал, но вы не поглядели... привожу фото здесь: это вид изнутри моей лампы. видите - датчик вверху? вот такой дизайн...



а вот так светодиодно-датчиковый узел выглядит вне плафона:




kovigor
Цитата(ARV @ Sep 12 2011, 21:32) *
странно: вроде ссылку я дал, но вы не поглядели


Недоглядел. Теперь вижу. Боюсь, придется менять дизайн или переходить на радиоканал
Aprel
В питании датчика не хватает резистора в стандартном включении.
В вашем случае можно попробовать ещё лучше фильтровать питание.
От этого также сильно зависит чувствительность.


Конденсаторы по питанию у контроллера должны быть свои,
а два конденсатора и резистор для датчика - свои.
Они образуют фильтр по питанию.
ARV
гм... по поводу питания - плата двусторонняя, одна сторона почти целиком "плюс", другая почти целиком "общий", боюсь, что при такой топологии не будет разницы между одним и несколькими конденсаторами... пытался в 3 раза увеличить емкость электролита по питанию - никакой разницы не заметил... с точки зрения пульсаций и помех по питанию: светодиодом-то я управляю при помощи ШИМа, поэтому величина импульсных токов (т.е. амплитуда провалов напряжения) не зависит от яркости - отчего же тогда при малой яркости прием отличный, а при большой - плохой?
а по поводу резистора на датчик - о чем вы говорите? резистор подтяжки выхода? я использую встроенную подтяжку порта AVR.

по поводу дизайна - единственное, что приходит на ум: сделать небольшой "постамент" под плафоном из "черного" (или темно-красного) оргстекла, в котором разместить приемник... по-моему, только так удастся не сильно испортить внешний вид... только такое оргстекло еще пойди-найди... sad.gif

и по поводу перехода на радиоканал. в условиях, когда все завалено китайскими изделиями за гроши, приходится стремиться к максимальной дешивизне конструкции, чтобы хоть как-то оправдать смысл занятий радиолюбительством... я сильно сомневаюсь, что существуют радио-решения для ДУ, сопоставимые по цене с ИК... если существуют - подскажите, какие?
ILYAUL
Очень интересно. Вы же яркость поднимаете пультом и пока ее поднимаете пульт работает? А как только решаете , что-то изменить пульт не работает? ... или почти не работает. Может вссё таки програмный косяк, да и диапазоны у диодов разные , одиниз них таки ИК диапазон , как минимум
ARV
Цитата(ILYAUL @ Sep 13 2011, 09:35) *
Очень интересно. Вы же яркость поднимаете пультом и пока ее поднимаете пульт работает? А как только решаете , что-то изменить пульт не работает? ... или почти не работает
да, пультом. она поднимается, поднимается... и перестает подниматься. приближаю пульт (или нервно тыкаю по 100 раз на кнопку) - снова поднимается... добраться до максимума можно с пятой-десятой попытки почти уткнув пульт в приемник. так же и снижение: с максимума снижается плохо и с малого расстояния, по мере снижения яркости можно отдалять пульт... на яркости примерно 10-15% прием идет отличный с 5 метров
ILYAUL
Так проведите эксперимент. Откл. светодиоды - осцил вместо них и посмотреть как быстро "растёт" и "падает" ШИМ.
Затем , какой нить маломощный диодик подкл и посмотреть тоже самое.
Прикрыть фото приёмник , временно , чем нибудь не прозрачным от света , бумажкой например - проверить.
Может пультик засвечивается?
kolobok0
Цитата(ARV @ Sep 13 2011, 09:39) *
.. и перестает подниматься. приближаю пульт (или нервно тыкаю по 100 раз на кнопку) - снова поднимается...


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

(круглый)
Aprel
Если не хотите читать даташит на датчик, посмотрите как делают другие
http://robocraft.ru/blog/204.html
http://habrahabr.ru/blogs/DIY/82383/

Суть в том, что даже маленькие наводки по питанию действуют
так же, как и ИК помехи. Поэтому по питанию ставят RC фильтр.
Может даже двойной RC фильтр.
Потом можете поиграть частотой ШИМ чтобы его частота или
гармоники не забивали частоту приёма датчика.

На затворы транзисторов лучше поставить резисторы около 20 Ом или более.
Будут меньше гармоники и ножки контроллера не повыгорают
через некоторое время.


При подстройке ШИМа,если нет исходников для приёмника,
можете попробовать другой датчик с другой частотой.
Важно для чувствительности, чтобы частота
пульта и датчика совпадали (проверьте это), а ШИМ и его гармоники - нет.


Клим
В пульт - драйвер нормальный. Даже три ноги тиньки врядли выдадут нормальный ток. Какой-нибудь н-п-н транзистор с маым напряжением падения К-Э. Или низковольтный полевик, типа irlml2502.
ШИМ какой частоты ?
Плюс светодиод хоть и RGB - вполне нормально себе излучает и в ИК диапазоне.
Датчик максимально градить от засветки, возможно поставить два-три по разным сторонам.
Aprel
Драйвер - это если с резисторами сильно греется.
А так - достаточно резистора.

Имел ввиду приёмник.

В датчике можно закрасить торцы. Например, серебрянкой.

Если умеете пользоваться Протеусом, то удобно подбирать
частоту ШИМ по спектроанализатору.
Чтобы на частоте датчика был минимум помех.

Ещё можно попробовать сделать матовым светодиод передатчика.
Так как лампа и приёмник находятся рядом, то блики от лампы
отражаются на приёмник (но это нужно проверять, - здесь свои минусы).
Вот всеми этими приёмами можно потихоньку и увеличивать
расстояние.
Ничего, что я так "загрузил" ?
muravei
Попробовать ввести "минуту молчания", пожертвовав макс. яркостью с некоторой периодичностью, на прием посылки.
Aprel
Думаю, будет сильно заметно.
А минутой молчания потом можно будет
помянуть контроллер без резисторов на затворах.
ARV
Цитата(ILYAUL @ Sep 13 2011, 09:50) *
Так проведите эксперимент. Откл. светодиоды - осцил вместо них и посмотреть как быстро "растёт" и "падает" ШИМ.
без светодиода дальность всегда постоянна и достаточно велика

Цитата(kolobok0 @ Sep 13 2011, 11:34) *
когда то, стояла задача по обмену по ИК каналу на пару десятков метров. при обычном обмене сильно влияла помеха. просто зажжённая спичка сводила на нет всю дальность. помогло: тупой повтор пачки энное кол-во раз. помехозащищённость существенно выросла.


(круглый)
команды повторяются непрерывно, само собой, как и положено по стандарту RC5

Цитата(Aprel @ Sep 13 2011, 13:13) *
Если не хотите читать даташит на датчик, посмотрите как делают другиеПотом можете поиграть частотой ШИМ чтобы его частота или гармоники не забивали частоту приёма датчика.


На затворы транзисторов лучше поставить резисторы около 20 Ом или более.
Будут меньше гармоники и ножки контроллера не повыгорают через некоторое время.
При подстройке ШИМа,если нет исходников для приёмника, можете попробовать другой датчик с другой частотой.Важно для чувствительности, чтобы частота пульта и датчика совпадали (проверьте это), а ШИМ и его гармоники - нет.
датчиков таких - море, какой конкретно у меня - неизвестно, скачанный даташит ограничился только функциональной схемой и параметрами, рекомендаций по схеме включения не содержит. в сущности, ваше замечание по фильтру питания стоящее, попробую проверить.

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

Исходники приемника есть, я же их сам делал sm.gif Проблема в том, что ШИМ у attiny13 никак не получается сделать без гармоники, близкой или кратной частоте приемника. у меня приемник 38 кГц, а ШИМ программный, частота прерываний как раз 37,5 кГц, хотя собственно частота ШИМа меньше в 256 раз - но гармоник-то полно... И сделать ее какой-то другой не так-то просто...

Цитата(Aprel @ Sep 13 2011, 14:06) *
Ничего, что я так "загрузил" ?
была бы польза, грузите sm.gif

Цитата(Aprel @ Sep 13 2011, 14:12) *
А минутой молчания потом можно будет
помянуть контроллер без резисторов на затворах.
см. выше - не верю я в эти ужасы.
Aprel
Родную частоту датчика можно вычислить эксперементально, было бы желание.
Некоторые датчики продаются в жестяном корпусе.
Они чувствительны не только к питанию, но и ЭМ помехам.

У контроллера довольно резкие фронты переключения.
Поэтому в момент переключения получаются микрозамыкания (КЗ)
на ёмкость. Это ШИМ, а не управление реле.
Уже не раз обсуждалось на форумах. Вылетают со временем даже PIC-и.
В силовых схемах на ШИМ ставят драйвера полевиков на несколько ампер.

На 37,5 кГц даже можно и управлять. Если не поменяете частоту ШИМ,
ничего вам не светит.


Менять кратно ШИМ тоже не выход.
Как я писал, лучше узнать нужную частоту ШИМ-а
в каком нибудь симуляторе спектральным анализатором.
И будет всё biggrin.gif
ARV
Цитата(Aprel @ Sep 13 2011, 16:12) *
Родную частоту датчика можно вычислить эксперементально, было бы желание.
Некоторые датчики продаются в жестяном корпусе.
Они чувствительны не только к питанию, но и ЭМ помехам.

У контроллера довольно резкие фронты переключения.
Поэтому в момент переключения получаются микрозамыкания (КЗ)
на ёмкость. Это ШИМ, а не управление реле.
Уже не раз обсуждалось на форумах. Вылетают со временем даже PIC-и.
В силовых схемах на ШИМ ставят драйвера полевиков на несколько ампер.

На 37,5 кГц даже можно и управлять. Если не поменяете частоту ШИМ,
ничего вам не светит.

Менять кратно ШИМ тоже не выход.
Как я писал, лучше узнать нужную частоту ШИМ-а
в каком нибудь симуляторе спектральным анализатором.
И будет всё biggrin.gif


1. Родную частоту датчика я "определил" по его маркировке : A38AD - я так понимаю, 38 - и есть частота в килогерцах. все датчики в своем наименовании так или иначе содержат эту частоту, раз в наименовании моего всего 2 цифры - это она и есть. экспериментально же что 36 килогерц, что 38 - разницы не замечаю (менял несущую в своем пульте)


2. "Не верю!" © Станиславский sm.gif у IRLML2402, если я не ошибаюсь, емкость затвора 110 пФ - хоть убейте, не верю, что выходной push-pull-каскад тиньки не выдюжит перезаряд этой емкости на частоте порядка 150 Гц! речь ведь не о полевиках с емкостью затвора в десятки нанофарад и более!

3. вот ваша фраза " На 37,5 кГц даже можно и управлять. Если не поменяете частоту ШИМ, ничего вам не светит." меня как-то обескуражила своей противоречивостью...

4. А вот интересно: как вы вообще, в принципе, предлагаете мне менять частоту ШИМ-а? тинька не сильно-то позволяет разогнаться в вариантах...


Aprel
Ну да, ёмкость маленькая. Там ещё есть Qg, тоже должно влиять.
Позже просимулирую в Micro-Cap.

" обескуражила своей противоречивостью"
Я имел ввиду управлять без лампы.
То есть лампа на этой частоте забивает АРУ датчика,
уменьшая чувствительность.

Вариантов у тиньки много. Например используя прерывание таймера
по совпадению. yeah.gif


Кстати, у меня сейчас валяется плата управления на IRLR024N.
Ёмкость в 4 раза больше.
Сначала стояли резисторы на затворах 10 Ом. Потом опомнился,
и увеличил. Через время один канал сдох. Сильно подозреваю,
что спалил ножку контроллера.
Aprel
Всё-таки я бы сначала сделал что проще (если ШИМ 150 Гц) - хорошую развязку питания.
Слишком нежный в этом смысле датчик.

А по поводу резисторов на затворе, - это не синусоида, где ток
зависит от частоты. При прямоугольных импульсах идут
уколы током в контроллер, я бы не рисковал,
хотя хозяин-барин.
Клим
Ну а все таки, пробовали ли вы поставить драйвер в пульт или пользоваться нормальными фабричными?
потому как, если хотите нормальной дальности, ИК-диод должен работать в импульсном режиме с токами порядка 1А, чего вам без драйвера хоть все 6 ног тини13 не дадут.
ReAl
Интересно -- сбивает попадание перепадов освещенности на пакет или само наличие перепадов такой мощности (заводит АРУ приёмника сильно далеко в нечувствительность)

Если первое -- можно в пульт поставить фотодиод, который пытается ловить частоту светильника и синхронизировать пачки протокола под неё.
Если не поймал, значит выключено или включено на 100% и можно пачки слать когда попало.

В любом случае можно попробовать сильно завалить фронты тока через RGB-светодиод. Может, перепады будут не так влиять.
ARV
Цитата(Клим @ Sep 14 2011, 08:42) *
Ну а все таки, пробовали ли вы поставить драйвер в пульт или пользоваться нормальными фабричными?
потому как, если хотите нормальной дальности, ИК-диод должен работать в импульсном режиме с токами порядка 1А, чего вам без драйвера хоть все 6 ног тини13 не дадут.



при малой яркости 3 запараллеленные ноги тиньки "добивают" до приемника с 5 метров - думаю, этого вполне достаточно. при питании от "таблеточных" батареек стремиться выдать ток в 1А - это как-то неразумно...

[добавлено спустя 5 минут] ОГРОМНОЕ, ПРОСТО ВЕЛИЧАЙШЕЕ СПАСИБО ВСЕМ, КТО НАДОУМИЛ МЕНЯ ПОСТАВИТЬ ФИЛЬТР ПО ПИТАНИЮ!!! поставил 100 Ом + 100 мкФ - на тех же 5 метрах принимает при максимальной яркости! Вот уж истинно: век живи, век учись, и все равно дурень-дурнем! sm.gif

Опыт работы с этими приемниками у меня невеликий, потому серьезности фильтрации питания не придавал, тем более что это как-то не навязывается документацией...

[добавлено спустя 10 минут] радость была преждевременной... все-таки, похоже, недостаточно одной фильтрации питания - дальность увеличилась кардинально, но все-таки чувствуется, что далеко не каждая посылка принимается и декодируется правильно... но это уже программные проблемы, думаю, с ними разберусь sm.gif
Aprel
Вот и замечательно. beer.gif
Теперь можно увеличить резистор.
Померяйте питание когда включены светодиоды на максимум.
Я бы немного изменил плату.
В разрыв красного провода можно попробовать поставить
диод шоттки.
Для простоты повторения неплохо, а в дальнейшем
всё-таки лучше поставить стабилизатор возле микросхем.



Крестик - перерезать дорожку.

Цитата(ReAl @ Sep 14 2011, 09:36) *
Интересно -- сбивает попадание перепадов освещенности на пакет или само наличие перепадов такой мощности (заводит АРУ приёмника сильно далеко в нечувствительность)
В любом случае можно попробовать сильно завалить фронты тока через RGB-светодиод. Может, перепады будут не так влиять.

Сбивают гармоники как ИК так и по питанию. Немного уменьшает чувствительность засветка.
Завалить фронты (уменьшить гармоники) можно резисторами в затворе.
При больших значениях возможен перегрев транзисторов.
Обычно при приёме ждут повторения команды.
ARV
судя по всему, сбивали гармоники именно по питанию. во-первых, накрывание светодиода непрозрачным колпаком (использовал керамическую кружку) абсолютно не влияло на дальность приема, во-вторых, как я уже писал, фильтр питания помог КАРДИНАЛЬНО.

дальнейшее улучшение качества приема получено путем небольшого подбора констант в коде: прием ведется на задержках, формируемых таймером. так как этот таймер попутно непрерывно ШИМит, то есть его нельзя сбрасывать, точность задержки получается плюс-минус период переполнения таймера. кроме того, тактовый генератор не такой уж и точный, потому "рассчитать" задержку можно достаточно приблизительно - вот и приходится подбирать. не очень хорошо, конечно, но очень надеюсь, что единожды подобранная задержка подойдет для любых МК, т.е. надеюсь, что я попал в допуски по точности заводской калибровки RC-генератора. к сожалению, никаких приборов, кроме тестера, в данный момент нет, и какие-либо численные параметры мне неизвестны sad.gif

сейчас на расстоянии 4-5 метров все функции уверенно выполняются при любой яркости. считаю вопрос исчерпанным. спасибо.
Aprel
Но ведь есть желание улучшить?
У вас по тонкой дорожке питаются мощные светодиоды
и микросхемы (шум обалденный, может сбоить и контроллер) wacko.gif ,
поэтому я и нарисовал переделку.
По правилам силовые и измерительные цепи питания должны
выходить из одной точки питания (где должны стоять конденсаторы) раздельно.
Туда же и проводок со светодиода.
http://eewiki.ru/wiki/%D0%9F%D0%BE%D0%BC%D...%82%D0%B2%D0%B0

Можно заземлённую фольгу приклеить сзади датчика.
Ну, а так, поздравляю с результатом !

Цитата(ARV @ Sep 14 2011, 12:43) *
к сожалению, никаких приборов, кроме тестера, в данный момент нет, и какие-либо численные параметры мне неизвестны sad.gif

В руки секундомер, небольшая программка мигания светодиодом, скажем на 1 мин. (больше время -
больше точность), и будет известен уход частоты в процентах.
ARV
Цитата(Aprel @ Sep 14 2011, 14:07) *
Но ведь есть желание улучшить?
У вас по тонкой дорожке питаются мощные светодиоды
и микросхемы (шум обалденный, может сбоить и контроллер) wacko.gif ,
нет, я в данном проекте лопухнулся, но я все-таки не абсолютный лопух sm.gif плата с обеих сторон представляет собой залитый полигон - с одной стороны плюс, с другой минус. по тонкой дорожке питание подается только на МК, причем на его выводах висит кондерчик керамический 1 мкФ. а на RGB-светодиод питание подается отдельным проводком, припаянным к полигону вблизи точки, куда припаян и проводок от блока питания. так что в этом отношении все нормально, я надеюсь.
Aprel
Цитата(ARV @ Sep 14 2011, 13:37) *
плата с обеих сторон представляет собой залитый полигон - с одной стороны плюс, с другой минус.

Теперь заметил, прошу прощения.
Все мы учимся на ошибках, а не ошибается тот, кто ничего не делает. rolleyes.gif
Удачи !

Цитата(ARV @ Sep 14 2011, 13:37) *
нет, я в данном проекте лопухнулся

Всё таки, сейчас очень редко встретишь адекватных людей.
На любое замечание надуваются как павлины.
Я в своё время с удовольствием получал замечания,
так и учился.
У вас с этим всё в порядке. beer.gif
xemul
Цитата(ARV @ Sep 13 2011, 14:52) *
датчиков таких - море, какой конкретно у меня - неизвестно, скачанный даташит ограничился только функциональной схемой и параметрами, рекомендаций по схеме включения не содержит. в сущности, ваше замечание по фильтру питания стоящее, попробую проверить.

Цитата(ARV @ Sep 13 2011, 16:29) *
1. Родную частоту датчика я "определил" по его маркировке : A38AD - я так понимаю, 38 - и есть частота в килогерцах. все датчики в своем наименовании так или иначе содержат эту частоту, раз в наименовании моего всего 2 цифры - это она и есть. экспериментально же что 36 килогерц, что 38 - разницы не замечаю (менял несущую в своем пульте)

Возьмите ДШ на Vishay TSOP312 - судя по фотке, у Вас что-то совместимое.
В ДШ обратите внимание на Фигу7 (пульсации по питанию д.б. < 100 мВ) и Фигу13 (если правильно понял, Вы светите пультом практически в торец приёмника, и он работает на отражении сигнала от плафона).
На Фиге5 приведена зависимость чувствительности приёмника от отклонения частоты модуляции. 36 кГц дадут 20-25 % снижения чувствительности у 38 кГц приёмника.
ARV
да, накачал я даташитов кучу... кое-где попадаются и рекомендации по фильтрации - кто ж мог знать. что всяк по-разному пишет доки?
по поводу снижения чувствительности: я прорабатывал алгоритм приема сигналов с почти ЛЮБЫХ пультов, и не заметил, чтобы из-за разной частоты несущей была заметная разница в чувствительности. возможно, у меня просто пространство помещений не позволяет отдалиться настолько, чтобы это снижение зафиксировать... возможно, все мои пульты (6 штук разных производителей) все имеют одинаковую частоту несущей sm.gif померить не удосужился... в любом случае, 25% - это вполне терпимо: руку протянул и компенсировал sm.gif
point5217
Держите AVR
практически не завит от частоты (поправте только зоны отсекания под Ваш таймер +-30% от паспорного приема RC5)
CODE

.NOLIST
.include "TN2313DEF.inc"
.LIST
;DATE 26.07.07

;+-----------------------------------------------------------------------+
;¦ Выводы процессора ¦
;+-----------------------------------------------------------------------+
;PORT D
.equ IKIN = 2
.equ IKOUT = 4

;+-----------------------------------------------------------------------+
;¦ Флаги ¦
;+-----------------------------------------------------------------------+
;fl1
.equ FL_RX_ADR = 4 ;2 ;Флаг ПРИЕМА АДРЕСА

;+-----------------------------------------------------------------------+
;¦ ПАМЯТЬ ¦
;+-----------------------------------------------------------------------+
.equ BEGIN_SP = 0xDF ;Начало стека

;+-----------------------------------------------------------------------+
;¦ Переменнные ¦
;+-----------------------------------------------------------------------+
.def null = R1
.def reg_ = R2 ;Сохранение контекста для T0

.def ref0 = R8
.def ref1 = R9
.def command = R10
.def system = R11

.def temp = R16
.def fl1 = R18

.def cnt_t = R23
.def timerL = R24

;+----------------------------------------------------------------------+
;¦ Константы ¦
;+----------------------------------------------------------------------+
.equ SYST = 29 ;

.equ COM_ON = 18+8+8 ;
.equ COM_OFF = 17+8+8 ;

;+-----------------------------------------------------------------------+
;¦ НАЧАЛО КОДА ¦
;+-----------------------------------------------------------------------+
.CSEG
.ORG $00
RJMP BEGIN
; ***** Обслуживание прерывания по входу INT0 *****
RETI
; ***** Обслуживание прерывания по входу INT1 *****
RETI
; ***** Обслуживание прерывания по захвату T1 *****
RETI
; ***** Обслуживание прерывания по совпадению T1 A*****
RETI
; ***** Обслуживание прерывания по таймеру T1 *****
RETI
; ***** Обслуживание прерывания по таймеру T0 *****
RJMP SERV_T0 ; cnt for rc-5
; ***** Обслуживание прерывания по приёму символа *****
RETI
; ***** Обслуживание прерывания по опустошению регистра UART *****
RETI
; ***** Обслуживание прерывания по передаче символа *****
RETI
; ***** Обслуживание прерывания по аналоговому компаратору *****
RETI
;
;----------------------------------------------------------------------------
;+--------------------------------------------------------------------------+
;¦ Обслуживание прерывания по переполнению Т0 с перезаписью 64 мкс ¦
;+--------------------------------------------------------------------------+
SERV_T0: IN reg_,SREG

INC timerL

out SREG,reg_
reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;############################################;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;инициализация
BEGIN: LDI temp,low (BEGIN_SP)
OUT SPL,temp
CLR null

; РЕГИСТР МАСКИ ПРЕРЫВАНИЯ ОТ ТАЙМЕРА/СЧЕТЧИКА
LDI temp,0b00000010
; ¦¦¦¦¦¦+- TOIE0 разрешение прерывания по переполнению T0
; ¦¦¦¦+--- TICIE1 разрешение прерывания по входу захвата
; ¦+------ OCIE1A разрешение прерывания по совпадению T1
; +------- TOIE1 разрешение прерывания по переполнению T1
OUT TIMSK,temp

; РЕГИСТР УПРАВЛЕНИЯ ТАЙМЕРОМ/СЧЕТЧИКОМ 0
LDI temp,0b00000010
; ¦¦¦¦¦¦¦+ CS00 выбор тактовой частоты T0
; ¦¦¦¦¦¦+- CS01
; ¦¦¦¦¦+-- CS02
; ¦¦¦¦+--- CTC0 очистить при совпадении
; ¦¦¦+---- COM00 режим выхода сравнения
; ¦¦+----- COM01
; ¦+------ PWM0 разрешение ШИМ
OUT TCCR0,temp

; РЕГИСТР A УПРАВЛЕНИЯ ТАЙМЕРОМ/СЧЕТЧИКОМ 1
OUT TCCR1A,null

; РЕГИСТР B УПРАВЛЕНИЯ ТАЙМЕРОМ/СЧЕТЧИКОМ 1
OUT TCCR1B,null

; РЕГИСТР СОВПАДЕНИЯ ТАЙМЕРА/СЧЕТЧИКА 1

; РЕГИСТР УПРАВЛЕНИЯ СТОРОЖЕВЫМ ТАЙМЕРОМ
in temp,WDTCSR
ori temp,(1<<WDCE) | (1<<WDE)
out WDTCSR,temp
; -- Got four cycles to set the new values from here -;
;Set new prescaler(time-out) value = 64K cycles (~0.5 s)
ldi temp,(1<<WDE) | (1<<WDP2) | (1<<WDP0)
out WDTCSR,temp
; -- Finished setting new values, used 2 cycles -;

sbi ACSR,ACD ;Analog comparator off

LDI temp,0b00010000
OUT ddrD,temp
ldi temp,0b00000100
OUT PORTD,temp

CLR fl1 ;сбросим все флаги

SEI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; основная программа
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BEGN: WDR
sbis PIND,IKIN ;пропуск если нет бита (1)
rcall START_RC5

RJMP BEGN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
fault: ret
;;;;;;;;;;;;;;;;;;;;;
;прижел старт
START_RC5: OUT TCNT0,null
clr timerL ;Measure length of start bit

start2: cpi timerL,10*2 ;если прошло 1.04 мсек (5)
brge fault ;пропуск если больше

sbis PIND,IKIN ;пропуск если бит установлен
rjmp start2
;;;;;;;;;;;;;;;;;;;;;;
;Positive edge of 1st start bit
mov ref0,timerL ;занесли в ref0 время нуля
inc ref0

OUT TCNT0,null
clr timerL

mov ref1,ref0 ;в ref1 время 1
inc ref1
inc ref0

ldi cnt_T,7 ;теперь мы ловим 7 бит адреса
SBR fl1,FL_RX_ADR ;2 Флаг ПРИЕМА АДРЕСА
rjmp bit_is_a_1 ;распознование единицы
;;;;;;;;;;;;;;;;;;;;
;;ждем что 1 продлиться не менее ref1
sample: sbic PIND,IKIN
rjmp bit_is_a_1 ;Jump if line high

;РАСПОЗНАВАНИЕ НУЛЯ
bit_is_a_0: clc ;Store a '0'
rol temp ;сдвиг влево через С=0

;ноль должен продержаться 2.75 мс ; Synchronize timing
bit_is_a_0a: cp timerL,ref1 ;If no edge within 3/4 bit time
brge fault ; exit

sbis PIND,IKIN ;Wait for rising edge
rjmp bit_is_a_0a

OUT TCNT0,null
clr timerL

bit_is_a_0b: cp timerL,ref0 ;(5)If no edge within 3/4 bit time
breq nextbit ; если равно
rjmp bit_is_a_0b ;in the middle of the bit

;РАСПОЗНАВАНИЕ ЕДЕНИЦЫ
bit_is_a_1: sec ;Store a '1'
rol temp ; протолкнули единицу
;Synchronize timing
bit_is_a_1a: cp timerL,ref1 ;If no edge within 3/4 bit time
brge fault ; exit

sbic PIND,IKIN ;Wait for falling edge
rjmp bit_is_a_1a ;in the middle of the bit

OUT TCNT0,null
clr timerL

bit_is_a_1b: cp timerL,ref0 ;(5)If no edge within 3/4 bit time
breq nextbit ; если равно
rjmp bit_is_a_1b ;in the middle of the bit
;;;;;;;;;;;;;;;;;;;
nextbit: OUT TCNT0,null
clr timerL

dec cnt_T ;декремент количество принятых бит
brne sample ; get next bit

sbrs fl1,2 ;FL_RX_ADR Флаг ПРИЕМА АДРЕСА
rjmp L001

mov system,temp ;Place system bits in "system"
ldi cnt_T,6 ;теперь мы ловим 6 бит данных
clr temp

CBR fl1,FL_RX_ADR ;2 Флаг ПРИЕМА АДРЕСА
rjmp sample
;;;;;;;;;;;;;;;;;;;
l001: mov command,temp ;Place system bits in "system"
SBRS system,6 ; второй бит старта 1 то OK
RET ; иначе вываливаемся
; наложили маски
MOV temp,system
ANDI temp,0b00011111
cpi temp,SYST
BREQ SYS_OK

RET
;;;;;;;;;;;;;;;;;
SYS_OK: MOV temp,command
ANDI temp,0b00111111

DL9: CPI temp,COM_ON
BRNE DL10
; НОРМА
CBI PORTD,IKOUT
RET
;;;;;;;;;;;;;;;;;;;;;;
DL10: CPI temp,COM_OFF
BRNE END_IRKIN
; НЕ НОРМА
SBI PORTD,IKOUT
;;;;;;;;;;;;;;;;;;;;;;
END_IRKIN: RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.DB "©MAGIC 07.2007"
;EESAVE = 0
;CKSEL0 = 0
;CKSEL1 = 0
;BODLEVEL1 = 0
;LOCK1 = 0
;LOCK2 = 0
Aprel
"практически не зависит от частоты"

Что вы имеете ввиду?
Там другая была проблема, и вроде уже решена.
ARV
Цитата(point5217 @ Sep 14 2011, 18:47) *
Держите AVR
практически не завит от частоты (поправте только зоны отсекания под Ваш таймер +-30% от паспорного приема RC5)
ну, во-первых, если вы обратились ко мне, то мой ник ARV, а вовсе не AVR. а по поводу кода - спасибо, конечно, но у меня на Си написано в 5 раз меньше и понятнее, да и работает тоже независимо ни от чего... просто у тиньки один 8-битный таймер, которому досталось делать все: и ШИМ программно генерировать, и задержки для приема RC5-кодов делать... прием RC5 для меня давно решенная задача, причем как минимум тремя принципиально разными способами sm.gif - на все случаи жизни.
Клим
Судя по картинке на первой странице, у вас общий провод светодиодов идет как раз рядом с датчиком. Сейчас все также ??? Датчики крайне капризные, я например, наблюдал, как датчик начинает молотить импульсы, если к обратной стороне палец поднести. А тут тонкий провод с достаточно большим током и на резонансной частоте.
ARV
Цитата(Клим @ Sep 15 2011, 22:23) *
Судя по картинке на первой странице, у вас общий провод светодиодов идет как раз рядом с датчиком. Сейчас все также ??? Датчики крайне капризные, я например, наблюдал, как датчик начинает молотить импульсы, если к обратной стороне палец поднести. А тут тонкий провод с достаточно большим током и на резонансной частоте.
прочтите всю тему, пожалуйста: проблема решена, тока по тонким проводкам не течет, все нормально уже sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.