Фильтр по тематике

Автономное применение интеллектуальных дисплейных модулей от 4D Systems Часть 1

В статье рассказано о применении дисплейных модулей 4D Systems в качестве устройств, работающих автономно, т.е. без внешнего управления. Приведены сведения об архитектуре и характеристиках графических процессоров дисплейных модулей, описан процесс разработки и отладки встроенных программ для них, а также используемые для этого инструментальные средства, встроенные функции и графический язык программирования. Описание дано на примере дисплейного модуля μOLED-128-G2.

01.04.2017 548 0
Автономное применение интеллектуальных дисплейных модулей от 4D Systems Часть 1

Платформы для разработки приложений

Наряду с возможностью работы под управлением внешнего микроконтроллера (МК), интеллектуальные дисплейные модули от 4D Systems поддерживают работу в автономном режиме под управлением встроенной программы, использующей внутренние аппаратные ресурсы модуля.

Прежде чем начинать разработку на базе дисплейных модулей автономно работающих устройств, необходимо иметь детальное представление о ресурсах и возможностях аппаратных платформ – графических процессоров семейства 4D-Labs: GOLDELOX, PICASO и DIABLO16, а также о степени доступности этих ресурсов для встроенной управляющей программы.

Описание актуальной на настоящий момент версии процессора GOLDELOX – GOLDELOX-GFX2 содержится в [1], а его структурная схема приведена на рисунке 1. Процессор имеет вычислительное ядро EVE (Extensible Virtual Engine – расширяемый виртуальный механизм), представляющее собой виртуальный процессор. Шина доступа к встроенному дисплею модуля у этого процессора – 8-разрядная. Как можно видеть из структурной схемы, состав периферии довольно скромен. Единственный интерфейс SPI в приложении может быть занят подключённой к модулю картой памяти. Подключение к шине SPI каких-либо дополнительных внешних устройств, например, микросхем флэш-памяти, возможно не во всех модулях в силу особенностей их конструкции. Так в µOLED-128-G2 линии SPI выведены только в слот карты памяти, но не на сигнальный разъём модуля. Кроме SPI для программного использования доступны линии ввода-вывода GPIO, которых у процессора GOLDELOX всего две: IO1, IO2. Линия IO1 может конфигурироваться как цифровой вход или выход, аналоговый вход 8/10-разрядного АЦП, цифровой выход ШИМ для генерации звука, а также как линия обмена по протоколу Dallas 1-Wire. В режиме аналогового входа линия может поддерживать распознавание пяти фиксированных аналоговых уровней для опроса до пяти внешних кнопок, подключённых по соответствующей схеме (функция Joystick). Линия IO2 обеспечивает все перечисленные функции IO1, кроме аналоговых. Максимальная нагрузочная способность линий GPIO по току составляет 4 мА. Помимо GPIO для программы доступен последовательный порт COM0 с интерфейсом UART. Из системных регистров, в числе прочих, для программы доступны один 32-разрядный системный таймер и четыре 16-разрядных пользовательских. Все таймеры жёстко тактируются внутренним синхросигналом с периодом 1 мс.

Встроенная флэш-память программ процессора GOLDELOX имеет размер всего 10 Кбайт, пользовательское ОЗУ (SRAM) – 510 байт, что налагает соответствующие ограничения на размер исполняемого кода. Ресурс стирания-записи встроенной флэш-памяти невелик – всего 1000 циклов. Типичный ток потребления процессора – 12 мА, максимальный – 26 мА, частота встроенного генератора – 12 МГц, тактовая частота ядра – 48 МГц.

Механизм прерываний для встроенной программы процессора GOLDELOX производителем не представлен.

Подробное описание процессора PICASO приведено в [2], а его структурная схема показана на рисунке 2. Как можно видеть из схемы, этот процессор существенно мощнее, чем GOLDELOX, и ресурсов у него гораздо больше. Он имеет 16-разрядную шину доступа к дисплею, аппаратно поддерживает файловый доступ в системе FAT16, помимо контроллера дисплея содержит контроллер резистивной сенсорной панели, поддерживает 16-разрядный аудиовыход ШИМ. Портов COM у процессора два, линий GPIO – 13, также имеется интерфейс I2C. Встроенная флэш-память программ имеет размер 14 Кбайт, пользовательское ОЗУ (SRAM) – 14 Кбайт. Процессор поддерживает загрузку и исполнение кода как во флэш-памяти, так и в SRAM. Ресурс стирания-записи встроенной флэш-памяти составляет 10 000 циклов. Типичный ток потребления процессора – 50 мА, максимальный – 90 мА, частота встроенного генератора – 12 МГц, тактовая частота ядра – 48 МГц.

Описание процессора DIABLO16 содержится в [3], а его структурная схема приведена на рисунке 3. Как можно видеть из схемы, этот процессор ещё мощнее предыдущих и обладает заметно большими ресурсами. Он имеет 16-разрядную шину доступа к дисплею, аппаратно поддерживает файловый доступ в системе FAT16, помимо конт­роллера дисплея содержит контроллер резистивной сенсорной панели, поддерживает 16-разрядный выход аудио ШИМ, вход квадратурного энкодера и аппаратный счёт внешних импульсов. Портов COM у него четыре, линий GPIO – 16, портов I2C – три, портов SPI – три. Модуль АЦП процессора – 12-разрядный. Встроенная флэш-память программ состоит из шести банков по 32 750 байт, пользовательское ОЗУ (SRAM) имеет размер 32 Кбайт, системное ОЗУ – 12 Кбайт. Процессор поддерживает загрузку и исполнение кода как во флэш-памяти, так и в SRAM. Ресурс стирания-записи встроенной флэш-памяти – 10 000 циклов. Типичный ток потребления процессора – 70 мА, частота встроенного генератора – 12 МГц, тактовая частота ядра – 70 МГц.

Внутренние функции графических процессоров

Исходные тексты встроенных управляющих программ для процессоров семейства 4D-Labs пишутся на оригинальном графическом языке 4DGL (4D Graphics Language), редактор которого входит в состав программного пакета Workshop4 IDE. Пакет можно загрузить по ссылке [4]. Помимо программного инструментального средства Workshop4 IDE для разработки-отладки управляющих программ процессоров модулей необходимо аппаратное инструментальное средство – USB-адаптер µUSB-PA5. В состав Workshop 4 IDE кроме редактора входят компилятор, компоновщик и загрузчик, которые служат для разработки и записи в память графических процессоров откомпилированных программ. Структура и подробное описание возможностей языка 4DGL содержится в [5]. Важно отметить, что при математических вычислениях 4DGL может оперировать только целочисленными 16-разрядными знаковыми переменными и константами, лежащими в диапазоне значений от –32 768 до +32 767. Данные в 4DGL могут быть как 8-, так и 16-разрядными. Массивы данных могут быть только одномерными.

Кроме базовых элементов и конструкций (идентификаторов, операторов выражений, циклов, условий, переходов и пр.) языка 4DGL процессоры семейства 4D-Labs поддерживают так называемые внутренние функции. Подробное описание всех 128 внутренних функций процессора GOLDELOX содержится в [6]. Часть из них может быть вызвана одноимёнными командами режима Serial [7]. Процессор PICASO поддерживает 243 внутренние функции, а DIABLO16 – 450.

Рассмотрим систему внутренних функций GOLDELOX подробнее, насколько это возможно в рамках журнальной статьи. Группа функций GPIO управляет конфигурированием, записью, чтением линий GPIO, в том числе при обмене по протоколу Dallas 1-Wire. К этой же группе относится функция Joystick, вызываемая одноимённой командой режима Serial. Функции GPIO перечислены в таблице 1, найти которую можно в дополнительных материалах к статье на сайте журнала www.soel.ru. Эта и последующие таблицы содержат только имена и краткие характеристики функций без подробного описания параметров и особенностей применения, за которыми рекомендуется обратиться к [6].

Группа функций доступа к памяти обеспечивает доступ для записи и чтения к массиву управляющих системных регистров ядра графического процессора EVE, а также к ячейкам встроенного ОЗУ. Эти функции могут работать с байтами, 16-разрядными словами и отдельными битами. Функции доступа к памяти перечислены в таблице 2 (см. дополнительные материалы к статье на сайте журнала www.soel.ru).

Группа функций работы с пользовательским стеком. В ходе выполнения встроенной программы, например, при вызовах функций реализации растровых изображений, может возникнуть необходимость в управлении пользовательским стеком: сохранение и восстановление контекста, мониторинг состояния стека и т.д. Стек в архитектуре EVE является программным и имеет фиксированное расположение в начале встроенного ОЗУ. Если ни одна из функций стека не используется, то эта область ОЗУ может быть задействована для других целей. Если же стек используется, то он должен быть вручную сконфигурирован, как первый массив в программе.

Группа математических функций реализует математические операции с целочисленными аргументами. Математические функции перечислены в таблице 3 (см. дополнительные материалы к статье на сайте журнала www.soel.ru).

Группа текстовых и строковых функций управляет курсором дисплея при выводе текста, выводит строки и отдельные символы, задаёт цвет, размеры и атрибуты текста (жирный, курсив, подчёркивание, инверсия). При этом по умолчанию доступен только один текстовый шрифт. Основная часть этих функций перечислена в таблице 4 (см. дополнительные материалы к статье на сайте журнала www.soel.ru). Текстовая функция txt_Set(…) в качестве аргументов использует структуру, состоящую из константы, сопоставляемой с некоторой «дочерней» функцией, и аргумента этой «дочерней» функции. Текстовые «дочерние» функции могут вызываться командами режима Serial.

Группа графических функций управляет выводом на дисплей простых геометрических фигур (прямых и ломаных линий, окружностей, треугольников, прямоугольников и т.п.), задаёт их расположение, размеры, цвет и режимы отображения, например, заполнение цветом. Сюда же входит такая важная функция, как очистка экрана gfx_Cls(). Основная часть этих функций перечислена в таблице 5 (см. дополнительные материалы к статье на сайте журнала www.soel.ru). Графическая функция gfx_Set(…) в качестве аргументов использует структуру, состоящую из константы, сопоставляемой с некоторой «дочерней» функцией, и аргумента этой «дочерней» функции. Графические «дочерние» функции могут вызываться командами режима Serial.

Группа функций ввода-вывода дисплея используется для прямого доступа программы к дисплею и отображения его пикселей. Функции этой группы расширяют возможности пользовательского кода в плане доступа к аппаратным средствам дисплея.

Группа функций для работы с носителями управляет взаимодействием модуля с подключённой к нему картой памяти, её начальной инициализацией, чтением-записью данных, выводом с неё на дисплей изображений, видеокадров, воспроизведением видео. Функции этой группы перечислены в таблице 6 (см. дополнительные материалы к статье на сайте журнала www.soel.ru). Функции для работы с носителями могут вызываться командами режима Serial.

Группа функций поддержки флэш-памяти управляет взаимодействием модуля с подключённой к нему через порт SPI микросхемой флэш-памяти (NAND). Процессор GOLDELOX-GFX2 поддерживает работу только с одним семейством микросхем флэш-памяти – M25Pxx объёмом от 512 Кбит до 32 Мбит. Для корректной работы функций необходима предварительная инициализация микросхемы памяти с помощью функции spi_Init(…).

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

Группа функций поддержки UART. Указанные функции могут использоваться для поддержки обмена через UART между модулем и внешними устройствами. По умолчанию формат обмена – N-8-1, скорость – 115 200 бит/с. Логика UART обеспечивает расширенные аппаратные возможности при приёме данных от внешних устройств, что позволяет минимизировать потери. Очевидно, таким способом производитель пытается компенсировать отсутствие в системе поддержки прерываний. Функции поддержки UART перечислены в таблице 7 (см. дополнительные материалы к статье на сайте журнала www.soel.ru).

Остановимся подробнее на функции com_Init(…), с помощью которой может быть задано несколько режимов функционирования UART.

В режиме без спецификатора (специ­фикатор равен 0x00) для порта UART функционирует простой кольцевой буфер – круговая очередь. Принимаемые символы автоматически помещаются в буфер – в «голову» этой очереди. Символы могут быть удалены из буфера (из «хвоста» очереди) путём использования функции serin(). Если «хвост» совпадает с «головой», то есть в очереди нет ни одного символа, функция serin() возвратит значение (–1). Для определения текущего количества символов между «хвостом» и «головой» может быть использована функция com_Count(). Если буфер переполняется поступающими извне символами, то есть «голова» очереди догоняет её «хвост», то это вызывает автоматическую установку внутреннего флага COM_FULL, который может быть прочитан программой с помощью функции com_Full(). Все символы, поступающие извне после установки флага COM_FULL, будут отбрасываться логикой UART, однако символы, уже находящиеся в буфере, останутся в сохранности и могут быть в любой момент прочитаны. Указанный механизм предоставляет пользователю удобный способ приёма пакетов данных фиксированного размера. После установки флага COM_FULL содержимое буфера может быть прочитано как массив без использования функции serin(). Для возобновления работы UART необходимо заново инициализировать буфер функцией com_Init(…) или сбросить его функцией com_Reset(). Вызов функции com_Init(…) или com_Reset() приведёт к автоматическому сбросу флага COM_FULL.

Если при заполнении буфера внешними данными произойдут какие-либо низкоуровневые ошибки, автоматически установится флаг COM_ERROR, который может быть прочитан с помощью функции com_Error().

Если в вызванной функции com_Init(…) задан некоторый символ специ­фикатора (спецификатор не равен 0x00), логика UART будет игнорировать все поступающие извне символы, пока не поступит символ, совпадающий со спецификатором. В этот момент будет инициирован старт записи в буфер последующих поступающих данных. При этом сам символ спецификатора в буфер не попадёт. После старта записи в буфер логика UART будет работать аналогично предыдущему режиму. Такой механизм позволяет реализовать удобный способ приёма пакетов данных фиксированного размера с заданным заголовком.

Рассмотрим режим с переменной длиной пакета. Если в функции com_Init(…) параметр bufsize задан равным нулю, то первый принятый байт (или второй байт, если используется специ­фикатор) будет задавать количество символов, которое должен принять UART, прежде чем автоматически установится флаг COM_FULL. Указанный механизм позволяет внешнему устройству отправлять пакеты переменной длины, содержащие информацию об их длине в самом теле пакета. Количество байт, которое будет содержаться в пакете, может быть прочитано путём вызова функции com_PacketSize(), возвращающей размер пакета. Заметим, что корректный результат эта функция возвратит только после начала приёма пакета. Проверить, начался ли приём пакета, можно с помощью функции com_Count(), которая при начавшемся приёме возвратит ненулевой результат. При заполнении поступающими данными приёмного буфера в каждом его элементе (16-разрядном слове) первым заполняется младший байт.

Группа функций поддержки звука и воспроизведения приведена в таблице 8 (см. дополнительные материалы к статье на сайте журнала www.soel.ru). Функция tune_Play(…) позволяет использовать возможности языка текстового представления тональных сигналов вызова (Ring Tone Text Transfer Language, RTTTL) [8, 9], разработанного фирмой Nokia для представления мелодий-рингтонов сотового телефона. В Интернете доступно множество мелодий в формате RTTTL, большинство из которых после незначительной модификации могут быть воспроизведены графическим модулем с помощью функции tune_Play(…). Кроме того, пользователь может самостоятельно синтезировать широкий спектр звуковых эффектов, используя возможности формата RTTTL, реализованные в функциях 4DGL.

Формат RTTTL представляет собой текстовую строку, описывающую звучание и разделённую на три части: имя (название мелодии), параметры по умолчанию и последовательность нот. Три параметра по умолчанию (тактовая длительность, исходная октава, музыкальный ритм) задаются через запятую в виде выражений «параметр=значение». Последовательность нот записывается с помощью соответствующих условных обозначений. Например, начало Пятой симфонии Бетховена выглядит в формате RTTTL так: 5thSymphony: d=16, o=S, b=100: g, g, g, 4d#, 4p, f, f, f, 4d, 4p, g, g, g, d#, g#, g#, g#, g, d#6, d#6, d#6, 4c6, 8p, g, g, g, d, g#, g#, g#, g, f6, f6, f6, 4d6, 8p, g6, g6, f6, 4d#6, 8p, g6, g6, f6, 4d#6.

Реализация формата RTTTL в функциях 4DGL имеет следующие особенности. Параметр значения музыкального ритма b=xxx в языке 4DGL измеряется не в единицах «удар в минуту» (bpm), как в формате RTTTL, а в единицах «мс на интервал 1/64». Например, значение 120 bpm соответствует двум ударам в секунду или 128 интервалам 1/64 в секунду, что составляет 7,8125 мс на интервал 1/64. И наоборот, заданное по умолчанию в языке 4DGL значение ритма b=16 (мс на интервал 1/64) составляет 62,5 bpm.

Параметр «последовательность нот», передаваемый в функцию tune_Play(…), должен быть строкой данных. Если строка передаётся в функцию как указатель на блок данных #DATA, то в теле этого блока она должна заканчиваться нулём (0x00). Если строка передаётся в функцию непосредственно, то ноль автоматически добавляется к ней компилятором.

В 4DGL-реализации строки формата RTTTL нет раздела «имя». Также 4DGL-реализация не требует в строке пробелов или двоеточий.

Параметр по умолчанию «d» (тактовая длительность) в 4DGL может иметь одно из значений 1, 2, 4, 8, 16, 32 или 64 (1 – целая нота, 64 – 1/64 ноты).

Параметр по умолчанию «o» (октава) в 4DGL может иметь значение 4, 5, 6 или 7.

Если перечисленные параметры в записи рингтона не заданы явно, то по умолчанию принимается: d=4, o=6, b=16 (62,5 bpm).

Помимо группы стандартных параметров RTTTL в языке 4DGL поддерживаются следующие дополнительные параметры:

  • r – заданная точка повторения и счёта (минимальное значение – 2, максимальное – 255, значение по умолчанию – постоянно);
  • p – заданное значение портаменто (минимальное значение – 1, максимальное – 14, значение по умолчанию – 4);
  • a – заданное значение шага арпеджирования (минимальное значение – 1, максимальное – 16, значение по умолчанию – 1).

Значения дополнительных параметров задаются в языке 4DGL в таком же формате, как и значения основных, а также с помощью соответствующих дополнительных команд:

  • R – выполнить количество повторений, заданное значением парамет­ра r (если значение r не было задано явно, строка будет повторяться постоянно);
  • { – включить портаменто;
  • } – выключить портаменто (по умолчанию портаменто включено);
  • + – увеличить шаг арпеджирования;
  • - – уменьшить шаг арпеджирования.

Группа функций общего назначения реализует возможности установки задержек и поиска. Функции общего назначения перечислены в таблице 9 (см. дополнительные материалы к статье на сайте журнала www.soel.ru).

В заключение заметим, что на основе приведённых в этой части статьи сведений об архитектуре и характеристиках графических процессоров модулей 4D Systems и описания внут­ренних функций языка 4DGL во второй части будет описан процесс разработки автономно работающего устройства на примере дисплейного модуля µOLED-128-G2 с процессором GOLDELOX. 

Автор выражает благодарность за помощь в написании этой статьи Сергею Долгушину (Distribution Department Electronic Components EFO Ltd). 

Литература

  1. 4D SYSTEMS GOLDELOX Processor Embedded Graphics Processor. www.4dsys­tems.com.au/productpages/GOLDELOX/downloads/GOLDELOX_datasheet_R_1_0.pdf.
  2. 4D SYSTEMS PICASO Processor Embedded Graphics Processor. www.4dsystems.com.au/productpages/PICASO/downloads/PICASO_datasheet_R_1_2.pdf.
  3. 4D SYSTEMS DIABLO16 Processor Embedded Graphics Processor. www.4dsystems.com.au/productpages/DIABLO16/downloads/DIABLO16_datasheet_R_1_8.pdf.
  4. www.4dsystems.com.au/product/4D_Workshop_4_IDE.
  5. 4DGL Programmers Reference Manual and Language Specifications©. 2009. 4D Labs.
  6. 4D SYSTEMSGOLDELOX 4DGL INTERNAL FUNCTIONS.
  7. 4D SYSTEMSGOLDELOXSERIAL ENVIRONMENT COMMAND SET. PART OF THE WORKSHOP 4 IDE.
  8. www.activexperts.com/xmstoolkit/sms/rtttl.
  9. www.en.wikipedia.org/wiki/Ring_Tone_Transfer_Language.

Скачать

20174080.zip / ZIP, 225 КБ

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

01.04.2017 548 0
Комментарии
Рекомендуем
Тестер микросхем MAX485

Тестер микросхем MAX485

Микросхемы серии MAX485 – это один из основных элементов перехода от линии связи к оборудованию обработки данных. Для проверки работоспособности MAX485 предлагаемый тестер имитирует все режимы работы передачи данных и контролирует правильность этого исполнения. Тестер работает в двух режимах: с персональным компьютером выводит данные результата проверки на экран или автономно с сигнализацией – на светодиод, который индицирует, прошла проверка или нет у тестируемой микросхемы. Линии связи подвержены внешним электромагнитным воздействиям, что влияет на микросхемы сопряжения: меняет их характеристики и затрудняет поиск неисправности. Предлагаемый тестер позволяет провести проверку используемых или вновь устанавливаемых микросхем, что ускоряет время ввода в эксплуатацию всей системы связи.
22.01.2026 СЭ №1/2026 103 0

  Подписывайтесь на наш канал в Telegram и читайте новости раньше всех! Подписаться