Особенности обслуживания модуля Arduino

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

Особенности обслуживания модуля Arduino

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

Таким образом, самостоятельная разработка приложений выстраивается на понимании принципа, по которому действуют отдельные функциональные блоки с учетом возможности соединения их функционала в единое целое. Спецификой таких платформ, как Arduino, является полное отсутствие требований по наличию у пользователей глубоких знаний принципа функционирования компонентов.

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

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

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

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

Модуль символьного жк-дисплея

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

Предложения дисплеев сегодня очень разнообразны, включая модели, имеющие сенсорные панели. Тем не менее, так называемый неформальный стандарт – это символьный дисплей, который имеет контроллер HD44780. Первый пример программирования построен на использовании платы Arduino UNO R3, макетной платы (breadboard), а также модуля символьного жидкокристаллического дисплея с парой строк по 16-ть символов и с несколькими соединительными проводами.

Безусловно, такое предложение не является единственным, потому что присоединение дисплея может быть выполнено разными способами. В данном случае рассматривается вариант с большим количеством возможностей выполнить модификацию и изменить схему соединения.

При наличии в дисплейном модуле припаянных штырей позолоченного типа, выполняется простая его вставка внутрь контактной платы с последующим объединением дисплея и платы Arduino UNO. Важно учитывать тот факт, что, к примеру, подключение массы GND от Power-разъема к контактной плате позволяет пользоваться соединением в условиях контактной платы без постоянного подключения к Power-разъему.

Его применение является необходимым с точки зрения обеспечения дисплея достаточным питанием. Монтаж разъема Analog In выполняется рядом с Power-разъемом, что обусловлено наличием выводов микроконтроллера. Модуль дисплея управляется цифровыми выходами, а не аналоговыми входами/выходами. Для разъема Analog In характерно наличие подведенных дополнительно аналоговых входов, настраиваемых для функционирования в других форматах, которые могут быть представлены цифровыми выходами.

Таким образом, аналоговый вход «A0» — это порт «PC0», «A1» - «PC1» и т.д. Существует большое количество возможностей, которые предлагаются программируемыми контроллерами для Arduino, но в данном случае выбор был остановлен на библиотеке LiquidCrystal. Созданный скетч подключается командой #include (первая программная строка).

Только после подключения дисплея к микроконтроллеру создается первый скетч модульного управления жидкокристаллическим дисплеем. Плата Arduino подключается к USB-порту персонального компьютера. Меню Arduino позволяет выбрать «Новый файл» комбинацией Ctrl+N, что активизирует появление на дисплее окна.

Ключевым словом void обозначается место создания функции, не возвращающей значение. После слова void обозначается имя функции, открывающейся фигурной скобкой „{” указывается начало функции, а закрывающейся скобкой „}” — конец функции.

Новый скетч создается в условиях сообщения среды Arduino о том, что необходимо определить пару специальных функций:

— void setup(), которой описывается конфигурация микроконтроллера.

Предлагаемые инструкции выполняются однократно.

— void loop(), в которой содержатся действия бесконечного цикла. Причина выполнения программы в условиях бесконечного цикла заключается в том, что работа приложений Windows или Linux предполагает управление операционной системы.

При запуске приложения в Windows нужно помнить, что работа заканчивается возвратом в точку запуска. В этом случае чаще всего отображается рабочий стол или командная строка, что переводит управление процессором на операционную систему.

Для микроконтроллера (плата Arduino UNO) характерно отсутствие операционной системы, которая загружена, по этой причине очень важно завершить работу приложения безопасно: выключением микроконтроллера (переводом в спящий режим); зацикливанием выполняемой инструкции для предупреждения исполнения за границами выделенной области памяти. Такой формат работы определяется функцией void loop() или другими нижеприведенными способами.

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

Начало рассматриваемого скетча – присоединение библиотеки функций экрана:

#include

Программное удобство и читаемость программы требуют определения директивой #define названия ножек, представленных выводами порта C микроконтроллера:

//port PC

#define pc0 A0

#define pc1 A1

#define pc2 A2

#define pc3 A3

#define pc4 A4

#define pc5 A5

Микроконтроллер должен получить сообщение о видах выводов для подключения дисплея.

С этой целью следует воспользоваться функцией lcd(). Она обладает списком аргументов, которыми процессор инструктируется о месте подачи отдельных сигналов. При перечислении выводов соблюдается определенная последовательность: LiquidCrystal lcd (RS, Enable, D4, D5, D6, D7).

Создавать список аргументов целесообразно при помощи таблицы с перечнем соединений для Arduino и модуля жидкокристаллического дисплея: LiquidCrystal lcd(pc4, pc5, pc0, pc1, pc2, pc3).

На следующем этапе настраивается режим, согласно которому будут работать выводы, как цифровые, с сохранением указанной конфигурации в функции void setup():

pinMode(pc0, OUTPUT);

pinMode(pc1, OUTPUT);

pinMode(pc2, OUTPUT);

pinMode(pc3, OUTPUT);

pinMode(pc4, OUTPUT);

pinMode(pc5, OUTPUT);

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

lcd.begin(16, 2);

lcd.clear();

В конце достаточно одной команды, чтобы отобразить сообщение:

lcd.print(„Hello!”);

Функция loop() не предназначена для помещения команд, а вывод сообщения продолжается элементарным «кручением» программы в условиях бесконечного цикла с затратой времени процессора.

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

Обслуживание модуля ЖК-дисплея: Управление и настройка

Алгоритм управления функциями дисплея построен таким образом, что команды с управляющего микроконтроллера на вход модуля дисплея передаются в виде выходных сигналов. Они имеют различные значения и параметры.

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

— Логическая „1” на входе RS (Register Select) активирует функцию записи данных в область памяти отвечающей за изображение. а „0” \ записывает данные в регистр управления модулем дисплея.

Для главного микроконтроллера важна возможность управления указанным входом чтобы обеспечить формирование правильных и точных команд, поступающих на микроконтроллер дисплея (RS=0), а также чтобы отправлять данные, которые потребуются для отображения (RS=1).

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

— Логическая единица на входе R/W (Read/Write) активирует функцию считывания данных, а логический ноль функцию записи.

Например, на входе дисплея задан постоянный, низкий уровень, подключенный к заземлению. Это будет корректным в ситуации, когда данные только записываются и нет задачи их читать. Добавление этого входа к постоянному логическому уровню исключает возможность чтения данных поступающих из памяти дисплея и его регистра управления, а также сигнал занятости „busy”.

Тестируя «busy» можно проследить за работой модуля дисплея, а заодно убедиться в корректности работы его контроллера и как он реагирует на поступление данных. Однако для этого потребуется дополнительная линия порта с главным микроконтроллером и соединение, усложняя обработчик.

— Задний фронт на входе „E” (Enable) активирует функцию перераспределения логических уровней, образующих 4- или 8-битное значение. Со входов DB0 - DB7 они записываются во внутреннюю память модуля ЖК-дисплея.

Управление модулем ЖК дисплея может осуществляться в двух режимах: 8 битном и 4 битном. Для 8-битного режима при подключении дисплея необходимо сформировать не менее десяти линий данных: RS, E, D0 ... D7. Для обработчика такой режим более эффективен, поскольку обеспечивает подключение дисплея к главной системе в качестве памяти на 8-битной шине данных.

Благодаря адресации модуля дисплея на входе Enable устанавливается высокий уровень, а на RS высокого или низкого уровня, в зависимости от типа данных, являются они командой или данными для отображения. Также это дает возможность установить данные на шину, а уровень на Enable изменить на низкий.

Существуют системы, в которых этот метод упрощает обработчик. Для 4 битного режима также используется 8 битное слово, с той лишь разницей, что к главной системе подключаются только выходы модуля дисплея D4 ... D7, 8 битные слова разделяются на части по 4 бита. В этом случае усложняется обработчик, а также процесс подключения модуля дисплея к главной системе, но высвобождаются 4 линии микроконтроллера GPIO.

Упрощенный обработчик модуля дисплея выполняет свои функции без использования линий R/W, а его корректная работа подразумевается по умолчанию. При этом время устанавливается такое, чтобы оно соответствовало времени исполнения самых длительных команд до 2 миллисекунд. Этого достаточно, чтобы дисплей выполнил команду или вывел на экран символ, после чего будет готов к новым данным.

Дисплей со встроенным микроконтроллером, как правило реагирует на входящие данные быстрее, но тем не менее обработка команды clear и последующая за ней очистка экрана происходят в течение 2 миллисекунд. Если экран способен отображать только 2 строки по 8 символов в каждой, то нет существенной разницы в том, за какое время будет обработан сигнал, за 32 миллисекунды или за 100 миллисекунд.

В этом случае пользователь просто не увидит характерных отличий. Гораздо большее значение это имеет при обработке больших объемов данных, например, для графических дисплеев.

Возможности Arduino не могут обеспечить широкий функционал управления дисплеем, потому что микроконтроллер ATmega328 хоть и встроен в Arduino UNO, не использует внешние адресные линии, что дает основания забыть об управлении в 8 битном режиме, тем более, когда используется адресация аналогичная внешней памяти.

Зато использование одного порта GPIO для того, чтобы управлять сигналом R/W позволяет без труда контролировать занятость busy и читать данные, которые хранятся в регистрах и памяти модуля дисплея.

Настройка подключения дисплея с использованием библиотеки LiquidCrystal.h

Чтобы выполнить настройку подключения дисплея в библиотеке LiquidCrystal.h, необходимо использовать функцию LiquidCrystal (). Алгоритм подключения выбирается в списке аргументов вызова функций.

  • LiquidCrystal(rs, enable, d4, d5, d6, d7) — 4 битный вариант интерфейса, не поддерживающий функцию управления входом R/W, а также не дает возможности чтения данных.
  • LiquidCrystal(rs, rw, enable, d4, d5, d6, d7) — тоже имеет 4 битный интерфейс только позволяющий читать данные отображенные на дисплее и управлять входом R/W.
  • LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7) — 8 битный вариант интерфейса, не поддерживающий чтение данных.
  • LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7) — 8-битный интерфейс с функцией чтения данных.

Контроллер HD44780 имеет универсальную схему, поэтому может работать со всеми ЖК-дисплеями, независимо от того сколько они поддерживают символов. При включении контроллера он не может самостоятельно определить тип подключенного дисплея, поэтому нуждается в предварительной настройке.

Arduino предлагает использовать для настройки функцию begin(), аргументы которой определяют количество столбцов и строк. Пример: Если параметры дисплея предполагают наличие 2 строк, каждая из которых состоит из 16 символов, то производится вызов функции begin(16,2). Функцию clear(), предназначенную для очистки экрана лучше использовать сразу после инициализации модуля дисплея.

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

В случае отображения чисел необходимо также использовать основание:

«DEC» — для десятичных чисел.

«BIN» — для двоичных чисел.

«HEX» — для шестнадцатеричных чисел.

«OCT» — для восьмеричных чисел.

Функция print() также преобразовывает числа, когда требуется представить их в различных системах счисления.

— print (10) также как и print(10, DEC) –> отображает 10.

— print(10, BIN) –> отображает 1010.

— print (10, HEX) –> отображает A.

— print (10, OCT) –> отображает 12

— print („Hello!”) –> отображает текст Hello!

При использовании функции Print имеет значение текущая позиция положения курсора, так отображение данных начинается именно с нее. Используя функцию clear(), можно перевести курсор на исходную позицию — в левый верхний угол дисплея.

В арсенале библиотеки LiquidCrystal.h найдутся и другие полезные функции, но о них речь пойдет в другой раз.

Arduino: Функции ЖК-дисплея и как с ними работать

Чтобы понять принцип работы ЖК-дисплея, управление которым осуществляется с платы Arduino, а в частности с микроконтроллера, очень полезным подспорьем будут первоначальные базовые знания об устройстве и технологических возможностях цифровых систем в целом.

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

Для взаимодействия с ЖК-дисплеем важно также понимать, что для обработчика модуль дисплея – это всего лишь один из видов цифровых запоминающих устройств с которым он может обмениваться данными. Чтобы это стало возможным, модуль дисплея в своей структуре имеет свой собственный микроконтроллер, отвечающий сразу за несколько функций, главными из которых являются:

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

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

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

Логический «0» и логическая «1»

Современные цифровые устройства создаются на базе CMOS, и понятия логических «0» и «1» являются первостепенными для большинства интегральных схем. В них логический уровень ноль указывает на то, что для питания схемы используется всего лишь 0,3 В, или меньше, а при логической «1» напряжение питания схемы составляет 95%. В более сложных конструкциях в схему процессора внедряют встроенный источник питания.

В таких схемах логическая «1» является относительной к внешнему источнику питания. В схемах где логические уровни совместимы с TTL значение логической единицы выше и равняется 2,4 В. Каждую из модификаций схем без труда можно найти в свободном доступе на просторах интернета. Потому, когда возникают сомнения, всегда можно найти необходимую информацию.

Передний фронт и задний фронт

Передний и задний фронт — это состояние схемы, когда логический «0» заменяется на логическую «1» и наоборот.

— Передний фронт: логический ноль меняется на логическую единицу.

— Задний фронт: логическая единица изменяется на логический ноль. Такие изменения соответственно меняют и параметры схемы, причем напряжение меняется скачками. По времени эти скачки продолжаются несколько наносекунд.

Этот момент времени принято называть временем нарастания, или временем падения. В микроконтроллере каждая из линий, для которых указаны «0» или «1» называют битом данных. Соответственно 8 подобных линий образуют байт данных. Arduino UNO представляет собой 8-битную схему, что обеспечивает возможность обработки 1 байтовых слов или производить операции с числами от 0 до 255.

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

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

Другие новости

Каталог ТМ Электроникс состоит из более чем сотни продуктов разного назначения, среди которых значимую часть составляют продукты марки...
В большинстве своем автолюбители являются и меломанами, по этой причине для них очень важно наличие в транспортном средстве улучшенного...
Регистрация