| 
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • Social distancing? Try a better way to work remotely on your online files. Dokkio, a new product from PBworks, can help your team find, organize, and collaborate on your Drive, Gmail, Dropbox, Box, and Slack files. Sign up for free.

View
 

TFT display details

Page history last edited by alexcp 2 years, 3 months ago

Основная трудность с TFT панелью оказалась не в сопряжении всяких временных параметров (частоты pixel clock, количества пикселей на строку, количества строк, длительности импульсов вертикальной и горизонтальной синхронизации), чего я опасался, а в нахождении ошибок и заполнении пробелов в datasheet на контроллер TFT панели.

 

Про параметры:

 

В Радио-86РК частота pixel clock составляет 8 МГц (получается делением 16 МГц на два счетчиком D3), каждый символ занимает по горизонтали 6 пикселей (все тот же D3), а все остальное настраивается программно. Вот фрагмент Монитора:

 

ROM_MON:FACE                 push    h
ROM_MON:FACF                 lxi     h, 0C001h       ; HL now points to 0xC001 (CCRT command/status register)
ROM_MON:FAD2                 mvi     m, 0            ; CCRT "Reset" command
ROM_MON:FAD4                 dcx     h               ; HL now points to 0xC000 (CCRT parameter register)
ROM_MON:FAD5                 mvi     m, 4Dh ;        ; normal (not spaced) rows, 78 chars per row (includng "border")
ROM_MON:FAD7                 mvi     m, 1Dh          ; 1 row count per VRTC, 30 rows per frame (including "border")
ROM_MON:FAD9                 mvi     m, 99h ;        ; 10 lines per character row, 10th line is the underline
ROM_MON:FADB                 mvi     m, 93h ;        ; line coouner offset by 1 line; transparent attribute field
ROM_MON:FADB                                         ; cursor is blinking underline; 8 character counts per HRTC
ROM_MON:FADD                 inx     h               ; HL now points to 0xC001 (CCRT command/status register)
ROM_MON:FADE                 mvi     m, 27h ;        ; "Start Display" command;
ROM_MON:FADE                                         ; 7 char clocks between DMA requests;
ROM_MON:FADE                                         ; 8 DMA cycles per burst
ROM_MON:FAE0                 mov     a, m            ; read CCRT status
ROM_MON:FAE1
ROM_MON:FAE1 loc_FAE1:                               ; CODE XREF: enable_screen+16j
ROM_MON:FAE1                 mov     a, m            ; read CCRT status
ROM_MON:FAE2                 ani     20h             ; check for "Interrupt Request" flag
ROM_MON:FAE4                 jz      loc_FAE1        ; wait until CCRT generates an interrupt request flag

 

Видимая часть каждой строки по горизонтали состроит из 78 символов по 6 пикселей, итого 78 х 6 = 468 пикселей.  Длительность импульса горизонтальной синхронизации составляет 8 символов или 48 пикселей. Строчного гасящего импульса нет, но символы выводятся Монитором только в 64 из 78 возможных позиций (см. известную картинку); остальные 14 (восемь слева, шесть справа) имитируют строчный гасящий импульс. Вся строка целиком занимает 468 + 48 = 516 пикселей.

 

Каждая строка символов занимает по высоте 10 пикселей, и в кадре таких строк 30, т.е. видимая часть кадра в высоту занимает 300 пикселей.

Длительность импульса вертикальной синхронизации составляет 1 строку, т.е. еще 10 пикселей. Весь кадр - это 300 + 10 = 310 строк. Кадровый гасящий импульс имитируется тремя пустыми строками вверху и двумя - внизу кадра.

 

Сравним с параметрами контроллера ILI6482, примененного в моем TFT дисплее:

 

Параметр ILI6482 мин. ILI6482 тип.  ILI6482 макс.  Радио 86РК Ед. изм. 
Pixel clock  5 6 12 8 МГц 
Длительность строки  520 525 800 516 пикселей  
Видимая часть  480    468 пикселей 
Back porch  36 40 255 0 пикселей 
Front porch  4 5 65 0 пикселей 
Длительность кадра 

277 

288 400 310 строк 
Видимая часть  272   300 строк 
Back porch  3 8 31 0 строк 
Front porch  2 8 97 0 строк 

 

Не совсем то, что нужно, конечно, но достаточно близко. К тому же в ходе экспериментов выяснилось, что HSYNC вообще не нужен (соответствующий вход TFT панели подключается к GND), и что полярность обоих синхроимульсов нужна положительная (datasheet говорит, что отрицательная, но советует подключать их к GND, если они не используются). Необязательны также гасящие импульсы (back porch и front porch). 

 

Помимо сигналов DOT CLOCK, HSYNC, VSYNC и VIDEO, TFT панели нужен еще сигнал DEN (Data ENable). В идеале он должен быть строчным гасящим импульсом наоборот, т.е. включаться в каждой видимой строке через (back porch) пикселов после строчного синхроимпулься и выключаться за (front porch) пикселов до следующего строчного синхроимпулься, а во время кадрового гасящего и синхроимпульса не включаться вообще. Поскольку гасящий импульс необязателен, DEN может быть сформирован как функция ИЛИ-НЕ от HSYNC и VSYNC. 

 

В связи с тем, что на вертикальный размер экрана Радио-86РК составляет 300 пикселей, а на TFT панели их всего 272, оказалось полезным запретить DEN на первые 10-20 строк горизонтальной развертки в каждом кадре - для этого применен счетчик 74HC161, который считает синхроимпульсы горизонтальной развертки. При этом с экрана исчезают 1-2 пустых строки символов, не используемых Монитором, зато полностью помещаются те 25 строк, которые Монитором использует:

 

 

Comments (0)

You don't have permission to comment on this page.