Просто добавьте мяса или эмбеддинг по моде


самая суть

С появлением доступных ARM и MIPS решений, на которые можно установить Linux или WinCE, любительский эмбеддинг вышел на качественно новый уровень(вообще он там давно был, но не в таких широких масштабах как сегодня). Появление таких массовых программных продуктов как Android, очень сильно популяризировало процессоры с не х86 архитектурой, открыло широкой общественности новые возможности в виде снижения цены на быстродействующее железо и обеспечило доступ к той информации, которая раньше распространялась исключительно после подписания NDA.
И всем вроде бы хороши .nix железяки: роутеры, Raspberry Pi и разные девайсы а-ля МК802. У многих они рулят производственными и домашними процессами, роботами и кофеварками. Но, низкая скорость реакции на внешнее воздействие, несколько ограничивает применение таких систем в эмбеддинге. Такими функциями, которые напрочь отсутствуют в подобного рода устройствах(имеется в виду ширпотреб, а не специализированные решения раз, два), могут быть ШИМ с аварийным отключением, скоростной PID регулятор, обработка квадратурного энкодера и многие-многие другие. Все эти вещи требуют известной степени реалтайма.

Краткое описание некоторых способов добавления мускулатуры, немного теории, личных размышлений и конечно, решение от меня под катом.

Часть первая. Теория и размышления


Давайте посмотрим на существующие железные пути решения проблемы «умный, но хилый». Вариантов такого железа несколько:

1. 74хх, 40хх и прочие многоногие

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

Пункт два вытекает из первого, но я его поставил особняком.
Это тоже логика, но логика программируемая.

2.  CPLD и FPGA

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

Учитывая, что наше умное железо, с миром обучено нормально общаться через RS-232 или SPI, и гораздо менее охотно через GPIO, делаем не утешительный вывод: для того, чтобы наша глупая быстрая логика могла общаться с умным медленным хостом, необходимо чудо-устройство.


чудо-устройство в среде обитания

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

3. Микроконтроллер

Конечно же микроконтроллер! Данный ресурс уже видел успешные прецеденты скрещивания роутера в качестве «самого умного» и микроконтроллера в качестве экзоскелета. Тренд скрещивания андроида с Arduino или STM32 стал так же очень заметен в последние недели. Собственно этот тренд и побудил на написание статьи.

С приходом в эту схему МК, становится не понятным применение логики в качестве рабочей силы, но пристальное рассмотрение электрических процессов, происходящих в системе с кнопками, реле, силовыми преобразователями и прочими управляющими и исполнительными устройствами, не позволяют полностью отказаться от логики в некоторых случаях.
Одним из таких случаев может быть автомат с некоторым количеством параллельных входов. Предположим, что искомое состояние входов детерминировано и выглядит не просто как «все в ноль», а имеет какой то сложный вид. Микроконтроллеру в данном случае ничего больше не остается, кроме как мониторить это самое некоторое количество входов в рабочем цикле и… больше ничего не делать. И даже в этом конкретном случае микроконтроллер не обеспечивает сравнимого быстродействия, потому что к каждому отдельному изменению состояния порта, мк будет подходить отдельно. Ему нужно будет сначала обработать прерывание, прочитать содержимое порта(или нескольких), сравнить состояние с искомым и сделать свое резюме записью в порт. Даже однотактные устройства потратят на этот процесс уйму времени. Простая схема на логике решит эту проблему в лоб, безо всякого разбора. Она всегда будет работать быстро и четко.

Часть вторая. Или как я дошел до жизни такой


Работая на производстве в должности «решателя производственных косяков», приходилось довольно часто сталкиваться с необходимостью что-то паять, программировать и прошивать. Было ли это управление клапаном набора воды в резервную емкость, или автомат переключения насосов отопления по заданной программе, это были автономные устройства, построенные на МК. Да и почти не было в те доисторические времена(5 — 6 лет назад) доступных возможностей автоматизации кроме промышленного ПЛК и самодельного устройства на МК.
Согласитесь, ведь программа, которая обслуживает насос(качать если уровень воды ниже — не качать если выше) не достойна целого ПЛК за 100+ долларов. Предвидя комментарии ядреных схемотехников спешу заявить, что МК тоже кандидат на эту программу избыточный, но имеет перед аналоговой схемой неоспоримые преимущества — программируемые в человеческих цифрах время и пороги срабатывания(вместо применения магии математики к конденсаторам и резисторам).
И поскольку для решения задачи выбран все-таки голый МК, кроме очевидной экономии, получаю еще и очевидный головняк в виде пайки. Балланс затрат и проблем был решающим в выборе решения. Особо критичные процессы и работа в плохих электромагнитных условиях, как и следовало, доверялись ПЛК без всяких реверансов в сторону самодела.

Появление пресловутых роутеров за 20 долларов, позволило с новой стороны взглянуть на автоматизацию не критических процессов. Опыт получился двоякий. С одной стороны, за копейки, я получал систему, говорящую со мной на почти человеческом языке. С другой, устройство, принципиально не способное работать с дискретными сигналами на приемлемом по скорости уровне. Это налагало свои ограничения в применении новой технологии.  Дальнейшая популяризация ардуинообразных и плат на подобие STM32 Discovery, предрешила связку Linux device  с низкоуровневым экзоскелетом в виде 8, 16 или 32-битного МК(плюс логика, ОУ и прочее «голое железо»).

Простые же устройства делались по старо-новой схеме:
1) Берем Arduino Nano
2) Обвязываем инфраструктурой
3) ???
4) PROFIT!

Как и прежде, все это годилось лишь для офисного применения и при наличии огромного количества пустого места.Что касается малогабаритных устройств, то тут было все плохо. И если простое устройство, не нуждавшееся в обновлении прошивки могло быть сделано на голом МК, то в устройство, в безглючности прошивки для которого я не особо был уверен(а нужно уже вчера), ставить голый МК было стремно. Во первых, для обновления прошивки нужен программатор. Во вторых… впрочем, и первого пункта для меня было достаточно. Я вообще не люблю программаторы в любом виде. Для меня лучший программатор — USB провод.
Постоянное недовольство этими нюансами, породило жгучее желание унифицировать, унифицировать, унифицировать…

Часть третья. Три недели назад


Три недели назад, я сдал в производство очередной проект(основная моя деятельность — это серийное производство электроники), а следующий замаячил только через примерно две недели. Две недели листания интернета? Хм… заманчиво… но что-то стукнуло в голове, и слово «унификация» всплыло в памяти. А с ним и старая неудовлетворенность жизнью эмбеддерской. На такой депрессивной ноте, я поставил перед собой задачу: создать хоть что нибудь для получения позитива перед новым проектом, удовлетворения ЧСВ и улучшения качества жизни землян за две недели.

Для воплощения столь амбициозных планов, было необходимо не менее амбициозное железо. И оно было найдено среди продукции широко известной в узких кругах фирмы Microchip. Это относительно новый МК PIC16F1509. Здесь, я должен сделать теоретическое отступление и рассказать о природе этой непреодолимой силы, которая заставила современного человека использовать не 32bit МК.

Итак, периферия.
Кроме стандартной периферии(USART|SPI|I2C, 4хPWM,10bit ADC, 5 bit DAC, 3 Timers, датчик температуры кристалла и конечно же GPIO), здесь нашлись любопытные нововведения среди МК начального уровня. Эти  нововведения, безаппеляционно, склонили чашу весов от модных 32bit STM к не модным 8bit Microchip.

CLC (Configurable Logic Cell)

Программируемая логика на кристалле МК.

Каждый из четырех модулей имеет вид:


Слева находится четыре входа, к которым можно подключать физические выводы МК, прерывания от таймеров, компараторы, ШИМ, генератор и вообще многое из того, что есть внутри и снаружи МК. Набор источников для одного модуля включает 16 сигналов, но между наборами для каждого из четырех модулей есть различия. В частности, разные физические выводы МК. Далее на схеме находится коммутатор. Сигналы можно подключать как напрямую, так и с инверсией. Выходы идущих после коммутатора элементов ИЛИ тоже управляемые(прямой/инверсный). В самом конце справа, находится выход модуля, который может быть инвертирован, выведен на физический вывод МК или заведен на вход CLC. Выход генерирует прерывание по фронту или по спаду(как настроишь).

Красным прямоугольником обозначена изменяемая логическая функция, которая кроме уже представленного AND-OR, имеет еще 7 вариантов:





К сожалению, целью этой статьи не является ликбез по цифровой схемотехнике, поэтому комментировать тут нечего — иллюстрации говорят за себя. Отмечу только, что конфигурируется все это хозяйство прямо в коде, путем банального присвоения значений регистрам как самая обычная периферия типа таймера или GPIO. Для облегчения настройки этой не самой простой фиговины, существует GUI:



При наличии GUI, все становится предельно просто. В правом верхнем углу виднеются значения регистров, но можно и просто генерировать готовый ассемблерный или С код. К этой любопытной периферии и примерам использования я обещаю вернуться в следующий раз. А для заинтересовавшихся, рекомендую посетить эту страницу.

NCO (Numerically Controlled Oscillator)

По сути, это синтезатор частоты до 500кГц(при тактировании от внутреннего генератора 16МГц) с шагом перестройки от 0.03Гц(при тактировании от внутреннего генератора 31кГц) до 15Гц(тактовая 16МГц)
Умеет генерировать меандр и ШИМ.

Один из вариантов применения NCO и CLC(аппноут) дает 16bit ШИМ в диапазоне коэффициента заполнения от 0% до 100% при частоте ШИМ 500кГц.

CWG (Complementary Waveform Generator)

Программируемый драйвер полумоста.
На выбор несколько источников сигнала(CLC1, NCO, PWM и компараторы).
Это крайне полезная штука, и во многих случаях способна избавить разработчика от огня, дыма и горечи утраты. С предупреждением этих неприятностей, призван бороться аппаратный контроль мертвого времени.


Каждый из транзисторов пары, открывается строго тогда, когда второй уже наверняка закрыт. Это делается для исключения сквозного тока, приводящего к красивым, но порой дорогостоящим спецэффектам. Время, даваемое предыдущему транзистору на закрытие(deadtime), регулируется отдельно для переднего и заднего фронтов. Так же, со спецэффектами призваны бороться сигналы форсированной остановки, которых тут четыре: специальный вывод GPIO, CLC2 и оба компаратора. Учитывая, что на вход CLC2 мы можем подать «еще кой чего», получаем довольно обширный список возможностей по скоростной аварийной остановке драйвера без какого либо участия ядра. От таймаутов, до аналоговых и логических уровней.

На этой ноте, пожалуй, пора завязывать с теорией и переходить непосредственно к практике.

Часть четвертая. Разработка и производство


Определившись с МК, начинаю продумывать остальной конструктив. Хотелось минимально возможной занимаемой площади. Проиграв в голове несколько вариантов, остановился на решении, занимающем площадь микросхемы в корпусе DIP 20(!). Дальше, уже отталкиваясь от габаритных требований, выбрал элементную базу. В качестве USB-TTL конвертера применена известная микросхема CP2102(QFN корпус и кварц не нужен), USB разъем был выбран вертикальный, а микроконтроллер в корпусе QFN. Все это добро было незамедлительно закуплено на маузере.

С платой тоже особо не церемонился. Она, в виду своей крайней простоты, была разведена примерно за час. Выводы питания демонстративно разместил там же, где они находятся у микросхем 74хх логики. Далее я заказал изготовление нескольких штук на заводе и принялся ждать. Во время ожидания, работа над модулем велась исключительно ментальная… мечтательная, я бы сказал.

К тому моменту, когда было получено на руки все железо, исходные две недели почти подошли к концу. Я рисковал завалить собственные сроки, и получить большую порцию депрессии, которая так вредна 30-ти летнему мужскому организму.
В срочном порядке, в  качестве бутлоадера, без которого уже не обходится ни одно микроконтроллерное устройство, был выбран отработанный вариант — ds30 Loader. В своей бесплатной версии, он позволяет только загружать в МК скомпилированный hex через UART и имеет при этом удобный GUI(ну и консольная утилита есть, для ценителей).

Результат на фото:

в профиль рядом с DIP20(ATtiny2313)


вид сверху


перспектива...

МК работает от встроенного генератора 16МГц. Кварц, который виден на фото, для программного RTC, который реализован на Timer1.  На разъем напрямую выведено 18 из 20 выводов МК(два заняты кварцем), включая RX и TX для непосредственного подключения RS-232 TTL. Если же использовать только этот самый RS-232 TTL, то плата принимает вырожденный вид и теряет половину стоимости:

так выглядит плохо отмытая плата

Вместо заключения


Получилась довольно милая безделушка, которая, тем не менее, способна сильно облегчить общение с жестоким внешним миром для Linux-powered устройств. Поскольку конкуренция с ардуино в данном формфакторе огромна, я делал упор на габариты и уникальную периферию.
На данный момент, в прошивке реализовано включение и настройка параметров нескольких периферийных модулей командами по RS-232. Это PWM, DAC, GPIO и частично CLC. Так же можно узнать который час и прочитать ADC(как внешние входы, так и датчик температуры кристалла). То есть с некоторыми функциями быстрого экзоскелета для медленной операционки оно уже справляется.

Но даже если абсолютно вся периферия заработает под дудку RS-232(особого ума для чего не надо), это будет не предел. Сейчас уже видно, что этот функционал займет далеко не все место в памяти МК, и самыми подходящими способом утилизации оставшихся нескольких килобайт, я думаю, станет ограниченный интерпретатор графического языка SFC для простейшей автоматизации в пределах 30-50 шагов, а так же софтовые модули, такие как PID, расширение количества вводов/выводов через I2C экспандеры, которые дадут возможность унифицированно подключать дисплеи и клавиатуры.

Главными источниками вдохновения были хабрахабр, какой-то китайский сайт с андроидобалалайками по 50 баксов и сайт www.microchip.com

Всем мир.

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 37

    +9
    Если не считать того, что у человека на первой фотографии очень большие проблемы с избыточным весом (то есть он брюхо наел себе центнера на полтора по меньшей мере), то он чертовски внешне напоминает меня.

    Это что такое? Предупреждение от судьбы — ограничить себя в еде, чтобы не стать вот этаким?
      +6
      Mithgol the Tractor-driver!
      +2
      Есть два решения проблемы:

      1. перестать пристально вглядываться
      2. попробовать прочитать текст и написать по теме (возможно отпустит)
        0
        Не сомневаюсь в том, что вы очень классный инженер, но подаете идею уж очень смазанно и неструктурированно. Из введения про Android и ARM совершенно непонятно, откуда будет расти экзоскелет. Я бы построил статью так:

        1) Сначала 2 общих предложения про экзоскелет и как это круто;
        2) Потом проблема, которая еще не решена, но вы собираетесь решить;
        3) Техническое обоснование, это у вас есть и хорошо расписано;
        4) Вывод, опять же в рамках экзоскелета и первоначального вопроса, а не Open-source, RS-232, CLC и PID — эти детали оставьте в предыдущей части.

        Я о том, что большинство хабрапользователей читает по-быстрому статьи на работе и более подробно — дома, а вашу статью как она есть мне вдумчиво дома прочитать пока не хочется, т.к. я так и не понял без детального анализа, что вы сделали и как это относится к экзоскелету.
          +3
          Спасибо за поправки, но вышло как вышло.
          Я в жизни ничего не писал кроме конспектов и писем.
          Думаю с опытом указанные вами проблемы себя изживут.
            0
            Конечно изживут, ведь если есть о чем писать статьи, желание и такие ценные технические знания — остальное лишь дело техники :)
          0
          Могу предолжить вам ознакомится с линейкой микроконтролеров от Cypress Semiconductor. Микроконтролеры с реконфигурируемой цифровой и аналоговой частью. PSoC1 на M8C разрабатывается с начала 2000-ых, но сейчас в режиме поддержки, но есть более новые PSoC2 на i8051 и PSoC5 на ARM Cortex M3. Весь плюс в IDE PSoC Designer/Developer первый я когда-то помагал разрабатывать. Очень быстро и удобно задавать логику в визуальном редакторе. Да и редактор кода, как для embedded-индустрии очень неплох.
            0
            PSoC это очень круто, но не вписывается в концепцию «DIP20 модуль за 10 долларов в розницу»
              0
              www.cypress.com/?mpn=CY8C27443-24PXI — 1-10 unit Price — $4.09 — PDIP20 — www.cypress.com/?docID=35973
                0
                А если добавить cp2102, плату и разъем?
                Да еще и заработать попытаться?
                  0
                  У PSoC экономия в другом, экономим на обвязке и за счет аналоговых и цифровых блоков делаем то что по силам только более мощным и дорогим товарищам при очень скромном энергопотреблении(хотя в плане потребления PSoC3/PSoC5 конечно лучше).
                  Но тут конечно считать нужно в каждом конкретном случае. Если вам нужна большая универсальность, то для домашней автоматизации серия PowerPSoC с возможность управления силовыми цепями очень кстати.
                  Если у вас есть конкретная задача и для вас каждый лишний доллар критичен, то PIC могут выиграть, тут вопрос сколько и какой обвязки вам нужно.
                  Ну и замечу что Microchip номер 1 на рынке микроконтролеров, а Cypress толи 8-ой, толи 9-й соответственно расспространенность и известность ниже, сложнее искать готовые решения.
                    0
                    А AVR, вообще однотактный…
                    Это я к тому, что дорога к обеду ложка.
                    Еслиб я имел год на разработку и освоение, возможно, я бы обратил внимание на PSoC.
                    Но в данном случае у меня было две недели.
                      0
                      Ну вот меня ностальгия замучила. Скачал PSoC Designer достал из чулана development kit играюсь :)
                    0
                    www.cypress.com/?mpn=CY8C24094-24AXI — к сожалению 24-тую серию в DIP корпусах уже не выпускают, но если подойдет TQFP — то получите до 56 GPIO, в cp2102 потребности не будет, полноценный USB (USB-UART поддерживается), цена все те же примерно 4$.
                      0
                      TQFP не подойдет по габаритам.
                      Тут QFN20.
              0
              Во как. А кроме пиков такая штука есть где-нибудь?
                0
                Выше написали, что такая штука есть в PSoC, от Cypress(если вы про логику).
                Там более взрослое железо(намного), но и стоит минимум в 7-8 раз дороже.
                Показанный мной контроллер стоит 1 доллар.
                +2
                Микроконтроллеру в данном случае ничего больше не остается, кроме как мониторить это самое некоторое количество входов в рабочем цикле и… больше ничего не делать


                Ой, да ладно! А мужики-то не знают!
                Вам что, фемтосекунды надо считать логикой?

                Может я плохо читал, но так и не понял, о чем статья. Ну сделали Вы платку на новом супер-пупер модном микроконтроллере. И что дальше? Где Вы её будете использовать? Как расширитель портов роутера? Тогда пример кода в студию. Или хотя бы схему. Или рассказ о том, с какими подводными камнями пришлось столкнуться.
                Или Вы хвалитесь, какой Вы тридцатилетний молодЕц?

                И да, насчет риалтайма. Связь с линуксом у вас через что? UART? М… понятно.
                  0
                  Вам что, фемтосекунды надо считать логикой?

                  Нет, мне надо, чтобы ядро занималось полезными делами, а не прослушиванием портов.

                  Или рассказ о том, с какими подводными камнями пришлось столкнуться.

                  Не было подводных камней, все заработало с первого раза.
                  У меня большой опыт.

                  Естественно, проект опенсорсный, но еще не готов к релизу
                    0
                    Упс, не в ту ветку ответил.
                    См. ниже.
                      0
                      а ядро и не будет заниматься — просто нормально настроить прерывания и обрабатывать конкретные события
                        0
                        Я вам ответил ниже
                      0
                      Где Вы её будете использовать?
                      Мне бы тоже хотелось услышать, где и как можно применять платку. И какие преимущества она даст по сравнению с GPIO (их же тоже можно poll()-ить). Я на уровне хобби занимаюсь микроконтроллерами, тоже фанат Microchip-а, очень интересно узнать про что-то сложнее пульсометра и счётчика калорий, которые я сделал.
                        0
                        Применять можно везде, где вы привыкли применять микроконтроллеры.
                        Можете считать, что это PIC микроконтроллер в DIP корпусе, но со встроенным программатором и разъемом USB.
                          0
                          Ага, т.е. теперь PICkit 2 не нужен. Он не дешёвый, да. А во сколько вы оцениваете примерную стоимость вашей платы?
                            0
                            Да, пиккит не нужен. Он мало того, что не дешевый, так его еще и подключать надо, а это 5 проводов.
                            PLS5, который часто используется для этих целей, в два раза больше uUSB.
                            Сейчас по стоимости сложно говорить, одно могу сказать, что до 10$.
                            Если бы я жил в США, то с помощью кикстартера, эту цену можно было бы снизить еще доллара на два-три, благодаря запуску сразу крупной серии. А я буду пока по сотенке-другой делать. Это большого выигрыша на опте не даст.
                      0
                      При чем тут ядро? Вы про аппаратные прерывания в курсе?

                      У меня большой опыт.

                      ОК, не буду занудствовать о трассировке. Тем более на Ваших фотках её не очень хорошо видно из-за белой маски.
                        0
                        ОК, не буду занудствовать о трассировке.

                        От чего же?
                        Здоровая критика всегда приветствуется. Можете, например, придраться к тому, что одна из линий диффпары USB, длиннее другой на полмиллиметра.
                          0
                          вообще сумбурная довольно какая то статья на мой взгляд, доля правды в написанном есть, но стоит понимать, что задача должна определять инструменты, а не инструмент задачу — когда разработчик владеет большим набором инструментов — он может эффективней решать задачу. смысл использовать отдельные микросхемы логики? что это за задача, где не хватает прерывания? Медленно работает операционка? не ставьте операционку, не умеете без неё писать? — научитесь, а доп элементы добавлять в устройство только потому что вы не владеете инструментом — это костыли.
                            0
                            Подскажите мне, пожалуйста, легкодоступный микроконтроллер, который по установлению на любых его 24 GPIO числа вида 0b100011001111000000110101 сгенерирует прерывание. На другие числа, разумеется, он реагировать не должен.
                              0
                              ну в такой постановке задача действительно не для микроконтроллера
                                0
                                Из чего я делаю вывод, что излишняя сумбурность моего изложения(за что я, несомненно, прошу прощения) заставила вас читать топик по диагонали. Потому что постановка задачи именно такая.
                        0
                        Скажите, а чем обусловлен выбор чипа 1509? 1459 вроде как ничем не уступает, кварц уже способен работать по usb2. И чем обусловлен выбор в пользу именно PIC? Меня остановило отсутствие каких либо стабильных открытых библиотек и компилятора, по крайней мере для AVR всего на порядок больше. Хотя втрое более низкая цена и встроенный кварц и дают явный отрыв по железу, но с софтом куда более туго.
                          0
                          Я сейчас готовлю новую статью, по реализации гальванически развязанной шины RS232/RS485.
                          Моя плата + несколько транзисторов + LAN трансформатор.
                          Приемник и передатчик отдельные, реализованы на встроенной логике и не задействуют в своей работе ядро.
                          Микроконтроллерное ядро даже не знает, что у него там MIL-STD-1553B, для него это все — RS232TTL, с которым он привык работать.
                          Без DC-DC и без драйвера RS485. 1,5kV развязка.

                          Предложите, пожалуйста AVR, решающий выше поставленную задачу, и умещающийся на модуле DIP20.

                          Что касается компилятора, то он есть на сайте microchip.
                            0
                            Имелся в виду физический уровень MIL-STD-1553B.
                              0
                              Исходя из написанного в топике выбор микросхемы был не очевиден, отсюда и появился вопрос.
                              Скажите, что используете в 1509, возможно подскажу что-то аналогичное из AVR, хотя как мне кажется, вы и сами справитесь. Если таких нет, что же это за уникальные возможности PIC?
                                0
                                Скажите, разве вот этого не достаточно для объяснения?
                                Приемник и передатчик отдельные, реализованы на встроенной логике и не задействуют в своей работе ядро.


                                Ну еще можно картинки посмотреть в статье… я даже не знаю уже что и думать.

                          Only users with full accounts can post comments. Log in, please.