Ініціалізація tft дисплея на прикладі ssd1289 для avr

Днями прийшов TFT дисплей, замовлений на али, давайте розглянемо його основні характеристики.

Ініціалізація tft дисплея на прикладі ssd1289 для avr


Основні характеристики дисплея:
  • 3,2 дюйма, з роздільною здатністю 320х240
  • драйвер TFT дисплея - SSD1289, драйвера сенсорної панелі - XPT2046
  • управління TFT по протоколу 6800, 8080, підтримка FSMC
  • інтерфейс управління сенсорною панеллю SPI
  • напруга живлення 5V або 3.3V, завдяки вбудованому понижувального стабілізатора
  • можливість управління підсвічуванням за допомогою ШІМ
  • вбудований роз'єм для SD card
  • вільне місце для пайки FLASH пам'яті
  • підтримує горизонтальну і вертикальну орієнтацію, можливість відображення кількох вікон
  • глибина кольору: 18біт (262 144 комбінацій)

В якості керуючого мікроконтролера візьмемо Atmega16. Готові приклади ініціалізації шукати не став, вирішив розібратися як він працює і написати свою. Для початку розберемося з інтерфейсом підключення. Спілкування з контролером SSD1289 може відбуватися по 1 з 4 інтерфейсів: i8080, M6800, RGB, SPI, але щоб ми не мучилися, не знаючи який вибрати, виробник модуля допоміг нам. Він залишив на вибір два 16 бітних інтерфейсу: интеловский i8080 і мотороловскій M6800. i8080 і M6800 - паралельні інтерфейси, які можуть працювати в 18/16/8-розрядному режимі. Вибір припав на i8080, хоча судячи з даташіту він відрізняється від M6800 тільки тим, що у i8080 сигнали запису (WR) і читання (RD) роздільні. а у M6800 же сигнал керування напрямком RD / WR один, але додатково до нього є сигнал дозволу E.
Тепер давайте подивимося на терморегулятори модуля.

Ініціалізація tft дисплея на прикладі ssd1289 для avr


Висновки харчування.
VCC - напруга живлення модуля. Всередині модуля знаходиться стабілізатор напруги на 3.3V, від якого живляться графічний контролер (SSD1289), контролер резистивного сенсорного екрану (XPT2046) і SD карта. Наявність стабілізатора дозволяє подавати на модуль харчування рівне 5V. Але обмін інформацією між мікроконтролером і модулем повинен проходити за допомогою 3.3V. У мене в схемі модуль і мікроконтролер харчуються одним напругою - 3.3V, що забезпечує нормальний обмін даннимі.Прі такій напрузі харчування мікроконтролер нормально працює на частоті 8MHz. Так, до речі, я подавав 5 вольт на мікроконтролер і модуль, мені пощастило нічого не згоріло і все працювало, але так робити не варто.
GND - загальний висновок (земля).
LED-A - анод підсвічування TFT дисплея, необхідно підключати через струмообмежуючі резистор, при харчуванні 3,3V підключив через 200 Оhm.

Висновки управління графічним контролером.
[DB15, DB0] (Data Bus) - 16-розрядна шина даних / команд.
RS (Register Select) -пін за допомогою якого можна перемикатися між регістрами даних (GRAM) і регістрами команд (Instruction Registers), в даташіте він називається D / C.
WR (Write) - стрибає записи даних / команд.
RD (Read) - стрибає читання даних / параметрів.
REST (Reset) - скидання графічного контролера.
CS (Chip Select) - активація / дезактивація графічного дисплея.

Загальна схема підключення TFT дисплея зображена нижче.

Ініціалізація tft дисплея на прикладі ssd1289 для avr

Тепер треба розібратися як відправити SSD1289 команди / дані, для цього давайте подивимося на картинку нижче.

Ініціалізація tft дисплея на прикладі ssd1289 для avr


На зображенні видно, що це можна зробити двома способами, ми реалізуємо перший.
Для того щоб відправити команду треба виконати наступну послідовність дій:
  • на ніжці D / C виставляємо нуль говоримо, що будемо слати команду
  • на ніжці RD виставляємо одиницю, щоб точно записувати
  • активуємо чіп, встановлюючи на ніжці CS нуль
  • видаємо на шину дані, в нашому випадку це два порти
  • на ніжці WR виставляємо одиницю
  • чекаємо кілька мікросекунд
  • на ніжці WR виставляємо нуль
  • на ніжці CS виставляємо одиницю, деактивувавши чіп

Для того щоб відправити дані треба виконати наступну послідовність дій:
  • на ніжці D / C виставляємо одиницю говоримо, що будемо слати дані
  • на ніжці RD виставляємо одиницю, щоб точно записувати
  • активуємо чіп, встановлюючи на ніжці CS нуль
  • видаємо на шину дані, в нашому випадку це два порти
  • на ніжці WR виставляємо одиницю
  • чекаємо кілька мікросекунд
  • на ніжці WR виставляємо нуль
  • на ніжці CS виставляємо одиницю, деактивувавши чіп

Нижче реалізація відправки команд / даних на С.


З підключенням розібралися тепер переходимо до ініціалізації. Відкриваємо даташит і знаходимо мандрівницю, на якій описаний порядок ініціалізації.

Ініціалізація tft дисплея на прикладі ssd1289 для avr


Для того щоб ініціалізувати контролер SSD1289 треба записати в регістр R07, значення 0021h. виставивши, таким чином, GON = 1, DTE = 0, D [1: 0] = 01, що роблять ці біти розглядати не будемо, поки це значення не має.


На наступному кроці включаємо тактирование, встановивши в регістр R00 значення 0001h. До речі, якщо після ініціалізації прочитати дані з цього регістра, в разі успішної ініціалізації має повернутися 8989h.

Ініціалізація tft дисплея на прикладі ssd1289 для avr


Далі, знову повертаємося в R07 і встановлюємо значення 0023h.
Наступним кроком виходимо із сплячого режиму, встановлюючи в R10 значення 0000h.

Ініціалізація tft дисплея на прикладі ssd1289 для avr


Чекаємо 30 мілісекунд. Встановлюємо в регістр R07 значення 0033h. Далі, в регістр R11 встановлюємо значення 6838h, давайте розглянемо, що означають ці цифри.
POR - це значення за замовчуванням і воно дорівнює 6830h. Значить, за замовчуванням дисплей може відображати 65K квітів, за це відповідає перша цифра 6 в значенні 6830h, це треба запам'ятати так далі при формуванні кольору ми до цього ще повернемося.


Далі ми визначаємо порядок записи точок, справа в тому, що нам для виведення зображення досить виставити координати тільки першої точки. далі, треба відправляти SSD1289 тільки колір наступної точки, а він сам буде її малювати за алгоритмом, який ми зараз виберемо. І ось тут, точно сказати чому не можна, при таких налаштуваннях включився режим, зазначений зеленим кружком, а повинен був включитися зазначений червоним.

Ініціалізація tft дисплея на прикладі ssd1289 для avr


Значення в регістрі R02 залишимо за замовчуванням і на цьому закінчимо ініціалізацію.
Тепер все те, що розглянули оформимо у вигляді коду.

Якщо послідовно виконати всі описані дії, в разі успішної ініціалізації, екран хаотично розфарбувати різнокольоровими точками, як на фото нижче.

Ініціалізація tft дисплея на прикладі ssd1289 для avr


Тепер ми знаємо як форматувати TFT дисплей на якому встановлений контролер SSD1289, в наступній статті ми розглянемо як виводити окремі символи і писати рядки. Також в кінці наступного статті можна скачати приклад для Atmel Studio 6.2.

P.S.S для бажаючих швидко перевірити чи працює їх дисплей, залишаю тут прошивку для Atmega16 ssd1289_i8080.hex [5,75 Kb] (cкачиваний: 177)

Схожі статті