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

  • Stop wasting time looking for files and revisions. Connect your Gmail, DriveDropbox, and Slack accounts and in less than 2 minutes, Dokkio will automatically organize all your file attachments. Learn more and claim your free account.

View
 

TFT display details

Page history last edited by alexcp 2 years, 7 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.