• Ардуино головного мозга: импульсный датчик положения

    • Tutorial

    Задача на сегодня: как определить угол поворота инкрементального энкодера?


    Сегодня в серии публикаций про ардуино головного мозга коротенькая статья с небольшим экспериментом и парой рецептов. В комментариях к одной из моих прошлых статей меня обвинили в том, что ардуиной подсчитывать импульсы энкодера — фу так делать:
    Оптически энкодер 1000/оборот и ATMega не имеющая аппаратной схемы работы с энкодером (как у серий STM32, например) — это тупик.

    Дальше в комментариях было много теоретизирования, которое лучше пропустить. Давайте лучше попробуем протестировать в железе, насколько это тупик. Для начала, что такое инкрементальный энкодер? Тот, кто помнит эпоху до-оптических мышек, ответ знает точно. Внутри энкодера есть диск с прорезями, вот для наглядности я сделал фотографию диска с пятьюстами прорезями:


    Читать дальше →
  • К вопросу о странностях и невозможном

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

      Продолжим рассказ о интересных дефектах в области электроники. Сегодня речь пойдет о «промышленной» сети в АТС (изображена на КДПВ) на основе интерфейса RS485.


      Далее в рассказе будут активно использоваться аббревиатуры, но пугаться не надо, в скобках будут даваться их расшифровки, так что добро пожаловать под кат.
      Читать дальше →
    • Обзор одной российской RTOS, часть 8. Работа с прерываниями

        Публикую последнюю статью из первого тома «Книги знаний» ОСРВ МАКС. Надеюсь, это неформальное руководство поможет вам, коллеги, в случае, если придется работать с этой RTOS.

        Предыдущие статьи:
        Часть 1. Общие сведения
        Часть 2. Ядро ОСРВ МАКС
        Часть 3. Структура простейшей программы
        Часть 4. Полезная теория
        Часть 5. Первое приложение
        Часть 6. Средства синхронизации потоков
        Часть 7. Средства обмена данными между задачами
        Часть 8. Работа с прерываниями (настоящая статья)

        Почему прерывания жизненно необходимы


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

        При программировании в однозадачных системах, очень часто удаётся «выкрутиться» за счёт работы с оборудованием по опросу. В многозадачных системах это становится всё труднее.

        Рассмотрим простейший пример. Пусть идёт приём из последовательного порта с ужасно низкой скоростью 9600 БОД. Реальные скорости давно находятся в районе 250 КБОД, но чтобы не возникало желания просто снизить скорость для решения проблемы, давайте рассмотрим именно сверхмедленный вариант.
        Читать дальше →
      • Такое железное и такое безымянное

          Привет, Хабр! Настала осень, птицы потянулись на юг, нормальные люди — на диван, а мы, «железное безымянное направление» проектной исследовательской школы GoTo, сердито курлыча и ощетинясь паяльниками, зажатыми в стальных руках-крыльях, сбиваемся в бронированный клин, чтобы лететь 28 октября в Питер на осеннюю школу в ИТМО.

          image

          Почему железное, почему безымянное, и что будет на школе — обо всем по порядку.
          Читать дальше →
        • Arduino для опроса счетчиков «Меркурий-230»

            При обслуживании приборов учета Меркурий-230 ART, установленных на удаленных
            трансформаторных подстанциях, часто возникает необходимость оперативной проверки работоспособности счетчиков.

            Как правило, в местах, где счетчики работают в составе АСКУЭ и соединены в группы по витой
            паре RS 485 и подключены к шлюзу Меркурий 228, происходит пропадание связи в момент
            установления связи со стороны сервера.
            Читать дальше →
          • Такты для разработчиков

            • Перевод


            Если у вас есть опыт создания ПО и вы хотите познакомиться с проектированием цифровых логических схем (digital design), то одна из первых вещей, которые вам нужно понять, — это концепция тактов. Она раздражает многих программных инженеров, начинающих HDL-проектирование. Без использования тактов они могут превратить HDL в язык программирования с $display, if и циклами for, как в любом другом языке. Но при этом такты, которые новички игнорируют, — зачастую один из основополагающих элементов при проектировании любых цифровых логических схем.


            Ярче всего эта проблема проявляется именно при рассмотрении первых схем, созданных начинающими HDL-разработчиками. Я недавно общался с некоторыми из них. Новички опубликовали свои вопросы на форумах, которые я читаю. Когда я проанализировал то, что они делают, от увиденного волосы встали дыбом.

            Читать дальше →
          • Реклама помогает поддерживать и развивать наши сервисы

            Подробнее
            Реклама
          • Обзор одной российской RTOS, часть 7. Средства обмена данными между задачами

              Кроме взаимодействия на уровне взаимной блокировки, задачи должны взаимодействовать между собой и на уровне данных. При этом отличительная особенность ОСРВ МАКС — возможность обмена данными не только в пределах одного контроллера,


              Рис. 1. Пример взаимодействия задач в пределах одного контроллера

              но и между контроллерами, полностью скрывая транспортный уровень.


              Рис. 2. Пример взаимодействия задач между контроллерами

              При этом разные контроллеры эквивалентны разным процессам, так как их память полностью изолирована. В версии ОС, опубликованной на нашем сайте, физическим каналом между контроллерами могут быть проводные интерфейсы SPI или UART, а также — беспроводной интерфейс через радиомодули RF24.
              Читать дальше →
            • История создания синхронизатора часов DCF77

                Однажды я решил порадовать себя и купил часы citizen. Кроме всего прочего, в этих часах заявлена возможность синхронизировать часы по радиоканалу. В момент заказа я не сильно представлял, что это такое, думал, что оно как-то само всё сделает как надо. Но оказалось, что синхронизация по радио в России практически не работает. Я решил исправить ситуацию. Первое, что я нашёл была статья посвященная усилению сигнала. Предлагалось намотать большую катушку с конденсатором, положить на окно, выходящее на запад и ждать. Также в этой статье упоминался протокол dcf77, по которому часы синхронизируют время, и я понял, что он не очень сложный. Хотя на этот момент в электронике я был полный ноль, но мне представлялось, что с цифровой частью я справлюсь, а с остальным я как-то разберусь. И я решил стартовать проект по разработке устройства синхронизации часов по протоколу dcf77.

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

                image
                Читать дальше →
              • К вопросу о странностях и систематическом подходе

                  Отбросьте всё невозможное, то, что останется, и будет ответом, каким бы невероятным он ни оказался.



                  Есть на одном зарубежном ресурсе по электронике раздел «Записки Шерлока Омса», где рассматриваются загадочные случаи из инженерной практики (не только по электронной части, но, как правило, по ней). Решил завести нечто подобное, вот очередная история инженерного расследования.
                  Читать дальше →
                • Обзор одной российской RTOS, часть 6. Средства синхронизации потоков

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

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

                    Далее, задачи могут конфликтовать друг с другом за те или иные ресурсы (в частности, за оборудование). При рассмотрении типов многозадачности, мы уже рассматривали типовые случаи конфликтов за порт SPI (частично решаемое переходом на кооперативную многозадачность, но на неё перейти можно не всегда).

                    И самый страшный случай — зависимость задач. Часто результат работы одной задачи используется в другой. Из очевидных примеров, можно упомянуть следующие: бесполезно пересчитывать данные для выхода PID регулятора температуры, пока не получено и не усреднено достаточно данных с термодатчика, нет смысла менять воздействие на скорость двигателя, пока не получены сведения о текущем периоде его вращения, незачем обрабатывать строку символов с терминала, пока не получено терминирующего символа (признака конца строки). А кроме очевидных, есть масса неочевидных случаев зависимостей и порождаемых ими гонок. Иногда у начинающего разработчика больше времени уходит именно на борьбу с гонками, чем непосредственно на реализацию алгоритмов работы программы.

                    Во всех этих случаях, на помощь разработчику приходят синхронизирующие объекты. Давайте в текущей публикации рассмотрим, какие синхронизирующие объекты и функции имеются в ОСРВ МАКС.
                    Читать дальше →
                  Самое читаемое