Клеммы, реле, разъемы Degson со склада в России

Простые двухпроводные интерфейсы в микроконтроллерных устройствах

Радиолюбителям и младшим научным сотрудникам посвящаю

Сразу заявим, что ниже не пойдет речь о стандартных интерфейсах, таких как I2C, RS232, RS485 и т.д. Все то, что будет описано, рождалось при острой нехватке или времени, или комплектации, а то и того и другого вместе. Часто требовалось простое повторение удачных конструкций для частной задачи, но без проблем с поиском индикаторов определенного типа и мороки с кнопками, рассыпанными по портам. Требовалось универсальное решение, какового среди стандартных обнаружено не было. Универсальный интерфейс должен был быть, естественно, двунаправленным, но двунаправленность должна реализовываться в цикле любого такта записи одного бита информации во внешнее устройство. Да и что стесняться, пусть она будет одинаковой для цифровых и аналоговых сигналов (ну мы замахнулись), ведь все микроконтроллеры (МК) несут на борту АЦП. Это исключает применение всех стандартных микросхем, ориентированных на последовательные интерфейсы с их иерархией главный-подчиненный.

LED-драйверы MOSO для индустриальных приложений

Недостатки выбранного метода предлагается найти пытливому читателю, мы же сосредоточимся на устройстве и его достоинствах. Автор предпочитает называть его DDI – The interface of distant devices (интерфейс удаленных устройств).

Простые технические средства интерфейса позволяют сегодня управлять светодиодными 7-сегментными индикаторами любой разрядности, но парами, 7-сегментными и знакосинтезирующими жидкокристаллическими индикаторами с параллельной шиной управления в четырехразрядном режиме. DDI позволяет реализовать опрос любого числа кнопок, но целесообразно рассматривать только 4…8. Вместо них можно использовать энкодер и, возможно, джойстик. В качестве бонуса при управлении ЖКИ можно пользоваться простеньким звуковым каналом. Завершая вступление, можно упомянуть возможность работы устройства DDI с местным источником питания при длине линии связи в десятки метров и, ожидаемо, с гальванической развязкой дискретных сигналов.

Двухпроводный последовательный интерфейс передачи данных включает двунаправленную линию SD (Serial Data), которая используется для передачи данных от МК к внешнему устройству и чтения состояния кнопок. По линии CLK микроконтроллером передаются синхроимпульсы.

Основой DDI служит сдвиговый регистр, включенный параллельно (автор извиняется) с аналоговым селектором-мультиплексором (Рисунок 1). Каждый бит входной последовательности данных на SD тактируется передним фронтом импульса синхронизации, по которому производится запись и сдвиг информации в регистре. Выходной код регистра сдвига используется любым элементом устройства, в том числе мультиплексором, для которого он является адресом. Высокий уровень на CLK открывает адресуемый аналоговый ключ и замыкает выход коммутатора на шину SD. Это время используется для чтения состояния адресуемого канала портом микроконтроллера, сконфигурированного как вход. Легко видеть, что уровень сигнала на SD может быть в пределах питающего напряжения. Любые коллизии на шине SD технически легко разрешимы. Обратите внимание, при отсутствии активности линии CLK, по SD можно передавать что угодно и в каком угодно направлении, не рискуя испортить данные в регистре (вопрос с адресуемым каналом мультиплексора решаем), чем мы непременно воспользуемся.

Простые двухпроводные интерфейсы в микроконтроллерных устройствах
Рисунок 1.

Самое первое применение описанного метода служит отличным примером технической реализации подобных устройств. Один МК AVR управлял несколькими разнесенными постами, поддерживая в них температуру и освещение. В качестве линии связи использовалась стандартная витая пара. Параметры регулировались с местного пульта (Рисунок 2) командами «больше», «меньше», «принять». Для управления двухразрядным индикатором на шине SD управляющим микроконтроллером формировался меандр. Транзисторы открывались поочередно, подключая общие аноды светодиодов индикаторов к шине питания. В моменты смены отображаемых знакомест происходила перезагрузка содержимого сдвигового регистра и, один раз за период, опрашивалось состояние кнопок. Преобразование выходного напряжения датчика температуры было очень редким и не отличалось от опроса любой кнопки за исключением времени, необходимого для полного цикла АЦП. Кстати, схему прошлось в скором времени доработать, биполярные транзисторы заменить на полевые, так как переход база-эмиттер VT2 влиял на точность измерения температуры. Несомненным недостатком данной схемы стала необходимость использования древней КР590КН3, но проблемой в дальнейшем это не стало.

Простые двухпроводные интерфейсы в микроконтроллерных устройствах
Рисунок 2.

На базе проверенного решения (Рисунок 2) была разработана линейка модулей светодиодных 7-сегментных индикаторов (mED4x) с числом разрядов 2/4/6/8/10. Опытная партия выпущена при содействии ООО «МЭЛТ» (Москва). Одна небольшая программа обеспечивает обслуживание индикатора любой разрядности и четырех кнопок. Модули (Рисунок 3) представляют собой последовательно соединенные 8-битные регистры сдвига, к выходам которых, в свою очередь, подключены сегменты сдвоенных светодиодных индикаторов. Для управления 2n-разрядным индикатором на шине SD формируется меандр (Рисунок 4). Принцип работы прежний. На время перезагрузки для устранения паразитной подсветки сегментов (особенно это проявляется при большом числе разрядов) цепь питания индикаторов разрывается. Любой импульс записи в регистр сдвига открывает транзистор VT4, и конденсатор C2 разряжается, запирая ключ общего тока на VT5, который откроется только после завершения обновления данных в сдвиговом регистре, когда конденсатор C2 снова зарядится через резистор R9. Указанные на схеме номиналы гарантируют отсутствие паразитной подсветки при работе модулей с МК, тактируемыми частотами 1 МГц и выше. Без использования такого схемного решения реализация двухпроводного интерфейса управления многоразрядным светодиодным индикатором без местного микроконтроллера становится сложной задачей.

Простые двухпроводные интерфейсы в микроконтроллерных устройствах
Рисунок 3. Схема принципиальная модуля mEDx4.

Типовая схема динамической индикации, содержащая несколько разрядных ключей и один сдвиговый регистр, требует регенерации с периодом 1…4 мс и имеет самое малое время загрузки. Предлагаемая схема, наоборот, при 10-разрядном индикаторе загружает регистры за время в пять раз большее, но работает без заметного мигания с периодом регенерации 40 мс. Эта особенность позволяет экономить процессорное время, уменьшая затраты на индикацию. Время на чтение состояния кнопок и перезагрузку 4-разрядного индикатора (2 байта) составляет 50 мкс при тактовой частоте МК AVR 10 МГц. Ток потребления, на один разряд индикатора, приблизительно 12 мА.

Простые двухпроводные интерфейсы в микроконтроллерных устройствах
Рисунок 4. Принцип управления.

Схема коммутатора выполнена на широко доступных аналоговых ключах, а опрос каналов осуществлен «бегущей 1». В качестве U1 могут использоваться микросхемы CD4066/16 и 74HC4066. Каждой должен соответствовать свой номинал резистора R10 (Рисунок 3), который вместе с сопротивлением открытого ключа должен ограничить до допустимого выходной ток порта микроконтроллера в режиме опроса. На схеме указан двоичный «вес», который позволяет определить скан-код при одновременном нажатии двух и более кнопок. Таким образом, модули предоставляют возможность использовать до 15 команд.

Простые двухпроводные интерфейсы в микроконтроллерных устройствах
Рисунок 5.

При наличии исходников под описанные индикаторы можно очень быстро приспособить практически любое устройство. Примером может служить модернизированный измеритель емкости Чана (Chan) (Рисунок 5). Все предельно просто. Доработанная под возможности модуля программа «потянула» в прошивке (cm48.hex) в два раза меньше оригинала, предоставив простор для дальнейшей модернизации.

Простые двухпроводные интерфейсы в микроконтроллерных устройствах
Рисунок 6. Интерфейс с ЖКИ.

Работа интерфейса с параллельной шиной жидкокристаллических индикаторов в случае использования MT-10T7/8/9 фирмы «МЭЛТ» (Рисунок 6) не отличается от описанной выше, за исключением одного нюанса. После формирования на входах ЖКИ информационного слова (выход регистра сдвига) и установкой/сбросом линии SD (данные/адрес), данные защелкиваются в регистрах ЖКИ импульсом разрешения. Этот импульс формируется RC-цепью (C1R1) через некоторое время после последнего импульса синхронизации битовой последовательности (Рисунок 7). При указанных на схеме номиналах на это уходит 12-14 мкс. По истечении этого «защитного интервала», который должен быть предусмотрен программой, необходимо установить высокий уровень на CLK, защелкнув тем самым данные в регистре ЖКИ. Никаких отклонений от рекомендаций производителя ЖКИ в процедуре записи нет, за исключением требования ко времени нарастания импульса записи. Но и с затянутым фронтом индикаторы работают надежно в любых условиях.

Простые двухпроводные интерфейсы в микроконтроллерных устройствах
Рисунок 7. Принцип управления.

Интересный момент… Заполнив адресные разряды (коммутатора) «нулями» и завершив обращение к регистру сдвига, можно без помех формировать на шине SD звуковые сигналы. А если не ожидается нажатий кнопок, «бибикнуть» можно в любое время.

На Рисунке 7 показаны все режимы работы интерфейса:

  • сканирование кнопок (высокий уровень на CLK по завершении операции);
  • запись данных и адреса (команд) в ЖКИ (низкий уровень на CLK на время защитного интервала);
  • формирование звукового сигнала.

Примечание: нижняя диаграмма – это внутренний сигнал контроллера ЖКИ (показан для наглядности).

Применяя это решение на практике, лучше использовать полевой транзистор вместо биполярного и добавить простейший фильтр в цепь динамика. Знакосинтезирующие индикаторы с контроллером HD44780 включаются точно также, только импульс разрешения положительной полярности формируется схемой VT4C2R9 (Рисунок 3).

Надо ли объяснять, что без индикаторных элементов интерфейс позволяет передавать и принимать любые данные в микроконтроллерной системе и обладает некоторыми преимуществами перед существующими? Технические решения описанного интерфейса защищены патентами РФ №2390048, №2547217 на изобретение.

За то время, когда эти разработки уже активно использовались, в ведущих зарубежных журналах периодически появлялись публикации, связанные с подключением к микроконтроллеру LCD с драйвером HD44780. В их основе также лежат сдвиговые регистры (в основном HC595), и это доказывает актуальность данного материала.

Часть 2. Микроскопом по…

Для одной задачки нужны были жидкокристаллические индикаторы… Доступные и простые не сгодились – мал размер знаков. Доступным и большим требовался контроллер, а задаче и tiny13 было много. Случайно нашелся ящик с индикаторами NEC 02010AD от старых кассовых аппаратов. Всем хорошо, но драйвер, естественно, древний – µPD7225, 6-проводной интерфейс. С нашими идеями (смотри выше), задача «на щелчок», но разработка ушла в другую сторону, и читателю судить, место ли ей под главным названием «Простые двухпроводные интерфейсы».

Простые двухпроводные интерфейсы в микроконтроллерных устройствах
Рисунок 8. Схема сопряжения с µPD7225.

Для управления LCD с µPD7225 требуется 6 сигнальных линий: RESET, CS, C/D, BUSY, SI, SCK. Две последние обсуждать нечего, это известные нам как SD и CLK. Остальные по порядку: сброс, выбор кристалла, команда/данные и готовность, которая генерируется драйвером LCD. Схема, которая заставила индикаторы жить полной жизнью, соединяется с управляющим микроконтроллером двумя информационными линиями (Рисунок 8). Сброс кристалла происходит один раз при включении питания, и осуществляется внешней по отношению к модулю индикатора цепью R2C2, предусмотренной документацией на драйвер. Активный низкий уровень CS формируется низким уровнем на линии синхронизации. Пока идет запись данных в LCD, конденсатор C4 разряжен через диод VD1. После последней записи CLK устанавливается в «1» и C4, заряжаясь через R4, снимает разрешение кристалла. Перед записью командной последовательности в индикатор на шине SD надо установить высокий уровень и подождать, чтобы C3 зарядился через R3. Времени записи нескольких байт недостаточно, чтобы напряжение на C3 значительно изменилось. Для записи данных C3 разряжается низким уровнем на SD. Вместо опроса сигнала BUSY, программа (см. Листинг) формирует временную задержку после фронта импульса записи перед записью очередного байта (Рисунок 9). Желтый – CS, синий – BUSY. Готовность снимается драйвером после записи каждого байта и при снятии CS. Картинка – как в даташите. Задача решена? Чтобы быть уверенным до конца, раздобыли еще один LCD 2000 года с аналогичным интерфейсом – KTM-S1201. Драйвер тот же, параметры тактирования отличаются на 20%. Изменили константы задержек в программе, поставили отсутствующую цепь регулировки контрастности и индикатор работает (Рисунок 10). Цена вопроса – несколько деталей и около сотни байт программной памяти. Не выбрасывайте старые радиодетали, лет через тридцать им не будет цены (в смысле – за них платить не надо).

Простые двухпроводные интерфейсы в микроконтроллерных устройствах
Рисунок 9.
 
Простые двухпроводные интерфейсы в микроконтроллерных устройствах
Рисунок 10.

Листинг для AVR (фрагмент для NEC)

...
     rcall  dly-3           ; ждать сброс дисплея (~3.3 мс)
;init_LCD:
     sbi    PORTB, SDA
     rcall  dly-3           ;--- ждать CMD=1 (>1 мс)

                            ;-- загрузка последовательности команд
      ldiw   Z, ComSet*2
      ldi    cnt, 6          ; длина последовательности
      rcall  WrSer3          ; CS формируется здесь
      rcall  dly-3           ; ждать CMD=0

/* последовательность данных из памяти заносится так же, задержки не требуется */
...


;--- write series v3
; busy polling replaced delay
; in: (Z), (cnt)

WrSer3:
      cbi    PORTB, SCL      ; выбор кристалла

;dly_BS:                     ;--- задержка для BUSY
      ldi    r25, 1          ; зависит от Fosc и типа дисплея
      ldi    r24, 190        ; r25:r24   0:220 для 4-8 МГц
                             ;           1:190 для 16 МГц
      rcall  dly             ;/

      lpm    tmp1, Z+
; wr8b:
      push   cnt
      ldi    cnt, 8
                             ;--- загрузка байта
  lp_8b:
      cbi    PORTB, SCL
                             ;--- копировать tmp1.7 -> SDA
      cbi    PORTB, SDA      ; SDA <- 0
      sbrc   tmp1, 7         ; младшим вперед
      sbi    PORTB, SDA
      sbi    PORTB, SCL
      lsl    tmp1
      dec    cnt
      brne   lp_8b           ; /

      pop    cnt
      dec    cnt
      brne   WrSer3
      cbi    PORTB, SDA      ; CMD никогда
      ret

Материалы по теме

Электронные компоненты. Скидки, кэшбэк и бесплатная доставка от ТМ Электроникс
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя