Последняя схема для реализации от vinxru:
http://s017.radikal.ru/i443/1301/bd/ef35d7a1cc22.png
Вид для печати
Последняя схема для реализации от vinxru:
http://s017.radikal.ru/i443/1301/bd/ef35d7a1cc22.png
Читаю
http://www.emuverse.ru/wiki/%D0%A1%D...8F.D1.82.D0.B8
И там написано:
Для опроса клавиатуры может использоваться один из трех методов:
1)Порты A, младшая половина C и B программируются на ввод. Нажатая клавиша определяется по положению нулей в обоих портах. Нажатая клавиша располагается на пересечении положения нулей.
Откуда там возьмется ноль?
2) Порт A и младшая половина C программируются на вывод, порт B — на ввод. Осуществляется сканирование методом бегущего «0» путем записи в порты A и C и анализа порта B.
3) Порт A и младшая половина C программируются на ввод, порт B — на вsвод. Осуществляется сканирование методом бегущего «0» путем записи в порт B и анализа портов A и C.
блин... все просто:
есть порт записи В и порт чтения А. записываем в порт В семь единиц и один ноль, счивываем порт А. если один из бит есть ноль то это пересечение. думаю дальше все понятно.
в Специалисте в отличии от "86РК подобных" используется матрица не 8х8 (порты А и В) а с частичным захватом порта С.
Да, клава в спеце 12х6. PA+PCl это одна координата, PB другая.
http://savepic.ru/3728910m.jpg
При этом, разные программы по-разному ее опрашивают: все мониторы используют режим [A+Cl] на вывод а [B] на ввод. Софт МХа использует [B] на вывод а [A+Cl] на ввод. NC использует [A+Cl] на вывод (все нули, используется особбеность ВВ55 при смене режима) а [B] на ввод для определения факта нажатия и [B] вывод и [ACl] на ввод при сканировании. [Ch], [B.1] и [B.0] при этом имеют индивидуальные функции. Здесь я веду расчет таймингов для создания безвейтингового контроллера конкретно для Спеца.
В данном случае A,B,C работают на вход.
Нет исходящих линий.
По ссылке описываеся три способа
1) Все порты на вход
2) A+C выход, B вход
3) A+C вход, B выход
---------- Post added at 10:20 ---------- Previous post was at 10:12 ----------
Про способы 2,3 о которых вы говорите, всё понятно.
При записи в порт ВВ55, микроконтроллер будет переводить свои порты на ввод. Искать нули. Рассчитывать, где еще должны появится нули. А потом переводить все порты на вывод.
Это ошибка. Теоретически это не возможно. В схеме клавиатуры стоят подтягивающие к питанию резисторы. И даже если их нет, эксперимент показывает, что оба соединенных входа читаются как 1.
Скорее всего автор этой инфы(почему-то помнится что это Пыхонин) не учел тот факт, что при смене режима выходные регистры у ВВ55 обнуляются и посчитал что используется режим ввода, так как нет записи в порт(по алгоритму из NC, как написал HardWareMan выше).
Всё указанное HardWareMan'ом верно и подтверждено экспериментально на версии Специалиста на FPGA на основе девборд Reverse от Ewgeny7. Мною также это взято за основу в адаптере.
Вот в Этой теме обсуждалось.
Все зависит от технологии порта, это да. Пробовал штук пять обычных конца 80-начала 90-х.
Как там Ewgeny7 пишет, висящий вход читается как 0.
В моих тестах - сразу после смены режима вход читался как 1. Если его замкнуть на землю и отпустить - читался как 0.
Соединенные же входы - это не подвешенные входы! На них потенциал около 1.5В. Читается как 1, стабильно даже после подачи и снятия земли.
Я помню на кружке, дополнительный ВВ55 настроенный на вход ловил 50Гц наводку, если руку держать рядом с разъемом, куда выходят его порты.
Этой ошибочной информации уже ...дцать лет :) И никто не поправит.
Следует читать так:
Цитата:
1) Сначала порты A и младшая половина C программируются на ввод (при этом порт B на вывод) и считываются значения из А и С, затем порт B программируется на ввод (при этом порты A и младшая половина C на вывод) и читается значение порта В. Нажатая клавиша определяется по положению нулей в считанных значениях и располагается на пересечении положения нулей.
Помнится, после знакомства со схемами других клавиатур, у меня возник вопрос - надежно ли, что в Специалисте нет диодов в матрице? Что если произойдет зависание в момент опроса бегущим нулевым битом, а пользователь зажмет как раз две такие клавиши, что соединятся выходы порта с разными уровнями?
Судя по обсуждению, которое упоминал Titus, возможна реализация выхода порта через ключ на землю и внутренний подтягивающий к питанию резистор. В таком случае замыкание выходов не страшно. Но тогда непонятки с наводками. Может резистор выключается в режиме ввода?
Интересно. Надо бы попробовать замкнуть выходы на рабочем порту одной из полудохлых ВВ55.
Обычно ТТЛ микросхемы безболезненно переносят замыкания выходов на землю.
---------- Post added at 18:21 ---------- Previous post was at 18:20 ----------
Мне показалось чуть более странным другое, что вход магнитофона так же конфликтует с ВВ55-ой, если порт B включить на выход.
И резистор по питанию. Сверху выходного каскада.
---------- Post added at 18:51 ---------- Previous post was at 18:49 ----------
http://www.nowere.net/b/arch/76308/s...9851981917.gif
---------- Post added at 18:53 ---------- Previous post was at 18:51 ----------
Только я никоим образом не советую так делать. ЗАмыкать выходы на землю, питание или между собой.
Приблизительно могу подсказать :) Измерь ток короткого замыкания с выхода в состоянии 1 на землю. А дальше R = 5 Вольт / I.
С новым годом :))
Таки с наступившим в часовом поясе +6 от гринвича!
Вечером сделаю платку контроллера клавиатуры. А потом буду прошивку писать. Ножек для кварцевого резонатора не хватило, поэтому буду пытаться на 8 Мгц работать. А там не 4 команды в прерывании, как у Ориона, а 20.
http://s42.radikal.ru/i096/1301/93/6ed8b36aa0e8.png
http://s017.radikal.ru/i443/1301/bd/ef35d7a1cc22.png
Наброски обработчика прерывания
Код:SER R28 ; 1
OUT 0x15, R28 ; 1 PORTB = 0xFF
OUT 0x15, R28 ; 1 PORTC = 0xFF
OUT 0x15, R28 ; 1 PORTD = 0xFF
IN R28, PINB ; 1 R28 = PINB
LD R30, Y ; 2 R30 = b2c[R28]
IN R28, PIND ; 1 R28 = PIND
ANDI R28, 0110011b; 1 R28 &= 0110011b
INC R29 ; 1
LD R28,Y ; 2 R28 = b2d[R28]
AND R30, R28 ; 1 R30 &= R28
IN R28, PINC ; 1 R28 = PINC
INC R29 ; 1
LD R28,Y ; 2 R28 = c2b[R28]
OUT POTRB, R28 ; 1 PORTB = R28
IN R28, PINC ; 1 R28 = PINC
INC R29 ; 1
LD R28,Y ; 2 R28 = c2d[R28]
OUT PORTD, R28 ; 1 PORTD = R28
OUT PORTC,R30 ; 1 PORTC = R30
MOV R29, 1
---------- Post added at 15:40 ---------- Previous post was at 15:25 ----------
Подтяжку PS/2 надо к питанию сделать, а не к земле. Вторая микросхема возможно не нужна.
Не подведены RD и RESET. Ещё нет адреса порта А1А0 - как без него?
Очень жду результатов. Удачи!
Этот контроллер цепляется после ВВ55-ой и работает только лишь с её выходами. Эмулирует матрицу кнопок. Ему A0,A1 не нужны.
А сигналы WR+CS заведены, что бы узнать, что на выходе ВВ55-ой что то изменилось.
Порядок контактов кстати совпадает 1 в 1 с порядком на плате моего специалиста. Можно разъем поставить.
Был бы рабочий экземпляр. Плату можно подогнать под панельку ВВ55. Пойду Atmeg'у 8 искать.
Скорее всего любая подойдет, главное что бы ножек хватило.
Печатная плата готова.
http://s019.radikal.ru/i630/1301/10/380147beb9db.jpg
Плата простая, поэтому получилось сделать её дорожками 0.5 мм. Обычно получается развести плату только для 0.25 мм, но на такой толщине часто получается брак.
Адаптировал программу настройки раскладки, которая до этого работала на Орионе.
http://tmaplatform.ru/media/spec_keyb_setup.html
Вторую микросхему лучше не ставить. Можно обойтись двумя диодами. На их катоды подать сигналы /WR и /CS. Аноды соединить вместе, соединить через резистор с +5В. Освободится один элемент ЛП5. У тебя кстати не правильно выбран логиченский элемент. Нужен 2ИЛИ. При появлении двух единиц на /WR и /CS нв выходе твоей ЛП5 тоже будет ноль.
А я предлагаю такую печатку потом сделать. Предусмотреть штырьки для вставки платы вместо ВВ55. Параллельно им поставить панельку на печатке под ВВ55. Под панелькой поставить Атмегу8, она как раз в узком корпусе. Размеры печатки будут чуть больше панельки DIP40 под ВВ55.
---------- Post added at 12:18 ---------- Previous post was at 10:41 ----------
Предлагаю создать новую тему про PS/2 адаптер клавиатуры для Специалиста.
Да, адаптеры под клавы для старых компов нужная вещь, особенно для плат где нет клав заводских.
Ага. Я когда то пытался сам сделать корпус с клавиатурой красивый. После 5 попыток я приклеил к дну клавиатуры бортики:
http://tmaplatform.ru/vinx_home_page/zx2.jpg
Скрытый текст
И получилось лучше всего.
---------- Post added at 11:45 ---------- Previous post was at 11:29 ----------
ЛП5, это я очепятался. Можно ставить ИЛИ (ЛЛ1) или ИЛИ-НЕ (ЛЕ1). Микроконтроллер может с любой работать.
Я подумал, подумал... И решил, что мне не жалко один корпус микросхемы поставить.
В контроллере Ориона я вообще прерывание на WR (шины, процессора) повесил. Прерывание работало в холостую 99% времени, но это никому не мешало.
Лучше конечно не убирать сигналы /WR и /CS - хуже наверное не будет. Правда ещё бы один пин лишний найти - для вывода сигнала сброса.
Спаял и частично запустил. На тестовой ПЗУ клавиатура 100% работает.
http://i072.radikal.ru/1301/9d/3fa2b02f3970.jpg
На тестовом ПЗУ от Рюмика? Соответствие клавиш полное? Можно ли сделать вывод сигнала "Сброс".
Да, на тестовой ПЗУ.
Нет, я перепутал линии 0..3 с 3..0.
Для сброса не хватает контактов. (Можно применить ATMega8 в TQFP корпусе, у неё есть две дополнительные ноги ADC6, ADC7.) (Можно отключить RESET микроконтроллера, но тогда будут проблемы с обновлением).
Все соответствия клавиш PC и Специалиста хранятся в EEPROM и изменяются прямо с клавиатуры. Причем поддерживается 2 раскладки, которые переключаются Scroll Lock-ом. Это например QWERTY и JCUKEN.
---------- Post added at 16:32 ---------- Previous post was at 16:32 ----------
На твоей схеме неточности.
Диоды надо развернуть. И резистор на землю посадить. Требуется элемент ИЛИ.
Резисторы R1, R2 надо на 4.7ком
---------- Post added at 16:36 ---------- Previous post was at 16:32 ----------
И к выводам МК у тебя сигналы вроде бы не так подключены.
У меня:
Горизонталь клавиатуры: B0,B1,B2,B3,B4,B5,B6,B7,D0,D1,D4,D5
Вертикаль клавиатуры: C0,C1,C2,C3,C4,C5
SHIFT: D7
---------- Post added at 16:37 ---------- Previous post was at 16:36 ----------
RST не нужно подтягивать резистором. Оно и так внутри МК подтянуто.
---------- Post added at 18:03 ---------- Previous post was at 16:37 ----------
Я только что ПЗУ-хи очистил, какие туда лучше прошивки залить?
А то глаза разбегаются.
http://www.spetsialist-mx.ru/index6.html
1. просто сигналы с портов ВВ55 у тебя на схеме не как не подписаны, т.е. какому выводу Атмеги соответствует вывод ВВ55 не ясно.
2. как бы катоды диодов пропустят только нули, т.е. при обоих нулях на WR появиться ноль.
3. я использую только Монитор2, но лучше собирай Flash-диск, соединяй со второй ВВ55 (порт программатора) и записывай игры можно с папки Specialist эмулятора. Там образы памяти - 001.rom и IvagorTim0xaGam8c.rom. Монитор2 с программой поддержки flash-диска я давал.
4. ATMega8 в TQFP корпусе можно заюзать, блин только она много места требует на плате, между рядами контактов ВВ55 не воткнешь. Вот выдумал печатку (во вложении), но переделаю по твоим замечаниям - компактно. Со стороны деталей - панелька под ВВ55, разъёмы для клавиатуры и программатора, с обратной стороны - штырьки для вставки платы в панельку ВВ55, резисторы и конденсаторы.
На выходе должен быть 0, только если оба входа 0 и 0.
Если лишь один из входов 0, то на выходе должна быть 1.
---------- Post added at 20:31 ---------- Previous post was at 20:30 ----------
Я еще хочу полностью переписать программу. Что бы без задержек принимать все данные от клавиатуры.