nedoText/SX - вывод текста 80x25 на экран ТВ с помощью SX28

8-битные микроконтроллеры PICmicro (ПИКи) от Microchip и совместимые, а также 16-битные PIC24 и 32-битные PIC32

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 23990
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

nedoText/SX - вывод текста 80x25 на экран ТВ с помощью SX28

Post by Shaos »

Приступил к практической реализации проекта NedoText с использованием чипа SX28:

Image

На бредборде слева-направо-сверху-вниз:
- SX28AC/DP - микроконтроллер SX28 с осциллятором на 60МГц;
- 74F163 - быстрый счётчик, использованный в качестве делителя частоты на 6;
- 74F00 - четыре И-НЕ (один вентиль для счётчика на 6 и дополнительные вентили);
- 74LS165 - сдвиговый регистр для формирования 8 точек видео из одного байта;
- HM6116P-7 - статическая память на 2К со скоростью работы 70нс;
- 74LS32 - четыре ИЛИ для формирования сигналов управления памятью, регистром и буфером;
- 74ALS245 - буфер для ввода байта извне;
- 74ALS574 - регистр для вывода старших битов адреса для памяти.
Всего 8 чипов, а в окончательной конструкции (с разбиением на две платы - NedoCPU-28+ и непосредственно сам NedoText) будет 9 чипов (добавится ещё один 74LS00 для логики чтения состояния переключателя PAL/NTSC).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23990
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Прицепил все проводки:

Image
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

А оно в наводках не будет? :)
User avatar
Shaos
Admin
Posts: 23990
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

HardWareMan wrote:А оно в наводках не будет? :)
Ну может и будет в таком виде - остаётся надеяться, что наводки не превысят порога срабатывания ТТЛ ;)
Last edited by Shaos on 11 Dec 2006 17:04, edited 1 time in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23990
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Первое подключение питания и мигание светодиодом прошло успешно (пришлось только пару проводков перецепить):

Image
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23990
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Взаимодействие с девайсом предпологается осуществлять по 10 сигналам (плюс земля): D0, D1, D2, D3, D4, D5, D6, D7, IFLAG, OFLAG (из них выходной только OFLAG, а все остальные - входы).

Внешнее устройство ждёт когда OFLAG=0, затем выводит в D0...D7 нужный код и взводит IFLAG=1, далее ждём когда OFLAG=1 и сбрасываем IFLAG=0. Пока не станет OFLAG=0 новый код засылать нельзя.

Двоичный код вида 000yyyyy задаёт текущую строку.
Двоичный код вида 1xxxxxxx задаёт текущий столбец.
Все остальные коды (в диапазоне 0x20...0x7F) считаются кодом выводимого символа.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23990
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Получил на экране ТВ первую устойчивую картинку - пока только из вертикальных светлых полос...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23990
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:Получил на экране ТВ первую устойчивую картинку - пока только из вертикальных светлых полос...
Полосы были разной ширины и часть через некоторое время после включения исчезала - оказалось что сигнал загрузки байта был коротковат для сдвигового регистра 74LS165 (в боевой конструкции по видимому тоже надо заменить на 74F) - когда сделал два такта микроконтроллера вместо одного - полосы стали устойчивыми. Вот картинка вывода шестёрки пикселов 101000 на моём новом большом ТВ (метровая диагональ):

Image

Тоже самое снятое моей платой видеоввода - разрешение у неё не ахти и искажения цветовые:

Image

Итак считаем - по горизонтали 80 пар пикселов, по вертикали 25*8=200 идентичных строк развёртки.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23990
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote: Полосы были разной ширины и часть через некоторое время после включения исчезала - оказалось что сигнал загрузки байта был коротковат для сдвигового регистра 74LS165 (в боевой конструкции по видимому тоже надо заменить на 74F) - когда сделал два такта микроконтроллера вместо одного - полосы стали устойчивыми.
Чего-то не могу найти 74F165, зато вроде у одного из продавцов есть 74ALS165 (правда объявленный Obsolete)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23990
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Кое чего переткнул и потестировал с выводом всех 6 пикселов знакоместа - вот картинка где в каждой строке выводится 6 младших битов номера этой строки начиная с 0 (исходники на CVS тут):

Image

На большом ТВ выглядит почти идеально (почти - потому что на глаз видны некоторые флуктуации - движение границ пикселов влево-вправо), а вот карта видеозахвата всё опять испортила своими цветовыми искажениями и ухудшенным разрешением.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23990
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Перецепил сигнал сдвига опять к Q2 и поправил программу - теперь ничего не мельтешит и не сливается - однако теперь по моим расчётам выходит что на 6 экранных пикселов приходится 35 тактов контроллера, а не 36 как я считал вначале - или я неправильно такты считаю?

Code: Select all

0018           00096 lloop:  
0018 034A      00097         rlf     line,w ; 1
0019 0341      00098         rlf     wfile,w ; 2
001A 0EFC      00100         andlw 0xFC ; 3
001B 0027      00101         movwf   portc ; 4
001C 0000      00102         nop ; 5
001D 0000      00103         nop ; 6
001E 0000      00104         nop ; 7
001F 0000      00105         nop ; 8
0020 0000      00106         nop ; 9 
0021 0000      00107         nop ; 10
0022 0445      00108         bcf     porta,_ld_a ; 11
0023 0000      00109         nop ; 12
0024 0545      00110         bsf     porta,_ld_a ; 13
0025 0000      00111         nop ; 14
0026 0000      00112         nop ; 15
0027 0000      00113         nop ; 16
0028 0000      00114         nop ; 17
0029 0000      00115         nop ; 18
002A 0000      00116         nop ; 19
002B 0000      00117         nop ; 20
002C 0000      00118         nop ; 21
002D 0000      00119         nop ; 22
002E 0000      00120         nop ; 23
002F 0000      00121         nop ; 24
0030 0000      00122         nop ; 25
0031 0000      00123         nop ; 26
0032 0000      00124         nop ; 27
0033 0000      00125         nop ; 28
0034 0000      00126         nop ; 29
0035 0000      00127         nop ; 30
0036 0000      00128         nop ; 31
0037 02E9      00130         decfsz  cnt2,f ; 32
0038 0A18      00131         goto    lloop ; 33,34,35 - а работает как будто 36
Image

Кстати, подключил напрямую к плате видеоввода - вроде искажений меньше (раньше через видеомагнитофон оно было подключено)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23990
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Вот закапченная картинка знакомест 80x25:

Image
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23990
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Неделя борьбы с внешней памятью закончилась успешно - вот скриншот, где в первых двух строках через сдвиговый регистр выводятся байты (точнее 6 старших бита от байта), прочитанные из внешней памяти (а предварительно в неё записанные):

Image

Знакоместа слева-направо:
1) 0x00
2) 0xC4
3) 0xC8
4) 0xCC
5) 0xD0
6) 0xD4
7) 0xD8
8) 0xDC
9) 0xE0
10) 0xE4
11) 0xE8
12) 0xEC
13) 0xF0
14) 0xF4
15) 0xF8
16) 0xFC
и т.д. по кругу

Загвоздка оказалась в том, что на высоких тактовых частотах (выше 50 МГц) последовательные побитные изменения битов в выходных портах не приводят к ожидаемым результатам:

bcf portb,4
bcf portb,5

это не работает - вместо этого надо писать так:

bcf portb,4
nop
bcf portb,5

после этого оба бита сбрасываются.

Исходники всё также можно взять в CVS нашего проекта на sf.net
Я тут за главного - если что шлите мыло на me собака shaos точка net
Romanich
Banned
Posts: 608
Joined: 12 Oct 2006 16:44

Post by Romanich »

А цветное изображение делается кодером или используется ТВ с раздельными R,G,B-входами?
User avatar
Shaos
Admin
Posts: 23990
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Romanich wrote:А цветное изображение делается кодером или используется ТВ с раздельными R,G,B-входами?
В этом проекте всё черно-белое - те цветовые полосы что на картинке - это искажения в плате видеоввода, на экране ТВ всё Ок (т.е. видно только два цвета - чёрный и белый).

P.S. Кстати SX способен сам генерировать цветной видеосигнал - см. тут
Я тут за главного - если что шлите мыло на me собака shaos точка net