Найти в Дзене
Владимир Радченко

DWIN. Насттройка среды KEIL. Первый код на ядре С51, работа с GPIO и ADC.

Введение Любой UART дисплей DWIN включает в себя встроенный микроконтроллер. По умолчанию в контроллер записана программа отвечающая за обмен данными по протоколу DWIN. Однако данный микроконтроллер доступен для программирования и позволяет значительно расширить функционал заложенный в дисплей, а в некоторых случаях и полностью отказаться от использования внешнего контроллера. В данной статье рассмотрим настройку среды и простейшие операции такие как считывание и запись переменных, работу портов ввода вывода и работу АЦП. Описание дисплея Для реализации проекта будет использован дисплей DMG48480F050_01WTCZ01. Обладающий IPS матрицей с разрешением 480х480, емкостной сенсорной панелью. Дисплей имеет разъем 50PIN, на котором размещены контакты питания (3.6-5.5В), порты ввода вывода процессора T5L0, порты ADC, PWM, UART, CAN и контакты для uSD карты. Для работы также понадобится плата HDL662S. На данной плате размещен разъем uSD карты, разъем USB и контакты выведенные с 50 контактного шле
Оглавление

Введение

Любой UART дисплей DWIN включает в себя встроенный микроконтроллер. По умолчанию в контроллер записана программа отвечающая за обмен данными по протоколу DWIN. Однако данный микроконтроллер доступен для программирования и позволяет значительно расширить функционал заложенный в дисплей, а в некоторых случаях и полностью отказаться от использования внешнего контроллера. В данной статье рассмотрим настройку среды и простейшие операции такие как считывание и запись переменных, работу портов ввода вывода и работу АЦП.

Описание дисплея

Для реализации проекта будет использован дисплей DMG48480F050_01WTCZ01. Обладающий IPS матрицей с разрешением 480х480, емкостной сенсорной панелью. Дисплей имеет разъем 50PIN, на котором размещены контакты питания (3.6-5.5В), порты ввода вывода процессора T5L0, порты ADC, PWM, UART, CAN и контакты для uSD карты.

Для работы также понадобится плата HDL662S. На данной плате размещен разъем uSD карты, разъем USB и контакты выведенные с 50 контактного шлейфа, которые помогут нам проверить работоспособность написанного кода.

HDL662S
HDL662S

Создание GUI

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

В DRAW.IO создаётся фоновое изображение и необходимые иконки.

Фоновое изображение
Фоновое изображение
Итоговый вид отображаемый на экране с включенными иконками
Итоговый вид отображаемый на экране с включенными иконками

На полученном изображении, согласно указанным адресам, размещаем соответствующие элементы. Отображение чисел для счетчика и АЦП, отображение иконок для портов ввода вывода. Размещает элемент тача "Incremental Adjustment" для изменения состояния кнопки включения и выключения светодиода.

Подключение

К плате HDL662S были припаяны штыревые разъемы 2,54мм для подключения внешних элементов:
светодиода;
переменного резистора;
кнопки.

-6

Настройка среды KEIL

Видеоинструкция есть на YouTube.

1. Скачивается и устанавливается среда Keil C51.

2. Устанавливает драйвер KEIL AGDI T5L_Driver

3. Из архива SFR H копируем файлы T5L_OS_8051.INC и T5LOS8051.h после чего перемещаем их в папку *\Keil_v5\C51\INC\DWIN.

-7

4. Создаём шаблон проекта, назовем папку "template", добавим в неё 5 папок:
“USER”
“OBJ”
“HANDWARE”
“GUI_APP”
“FUNC_HANDLER”

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

-8

Размещаем проект с названием "template" в ранее созданной папке "USER"

-9

Выбираем DWIN Device и контроллер T5

-10

Удаляем все файлы в папке USER кроме template

-11

Создаём файлы main.c и main.h

-12

Из папки *\dwin-T5L-master\T5L51 копируем файл STARTUP_M5.A51

-13

Из папки *\dwin-T5L-master T5LOS8051.h

Из архива Sys File копируем файлы

-14

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

-15

В вкладке DEVICE устанавливаем галочку как показано на изображении ниже

-16

Вкладка Target изменяем поля Memmory Model, и устанавливаем начало и размер RAM.

-17

Вкладка Output изменяем путь и название

-18

Вкладка Listing

-19

Вкладка LX51 Misc прописываем "REMOVEUNUSED" в поле Misc controls

-20

Вкладка C51 изменяем уровень оптимизации

-21

Второй вариант настройки проекта, использовать уже настроенный проект, например проект из данной статьи, который будет размещен на github.

Работа в KEIL

Файл по работе с ASIC.

Необходимо настроить три блока:
1) Порты ввода вывода
2) АЦП
3) Таймер

После чего реализовать функции обработки и загрузить прошивку на дисплей.

Создадим пути хранения для файлов, в них будем сохранять файлы с соответствующим названием.
ADC.c и ADC.h
GPIO.c и GPIO.h
TIMER.c и TIMERh

-22

Порты ввода вывода

Создадим два файла GPIO.c и GPIO.h с следующим содержимым:

GPIO.c

-23

GPIO.h

-24

Из названия функций понятно, что SetPinIn устанавливает ножку на вход, а SetPinOut на выход. Этих функций достаточно для реализуемого функционала в рамках данной статьи.

АЦП

Данные полученные с АЦП записываются в оперативную память по адресу 0x0032, все 8 каналов записаны последовательно. В статье используется ADC1.

-25

Создаём два файла для АЦП, ADC.c и ADC.h.

ADC.c

-26

ADC.c

-27

В файлах содержатся функции считывания значений с заданного канала, и функция считывания с усреднением значений.

Таймер

Аналогично с пунктами выше создаем файлы TIMER.c и TIMER.h

TIMER.h

-28

TIMER.c

-29

В функциях реализована инициализация таймера на частоту 1кГц с включенным прерыванием. В прерываниях счетчик на 1000 значений для отсчитывания 1 секунды. Счетчик выставляет флаг отсчёта, который будет использован в main.c для переключения состояния светодиода.
StartTimer задаёт число до которого будет считать счетчик.
GetTimeOutFlag - возвращает состояние флага таймера.
ClearTimerFlag - очищает значения флага.

Основной цикл

Подключаем библиотеки, прописываем адреса переменных заложенных в дизайне DGUS, инициализируем GPIO и остальные компоненты.

-30

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

GpioProcess
GpioProcess

Процесс работы с АЦП, считываем усредненное за 100 измерений значение и записываем в память для отображения в заданной переменной.

AdcProcess
AdcProcess

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

CounterProcess
CounterProcess

Прописываем инициализацию в функцию main и добавляем все процессы.

-34

Собираем проект, в папке *\Project\C51\OBJ находим файл T5L51.bin и с файлами из папки проекта DGUS DWIN_SET загружаем на uSD карту и прошиваем дисплей.

ВАЖНО! бинарный файл прошивки в COF дисплей можно загружать только с uSD карты.

Демонстрация работы полученного кода

Заключение

В данной статье разобрана настройка среды Keil для возможности записи кода напрямую в ядро C51. Реализована простейшая работа с портами ввода вывода, считыванием и записью значений в сформированный в DGUS интерфейс, реализована работа АЦП и таймера.

В дальнейшем напишем код восстанавливающий работу с командами 82 и 83 на чтение и запись переменных через UART.

Ссылка на GitHub: https://github.com/VB-Radchenko/Lesson_C51_Hello_World

Компания DWIN предоставляет бесплатные образцы для юридических лиц. Для получения образцов, оптовых закупок, персональных скидок, технической поддержки и общим вопросам обращайтесь:
Email:
rvb@dwin-global.ru
VK:
https://vk.com/radchenko_vb
Telegram:
https://t.me/Radchenko_VB
Сообщество VK
https://vk.com/public208909284
Скидочный купон на 5$ для официального магазина
AliExpress - DWVLWEN