Симметричный мультивибратор на ардуино ?
- Войдите на сайт для отправки комментариев
Помогите в написании скетча для функции симметричного мультивибратора. Вот схемма она даволи проста и давно всем извессна: http://www.dessy.ru/include/images/ware/RKT-L01_1.GIF Нужно для одного проекта на ардуино.
Все не так просто как я думал.
В общем нужно что бы мультивибратор работал с частатой 36 кГц (периуд 27 мкСек) и пины D4 и D5 управляли транзисторами n-p-n к колектарам которых подключены 2 света-диода.
В общем все проблемма в том что здесь ну ни как нельзя использовать команды digitalWrite & digitalRead т.к. они медленно работают и это добовляет не нужный мне момент - оба света-диода могут быть выключены. т.е. работает так led1 включен, таймер, led1 & led 2 выключены, затем проходит время 10 мкСек на команду digitalWrite дважды затем led2 включен и led 1 выкл. затем сново эта пауза вызванная командой digitalWrite и все повторяется.
А нужно как в классической схемме в любой момент времени светит только 1 из света-диодов, а затем переключаются.
Наверное стоит почитать :
Управление портами через регистры Atmega
Да спасибо, но это сложно как то, вообще прям затрагивает все порты ввода вывода, когда к ним таким способом обращатся. Но у меня др. выбора нет, буду разбиратся. И еще такой вопрос это правило обсалютно одинаково и для atmega 328, а не только для 168 как в примере?
это правило обсалютно одинаково и для atmega 328, а не только для 168 как в примере?
Не абсолютно, но в данном случае - 328=168.
не нравится прямое обращение к портам - ставьте внешний инвертор. Делов то - резистор+транзистор.
вообще прям затрагивает все порты ввода вывода, когда к ним таким способом обращатся.
Если правильно обращаться, то не затрагивает:
А вот это уже полутше, спасибо.
Только не забывайте, что разные пины висят на разных портах (B, C, D). Соответственно - DDRB/DDRC/DDRD и PORTB/PORTC/PORTD
Да, это я понял, тут вообще путаница может быть, пины свои на чипе , на ардуине свои , программно др. порты, просто голова кругом. :)
Да, номера разные, нужно смотреть распиновку. Набираете в гугле arduino uno pinout (вместо uno подставляете название своей ардуины) и переключаетесь на картинки. Например - https://www.google.com/search?q=arduino+uno+pinout
Кажись получил что хотел, запоралелил сигналы через резисторы на 2,2 киОма и нагрузочный резистор на 4,7 кОма к gnd подключил, к нагрузочному резисотру осциллограф в итооге ровная линия, значет порты переключаются без провалов. Да еще обнаружил какой то бракованный транзистор 1 из 2-х bc547 у одного тэстер показывает 640 коэффициент, а у др. зашкал, у бракованного падение база - эмиттер 1,1 вольта, у рабочего 0,6 вольт. И этот транзистор искажает форму сигнала.
Что или кто мешает подключить транзисторы так, чтобы от ардуины шёл один провод и когда на нём HIGH - один транзистор открыт, а другой- закрыт, а когда LOW, наоборот? Это можно сделать с двумя транзисторами, с одним, а если речь только о светодиодах, то и вовсе без транзисторов. Не знаете как? Нужна схема?
И гловной боли меньше (всего один провод) и переключать можно didgitalWrite - полне хватит скорости.
Да, делал так, но тоже не так работало, скорей всего из - за этого бракованного транзистора. Нужно найти будет 2 нормальных и папробую.
Какая нагрузка-то? Если только светодиоды (ну, типа до 20мА), то транзисторы и вовсе не нужны. А если больше, покажите схему по которой делали. Что там у Вас не получилось - интересно.
В общем нет времени рисовать, попытаюсь объяснить на словах. Есть 1 ИК фото-приемник на 36 кГц и 2 ик - света-диода, которые направленны на этот фото- приемник. Эти ИК света-диоды переключает мультивибратор с несущей частатой 36кГц , если сигнал приходит с двух сразу ИК света-диодов, то логично же что ИК фото-приемник должен реагировать на их как буд то бы на его светят 1 им ИК света-диодом который питается не от импульсов,а от постоянки и таким образом ИК- фото-приемник не миняет свое состояние на выходе в LOW (нормальное состояние HIGH). Но если появляется припятствие на пути одного ИК света-диода, то на ИК - фотоприемник уже приходит импульсное ИК излучение и он начинает свой выход подтягивать в состояние LOW. Далее у меня запущенно внешнее преривание (FALLING) на том входе к которому подключен ИК - фотоприемник. В обработчике преривания определяется какой из этих 2-х света-диодов был включен в это время и тем самым определяется какой из 2-х лучей был пересечен. В общем так работают промышленные счетчики посетителей - внешне они именно так построенны (с одной стороны прохода 1 - ик фота-приемник, а с др. 2 ИК света-диода), вот и догадывайтесь как он работает, а я и догадался. ;)
В общем аказалось что этот ИК фото-приемник реагирует и на постоянное свечение света-диода ИК. Так что так не получится.
Ваше изложение алгоритма не выглядит слишком простым. Проще одним излучателем передавать код, допустим "А", затем делать паузу в доли секунды и в течении её передавать другим излучателем "Б". Как именно кодировать - дело десятое. Тогда с приемника при открытых обоих будет ити "АБАБАБ" и только один код при одном закрытом. Передача, прием и формирование 36КГц из прерывания таймера, 27мксек - не много, но должно хватать.
А через uart вобще просто выходит! ИК излучатели через транзисторные ключи к Tx, но кроме этого в базу каждого еще и строб, для возможности включать только один из них и модулировать на 36кГц. Ну а Rx к приемнику. Вобще примитивщина. Я утратил интерес к вопросу.
Вот и я думаю как кадировать сигнал? Хмм странныйй ик ФП. Может нужно что бы пачки сигнала с несущей частатой 36 кГц шли и частота этих пачек отличалась для 1 ик света-диода и для 2 - ого, а потом нужно как то считать импульсы на выходе ик фотприемника. Я в растерянности. А может подключить библиатеку IR Remote и слать разные коды для 1 Ик светадиода и для др. др. коды, но что то мне подсказывает что ничего не выйдет.
Не выйдет с библиатекой ir remote , тут только к 3 пину может быть подключен ик диод.
Ладно оставлю так https://www.youtube.com/watch?v=vbfXED8Dfuk&t=8s вроде работает, но иногдапропускает и не считает людей. Большинство схемм в интернете по этому же принципу работают. Думаю папробовать с аналоговыми датчиками Sharp, которые на отражение работают, но они дорогие 6 баксов за шт, а нужно 2.
А вообще, зачем вам такой "странный ИК фотоприемник" (TSOP)? Возьмите обычную пару ИК свето- фото- диодов скажем на 940нм .. не подходит? Тоже намучался с ними в свое время - выбросил.
Если нужен именно "мультивибратор", то наверное лучше воспользоваться 2 ногами какого-таймера, поставив их в "противофазу". И период подобрать можно "какой хочешь" (почти) и мега не занята дурным делом..
не.. TSOP к засветкам менее чувствителен. А обычный слепнуть будет. И ловить шопопало.
TSOP совсем для конкретных целей нужен. И чтобы он измерял и вычитал засветки - ему ТАКАЯ подача явно не в тему .. там по даташиту несколько иное управление ваще-то.
Именно.
Какая там подача?! TSOP просто фильтр полосовой имеет, на частоту модуляции ИК. Засветка не модулирована потому и меньше влияет. Ну пока не засветит его до насыщения. Все в общем что нужно знать о TSOP.
Все верно. Но как оказалось есть 2 типа ИК фотоприемников. У некаторых есть даже ограничение на частату передачи данных. А у некоторых нет такого аграничения и вот как раз последний даже реагирует на постоянное (не импульсное) ИК излучение, хотя это ж тупо как то - выходит что полосового фильтра в нем нет.
Ну так и я об чем .. засветка не модулирована, а вот полезный сигнал просто обязан быть модулирован, в этом и есть его разница между ними. Только, тут ТС просит мультивибратор и хочет ОБОИМИ лампами светить в TSOP, что уже не совсем "модуляция" на его частоте, согласны? Вот за это и написал .. нафига такой гемморой.
Да, тупо. может подделка. Мне такое не попадало.
Ну так и я об чем .. засветка не модулирована, а вот полезный сигнал просто обязан быть модулирован, в этом и есть его разница между ними.
угу.
Только, тут ТС просит мультивибратор и хочет ОБОИМИ лампами светить в TSOP, что уже не совсем "модуляция" на его частоте, согласны? Вот за это и написал .. нафига такой гемморой.
Так и я пишу - геморой. И то что собрался автор делать скорей всего на побочных эффектах держится, светят оба излучателя по очереди, а яркость немного разная и направленость разная. Вот приемник и видит модуляцию на своей частоте )))
Так я паапробовал даже взять 1 света-диод и подключить напрямую к источнику питания, в итоге этот ИК ФП увидел этот сигнал. А вот др. ИК ФП просто в момент облучения этим ИК света-диодом на выходе сделал пару импульсов (хотя откуда там импульсы то, ИК излучение было постоянное, должен был быть всего один импульс ) и все состояние вернулось в HIGH.
Ток какой в излучателе? Расстояние? Ну и про TSOP поподробней, который на немодулированом постоянно выдавал 0, наверно левый какой. Может он не TSOP вобще? Есть просто другие фотоприемники, которые в таком же корпусе но без модуляции. И ему соответственно формировать 36КГц безсмыслено.
Так может ТС приведет полноценное описание проблемы с выкладкой фоток, кода и т.д. что там за TSOP, в каком приборе или он чего сам ваяет.. Чего так-то гадать на кофейной гуще? (* да и гуща уже не та пошла..*)
А то может разговор за китайские датчики линии/препятствий на базе TSOP .. так им место в помойке, давно уже выяснено.
Так может ТС приведет полноценное описание проблемы с выкладкой фоток
Не. Фантастика. Как всегда гадаем на кофейной гуще, хрустальном шаре и картах таро ;)
Вот код
Схема https://yadi.sk/d/XEj04n1q3HruC3
Тока через излучатели мало, по докам там сотни мА. Ну и по приемнику понятно что ничего по прежнему непонятно.
Ик фотоприемника 3 разных:
1. simens 614 sfh 506-36
2. hl 536AA3P (этот уникальный, способен удерживать уровень low при непреривном облучении несущей частатой).
3. tk 69 105 tsop 1736
На hl 536AA3P и даташит не находится, алах его знает, что оно там такое. А на прямой солнечній свет если сунуть, тоже LOW?
Вернувшись к вопросу
Вот и я думаю как кадировать сигнал? Хмм странныйй ик ФП. Может нужно что бы пачки сигнала с несущей частатой 36 кГц шли и частота этих пачек отличалась для 1 ик света-диода и для 2 - ого, а потом нужно как то считать импульсы на выходе ик фотприемника. Я в растерянности.
Можна 2-я путями. Лучше через uart.
схема дето так.
логика работы следующая. В покое PinA и PinB HIGH. Для передачи по LED1 на PinB выводим частоту 36кГц, в Serial отправляем например "B". Затем возвращаем PinB в HIGH. Выводим частоту 36кГц на PinA в Serial отправляем например "А". После отправки возвращаем PinА в HIGH. Принимаем из Serial. Если приняли "BА" - открыты оба излучателя, если только один - будет один соответствующий символ.
Диоды на схеме - лучше шотке. Марку транзисторов забыл удалить, левые попали, там по сути любые pnp только чтоб ток в ИК обеспечивали.
В общем удалось пока разделить 3 состояния:
1. если преград нету то на выкоде ик фп прямоугольные импульсы с частатой 460 Гц,
2. если пересечен один из лучей частота импульсов около 100 гц
3. если оба луча пересечены то на выходе уровень HIGH
Но как это использовать?
А сделал следующее с помощью timer1 сначало излучает 1 сета-диод несущую частоту 36 кГц, затем чере 14 мкСек * 77 пауза равная 14 мкСек * 77 , затем излучает 2-ой света-диод несущую частоту излучает длинною 14 мкСек * 77, затем сново пауза 14 мкСек * 77 и все повторяется.
Но как измерять частоту на выходе ИК ФП?
Вот вот, рождается истина, закодировал оба луча, отслеживатся будет по цифравому шим сигналу (длительность состояние уровня LOW: кароткая - логический 0, длинная - единица).
теперь таким образом получаем раздельные состояния:
1. если пересечено 2 луча, ни как не реагирует уровень HIGH на выходе ИК ФП.
2. если поступает последовательность логических 0, 1, 0, 1, 0, 1 значет приходят оба луча
3. если поступает последовательность 0, 0, 0, 0, 0 , то пересечен 1 - ый лучь
4. если поступает последовательность 1,1, 1, 1 , то пересечен 2-ой лучь
осталось все это как то связать в обработчик внешних прериваний, что бы в нем запускался таймер на millis() и считал длительность LOW, но может ли millis() работать с внешним прериванием?
Надо папробовать, интересно, даже, долетит ли по ИК сообщение с сериал порта. :)
Скорей всего модулятор должен выглядеть вот так: https://yadi.sk/d/D23IRP_t3HsLea Круто, проверил, (пока только на 1 канале) моя схема модулятора работает, передает данные по ИК. Максимальная скорость 2400 бод, оптимальная 1200 бод. :) Я даже не верил в это, но оно работает.
Почему не работает Эхо сигнал через софт сериал?
Вот замкнул друг с другом потры rx и tx софтсериал и то что прилетает в софт сериал, пытаюсь отправить в аппаратный сериал, в итоге нечего нет. С аппаратным портом такое проходит нормально.
Не удивлен. Софт сириал дурной на всю голову, я его проклял в теме про gsm модем А6. Там в прерывании оно блокирующее ((( Соответственно либо передаем, либо принимаем. А одновременно - фиг. Вот он сам себя и не принимает.
Дааа я так и предпологал и старался это Г... не трогать и метровой палкой. Построил на аппаратном пока, работает как задуманно, я удивлен таким нестандартным использованием сериал порта с моим модулятором ИК. :)
Сейчас папробую тоже самое провернуть с библиотекой IRremote но думаю тут будет тоже Г как и с софтсериал портом. :)
Цепляйте на аппарвтный сириал. Я потом так и поцепил модем к нане. Оно конечно не совсем по стандарту на uart но если не работают одновременно два Tx на один Rx то нормально. С модема Tx через диод подключил. И шется и с модема принимает нормально.
Вот схемма: https://yadi.sk/d/8eYcmR873HuvSx
Скетчь
К сожалению нет подходящего дисплея что бы выводить колличество, папробовал выводить в софт сериал порт, но начинает глючить, путает иногда направление движения и вместо того что бы убавить на 1 колличество, наоборот прибовляет, пока зделал еще 2 доп. света-диода, которые отображают последнее направление движения и походил туда - сюда, вроди переключаются (направление).
Проверьте у себя (колличество), может есть дисплейчик с i2c.