nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 10:18



Reply to topic  [ 60 posts ]  Go to page Previous  1, 2, 3, 4
PC1-88 - одноплатный компьютер на 8088 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Tronix wrote:
Помогла в этом деле страничка https://www.robertocarraro.com/?q=pic18-connecting-ps2-keyboard.
С ходу с гугля не ищется, но делал по осциллограммам. Все так и работает у мну.

Хоршая страничка, черт побери! :roll:
Он прямо как букварь с коммиксами написал на тему сопряжения с ps2-keyboard! :wink:

_________________
iLavr


30 Jan 2016 09:04
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Tronix wrote:
Я ж недавно контроллер PS/2 для Поиска делал... тема на zx.pk Он у меня на PIC18F4620 (первое что было под рукой с Parallel Slave Port). Дык не замечал я никаких траблов со "звоном".


Если я правильно понял (тяжело код для PIC читать, давно с ними дела не имел), то взводится таймер
Code:
ps2_enable_timer(100);

по первому изменению CLK он останавливается, и начинает выполняться дальнейший код
Code:
ps2_read_bit();

Тогда понятно, что проблем нет, все остальные переключения просто игнорируются. Я так сделать не могу, у меня не контроллер.

Когда "звенит" - схема переключается лишние разы. Ну, например, сделал я счетчик принятых бит. Считает по фронту или спаду клока (непринципиально). Т.е. линия KBD_CLK заведена на тактовый вход счетчика.
Скажем, достиг он 10 - приняли все биты. А он достигает 10 то в середине последовательности, то вообще в начале, то ближе к концу. Т.е. считает быстрее, чем реально клок перебрасывается. Вывод? Дребезг. Откуда берется? Не знаю! :)

Tronix wrote:
Помогла в этом деле страничка https://www.robertocarraro.com/?q=pic18 ... 2-keyboard.

Только не везде такая передача будет работать. Клава отвечает FA на КАЖДЫЙ переданный ей байт. Так вот моя при передаче ED nn не желает принимать второй байт пока не примешь FA от первого байта. Китайский ноунейм.


30 Jan 2016 23:19
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Vic3Dexe wrote:
Если я правильно понял (тяжело код для PIC читать, давно с ними дела не имел), то взводится таймер


Это первый вариант. Я забыл оконечный выложить, я там все начисто переделал. Таймер взводится каждый раз, когда есть перепад CLK. В таймере - выход из конечного автомата (установка на начальное значение). Таким образом, если клоков было не 10, а скажем 9, то на последнем девятом ждем 100мс и если ничего нет (клока последнего) - вываливаемся в начальное состояние конечного автомата, как будто ничего нам клава и не слала.

Вообще-то не буду лукавить, код я взял и нагло скопипастил (портировал) из проекта для AVR PS2 Encoder Ну конечно изменил малость для себя кое-чего, но в целом, оригинальный код там. Мне он понравился лаконичностью и вообще понравился. Удобно читается.

К слову сказать, четность не проверяется. Что приняли - то и выплевываю в Поиск. И повторюсь, при этом ошибочных нажатий кнопок пока не встретил. Поэтому и не стал заморачиваться с четностью.

Vic3Dexe wrote:
Только не везде такая передача будет работать. Клава отвечает FA на КАЖДЫЙ переданный ей байт. Так вот моя при передаче ED nn не желает принимать второй байт пока не примешь FA от первого байта. Китайский ноунейм.

А в этом алгоритме (на AVR и, соответственно у меня) сразу после передачи автомат переключается на чтение. Поэтому если клава шлет после байта FA, мы его успешно принимаем (и игнорирую) и только затем шлем следующий байт клаве из буфера.
С контроллерами конечно по проще в этом отношении, чем с логикой.
А так - i8042 можно в схему поставить, как у всех AT вплоть до 586, и моск себе не этим больше не забивать.

_________________
https://t.me/tronix_blog


31 Jan 2016 00:42
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Tronix wrote:
Таймер взводится каждый раз, когда есть перепад CLK. В таймере - выход из конечного автомата (установка на начальное значение).

Это понятно, я имел ввиду, что триггером условия "есть шевеление на линии клока" является первый перепад этого клока. Весь последующий дребезг игнорится.
Пока идут разборки с принятым битом, дребезг устаканивается, после чего следующий таймер реагирует уже на следующий первый перепад. Ну как-то так...
Tronix wrote:
К слову сказать, четность не проверяется. Что приняли - то и выплевываю в Поиск. И повторюсь, при этом ошибочных нажатий кнопок пока не встретил. Поэтому и не стал заморачиваться с четностью.

Аналогично.
Tronix wrote:
А в этом алгоритме (на AVR и, соответственно у меня) сразу после передачи автомат переключается на чтение. Поэтому если клава шлет после байта FA, мы его успешно принимаем (и игнорирую) и только затем шлем следующий байт клаве из буфера.

Почти аналогично, только логика выходит в исходное состояние, а FA я забираю процом (он в проц все равно должен попадать, совместимость, итить ее...)
Tronix wrote:
А так - i8042 можно в схему поставить, как у всех AT вплоть до 586, и моск себе не этим больше не забивать.

download/file.php?id=463
Куда, например? Места нет вообще. :) Он же здоровенная 40-ногая дура... Да прошивку искать...


31 Jan 2016 03:31
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Vic3Dexe wrote:
Куда, например? Места нет вообще. :) Он же здоровенная 40-ногая дура... Да прошивку искать...


Стоп. Так вон же там на картинке какой-то адский циклон. В него разве не влезает обработка PS/2? С ходу нагуглил вариантов пять разных реализаций на VHDL... Или это в нем и делается, и при этом такие траблы с дребезгом?

А 8042 - это вообще однократно-программируемый контроллер на заводе, контроллер клавиатуры. Прошивку даже если и найти - залить в него не удастся (потому что она там уже есть). Их много разных было, 80C42, 82C42 (и другие названия) от различных фирм в различных корпусах, например PLCC.
Это i8048 - контроллер, в который в теории можно залить прошивку с 8042 и он превратится в 8042. Но не факт. Потому что по-моему в 8042 есть защелка встроенная на порту, который на шину данных смотрит, а в 8048 ее нет. Но может это просто мои фантазии. С другой стороны если у 8042 притянуть ногу EA (External Access) к VCC, то он превращается в 8035 - то есть обычный контроллер с внешней ПЗУ, откуда и исполняет опкоды (а не из своей внутренней OPT ROM) -)

_________________
https://t.me/tronix_blog


31 Jan 2016 07:58
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 706
Location: WWW
Reply with quote
С год назад я пытался взять написанный на VHDL 8048 контроллер и прикрутить к нему прошивку от 8042. Сразу, к сожалению, не взлетело, а потом почему-то забросил.


31 Jan 2016 08:26
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
newold86 wrote:
С год назад я пытался взять написанный на VHDL 8048 контроллер и прикрутить к нему прошивку от 8042. Сразу, к сожалению, не взлетело, а потом почему-то забросил.


А зачем эмулировать целый 8048? Достаточно же просто написать обработку PS/2 свою собственную. Или взять любую, благо открытых кодов на VHDL полно. На других языках не смотрел (Verilog), но уверен что тоже есть.

PS: Делают же спектрумы всякие на ПЛИС, где на плате ПЛИС, а снаружи PS/2 клава, мыша, SD, аудио-выход и VGA.

_________________
https://t.me/tronix_blog


31 Jan 2016 08:37
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Tronix wrote:
Или это в нем и делается, и при этом такие траблы с дребезгом?

Именно.


31 Jan 2016 09:25
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
2 newold86
Просьба выполнить след. код на этой конструкции (интересует поведение 8259).
Синтаксис fasm, если что - архив с досовским экзешником прикручиваю.
Интересует выведенное на экран число, выход - по резету :)
Code:
use16
format MZ
entry _code:start

segment _code
start:
mov ax,3
int 10h
;---- вешаем прерывание
push CS
pop DS
mov dx,Int09
mov ax,2509h
int 21h
;---- ждем
jmp $

;---- 9 прерывание

Int09:
in al,60h ;снимаем запрос

;-------------- не разрешаем прерывания и не выдаем EOI ! -----------

;инициализируем PIC
mov al,13h ;single, edge, ICW4
out 20h,al
jmp $+2
mov al,8
out 21h,al ;ICW2 vector
jmp $+2
mov al,9
out 21h,al ;ICW4, 8086 mode
jmp $+2

;читаем ISR
mov al,0Bh
out 20h,al
jmp $+2
in al,20h

;пишем на экран
mov bx,digits
and al,0Fh
xlat byte [CS:bx]
mov ah,0Eh
mov bh,0
int 10h

;вешаемся
jmp $

digits db '0123456789ABCDEF'


Attachments:
tst.rar [167 Bytes]
Downloaded 448 times
08 Feb 2016 05:43
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 706
Location: WWW
Reply with quote
Vic3Dexe wrote:
2 newold86
Просьба выполнить след. код на этой конструкции


Не уверен, что сделаю это раньше следующей среды...


08 Feb 2016 06:18
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Так мне не срочно :)
Просто не пойму - должен ICW1 (он же master clear) сбрасывать ISR или нет. Документация говорит что нет, досбокс тоже не сбрасывает, но логически это бред - это же MASTER clear, по идее должен быть способом полного программного сброса контроллера.
А ведет это к тому, что если int9 писать так, как написан оригинальный, то перезагрузка по ctrl+alt+del блочит клаву, ибо EOI не высылается.


08 Feb 2016 06:49
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 706
Location: WWW
Reply with quote
Vic3Dexe wrote:
Так мне не срочно :)
Просто не пойму - должен ICW1 (он же master clear) сбрасывать ISR или нет. Документация говорит что нет, досбокс тоже не сбрасывает, но логически это бред - это же MASTER clear, по идее должен быть способом полного программного сброса контроллера.
А ведет это к тому, что если int9 писать так, как написан оригинальный, то перезагрузка по ctrl+alt+del блочит клаву, ибо EOI не высылается.


В данный момент под рукой нет PS/2 клавиатуры, но могу повесить что-нибудь на 08. Некогда разбираться - там те же команды нужно выдать, или что-то модифицировать с учетом другого IRQ ?


12 Feb 2016 07:55
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 706
Location: WWW
Reply with quote
newold86 wrote:
В данный момент под рукой нет PS/2 клавиатуры, но могу повесить что-нибудь на 08. Некогда разбираться - там те же команды нужно выдать, или что-то модифицировать с учетом другого IRQ ?


Вопрос отпал - оказывается, у меня еще одна в шкафу завалялась... Вот результат:

Attachment:
PICtest.jpg
PICtest.jpg [ 22.71 KiB | Viewed 13014 times ]


12 Feb 2016 08:18
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Супер, спасибо. Значит, документация и досбокс с нею врут со страшной силой.
Впрочем, не впервой...


12 Feb 2016 14:37
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 706
Location: WWW
Reply with quote
Блин, мне тут написали, а я даже сразу не мог понять, о чем идет речь - настолько забыл об этом проекте...

По просьбе написавшего выкладываю полную схему. Обращаю внимание, что в схеме есть несколько неисправленных ошибок, о которых я писал ранее.

Attachment:
PC1-88.pdf [428.04 KiB]
Downloaded 542 times


20 Apr 2017 02:32
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 60 posts ]  Go to page Previous  1, 2, 3, 4

Who is online

Users browsing this forum: No registered users and 5 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.