Эксперимент 46. Подключаем TFT дисплей

В комплектацию конструктора в версии MAXI входит TFT дисплей. Thin Film Transistor (TFT) – это система производства жидкокристаллических дисплеев, в основе которой лежит активная матрица из тонкопленочных транзисторов. При подаче напряжения на такую матрицу, кристаллы поворачиваются друг к другу, что приводит к образованию черного цвета. Отключение электричества дает противоположный результат — кристаллы образовывают белый цвет. Изменения подаваемого напряжения позволяет формировать любой цвет на каждом отдельно взятом пикселе. Дисплей имеет сложное многослойное строение и чтобы понять его принцип действия потребуются некоторые знания физики, поэтому здесь мы не будем рассказывать это.

Управление матрицей кристаллов берет на себя встроенный в дисплей контроллер. А мы будем управлять этим контроллером. Для этого нам потребуется специальная библиотека. Кроме того нам потребуется библиотека со шрифтом, чтобы отображать текст.

Как и в прошлый раз, в архиве находятся два варианта файлов — в виде исходный текстов (в папке py) и предварительно откомпилированные (в папке mpy). Мы рекомендуем загружать в микроконтроллер откомпилированные версии файлов, а файлы в исходных кодах использовать только для самостоятельного изучения.

Для обмена данными с дисплеем используется шина SPI. SPI (англ. Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, предназначенный для обеспечения простого и недорогого высокоскоростного сопряжения микроконтроллеров и периферии. SPI также иногда называют четырёхпроводным (англ. four-wire) интерфейсом.

Для работы с SPI требуется специальная библиотека, но она уже встроена, поэтому дополнительно загружать ее не потребуется.

В разных партиях конструктора версии MAXI может лежать дисплей одного из двух видов − либо с 8 выводами, либо с 11. В дальнейшем мы будем приводить монтажную схему для обоих дисплеев, но вам необходимо руководствоваться схемой для своего типа дисплея.

Схема эксперимента

Рисунок 1. Монтажная схема эксперимента для дисплея с 8 выводами

Рисунок 2. Монтажная схема эксперимента для дисплея с 11 выводами

Программный код эксперимента

Напишем приветственную надпись на дисплее.

Exp46.py
  1. from machine import Pin, SPI
  2. from tft import TFT_GREEN
  3. import font
  4. _init()
  5.  
  6. dc = Pin(4, Pin.OUT)
  7. cs = Pin(2, Pin.OUT)
  8. rst = Pin(5, Pin.OUT)
  9.  
  10. spi = SPI(1, baudrate=40000000, polarity=0, phase=0)
  11.  
  12. tft = TFT_GREEN(128, 160, spi, dc, cs, rst, rotate=0)
  13.  
  14. tft.initr()
  15.  
  16. tft.clear(tft.rgbcolor(0,0, 0))
  17. tft.text(0,0,"Hello, World!", font.terminalfont, tft.rgbcolor(255, 255, 255), 1)

Подключаем библиотеки для работы в портами ввода-вывода, шиной SPI, дисплеем и шрифт.

  1. from machine import Pin, SPI
  2. from tft import TFT_GREEN
  3. import font

TFT дисплей не имеет встроенного знакогенератора, он ничего не знает о буквах и о том как они выглядят. Дисплей — это просто большой массив точек, которые могут светиться различным цветом. Чтобы иметь возможность выводить на дисплей текст, нужно описать какие точки светятся, а какие нет в каждом из символов. Именно эти данные и находятся в файле шрифта font.

Настраиваем выводы, используемые для дисплея

  1. dc = Pin(4, Pin.OUT)
  2. cs = Pin(2, Pin.OUT)
  3. rst = Pin(5, Pin.OUT)

Настраиваем шину SPI. Объявляем скорость шины и ее параметры.

  1. spi = SPI(1, baudrate=40000000, polarity=0, phase=0)

Создаем объект дисплея и задаем его параметры, такие как ширина и высота дисплея в пикселях и какие выводы микроконтроллера используются для управления.

  1. tft = TFT_GREEN(128, 160, spi, dc, cs, rst, rotate=0)

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

  1. tft.initr()

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

  1. tft.clear(tft.rgbcolor(0, 0, 0))
  2. tft.text(0,0,"Hello, World!", font.terminalfont, tft.rgbcolor(255, 255, 255), 1)

Как мы уже знаем из эксперимента с RGB светодиодом любой цвет можно отобразить с помощью трех составляющих: красного, зеленого и синего. Для задания цвета мы используем tft.rgbcolor(0, 0, 0). В качестве параметров передаем соответственно красный, зеленый, синий. Если все нули, никакой цвет не светится — это черный.

Для вывода текста используем метод tft.text. Параметры:

  • координата X
  • координата Y
  • строка для отображения
  • шрифт
  • цвет шрифта
  • размер шрифты

Координата 0,0 находится в верхнем левом углу. Максимальная — в нижнем правом. Рисунок 3. Отсчет координат на дисплее

Дополнительное задание

  1. Выведи другой текст по середине дисплея
  2. Выведи несколько строк разными цветами друг под другом