Днями прийшов TFT дисплей, замовлений на али, давайте розглянемо його основні характеристики.
Основні характеристики дисплея:
- 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.
Тепер давайте подивимося на терморегулятори модуля.
Висновки харчування.
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 дисплея зображена нижче.
Тепер треба розібратися як відправити SSD1289 команди / дані, для цього давайте подивимося на картинку нижче.
На зображенні видно, що це можна зробити двома способами, ми реалізуємо перший.
Для того щоб відправити команду треба виконати наступну послідовність дій:
- на ніжці D / C виставляємо нуль говоримо, що будемо слати команду
- на ніжці RD виставляємо одиницю, щоб точно записувати
- активуємо чіп, встановлюючи на ніжці CS нуль
- видаємо на шину дані, в нашому випадку це два порти
- на ніжці WR виставляємо одиницю
- чекаємо кілька мікросекунд
- на ніжці WR виставляємо нуль
- на ніжці CS виставляємо одиницю, деактивувавши чіп
Для того щоб відправити дані треба виконати наступну послідовність дій:
- на ніжці D / C виставляємо одиницю говоримо, що будемо слати дані
- на ніжці RD виставляємо одиницю, щоб точно записувати
- активуємо чіп, встановлюючи на ніжці CS нуль
- видаємо на шину дані, в нашому випадку це два порти
- на ніжці WR виставляємо одиницю
- чекаємо кілька мікросекунд
- на ніжці WR виставляємо нуль
- на ніжці CS виставляємо одиницю, деактивувавши чіп
Нижче реалізація відправки команд / даних на С.
З підключенням розібралися тепер переходимо до ініціалізації. Відкриваємо даташит і знаходимо мандрівницю, на якій описаний порядок ініціалізації.
Для того щоб ініціалізувати контролер SSD1289 треба записати в регістр R07, значення 0021h. виставивши, таким чином, GON = 1, DTE = 0, D [1: 0] = 01, що роблять ці біти розглядати не будемо, поки це значення не має.
На наступному кроці включаємо тактирование, встановивши в регістр R00 значення 0001h. До речі, якщо після ініціалізації прочитати дані з цього регістра, в разі успішної ініціалізації має повернутися 8989h.
Далі, знову повертаємося в R07 і встановлюємо значення 0023h.
Наступним кроком виходимо із сплячого режиму, встановлюючи в R10 значення 0000h.
Чекаємо 30 мілісекунд. Встановлюємо в регістр R07 значення 0033h. Далі, в регістр R11 встановлюємо значення 6838h, давайте розглянемо, що означають ці цифри.
POR - це значення за замовчуванням і воно дорівнює 6830h. Значить, за замовчуванням дисплей може відображати 65K квітів, за це відповідає перша цифра 6 в значенні 6830h, це треба запам'ятати так далі при формуванні кольору ми до цього ще повернемося.
Далі ми визначаємо порядок записи точок, справа в тому, що нам для виведення зображення досить виставити координати тільки першої точки. далі, треба відправляти SSD1289 тільки колір наступної точки, а він сам буде її малювати за алгоритмом, який ми зараз виберемо. І ось тут, точно сказати чому не можна, при таких налаштуваннях включився режим, зазначений зеленим кружком, а повинен був включитися зазначений червоним.
Значення в регістрі R02 залишимо за замовчуванням і на цьому закінчимо ініціалізацію.
Тепер все те, що розглянули оформимо у вигляді коду.
Якщо послідовно виконати всі описані дії, в разі успішної ініціалізації, екран хаотично розфарбувати різнокольоровими точками, як на фото нижче.
Тепер ми знаємо як форматувати TFT дисплей на якому встановлений контролер SSD1289, в наступній статті ми розглянемо як виводити окремі символи і писати рядки. Також в кінці наступного статті можна скачати приклад для Atmel Studio 6.2.
P.S.S для бажаючих швидко перевірити чи працює їх дисплей, залишаю тут прошивку для Atmega16 ssd1289_i8080.hex [5,75 Kb] (cкачиваний: 177)