Yamaha YIS-503 контроллер для ps/2 клавиатуры

Страница 1/4
| 2 | 3 | 4

By greenpci

Rookie (19)

Аватар пользователя greenpci

25-05-2018, 07:53

Спаял схему для контроллера от Caro. Использовал ATmega328P вместо 48. Так как чип другой, прошивку пришлось компилировать самому. Не заработало.

Контроллер успешно получает данные от PS/2 клавиатуры. Правильно транслирует из PS2 кодов в колонку и ряд на Ямахе. В данный момент я изучаю, как контроллер отправляет скан код на Ямаху. Похоже, это должно делать прерывание на PortD, но в прошивке я вижу только команду устанавливающую направление портов:
out DDRB, scanFF

Но ведь направление битов не установит сам сигнал. Кто-нибудь работал с этим кодом. Если сам caro отзовется, буду рад.

Для того, чтобы оставить комментарий, необходимо регистрация или !login

By Alexey

Guardian (2228)

Аватар пользователя Alexey

25-05-2018, 14:21

Напишите ему. Адрес есть на сайте caro.su ...

By caro

Champion (482)

Аватар пользователя caro

27-05-2018, 18:11

greenpci wrote:

Но ведь направление битов не установит сам сигнал. Кто-нибудь работал с этим кодом.

Поскольку шина данных порта клавиатуры подтянута к +5V резисторами, то для перевода отдельного выхода
порта контроллера в состояние 0, достаточно изменить его направление с режима ввод на режим вывод, предварительно установив состояние всех его выходных линий в 0. То есть активным является только 0.
Это позволяет подключать параллельно к выходам контроллера шину данных родной клавиатуры MSX.

By greenpci

Rookie (19)

Аватар пользователя greenpci

28-05-2018, 02:03

Спасибо за работу, которую вы проделали.

Теперь понятно. Не знаю, как я сразу на догадался, что X0-X7 тоже подтянуты к 5+V со стороны Ямахи.

Теперь у меня следующая проблема. Я пытаюсь эмулировать нажатие одной кнопки: латинское a. DDRB устанавливатся в двух местах. В прерывании и в конце главного цикла main_cikl. Вместо того, чтобы брать биты из буфера, я подаю заданное значение, как в коде ниже (пишу по памяти, так как не дома):

in PIND,ZL
cpi ZL,0xF7
brne no_Y3 ;
ldi scanFF,0x08 ; если Y3, то устанавливаем X3
out DDRB,scanFF
;восстанавливаем регистр прерываний и SREG и возвращаемся из прерывания
...
reti
no_Y3:
out DDRB,r_00 ; ничего не нажато в остальных колонках
;восстанавливаем регистр прерываний и SREG и возвращаемся из прерывания
...
reti

Примерно тоже самое я делаю в конце main_cikl.

В результате, я получаю 00000 с паузами или последовательность символов из всей колонки Y3, что реже: =@atm ...
Но ведь я же вызываю "out DDRB,r_00" для всех других Y, кроме Y3.

Я размышлял о том, что это может быть. Я проверил FUSES еще раз. ATmega работает на частоте 8MHz, в то время, как опрос клавиатуры должен быть 60Hz. ATmega должна успевать обработать прерывание перед следущей колонкой. Теоретически, ничего кроме латинской "a" выпадать не должно.

caro, можете подсказать что еще можно проверить?

By caro

Champion (482)

Аватар пользователя caro

28-05-2018, 07:54

greenpci wrote:

Спаял схему для контроллера от Caro. Использовал ATmega328P вместо 48. Так как чип другой, прошивку пришлось компилировать самому. Не заработало.

Надеюсь перед компиляцией подправил исходник с учетом замены МК. Там довольно приличные изменения надо внести.

By greenpci

Rookie (19)

Аватар пользователя greenpci

28-05-2018, 14:33

Да, именно это и было проблемой. Я продолжил разбираться и обнаружилось, что прерывания были расчитаны на размер одно слово, а в новом чипе они стали 2 слова. Я расставил адреса (см. ниже) и кое-что даже заработало. Я могу вставлять некоторые буквы, но на экран постоянно поступают пробелы. Если ничего не нажимать, экран заполняется пробелами. Буду дальше просматривать код. Пока подозрение на буферы и стек. Возможно, 0x100 перекрывает что-то на новом чипе.

.ORG INT0addr
reti ;INT0
.ORG INT1addr
reti ;INT1
.ORG PCI0addr
reti ;PCINT0 PORTB
.ORG PCI1addr ;PCINT1 PORTC
nop
nop
.ORG PCI2addr ;PCINT2 PORTD
;==========================================================
; На линиях PORTD фиксируется изменение состояния адресов
;7 PCINT2 PORTD
in temp_S,SREG ;1 запомнить статус

By caro

Champion (482)

Аватар пользователя caro

28-05-2018, 14:39

greenpci wrote:

Да, именно это и было проблемой. Я продолжил разбираться и обнаружилось, что прерывания были расчитаны на размер одно слово, а в новом чипе они стали 2 слова. Я расставил адреса (см. ниже) и кое-что даже заработало. Я могу вставлять некоторые буквы, но на экран постоянно поступают пробелы. Если ничего не нажимать, экран заполняется пробелами. Буду дальше просматривать код. Пока подозрение на буферы и стек. Возможно, 0x100 перекрывает что-то на новом чипе.

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

By greenpci

Rookie (19)

Аватар пользователя greenpci

28-05-2018, 15:16

поменял двойной nop и обработчик прерываний на rjmp и снес код вниз (см. ниже). Пробелы теперь не выпадают. Но следующий глюк такой. При нажатии на клавишу, печатается эта клавиша и еще одна ниже по таблице: "at ux wd" И все кнопки и знаки так. Как будто, колонка на portB залипает и остается на следующий скан, в котором она уже отлипает.

.ORG PCI1addr ;PCINT1 PORTC
rjmp yx_int
.ORG PCI2addr ;PCINT2 PORTD
rjmp yx_int
...
...
;==========================================================
; PCINT1 and PCINT2
yx_int:
; На линиях PORTD фиксируется изменение состояния адресов
;7 PCINT2 PORTD
in temp_S,SREG ;1 запомнить статус
...
...
out SREG,temp_S ;1 восстановить статус
reti ;4 возврат

By greenpci

Rookie (19)

Аватар пользователя greenpci

31-05-2018, 14:28

отключение родной клавиатуры действительно устранило глюки. Теперь я могу печатать. Еще не все проверил. Буду тестировать дальше.

By greenpci

Rookie (19)

Аватар пользователя greenpci

31-05-2018, 14:44

пока нашел только одну проблему. Русский язык начинает спонтанно переключаться на английский и обратно после того, как я его включаю первый раз. И лампочка scroll lock быстро мигает. Потом, если нажать кнопку Windows несколько раз то эта "нестабильность" пропадает.

By greenpci

Rookie (19)

Аватар пользователя greenpci

31-05-2018, 15:19

Все в сообщении выше было протестировано с клавиатурой BTC 5109C.

Проверил еще одну клавиатуру Logitech, которая работает с контроллером к спектруму. Она помигала, но далее на кнопки реагировать отказалась.

Следующим шагом я подлючил настоящую тяжелую клавиатуру IBM 98го года выпуска. К счастью, она у меня есть. Все кнопки работают безупречно. Русский язык, как и задумано переключается Scroll Lock, а не Windows, как на BTC. Стрелки работают и капс лок тоже на своем месте. Никакой "нестабильности" нет. IBM работает, как и заявлено на твоем веб сайте.

Еще раз спасибо огромное за тяжелый труд и замечательную схему.

Страница 1/4
| 2 | 3 | 4