Тестируем дисплей 2.4” с сенсорным дисплеем с ридером microSD карт
Тестируем дисплей 2.4” с сенсорным дисплеем с ридером microSD карт, выполненный в виде шилда для Arduino Uno или Arduino Mega.
Для начала проверим работу самого экрана, а точнее отображение на нем текста, и различных геометрических фигур, поворот дисплея и т.д.
Устанавливаем LCD шилд на плату, скачиваем библиотеку и загружаем пример «SPFD5408-graphictest»
Видео теста графики
Тест сенсорной панели:
Теперь проверим работу сенсорной панели. Первое что необходимо сделать это произвести калибровку. За работу сенсорной панели отвечают четыре пина Ардуино: А2, А3, 8, 9. Загружаем скетч калибровки из библиотеки: «carduino_spfd5408_calibrate».
Стилусом нажимаем поочередно точки на экране:
В результате мы получили значения для осей X и Y. Запишем эти данные, они нам пригодятся. Заодно проверили все ли правильно работает.
Теперь можем загрузить отдельно скетч для рисования – «carduino_spfd5408_tftpaint». Перед загрузкой скетча в плату укажем наши результаты калибровки.
// Calibrate values УКАЖИТЕ ВАШИ ЗНАЧЕНИЯ ПОСЛЕ КАЛИБРОВКИ
#define TS_MINX 204
#define TS_MINY 841
#define TS_MAXX 979
#define TS_MAXY 70
Теперь заливаем скетч в Ардуино. Рисуем разными цветами.
Тест вывода полноцветной BMP картинки.
Так как модуль оснащен ридером microSD карты, то мы можем загрузить на карту нужные нам изображения в проектах.
Сначала рассмотрим работу модуля microSD с платой Arduino Uno. Копируем файлы из папки bitmaps на microSD карту и карту устанавливаем в слот шилда. Загружаем скетч из примеров «carduino_spfd5408_tftbmp». Проверяем.
С Arduino Mega все несколько сложнее. Дело в том, что ридер SD карт использует шину SPI, а у Меги пины SPI отличаются от UNO. У Меги для SPI выделены пины 50, 51, 52 и 53. Для работы с microSD мы можем использовать только программный SPI. Для этого нам нужна библиотека SD. Дело в том, что в разных версиях компилятора находятся разные версии библиотеки. Заставить работать корректно удалось только с библиотекой из версии 1.0.5 Arduino IDE. Эту библиотеку можно скачать тут.
Скачиваем библиотеку и копируем в папку libraries IDE. Далее редактируем файл Sd2Card.h который находится тут: ArduinolibrariesSDutility. В этом файле указываем 1 для #define MEGA_SOFT_SPI.
Теперь загружаем «carduino_spfd5408_tftbmp» в Arduino Mega 2560
Как подключить модуль TFT LCD от mcufriend.com
Давным давно покупал я через eBay кучу компонентов для Arduino, в числе которых был TFT LCD дисплей 2,4″ от компании mcufriend.com.
Для работы необходимы несколько библиотек. Первая — это библиотека от Adafruit для обработки графики, подходит не только для дисплеев от Adafruit, но и для многих других. Скачать последнюю версию можно отсюда: https://github.com/adafruit/Adafruit-GFX-Library
Библиотека для самого экрана: https://github.com/adafruit/TFTLCD-Library
И библиотека для обработки нажатий: https://github.com/adafruit/Touch-Screen-Library
Подключаем все эти библиотеки в Arduino IDE, загружаем образец graphicstest из TFTLCD-Library и видим белый экран.
Экран, который достался мне, построен на базе чипсета S6D0154, а библиотека Adafruit его не распознает. Нашел библиотеку, которая поддерживает мой чипсет и еще несколько (ILI9341, ILI9327 b ILI9488). Скачать можно отсюда: https://github.com/samuraijap/TFTLCD-Library
Ей заменяем одноименную библиотеку от Adafruit.
По умолчанию библиотека для экранов 2.8″ и на более маленьких экранах пропадает часть изображения. Если размер экрана 2.4″, как и у меня, то в файле TFTLCD-Library/Adafruit_TFTLCD.cpp надо закомментировать строчки:
Также, может быть интересна следующая библиотека для чипсета SPFD5408:
https://github.com/JoaoLopesF/SPFD5408
По сути, это библиотека от Adafruit, доработанная для SPFD5408. Плюс в ней присутствует возможность калибровки тач-панели.
4 комментария
Мне вот тоже такой экранчик китайцы прислали, никак не могу его оживить, белый экран. Несколько библиотек перепробовал, не получается.
Запустите graphicstest из библиотеки Adafruit или этой https://github.com/samuraijap/TFTLCD-Library и посмотрите через монитор последовательного порта какой чипсет определяется.
мне помогло,огромное спасибо автору!
Спасибо валялся год не меньше экран сейчас попробовал оживить по вашей статье все пашет
TFT-shield (2.4) & STM32L DISCOVERY
Еще один LCD в моей "копилке".Предназначен для Arduino (соответствующее расположение пинов),причем качество изготовления шилда ,мягко говоря — неочень. Хотя на мой взгляд,за те деньги ,за которые я купил "девайс",он является хорошей альтернативой всяким цветным дисплеям от мобильных телефонов (в которых надо паять шлейфа) + немаловажная деталь слот для SD-карты.Купил чисто поиграться — подключить его к STM32.Подключается шилд по 8-ми битной шине. Продавец утверждал о наличии встроеного контролера st7781.Но на практике оказался ILI9325.
Вообще с контролером LCD поначалу были полные непонятки,"китай" знаете ли. Пока разобрался ,пришлось оснавательно проштудировать инет.Сначала работал с платой STM32F4 Discovery ."Перелопатил" немало примеров,которые удалось вытянуть из сети.Остановился на варианте http://pastebin.com/wbn9Eqpx .Его основным достоинством ,на мой взгляд,является простота (без всяких там FSMC и ОС) — простой "ногодрыг".
Также подключал дисплей к плате STM32F4 Discovery через FSMC,без ОС (https://github.com/stm32f4/library/tree/master/ILI9325).Код работает.
Дабы не мучить F4 Discovery,своими эксперементами — решил перейти на платформу STM32L Discovery .На плате установлен микроконтролер STM32L152RBT6,в котором отсутсвует интерфейс FSMC.Хотя ,к слову, он имеется на более "мощных" чипах L-серии,например плата STM32L152-EVAL (Evaluation board for STM32L1 series — with STM32L152VB MCU).Поэтому в качестве основы использовал код http://pastebin.com/wbn9Eqpx.
Первое ,что я зделал — это разогнал STM32L Discovery до максимальных 32 МГц,от встроеного генератора (на плате не установлен кварцевый резонатор),следуя рекомендациям отсюда http://chipspace.ru/stm32l-max-sysclk/.Скорость работы LCD зависит от скорости МК.Это особенно заметно после перехода с STM32F4 Discovery (168 МГц) на STM32L Discovery (32 Мгц) .
Сам код с источника http://pastebin.com/wbn9Eqpx ,я разделил на два файла TFT_lcd.с и TFT_lcd.h ,также в библиотеке имеется файл шрифта font.h .
Кроме того код позволяет посмотреть ,на каком контролере работает LCD.В функции init файла TFT_lcd.с ,за это отвечают строки
if(!IC_CODE)
<
while(!IC_CODE)
<
IC_CODE = readRegister(0x0); //WAIT UNTIL KNOWN LCD
>
>
Device Code | Kontroler | Wyświetlacz |
0x9320 | ILI9320 | |
0x9325 | ILI9325 | |
0x9328 | ILI9328 | |
0x9331 | ILI9331 | |
0x8999 | SSD1298 | |
0x8989 | SSD1289 | ITDB02-3.2S, HY32D |
0x7783 | ST7781 | |
0x4531 | LGDP4531 | |
0x5408 | SPFD5408B | |
0x1505 0x0505 | R61505U | |
0x0046 | HX8346A | |
0x0047 | HX8347D | |
0x0047 | HX8347A | |
0x4535 | LGDP4535 | |
0x9919 | SSD2119 | |
0x0052 | HX8352-A | ITDB02-3.2WD |
0x1121 | S1D19122 | ITDB02-2.4E |
Далее, еще одни "грабли" на которые я попал .Пин RESET LCD должен быть поключен к пину NRST платы Discovery.
Кроме того, пины LCD_PINS (D0. D8) подключены к одному порту.Так-же к одному порту поддключены пины LCD_CONT .В моем случае LCD_PINS (D0. D8) — порт С , LCD_CONT (CS ,RS , WR ,RD) — порт В .Пины прописываются в файле TFT_lcd.h :
#define LCD_IOP GPIOB //LCD_PINS
#define LCD_CTP GPIOC //LCD_CONT
#define LCD_PINS (GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15)
#define LCD_CONT (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3)
#define CS GPIO_Pin_0
#define RS GPIO_Pin_1
#define WR GPIO_Pin_2
#define RD GPIO_Pin_3
Схема подключения :
Саму библиотеку пришлось немного переделать.Дело в том ,что функция drawString ,которая отвечает за вывод строки пригодна разве,что для разового вывода символов.На практике ,при выводе , например постоянно меняющейся переменной, один символ накладывается на другой.Для себя решение нашел в том,что прежде чем вывести символ, место под него закрашивается под цвет фона .В программе появились две новые функции , которые я назвал drawChars и drawStrings .Теперь кроме цвета сивола, нужно указать цвет фона ,например:
drawStrings("Hello World",10,10, 2, WHITE, BLACK);
где WHITE — цвет символа ;
BLACK — цвет фона ;
Это хотя полностью и не решает проблему (заметно некоторое мерцание), но все же позволяет работать с переменными.Далее предлагаю сообществу тестовый проект, где кроме стандартных функций вывода символов и геометрических фигур, организован вывод на экран дисплея часов реального времени (встроеных в STM32L).
PS. Вообще-то библиотека нуждается в некоторой доработке,заинтересованых милости прошу на форум — http://radiomanoff.at.ua/forum/4-1-1.
WARNING . Осторожно. Попался точно такой-же "шилд" , но с контролером ILI9341.
О его подключении к STM32L Discovery во второй части — tft_shield_2_4_stm32l_discovery_part_2 .
STM32 Nucleo. Подключаем TFT LCD на базе чипа ILI9341
На Хабре уже есть две публикации о платформе STM32 Nucleo и разработке в среде mbed.org. Это «обзор платформы» и «быстрый старт». Я же в данной публикации расскажу, как быстро подключить недорогой модуль TFT LCD на базе чипа ILI9341. Статья будет полезна и любителям Arduino, желающих перейти на более современные и мощные микроконтроллеры, используя уже накопленные знания.
Ознакомится с ценами на дисплей вы можете, например, на Ebay.
Я буду использовать плату NUCLEO-F401RE, вы же можете использовать любую из данной линейки.
Итак, вы уже ознакомились с двумя предыдущими статьями, поэтому сразу приступим к делу.
Открываем наш on-line compiler. Создаём новую программу.
Назовём её, например, ili9341_display_test.
Находим и импортируем.
Проверяем, что импортируется в наш проект.
Таким же образом импортируем графическую библиотеку для нашего дисплея.
В поиске по запросу «ili9341» находим библиотеку от Peter Drescher.
Ещё нам понадобятся шрифты, импортируем так же, по запросу в поиске «TFT_fonts».
Тем, кто хочет использовать любой другой шрифт или разработать свой, есть в помощь программа GLCD font creator. Программа бесплатна, но для корректного импорта приходится шаманить, а это уже другая тема.
Теперь создадим главный файл, в котором будет наша программа.
Назовём его main.cpp.
Теперь у нас есть проект с двумя библиотеками, набором шрифтов и главным файлом программы.
Щелкаем мышью по main.cpp и пишем вставляем наш код.
Как же подключить дисплей? Да очень просто!
Заходим на страничку нашей платы (у меня это ST-Nucleo-F401RE).
Находим картинку Arduino-compatible Headers.
Это распиновка нашей платы с так знакомыми всем Arduino-любителям названиями пинов.
Находим контакты интерфейса SPI.
SCK — D13
MISO — D12
MOSI — D11
Ещё нам понадобятся контакты CS, reset, DC, я использовал соответственно D8, D9, D10.
В нашей программе это указывается в виде строки:
Подключаем их к соответствующим контактам на нашем дисплее.
Так же дисплей необходимо подключить к питанию.
Я использовал VCC — +5v (на плате дисплея стоит стабилизатор на 3.3 вольта, если его замкнуть предусмотренной перемычкой, то можно использовать питание 3.3 вольта).
GND — GND
LED — подсветка, рассчитана на 3.3 вольта, поэтому подключаем к контакту +3.3v.
Логика дисплея работает от 3.3 вольт, как и наш микроконтроллер, поэтому использовать конвертер логических уровней, как в случае с arduino uno, нам не потребуется.
Теперь можно скомпилировать нашу программу, для этого в онлайн компиляторе жмём кнопку Compile и сохраняем полученный файл прямо на нашу плату (при подключенной плате у нас появляется съёмный носитель «NUCLEO»).
Если всё сделано верно, то увидим на экране надпись «Hello habrahabr.ru».
Полезные ссылки
Здесь вы найдёте примеры кода и использования, это официальная страница библиотеки SPI_TFT_ILI9341.
Здесь описаны функции работы с данной библиотекой, такие как построение линий, квадратов и прочего.
Здесь много полезной информации по mbed.