PDA

Просмотр полной версии : PS/2 адаптер клавиатуры для Специалиста



fifan
09.12.2012, 13:42
Последняя схема для реализации от vinxru:

http://s017.radikal.ru/i443/1301/bd/ef35d7a1cc22.png

vinxru
31.12.2012, 02:48
Читаю
http://www.emuverse.ru/wiki/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D 1%81%D1%82/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D 0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0 %BC%D0%B0%D1%86%D0%B8%D1%8F#.D0.A0.D0.B0.D1.81.D0. BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8 .D0.B5_.D0.BF.D0.B0.D0.BC.D1.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.

Atari
31.12.2012, 03:36
блин... все просто:
есть порт записи В и порт чтения А. записываем в порт В семь единиц и один ноль, счивываем порт А. если один из бит есть ноль то это пересечение. думаю дальше все понятно.

в Специалисте в отличии от "86РК подобных" используется матрица не 8х8 (порты А и В) а с частичным захватом порта С.

HardWareMan
31.12.2012, 09:58
Да, клава в спеце 12х6. PA+PCl это одна координата, PB другая.
http://savepic.ru/3728910m.jpg (http://savepic.ru/3728910.jpg)
При этом, разные программы по-разному ее опрашивают: все мониторы используют режим [A+Cl] на вывод а [B] на ввод. Софт МХа использует [B] на вывод а [A+Cl] на ввод. NC использует [A+Cl] на вывод (все нули, используется особбеность ВВ55 при смене режима) а [B] на ввод для определения факта нажатия и [B] вывод и [ACl] на ввод при сканировании. [Ch], [B.1] и [B.0] при этом имеют индивидуальные функции. Здесь (http://www.nedopc.org/forum/viewtopic.php?t=7394&postdays=0&postorder=asc&start=0) я веду расчет таймингов для создания безвейтингового контроллера конкретно для Спеца.

vinxru
31.12.2012, 11:20
В данном случае 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, микроконтроллер будет переводить свои порты на ввод. Искать нули. Рассчитывать, где еще должны появится нули. А потом переводить все порты на вывод.

Andrey_Korabelev
31.12.2012, 11:24
Порты A, младшая половина C и B программируются на ввод. Нажатая клавиша определяется по положению нулей в обоих портах. Нажатая клавиша располагается на пересечении положения нулей
Откуда там возьмется ноль?
Это ошибка. Теоретически это не возможно. В схеме клавиатуры стоят подтягивающие к питанию резисторы. И даже если их нет, эксперимент показывает, что оба соединенных входа читаются как 1.
Скорее всего автор этой инфы(почему-то помнится что это Пыхонин) не учел тот факт, что при смене режима выходные регистры у ВВ55 обнуляются и посчитал что используется режим ввода, так как нет записи в порт(по алгоритму из NC, как написал HardWareMan выше).

fifan
31.12.2012, 12:45
Всё указанное HardWareMan'ом верно и подтверждено экспериментально на версии Специалиста на FPGA (http://www.spetsialist-mx.ru/index9.html) на основе девборд Reverse от Ewgeny7. Мною также это взято за основу в адаптере (http://photo.qip.ru/users/fifan72/200812259/212716713/#mainImageLink).

Titus
31.12.2012, 13:37
Это ошибка. Теоретически это не возможно. Там подтягивающие к питанию резисторы. И даже если их нет, эксперимент показывает, что оба соединенных входа читаются как 1.

Вот в Этой (http://zx.pk.ru/showthread.php?t=16885) теме обсуждалось.

Andrey_Korabelev
31.12.2012, 14:48
Вот в Этой (http://zx.pk.ru/showthread.php?t=16885) теме обсуждалось.
Все зависит от технологии порта, это да. Пробовал штук пять обычных конца 80-начала 90-х.
Как там Ewgeny7 пишет, висящий вход читается как 0.
В моих тестах - сразу после смены режима вход читался как 1. Если его замкнуть на землю и отпустить - читался как 0.
Соединенные же входы - это не подвешенные входы! На них потенциал около 1.5В. Читается как 1, стабильно даже после подачи и снятия земли.

HardWareMan
31.12.2012, 16:54
Я помню на кружке, дополнительный ВВ55 настроенный на вход ловил 50Гц наводку, если руку держать рядом с разъемом, куда выходят его порты.

Titus
31.12.2012, 16:57
Я помню на кружке, дополнительный ВВ55 настроенный на вход ловил 50Гц наводку, если руку держать рядом с разъемом, куда выходят его порты.

Получается, что входы толком никуда не подтянуты.

HardWareMan
31.12.2012, 17:24
Получается, что входы толком никуда не подтянуты.
У клавиатуры в матрице ВСЕ подтянуты 10к к +5В. Речь шла за порт расширения, а он не подтянут даже у Ориона.

b2m
31.12.2012, 17:44
И там написано:

Для опроса клавиатуры может использоваться один из трех методов:

1)Порты A, младшая половина C и B программируются на ввод. Нажатая клавиша определяется по положению нулей в обоих портах. Нажатая клавиша располагается на пересечении положения нулей.

Этой ошибочной информации уже ...дцать лет :) И никто не поправит.
Следует читать так:

1) Сначала порты A и младшая половина C программируются на ввод (при этом порт B на вывод) и считываются значения из А и С, затем порт B программируется на ввод (при этом порты A и младшая половина C на вывод) и читается значение порта В. Нажатая клавиша определяется по положению нулей в считанных значениях и располагается на пересечении положения нулей.

Titus
31.12.2012, 17:52
У клавиатуры в матрице ВСЕ подтянуты 10к к +5В. Речь шла за порт расширения, а он не подтянут даже у Ориона.

Я имею ввиду у самого порта.

Andrey_Korabelev
31.12.2012, 19:02
Помнится, после знакомства со схемами других клавиатур, у меня возник вопрос - надежно ли, что в Специалисте нет диодов в матрице? Что если произойдет зависание в момент опроса бегущим нулевым битом, а пользователь зажмет как раз две такие клавиши, что соединятся выходы порта с разными уровнями?
Судя по обсуждению (http://zx.pk.ru/showthread.php?t=16885), которое упоминал Titus, возможна реализация выхода порта через ключ на землю и внутренний подтягивающий к питанию резистор. В таком случае замыкание выходов не страшно. Но тогда непонятки с наводками. Может резистор выключается в режиме ввода?
Интересно. Надо бы попробовать замкнуть выходы на рабочем порту одной из полудохлых ВВ55.

vinxru
31.12.2012, 19:21
Обычно ТТЛ микросхемы безболезненно переносят замыкания выходов на землю.

---------- Post added at 18:21 ---------- Previous post was at 18:20 ----------

Мне показалось чуть более странным другое, что вход магнитофона так же конфликтует с ВВ55-ой, если порт B включить на выход.

Titus
31.12.2012, 19:28
Обычно ТТЛ микросхемы безболезненно переносят замыкания выходов на землю.
Безболезненно перенесет только каскад с открытым колектором / стоком, а у ТТЛ явно комплиментарные пары на выходе.

vinxru
31.12.2012, 19:53
И резистор по питанию. Сверху выходного каскада.

---------- Post added at 18:51 ---------- Previous post was at 18:49 ----------

http://www.nowere.net/b/arch/76308/src/1329851981917.gif

---------- Post added at 18:53 ---------- Previous post was at 18:51 ----------

Только я никоим образом не советую так делать. ЗАмыкать выходы на землю, питание или между собой.

Titus
31.12.2012, 19:56
И резистор по питанию. Сверху выходного каскада.
Номинальчик резистора не подскажешь? )

vinxru
31.12.2012, 21:06
Приблизительно могу подсказать :) Измерь ток короткого замыкания с выхода в состоянии 1 на землю. А дальше R = 5 Вольт / I.

С новым годом :))

HardWareMan
31.12.2012, 22:21
Таки с наступившим в часовом поясе +6 от гринвича!

vinxru
02.01.2013, 17:23
Вечером сделаю платку контроллера клавиатуры. А потом буду прошивку писать. Ножек для кварцевого резонатора не хватило, поэтому буду пытаться на 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 надо к питанию сделать, а не к земле. Вторая микросхема возможно не нужна.

fifan
02.01.2013, 17:27
Не подведены RD и RESET. Ещё нет адреса порта А1А0 - как без него?

Очень жду результатов. Удачи!

vinxru
02.01.2013, 17:28
Этот контроллер цепляется после ВВ55-ой и работает только лишь с её выходами. Эмулирует матрицу кнопок. Ему A0,A1 не нужны.
А сигналы WR+CS заведены, что бы узнать, что на выходе ВВ55-ой что то изменилось.

Порядок контактов кстати совпадает 1 в 1 с порядком на плате моего специалиста. Можно разъем поставить.

fifan
02.01.2013, 17:37
Был бы рабочий экземпляр. Плату можно подогнать под панельку ВВ55. Пойду Atmeg'у 8 искать.

vinxru
02.01.2013, 18:14
Скорее всего любая подойдет, главное что бы ножек хватило.

vinxru
03.01.2013, 00:25
Печатная плата готова.

http://s019.radikal.ru/i630/1301/10/380147beb9db.jpg

Плата простая, поэтому получилось сделать её дорожками 0.5 мм. Обычно получается развести плату только для 0.25 мм, но на такой толщине часто получается брак.

vinxru
03.01.2013, 02:49
Адаптировал программу настройки раскладки, которая до этого работала на Орионе.

http://tmaplatform.ru/media/spec_keyb_setup.html

fifan
03.01.2013, 10:18
Вторую микросхему лучше не ставить. Можно обойтись двумя диодами. На их катоды подать сигналы /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 адаптер клавиатуры для Специалиста.

SysCat
03.01.2013, 11:15
Да, адаптеры под клавы для старых компов нужная вещь, особенно для плат где нет клав заводских.

vinxru
03.01.2013, 12:45
Ага. Я когда то пытался сам сделать корпус с клавиатурой красивый. После 5 попыток я приклеил к дну клавиатуры бортики:

http://tmaplatform.ru/vinx_home_page/zx2.jpg


http://tmaplatform.ru/vinx_home_page/zx1.jpg

http://tmaplatform.ru/vinx_home_page/zx3.jpg

http://tmaplatform.ru/vinx_home_page/zx4.jpg

http://tmaplatform.ru/vinx_home_page/zx5.jpg


И получилось лучше всего.

---------- Post added at 11:45 ---------- Previous post was at 11:29 ----------


Вторую микросхему лучше не ставить. Можно обойтись двумя диодами. На их катоды подать сигналы /WR и /CS. Аноды соединить вместе, соединить через резистор с +5В. Освободится один элемент ЛП5. У тебя кстати не правильно выбран логический элемент. Нужен 2ИЛИ. При появлении двух единиц на /WR и /CS нв выходе твоей ЛП5 тоже будет ноль.

ЛП5, это я очепятался. Можно ставить ИЛИ (ЛЛ1) или ИЛИ-НЕ (ЛЕ1). Микроконтроллер может с любой работать.

Я подумал, подумал... И решил, что мне не жалко один корпус микросхемы поставить.

В контроллере Ориона я вообще прерывание на WR (шины, процессора) повесил. Прерывание работало в холостую 99% времени, но это никому не мешало.

fifan
03.01.2013, 18:29
Лучше конечно не убирать сигналы /WR и /CS - хуже наверное не будет. Правда ещё бы один пин лишний найти - для вывода сигнала сброса.

vinxru
04.01.2013, 16:50
Спаял и частично запустил. На тестовой ПЗУ клавиатура 100% работает.

http://i072.radikal.ru/1301/9d/3fa2b02f3970.jpg

fifan
04.01.2013, 17:05
На тестовом ПЗУ от Рюмика? Соответствие клавиш полное? Можно ли сделать вывод сигнала "Сброс".

vinxru
04.01.2013, 19:03
Да, на тестовой ПЗУ.

Нет, я перепутал линии 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

fifan
04.01.2013, 20:11
1. просто сигналы с портов ВВ55 у тебя на схеме не как не подписаны, т.е. какому выводу Атмеги соответствует вывод ВВ55 не ясно.
2. как бы катоды диодов пропустят только нули, т.е. при обоих нулях на WR появиться ноль.
3. я использую только Монитор2, но лучше собирай Flash-диск, соединяй со второй ВВ55 (порт программатора) и записывай игры можно с папки Specialist эмулятора (http://www.spetsialist-mx.ru/Soft/emu.rar). Там образы памяти - 001.rom и IvagorTim0xaGam8c.rom. Монитор2 с программой поддержки flash-диска я давал (http://www.zx.pk.ru/showpost.php?p=563350&postcount=21).
4. ATMega8 в TQFP корпусе можно заюзать, блин только она много места требует на плате, между рядами контактов ВВ55 не воткнешь. Вот выдумал печатку (во вложении), но переделаю по твоим замечаниям - компактно. Со стороны деталей - панелька под ВВ55, разъёмы для клавиатуры и программатора, с обратной стороны - штырьки для вставки платы в панельку ВВ55, резисторы и конденсаторы.

HardWareMan
04.01.2013, 20:19
Спаял и частично запустил. На тестовой ПЗУ клавиатура 100% работает.
Поздравляю. Теперь надо проверить на остальных экзотических операционках.

b2m
04.01.2013, 20:32
2. как бы катоды диодов пропустят только нули, т.е. при обоих нулях на WR появиться ноль.
А что помешает пропустить ноль, если он только на одном из сигналов? Ноль на выходе должен быть только если на обоих входах ноль, а это как раз элемент ИЛИ.

fifan
04.01.2013, 20:59
А что помешает пропустить ноль, если он только на одном из сигналов? Ноль на выходе должен быть только если на обоих входах ноль, а это как раз элемент ИЛИ.
Вот и я про что.

vinxru
04.01.2013, 21:31
На выходе должен быть 0, только если оба входа 0 и 0.

Если лишь один из входов 0, то на выходе должна быть 1.

---------- Post added at 20:31 ---------- Previous post was at 20:30 ----------


Теперь надо проверить на остальных экзотических операционках.

Я еще хочу полностью переписать программу. Что бы без задержек принимать все данные от клавиатуры.

fifan
04.01.2013, 21:34
Всё ж распиши какие выводы МК и ВВ55 соединены, чтоб не менять в последствии твою прошивку - переделаю схему и печатку.

vinxru
04.01.2013, 22:51
Распишу чуть попозже.

Что то умирают у меня компьютеры.

Вчера вылетела 155ИЕ5 и пропало изображение. Перепаял.

Сегодня включаю, тестовое ПЗУ не выполняется. На экране стабильный мусор. Динамик молчит. На сброс нулевая реакция. Если вытащить и вставить ПЗУ на лету, то на экране что то происходит. Я даже увидел копирайт. ПЗУ исправно, обрывов нет, замыканий не нашел.

И второй компьютер так же перестал работать. Но там процессор больше не выдает SYNC и не шевелит шиной адреса. А процессор я запаял. Прошлая панелька работала, только если процессор прижать пальцем в нужном месте, ну я её и выпаял.

vinxru
05.01.2013, 03:07
А как в монитор попасть?

На экране надпись "ЗАГРУЗКА?"

---------- Post added at 02:07 ---------- Previous post was at 01:46 ----------

Нашел в журнале

aviator
05.01.2013, 14:46
Кстати, а почему бы не эмулировать ВВ55 на атмеге? По моим расчётам должно получиться проще в плане преобразования протокола PS/2. Кроме того, можно и поддержку USB клавиатур сделать.

---------- Post added at 14:46 ---------- Previous post was at 14:45 ----------

Вставлять это всё дело в панельку вместо ВВ55...

fifan
05.01.2013, 14:58
Кстати, а почему бы не эмулировать ВВ55 на атмеге? По моим расчётам должно получиться проще в плане преобразования протокола PS/2. Кроме того, можно и поддержку USB клавиатур сделать.

---------- Post added at 14:46 ---------- Previous post was at 14:45 ----------

Вставлять это всё дело в панельку вместо ВВ55...

Поддерживаю второе. А вот на счёт первого (эмулировать)... сложновато. Я пока приостановил работу над своим эмулятором (http://photo.qip.ru/users/fifan72/200812259/212716713/), жду когда vinxru доведёт дело до конца.

vinxru
05.01.2013, 16:41
Возможно скорости МК не хватит. Тогда я буду тормозить процессор сигналом RDY. А это еще один провод, которого нет.

И тормозить то не хочется, так как через эту же микросхему сделан вывод звука, записи на магнитофон и цвета.



---------- Post added at 14:14 ---------- Previous post was at 14:10 ----------


Кстати, а почему бы не эмулировать ВВ55 на атмеге?

ИМХО сложнее. И надо будет вторгаться в схему компьютера. А сейчас схема компьютера неизменна

---------- Post added at 15:38 ---------- Previous post was at 14:14 ----------

Переписал обработчик прерывания на ассемблере. Пока результат такой:

- На тестовой ПЗУ всё работает.

- На стандартной ПЗУ (мониторе, самом первом) хрен знает.

Если нажать одну из верхних кнопок F, HELP ... NF по появляется курсор. Но курсор не мигает. Мигать курсор начинает, только когда отпускаешь клавишу. Дальше от нажатий клавиш ничего не зависит.

---------- Post added at 15:41 ---------- Previous post was at 15:38 ----------

Суть обработчика прерывания такая



Если порт С на выход, то выполняем
PORTC = b2c[PINB] & d2c[PIND & 0x33];

иначе выполняем
PORTB = c2b[PINC];
PORTD = c2d[PINC] & (PORTD | 0x33);

Плюс, меняем режим, если на порте выбранном для чтения одни единицы.




interrupt [EXT_INT0] void ext_int0() {
#asm
.EQU DDRC=0x14
.EQU DDRB=0x17
.EQU DDRD=0x11
.EQU PORTB=0x18
.EQU PORTC=0x15
.EQU PORTD=0x12
; Сохраняем флаги
IN R28, 0x3F ; 1 SREG
PUSH R28 ; 2

; Если DDRC в режиме записи, то переходим ниже
IN R28, DDRC ; 1
CPI R28, 0 ; 1
BRNE _v2 ; 2

; *** ВАРИАНТ 1 ***

; PORTB = c2b[(unsigned char)PINC];
IN R28, 0x13 ; 1 PINC
CPI R28, 0x3F ; 1
BREQ _v12 ; 2
LDI R29, 2 ; 1
LD R28, Y ; 2
OUT 0x18, R28 ; 1 PORTB

; PORTD = (PORTD | 0x33) & c2d[(unsigned char)PINC];
IN R28, 0x13 ; 1 PINC
SUBI R28, -64 ; 1
LD R28, Y ; 2

IN R29, 0x12 ; 1 PORTD
ORI R29, 0x33 ; 1
AND R29, R28 ; 1
OUT 0x12, R29 ; 1 PORTD

; Выход
POP R28
OUT 0x3F, R28 ; SREG
RETI

; *** ВАРИАНТ 1.2 ***

_v12: ; Переводим порты B,D в режим чтения
; Переводим порт C в режим записи
CLR R28
OUT DDRB, R28
SER R28
OUT PORTB, R28
OUT DDRC, R28
IN R28, DDRD
ANDI R28, ~0x33
OUT DDRD, R28
IN R28, PORTD
ORI R28, 0x33
OUT PORTD, R28

; PORTC = b2c[PINB] & d2c[PIND & 0x33];
IN R28, 0x16 ; 1 PINB
LDI R29, 1 ; 1
LD R28, Y ; 2
OUT 0x15, R28 ; 1 PORTC

IN R28, 0x10 ; 1 PIND
ANDI R28, 0x33 ; 1
LDI R29, 2 ; 1
SUBI R28, -128 ; 1
LD R28, Y ; 2

IN R29, 0x15 ; 1 PORTC
AND R28, R29 ; 1
OUT 0x15, R28 ; 1 PORTC

; Выход
POP R28
OUT 0x3F, R28 ; SREG
RETI

; *** ВАРИАНТ 2 ***
_v2:
; PORTC = b2c[PINB] & d2c[PIND & 0x33];
IN R28, 0x16 ; 1 PINB
LDI R29, 1 ; 1
LD R28, Y ; 2
OUT 0x15, R28 ; 1 PORTC

IN R28, 0x10 ; 1 PIND
ANDI R28, 0x33 ; 1
CPI R28, 0x33 ; 1
BREQ _v21_x ; 2
LDI R29, 2 ; 1
SUBI R28, -128 ; 1
LD R28, Y ; 2

IN R29, 0x15 ; 1 PORTC
AND R28, R29 ; 1
OUT 0x15, R28 ; 1 PORTC

_v21_q:
POP R28
OUT 0x3F, R28 ; SREG
RETI

; Дополнителная проверка
_v21_x:
IN R28, 0x16 ; 1 PINB
CPI R28, 0xFF ; 1
BRNE _v21_q ; 2

; *** ВАРИАНТ 2.1 ***

; Переводим порт C в режим чтения
; Переводим порты B,D в режим записи
CLR R28
OUT DDRC, R28
SER R28
OUT PORTC, R28
OUT DDRB, R28
IN R28, DDRD
ORI R28, 0x33
OUT DDRD, R28

; PORTB = c2b[(unsigned char)PINC];
IN R28, 0x13 ; 1 PINC
LDI R29, 2 ; 1
LD R28, Y ; 2
OUT 0x18,R28 ; 1 PORTB

; PORTD = (PORTD | 0x33) & c2d[(unsigned char)PINC];
IN R28, 0x13 ; 1 PINC
SUBI R28, -64 ; 1
LD R28, Y ; 2

IN R29, 0x12 ; 1 PORTD
ORI R29, 0x33 ; 1
AND R29, R28 ; 1
OUT 0x12, R29 ; 1 PORTD

; Выход
POP R28
OUT 0x3F, R28 ; SREG
#endasm
}


Может быть МК не успевает. А может быть я ошибся где то.

vinxru
06.01.2013, 02:32
Внес несущественные поправки в обработчик прерывания. Стало чуть надежнее и быстрее. Константы на PINB заменил. Но все равно в монитор войти не удалось.

Получилось 25-50 тактов на частоте 8 Мгц. Это примерно 3-6 тактов центрального процессора. Я посмотрел ПЗУ монитора, этого времени должно хватить. Там между записью и чтением выполняется команда RET размеров в 10 тактов.

Я подумал, а ведь можно замкнуть куском провода ножки ВВ55, и тем самым получить нажатие Enter. Ну а дальше в мониторе остальные кнопки понажимать, вдруг что то работает.

Но хрен там. Замыкаю 4-ый и 20-ый контакт. И ничего.

Думаю, а попробую ка я нажать СТОП. Замыкаю 39-ую и 25-ую ноги. И ничего.

С PS/2 клавиатуры СТОП нажимается, а простым замыканием нет.

Пробовал даже отключать обработчик прерывания в МК. Тогда МК работает как набор резисторов.

Сижу в непонятках.

---------- Post added at 23:55 ---------- Previous post was at 23:54 ----------

Еще вопрос. Я впаял КР580ИК55, а надо было КР580ВВ55А

Я знаю, что у этих микросхем есть небольшие отличия в работе. При чтении из порта настроенного на вывод, в ИК55 будет прочитано FF, вместо записанного значения (вроде бы).

Может еще в этом проблема?

---------- Post added 06.01.2013 at 00:54 ---------- Previous post was 05.01.2013 at 23:55 ----------

Короче, не нажимается Enter, потому что компьютер не работает.

Теперь компьютер при нажатии на Enter стал выводить вот такое

http://s019.radikal.ru/i617/1301/0a/e644fe121129.jpg

---------- Post added at 01:32 ---------- Previous post was at 00:54 ----------

Решил проверить ПЗУ. ПЗУ исправно.

fifan
06.01.2013, 08:58
Стесняюсь спросить: а ты вообще-то резисторы подтягивающие все выводы клавиатуры к питанию поставил?

Вот нашёл цанговую панель на 40 контактов (http://lib.chipdip.ru/159/DOC000159471.jpg). Прекрасно она впишется в новую плату. С верху вставляем саму ВВ55, снизу штыри вставляем в основную плату вместо ВВ55. На нашей платке всё разводим как нам нужно. Жаль что войдёт только Atmega8 в узком 28 контактном корпусе (нет больше лишних выводов - нам ещё архиважно сброс вывести), её мы расположим внутри 40 контактной панельки.

vinxru
06.01.2013, 10:16
Стесняюсь спросить: а ты вообще-то резисторы подтягивающие все выводы клавиатуры к питанию поставил?


да

b2m
06.01.2013, 16:25
Теперь компьютер при нажатии на Enter стал выводить вот такое
А монитор точно есть? :)
Может у тебя ПЗУ только C000-C7FF? По Enter загрузчик просто переходит на 0C800h, иначе начинает читать с магнитофона заново.

---------- Post added at 17:25 ---------- Previous post was at 17:21 ----------


Еще вопрос. Я впаял КР580ИК55, а надо было КР580ВВ55А

Я знаю, что у этих микросхем есть небольшие отличия в работе. При чтении из порта настроенного на вывод, в ИК55 будет прочитано FF, вместо записанного значения (вроде бы).
Тоже интересно, сбрасывается ли в ноль порт у ИК55, если его настроить на вывод. Может и нет...

vinxru
07.01.2013, 12:26
Тоже интересно, сбрасывается ли в ноль порт у ИК55, если его настроить на вывод. Может и нет...

Работает ведь, значит работает.


А монитор точно есть?
Может у тебя ПЗУ только C000-C7FF? По Enter загрузчик просто переходит на 0C800h, иначе начинает читать с магнитофона заново.

ПЗУ вставлена, дорожки все целые. Разве что дешифрация выполняется неправильно.

У меня компьютер не проходит тест ОЗУ, говорит, что все микросхемы битые. Может быть как раз неработоспособный участок ОЗУ приходится на переменные монитора или стек, вот монитор и не запускается.

Я вчера начал оживлять второй компьютер. Выпаял процессор, поставил панельку на его место, убил несколько дорожек и теперь тестовая правильно ПЗУ пищит через динамик и даже что то пытается рисовать на экране. Теперь мультиплексоры надо починить.

perestoronin
07.01.2013, 17:11
Был бы рабочий экземпляр. Плату можно подогнать под панельку ВВ55. Пойду Atmeg'у 8 искать.

Можно попросить контроллер клавиатуры PS/2 развести на плате Специалиста MX2 512 экспериментальной ревизии 2013 года вместо площади занимаемой макеткой?

fifan
07.01.2013, 18:31
perestoronin, а почему 512 в названии компьютера, намекаешь на объём памяти?

На счёт Атмеги8 я б не торопился. Нам банально не хватает одного лишнего пина для вывода сигнала сброса. vinxru советовал тот же контроллер, но в TQFP корпусе - там есть два лишних вывода. Для Специалиста-МХ2 табу на планарные корпуса.

vinxru
07.01.2013, 18:59
есть еще Atmega16. У неё +10 выводов.

fifan
07.01.2013, 19:28
perestoronin, я тут посмотрел печатку Специалиста-МХ2. Развести на ней адаптер практически невозможно. Необходимо порядка 20 проводов кинуть параллельно выводам ВВ55 на новое место (которое есть на плате), а это тяжеловато. Так что делаем отдельную платку, которую можно будет вставлять на место ВВ55 любого клона Специалиста. Так что все брозды vinxru!

perestoronin
08.01.2013, 15:51
perestoronin, я тут посмотрел печатку Специалиста-МХ2. Развести на ней адаптер практически невозможно. Необходимо порядка 20 проводов кинуть параллельно выводам ВВ55 на новое место (которое есть на плате), а это тяжеловато. Так что делаем отдельную платку, которую можно будет вставлять на место ВВ55 любого клона Специалиста. Так что все брозды vinxru!

Можно попросить все три платы в один набор гербер файлов и файл сверловки собрать (чтобы их выпустить на одной заготовке, контроллеров клавы можно даже пару в один комплект поместить).

Про 512 да. Про корпуса планарные у меня другая точка зрения - я за чипы вместо выводных резисторов и конденсаторов, и за SO и TQFP, особенно если они выходят дешевле и доступнее чем труднодоставаемые и дорогие DIP.

fifan
08.01.2013, 19:30
Можно попросить все три платы в один набор гербер файлов и файл сверловки собрать.
Я так и делаю для себя - соединяю в один проект до четырёх устройств и заказываю изготовление одной печатной платы. На счёт Специалиста-МХ2 я ещё не думал.

я за чипы вместо выводных резисторов и конденсаторов, и за SO и TQFP, особенно если они выходят дешевле и доступнее чем труднодоставаемые и дорогие DIP.
В Специалисте-МХ2 чуть по другому. К580ВИ53 и К580ВМ80 планарнвми не встретишь. Микросхемы ОЗУ подходящего размера уже выпускают с пониженным напряжением питания.
Хотя все резисторы и конденсаторы (кроме электролитов) на своём Специалисте-МХ2 я паял SMD.:D

perestoronin
09.01.2013, 12:06
Я так и делаю для себя - соединяю в один проект до четырёх устройств и заказываю изготовление одной печатной платы. На счёт Специалиста-МХ2 я ещё не думал.

В Специалисте-МХ2 чуть по другому. К580ВИ53 и К580ВМ80 планарнвми не встретишь. Микросхемы ОЗУ подходящего размера уже выпускают с пониженным напряжением питания.
Хотя все резисторы и конденсаторы (кроме электролитов) на своём Специалисте-МХ2 я паял SMD.:D

КР580 и да и КР1533 пока доступны и значительно дешевле чем ПЛИС и импортные SO, роэтому их можно оставить, но перспективы не радужные, и через пару лет, запасы 90х по КР580 и КР1533 окончательно иссякнут, а более новые партии в разы дороже ПЛИС и мелкого импорта. Но я категорически против замены процессора на ПЛИС, хорошо что есть альтернатива - Z80 и выпускается по низкой цене. Микросхем ОЗУ, даже с учетом импорта, хватит не больше чем пару лет. Придётся учиться использовать и низковольтные микросхемы.

fifan
12.01.2013, 19:18
vinxru, ну как движется адаптер?

vinxru
12.01.2013, 19:21
vinxru, ну как движется адаптер?

Пока нет. Я нес изменения в схему (что бы починить комп) и теперь компьютер выводит на экран быстро меняющийся мусор.

perestoronin
12.01.2013, 20:17
vinxru, ну как движется адаптер?

Схема адаптера закончена? Остались задачи по разработке прошивки?

vinxru
12.01.2013, 20:30
Схема адаптера закончена? Остались задачи по разработке прошивки?

ничего пока не понятно.

---------- Post added at 19:30 ---------- Previous post was at 19:24 ----------

Сегодня я делал ремонт дома, сейчас чиню ноутбук, из него дети выломали USB. И похожу не починить. А тут еще и Специалист заглючил. Сил и времени сегодня нет...

fifan
12.01.2013, 22:48
Я тут нашёл каким образом ещё один вывод задействовать. Вход /RESET Атмеги служит для сброса и программирования, но его можно задействовать и для своих нужд. Но в таком случае микроконтроллер становится не прошиваемым в дальнейшем не программируемым обычными средствами. Я тут нашёл страницу где один из приборчиков (http://www.getchip.net/posts/059-ispravlyaem-avr-fyuzy-pri-pomoshhi-atmega-fusebit-doctor/) восстанавливает микроконтроллёр для дальнейшего программирования. Когда отладишь весь код, проверим клавиши и соответствия им можно будет отдельно сделать прошивку для вывода сигнала сброс с платы. Я сейчас собираю упомянутый девайс на макетке - есть повод одна из Атмег отказала.

HardWareMan
13.01.2013, 01:10
ЛОЛ. Любой нормальный параллельный программатор восстановит эти чипсы.

vinxru
13.01.2013, 01:48
Я как то на задавался этим вопросом. Нельзя RESET трогать, значит нельзя. А виллем сможет?

Vasily
13.01.2013, 14:30
Нет, вилем последовательно пишет.
Паралельный программатор еще собирать нужно. По трудозатратам гораздо проще собрать доктора, и номенклатура чипов у него приличная.

alx32
14.01.2013, 12:10
А HV-Programm разве нет в меге8?
По моему, вместо сигнала сброса можно подавать 12V, и МК так же першьётся...

---------- Post added at 12:10 ---------- Previous post was at 12:02 ----------

А HV-Programm разве нет в меге8?
По моему, вместо сигнала сброса можно подавать 12V, и МК так же першьётся...

Vasily
14.01.2013, 12:15
Есть, но вопрос в том, чем её в этот режим загнать и прошить.

alx32
14.01.2013, 12:18
Насколько я знаю, там просто подаётся 12В вместо 0В, а всё остальное так-же как и при простом ISP программировании.

Vasily
14.01.2013, 12:26
Нет, паралельниый на то он и паралельный, что нужно подавать 8 бит данных + управляющие сигналы и конечно же +12V на сброс. Подробнее здесь ATMega8 (http://www.atmel.com/images/doc2486.pdf) на странице 219 расписано.

fifan
14.01.2013, 14:17
Господа, не кто в данный момент не спорит о цельности сигнала /RESET, я просто попросил автора вывести в одной из последних версий PS/2 адаптера на этот вывод сигнал сброса, необходимого для нормального сброса всего Специалиста. vinxru просто задействовал все пины Атмеги8, лишнего нету...

vinxru
14.01.2013, 14:24
Я так прошивкой и не занимался, сегодня для work сделаю печатную плату, месяц назад обещал. А завтра Специалистом займусь. А после него к компилятору и Цветным Линиям вернусь. Я думал, что Специалист быстрее сделаю.

fifan
14.01.2013, 18:08
vinxru, если можно проверь как я на своей схеме подключил выводы Атмеги к ВВ55:

Atmega8 - ВВ55
2 (PD0) - 1 (PA3)
3 (PD1) - 2 (PA2)
6 (PD4) - 3 (PA1)
9 (PB6) - 39 (PA5)
10 (PB7) - 40 (PA4)
11 (PD5) - 4 (PA0)
13 (PA7) - 19 (PB1)
14 (PB0) - 17 (PC3)
15 (PB1) - 16 (PC2)
16 (PB2) - 15 (PC1)
17 (PB3) - 14 (PC0)
18 (PB4) - 37 (PA7)
19 (PB5) - 38 (PA6)
23 (PC0) - 25 (PB7)
24 (PC1) - 24 (PB6)
25 (PC2) - 23 (PB5)
26 (PC3) - 22 (PB4)
27 (PC4) - 21 (PB3)
28 (PC5) - 20 (PB2)

vinxru
14.01.2013, 18:13
Подожди пока, может быть ATMega8 не справится. Тогда будем ATMega16 ставить.

---------- Post added at 17:13 ---------- Previous post was at 17:11 ----------

Mega16 не такая и страшная.

http://s019.radikal.ru/i606/1203/2c/9282af9f99c8.jpg

vinxru
16.01.2013, 00:22
Времени не было вообще ни для чего. Починил Специалист, завтра можно клавиатурой заняться.

Пока она работает крайне нехотя. После 40 нажатий на клавишу 1, я увидел единицу.\

P.S. 2 часа подряд не могу заставить работать AVR-программатор. Под XP не вcтает драйвер USB портов. Под остальными не встает драйвер программатора. Типичная проблема.

vinxru
16.01.2013, 17:14
С таким обработчиком клавиши нажимаются четко.

http://i077.radikal.ru/1301/44/52e4202f545e.jpg



interrupt [EXT_INT0] void ext_int0() {
#asm
.EQU PIND=0x10
.EQU PINC=0x13
.EQU PINB=0x16
.EQU DDRC=0x14
.EQU DDRB=0x17
.EQU DDRD=0x11
.EQU PORTB=0x18
.EQU PORTC=0x15
.EQU PORTD=0x12
IN R28, SREG ; 1 1
PUSH R28 ; 2 3

; Переводим PORT в режим ввода
CLR R29 ; 1 4
OUT DDRC, R29 ; 1 5
SER R28 ; 1 6
OUT PORTC, R28 ; 1 7

; PORTB = c2b[PINC];
IN R28, PINC ; 1 8
ANDI R28, 0x3F ; 1 9 <- Может быть не нужно
CPI R28, 0x3F ; 1 10
BREQ _v12 ; 2 12
LDI R29, 2 ; 1 13 Адрес 0x200+R28
LD R29, Y ; 2 15
OUT PORTB, R29 ; 1 16

LDI R29, 2 ; 1 17
SUBI R28, -64 ; 1 18 Адрес 0x200+R28+64
LD R28, Y ; 2 19

IN R29, PORTD ; 1 20
ORI R29, 0x33 ; 1 21
AND R29, R28 ; 1 22
OUT PORTD, R29 ; 1 23

SER R28 ; 1 24
OUT DDRB, R28 ; 1 25
IN R28, DDRD ; 1 26
ORI R28, 0x33 ; 1 27
OUT DDRD, R28 ; 1 28

; Выход
POP R28 ; 2 30
OUT SREG, R28 ; 1 31
RETI

_v12: ; Переводим порты B,D в режим ввода. PORTС в режим вывода
OUT DDRB, R29 ; 1 13 R29=0
SER R28 ; 1 14
OUT DDRC, R28 ; 1 15
OUT PORTB, R28 ; 1 16
IN R28, DDRD ; 1 17
ANDI R28, ~0x33 ; 1 18
OUT DDRD, R28 ; 1 19
IN R28, PORTD ; 1 20
ORI R28, 0x33 ; 1 21
OUT PORTD, R28 ; 1 22

; PORTC = b2c[PINB] & d2c[PIND & 0x33];
IN R28, PINB ; 1 23
LDI R29, 1 ; 1 24 Адрес 0x100+R28
LD R28, Y ; 2 26
OUT PORTC, R28 ; 1 27 <- Если освободить регистр, то можно без этой команды

IN R28, PIND ; 1 28
ANDI R28, 0x33 ; 1 29 <- Можно заменить на одну ORI
SUBI R28, -128 ; 1 30 <- Можно заменить на одну ORI
LDI R29, 2 ; 1 31 Адрес 0x200+R28+128
LD R28, Y ; 2 33

IN R29, PORTC ; 1 34 <- Если освободить регистр, то можно без этой команды
AND R29, R28 ; 1 35
OUT PORTC, R29 ; 1 36

; Выход
POP R28 ; 2 38
OUT SREG, R28 ; 1 39 SREG
#endasm
}


---------- Post added at 15:48 ---------- Previous post was at 15:35 ----------

Наверное стоит добиться, что бы клавиатура работала даже на самых коротких командах типа

LXI H, 0FF00h
OUT 0FFh
MOV A, M

---------- Post added at 16:14 ---------- Previous post was at 15:48 ----------

Прерывание дает ответ за 40 тактов. (4 такта на вызов прерывания, и ответ на 28-ом или 36-ом такте.). При пересчете ATMega 8 Мгц на i8080 2 Мгц, получается 40/4 = 10 тактов.

MOV A, M выполняется за 7 тактов.



LXI D, 0FFFFh
LXI H, 0FFFDh
LDA режим
STAX D
MOV A, M


На таких коротких инструкциях работать не должно. (Надо проверить)

Если использовать ATMega16 с кварцем 16 Мгц (или более), то МК будет в любом случае успевать. Получается 5 тактов.

Но если используется программа типа:



STA 0FFFFh
LDA 0FFFDh (выполняется за 13 тактов)


То всё должно и так работать.

HardWareMan
17.01.2013, 12:20
Я рад, что он работает. Единственное, что огорчает, что этот контроллер не является тем, о чем заявлено:

А сейчас схема компьютера неизменна
Хотя на самом деле, приходится делать платку-переходник, которая подключается к некоторым, изначально недоступным для клавиатуры сигналам. Т.е., этот контроллер следует рассматривать вместе с ВВ55 как одно целое. Тогда он ничем не отличается от эмулятора ВВ55, только корпусов больше.

vinxru
17.01.2013, 12:31
Подключить два дополнительных повода (CS и WR) к ножкам ВВ55-ой, это ведь не страшно.

два МГТФ проводка. Кстати больше, еще питание надо подключить.

HardWareMan
17.01.2013, 12:35
Подключить два дополнительных повода (CS и WR) к ножкам ВВ55-ой, это ведь не страшно.

два МГТФ проводка. Кстати больше, еще питание надо подключить.
Не спорю, но этих сигналов нет на стандартном разъеме платы, например того же Экспресса. А значит - внесение изменений в схему. Придираюсь? нисколько. Лично мне главное что есть хоть какое-то решение и оно работает.

vinxru
17.01.2013, 12:43
Не спорю, но этих сигналов нет на стандартном разъеме платы, например того же Экспресса.

http://www.spetsialist-mx.ru/images/Express.png

Стандартный разъем - это место для запаивания проводов? Два недостающих провода запаиваются на 2 см левее.

---------- Post added at 11:43 ---------- Previous post was at 11:43 ----------

Кнопка сброса почему не на разъеме.

fifan
17.01.2013, 14:50
Я же предлагал сделать плату-пирог. В основе платы вот такая цанговая панель (http://lib.chipdip.ru/235/DOC000235477.jpg). В эту панель вставляем саму ВВ55, панельку запаиваем в плату, где находится сам контроллер с обвязкой. Минимум переделок, главное, чтоб на самой плате Специалиста была панелька, в которую потом можно было вставить цанговую панель с платой.

vinxru
17.01.2013, 16:12
Я же предлагал сделать плату-пирог. В основе платы вот такая цанговая панель. В эту панель вставляем саму ВВ55, панельку запаиваем в плату, где находится сам контроллер с обвязкой. Минимум переделок, главное, чтоб на самой плате Специалиста была панелька, в которую потом можно было вставить цанговую панель с платой.

Я проведу тесты и тогда точно скажу, в каких местах скорости МК будет не хватать.

Но не факт, что существуют программы, которым скорости МК не хватит.

Но и тут можно схитрить. Можно сделать альтернативные режимы работы МК, переключаемые клавишей на клавиатуре. Если сделать обработчик заточенный только под A,C - выход, B-вход (или наоборот), то скорости хватит.

А так, ATMega8 уже работоспособна.

---------- Post added at 15:12 ---------- Previous post was at 14:16 ----------


Atmega8 - ВВ55

Вертикаль

14 (PB0) - 4 (PA0)
15 (PB1) - 3 (PA1)
16 (PB2) - 2 (PA2)
17 (PB3) - 1 (PA3)
18 (PB4) - 40 (PA4)
19 (PB5) - 39 (PA5)
9 (PB6) - 38 (PA6)
10 (PB7) - 37 (PA7)
2 (PD0) - 14 (PC0)
3 (PD1) - 15 (PC1)
6 (PD4) - 16 (PC2)
11 (PD5) - 17 (PC3)

Горизонталь

23 (PC0) - 20 (PB2)
24 (PC1) - 21 (PB3)
25 (PC2) - 22 (PB4)
26 (PC3) - 23 (PB5)
27 (PC4) - 24 (PB6)
28 (PC5) - 25 (PB7)

Шифт

13 (PD7) - 19 (PB1)

HardWareMan
17.01.2013, 16:36
Стандартный разъем - это место для запаивания проводов? Два недостающих провода запаиваются на 2 см левее.

Кнопка сброса почему не на разъеме.
У кого провода, у кого разъем. Все там есть. и сброс в том числе.
http://savepic.org/2558302m.png (http://savepic.org/2558302.png)
Лично у меня, там МРН32 на коротком шлейфе, притянутым скобой.
http://savepic.org/2586964m.jpg (http://savepic.org/2586964.jpg)
Хотя я нашел одну свою старую фотку и там даже родной разъем есть:
http://savepic.org/2574672m.jpg (http://savepic.org/2574672.jpg)
Как видно - левых внешних проводов к плате нет (компаратор там навесной, но он чисто на плате).

fifan
21.01.2013, 07:57
Переразвёл печатку. Панелька под ВВ55 с удлинёнными выводами и под ней панелька для Атмеги расположены со стороны деталей. На этой же стороне находятся разъёмы для PS/2 клавы и программатора. С обратной стороны печатки находятся: резисторы, диоды и кондёр. Резисторные сборки опционально. У большинства Специалистов резисторы подтяжки уже присутствуют на основной плате, а вот у Специалиста_МХ2 их нет - ставим.
Ждём пилотную прошивку!

vinxru
21.01.2013, 10:25
Резисторные сборки опционально.

Внутри ATMega есть резисторные сборки, внешние не обязательны.

vinxru
24.01.2013, 02:10
Провел тесты. Тут тестируется три способа сканирования кнопок. Сканирование переключением режимов порта - это две верхние полоски. Сканирование вертикалей. Сканирование горизонталей.

Как и ожидалось, последовательность команд

STA imm
LDA imm

работает отлично

http://s16.radikal.ru/i191/1301/32/011e928a8d5c.jpg

А вот последовательность

STA
MOV A, M

не работает.

http://i077.radikal.ru/1301/59/c1a703c46770.jpg

Точнее работает только для сканирования горизонталей (PB2-PB7) и только для столбцов с кнопками 4...0 (PA0-PA7).

http://s017.radikal.ru/i410/1301/29/dc5d280a62ff.jpg

---------- Post added 24.01.2013 at 00:26 ---------- Previous post was 23.01.2013 at 23:50 ----------

С внешними резисторами я наверное смогу заставить работать ATMega8.

---------- Post added at 00:30 ---------- Previous post was at 00:26 ----------

Как практически, так и теоретически у нас есть 25 тактов, за которые мы должны дать ответ.

(7.5*4-5) = 25

---------- Post added at 00:32 ---------- Previous post was at 00:30 ----------



interrupt [EXT_INT0] void ext_int0() {
#asm
.EQU PIND=0x10
.EQU PINC=0x13
.EQU PINB=0x16
.EQU DDRC=0x14
.EQU DDRB=0x17
.EQU DDRD=0x11
.EQU PORTB=0x18
.EQU PORTC=0x15
.EQU PORTD=0x12
IN R8, SREG ; 1 1

; Переводим PORTC в режим ввода
CLR R9 ; 1 2
OUT DDRC, R9 ; 1 3

; DDRB = c2b[PINC];
IN R28, PINC ; 1 4
ANDI R28, 0x3F ; +1
CPI R28, 0x3F ; 1 5
BREQ _v12 ; 2 7
LD R9, Y ; 2 9 Адрес 0x200+R28
OUT DDRB, R9 ; 1 10

; DDRD = (DDRD & 0x33) | c2d[PINC];
SUBI R28, -64 ; 1 11
LD R9, Y ; 2 13 Адрес 0x200+R28+64

IN R28, DDRD ; 1 14
ANDI R28, 0x33 ; 1 15
OR R28, R9 ; 1 16
OUT DDRD, R28 ; 1 17

; Выход
OUT SREG, R8
RETI

_v12: ; Переводим порты B,D в режим ввода. PORTС в режим вывода
OUT DDRB, R9 ; 1 8 R9=0
IN R28, DDRD ; 1 9
ANDI R28, ~0x33 ; 1 10
OUT DDRD, R28 ; 1 11

; DDRC = b2c[PINB] | d2c[PIND & 0x33];
IN R28, PIND ; 1 12
ORI R28, 0xCC ; 1 13
LD R9, Y ; 2 15 Адрес 0x200+R28+192

IN R28, PINB ; 1 16
LDI R29, 1 ; 1 17
LD R28, Y ; 2 19 Адрес 0x100+R28

OR R9, R28 ; 1 20
OUT DDRC, R9 ; 1 21

; Выход
OUT SREG, R8
LDI R29, 2
#endasm
}


Пробовать буду завтра.

fifan
24.01.2013, 11:02
Да, лучше с внешними резисторами. Пробуй.

vinxru
24.01.2013, 11:04
Да, лучше с внешними резисторами. Пробуй.

А может ATMega16 с внешним кварцем? Я туда еще контроллер SD карты засуну. Будет 2 в 1.

fifan
24.01.2013, 11:23
А может ATMega16 с внешним кварцем? Я туда еще контроллер SD карты засуну. Будет 2 в 1.
Как хочешь, но вот у нас на Специалисте_МХ2 контроллер SD карты уже есть.

vinxru
24.01.2013, 13:51
Как хочешь, но вот у нас на Специалисте_МХ2 контроллер SD карты уже есть.

Дак на Специалисте_МХ2 есть и контроллер PS/2 клавиатуры.


Как хочешь.

Я хочу народу приятно сделать. Устройство на одной ATMega16, даже без кварца, позволяющее подключать сразу клавиатуру и SD-карту, это очень хорошо. Остается полностью свободным второй порт.

Но это хорошо для тех, у кого есть плата без клавиатуры.

Но тебе нужен только лишь контроллер PS/2.

Другому человеку, у которого есть заводской Специалист с клавиатурой, нужен только лишь контроллер SD. Ему PS/2 клавиатура нафиг не сдалась.

fifan
24.01.2013, 16:39
Дак на Специалисте_МХ2 есть и контроллер PS/2 клавиатуры.
Где? Если на счёт контроллера на плисине. То я его не делал. Так наброски на vhdl из клона Специалиста на Reverse u10 от Ewgeny7. Я жду твоих подвижек. Твой адаптер на Атмеге8 намного проще и компактнее.:speccy:

Error404
25.01.2013, 17:44
У адаптеров на МК есть один фатальный минус: попробуй турбировать свой ретроПК (хотя бы вдвое, как делалось в 90-х) и все эти адаптеры резко перестают успевать, т.к. как из ни х не выжимай оптимизируя алгоритмы, а частоты то у них не шибко высокие.

vinxru
25.01.2013, 17:48
У адаптеров на МК есть один фатальный минус: попробуй турбировать свой ретроПК (хотя бы вдвое, как делалось в 90-х) и все эти адаптеры резко перестают успевать, т.к. как из ни х не выжимай оптимизируя алгоритмы, а частоты то у них не шибко высокие.

Ну, у Орион-а, 86РК, Вектора клавиатура намного проще и там в 7 раз надо процессор разгонять.

А можно еще WAIT-ить процессор. :)

---------- Post added at 16:48 ---------- Previous post was at 16:47 ----------

Пишу-отлаживаю новую прошивку, которая должна успевать..

caro
25.01.2013, 19:37
У адаптеров на МК есть один фатальный минус: попробуй турбировать свой ретроПК (хотя бы вдвое, как делалось в 90-х) и все эти адаптеры резко перестают успевать, т.к. как из ни х не выжимай оптимизируя алгоритмы, а частоты то у них не шибко высокие.Турбировать надо с умом. Повысив частоту процессора надо не забыть, что периферия обычно имеет ограничение по быстродействию, поэтому циклы обращения к устройствам ввода/вывода надо постараться оставить неизменными.

Error404
26.01.2013, 18:07
Турбировать надо с умом. Повысив частоту процессора надо не забыть, что периферия обычно имеет ограничение по быстродействию, поэтому циклы обращения к устройствам ввода/вывода надо постараться оставить неизменными.

Все это так, я просто в понятной форме пытался донести до автора, что варианты с ФПГА хотя и более громоздкие, но таки имеют свои плюсы. А турбировать народ будет (если будет, в чем я честно говоря сомневаюсь) не заморачиваясь ни о чем - к гадалке не ходи. Собственно, это и в 90-х так же было: сначала турбировали по существующим схемам, а потом (поскольку грамотных схем отчего-то не существовало) носились выпучив глаза и подбирали ВВ55 такие, чтобы работало. Хотя скажи что надо вайтить ЦПУ при обращении к портам (или хотябы такт снижать) - все соглашались... и бежали далее за очередной ВВ55.

fifan
26.01.2013, 18:27
А турбировать народ будет (если будет, в чем я честно говоря сомневаюсь) не заморачиваясь ни о чем - к гадалке не ходи.
Специалист и его клоны вряд ли будет турбироваться. Смысл? Развивать периферию никто не собирается, а разгонять процессор (хотя бы тот же Z80) незачем. В играх невозможно играть да же на второй скорости. Я пробовал на клоне Специалиста на FPGA.
Так что PS/2 адаптер нужно делать без задела на большую скорость процессора.:v2_dizzy_keyboard:

Error404
26.01.2013, 19:58
Специалист и его клоны вряд ли будет турбироваться. Смысл? Развивать периферию никто не собирается, а разгонять процессор (хотя бы тот же Z80) незачем. В играх невозможно играть да же на второй скорости. Я пробовал на клоне Специалиста на FPGA.
Так что PS/2 адаптер нужно делать без задела на большую скорость процессора.:v2_dizzy_keyboard:

Собственно, для меня совершенно очевидно (за 7 лет на форуме), что на Спеце никто не собирается ни чего развивать - ни софт ни железо. Также как и на Орионе - за редким исключением, идет извлечение удовольствия из процесса пайки. Я всего лишь предлагаю быть перфекционистом по принципу "если уж делать - то делать". Осваивать какие-нибудь методы особо красивой пайки, к примеру. :) Ладно, прекращаю офтопик, пойду допивать. :)

vinxru
26.01.2013, 23:53
Есть один баг на который я уже смотрю несколько дней и понять не могу. При чтении порта B (в микроконтроллере) читается всякая ерунда. С остасльными портами все нормально.

Пока понять не могу.

fifan
27.01.2013, 11:38
Первые мои эксперементы в 3D в Altium Designer'е. Пока не нашёл step модель на 5-резисторную сборку и конденсатор, резисторы и диоды не знаю как на обратный слой перевернуть.

perestoronin
27.01.2013, 12:58
Первые мои эксперементы в 3D в Altium Designer'е. Пока не нашёл step модель на 5-резисторную сборку и конденсатор, резисторы и диоды не знаю как на обратный слой перевернуть.

Может для посадочных мест под резисторы и диоды предусмотреть и альтернативу под smd ? Они дешевле, а то и задаром, если с дохлой платы смахнуть феном. Аналогично и для сборок. Но думаю, что никто не обидится, если и вовсе отказаться от объемных резисторов, сборок и диодов.

Vasily
27.01.2013, 13:09
Может для посадочных мест под резисторы и диоды предусмотреть и альтернативу под smd ? Они дешевле, а то и задаром, если с дохлой платы смахнуть феном. Аналогично и для сборок. Но думаю, что никто не обидится, если и вовсе отказаться от объемных резисторов, сборок и диодов.

Только забивать под 1206, так как на его место прилично ставится 0805 и меньше, а вот уже на 0805 красиво посадить 1206 трудновато. Да и тяжело вручную паять все что меньше 1206.

dmluk
27.01.2013, 13:57
Только забивать под 1206, так как на его место прилично ставится 0805 и меньше, а вот уже на 0805 красиво посадить 1206 трудновато. Да и тяжело вручную паять все что меньше 1206.

0805 нормально, а вот мельче - труднее.

fifan
27.01.2013, 14:04
Можно и продублировать посадочные места под резисторы, конденсатор и диоды SMD исполнения. Повторяю они будут располагаться с обратной стороны платы. Там будут только выступать длинные выводы панельки под ВВ55. Вот такую нужно панельку (http://lib.chipdip.ru/235/DOC000235477.jpg). А лучше, чтоб наверняка можно было вставить на основную плату в панельку ВВ55 приобрести с удлинёнными выводами (http://lib.chipdip.ru/159/DOC000159471.jpg). Атмегу8 лучше сразу запаять, разъём для подключения программатора расположен с правой стороны платы.

vinxru
28.01.2013, 23:48
Сегодня сел на 30 минут за контроллер... и понял в чем дело. Я поставил подтягивающие резисторы на 8 ком и этого оказалось недостаточно. Слишком долго появляется единица, когда микроконтроллер отпускает землю. Я вставил в код прерывания NOP-ы и всё заработало.

Завтра перепаяю резисторы и продолжу доводить до ума контроллер.

UPD: Надо платы сделать, которые еще месяц назад обещал людям, так что в пятницу продолжу.

vinxru
01.02.2013, 23:58
Оптимизировал прерывание:

- 16 таков при сканировании горизонталей. Ок!

- 19 тактов при сканировании вертикалей. Плохо! Вероятность, что МК успеет среагировать 50%. То есть кнопка на тесте мерцает.

Возможно, что не хватает всего одного такта! завтра еще подумаю.

Я сделал компромиссный вариант.

- 14 тактов при сканировании вертикалей F5-F12. Ок!

- 21 такт при сканирвоании вертикалей F1-F4. Компьютер вообще не видит этих нажатий.

НО! Все выше написанное относится к самому быстрому способу сканирования клавиатуры, который вряд ли используется где либо. BIOS и все игрушки, что я пробовал, работают в любом случае.



interrupt [EXT_INT0] void ext_int0() {
#asm
.EQU PIND = $10
.EQU DDRD = $11
.EQU PORTD = $12
.EQU PINC = $13
.EQU DDRC = $14
.EQU PORTC = $15
.EQU PINB = $16
.EQU DDRB = $17
.EQU PORTB = $18
; На входе R9 = 0
; На входе R29 = 2
; Можно использовать регистры R9, R28

; Переводим PORTC в режим ввода
OUT DDRC, R9 ; 1 1

; Сохраняем флаги попозже, что бы увеличить дистанцию до команды чтения
IN R8, SREG ; 1 2

; DDRB = c2b[PINC];
IN R28, PINC ; 1 3 Убрал команду ANDI R28, 0x3F, но может случаиться, что без неё работать не будет
CPI R28, 0x3F ; 1 4
BRNE _v12 ; 1/2 5

; Вариант 1 (не работаеют кнопки в столбцах F1..F4, если сканировать эти столбцы. Остальное ок.)
OUT DDRB, R9 ; 1 6 R9=0
IN R28, DDRD ; 1 7
ANDI R28, $CC ; 1 8 Инфа передается по линиям 00110011, сбрасываем их в 0
OUT DDRD, R28 ; 1 9
IN R28, PINB ; 1 10
LDI R29, 1 ; 1 11
LD R9, Y ; 2 13 Адрес 0x100+R28
OUT DDRC, R9 ; 1 14
IN R28, PIND ; 1 15 Глюка нет, если заменить на PINB
ORI R28, $CC ; 1 16 Инфа передается по линиям 00110011, поэтому маскируем остальные
LDI R29, 2 ; 1 17
LD R28, Y ; 2 19 Адрес 0x200+R28+192
OR R28, R9 ; 1 20
OUT DDRC, R28 ; 1 21

; Вариант 2 (мерцают все кнопки при сканировании столбцов. Сканирование строк ок.)
; IN R28, DDRD ; 1 6
; ANDI R28, $CC ; 1 7 Инфа передается по линиям 00110011, сбрасываем их в 0
; OUT DDRD, R28 ; 1 8
; OUT DDRB, R9 ; 1 9 R9=0
; DDRC = d2c[PIND & 0x33] | b2c[PINB]
; IN R28, PIND ; 1 10 Глюка нет, если заменить на PINB
; ORI R28, $CC ; 1 11 Инфа передается по линиям 00110011, поэтому маскируем остальные
; LD R9, Y ; 2 13 Адрес 0x200+R28+192
; IN R28, PINB ; 1 14
; LDI R29, 1 ; 1 15
; LD R28, Y ; 2 17 Адрес 0x100+R28
; OR R28, R9 ; 1 18
; OUT DDRC, R28 ; 1 19
; LDI R29, 2

; Выход
CLR R9
STS _wrd, R9
STS _fl, R29
OUT SREG, R8
RETI

_v12: ; - 6
; DDRB = c2b[PINC];
LD R9, Y ; 2 8 Адрес 0x200+R28
OUT DDRB, R9 ; 1 9

; DDRD = (DDRD & 0xCC) | c2d[PINC];
SUBI R28, -64 ; 1 10
LD R9, Y ; 2 12 Адрес 0x200+R28+64

IN R28, DDRD ; 1 13
ANDI R28, $CC ; 1 14 Инфа передается по линиям 00110011, поэтому зануляем их
OR R28, R9 ; 1 15
OUT DDRD, R28 ; 1 16

; Выход
CLR R9
SER R28
STS _wrd, R28
STS _fl, R28
OUT SREG, R8
#endasm
}


---------- Post added at 22:58 ---------- Previous post was at 22:51 ----------

Залипание кнопок само вылечилось...

vinxru
02.02.2013, 19:10
Засунул обработчик прерывания прямо в таблицу прерывания, сэкономил 2 такта. Но кнопка на тесте все равно мерцают.

Еще один такт :)

---------- Post added at 18:06 ---------- Previous post was at 17:27 ----------

14 и 17 тактов. И -2 такта за счет размещения обработчика прямо в таблице прерывания. Все ок!

---------- Post added at 18:10 ---------- Previous post was at 18:06 ----------



interrupt [EXT_INT0] void ext_int0() {
#asm
.EQU PIND = $10
.EQU DDRD = $11
.EQU PORTD = $12
.EQU PINC = $13
.EQU DDRC = $14
.EQU PORTC = $15
.EQU PINB = $16
.EQU DDRB = $17
.EQU PORTB = $18
; На входе R9 = 0
; На входе R29 = 2
; Можно использовать регистры R8, R9, R28, R29

; Переводим PORTC в режим ввода
OUT DDRC, R9 ; 1 1

; Сохраняем флаги попозже, что бы увеличить дистанцию до команды чтения
IN R8, SREG ; 1 2

; DDRB = c2b[PINC];
IN R28, PINC ; 1 3 Убрал команду ANDI R28, 0x3F, но может случаиться, что без неё работать не будет
CPI R28, 0x3F ; 1 4
BRNE _v2 ; 1 5 Если был переход, то 2 такта

OUT DDRD, _PREPARED_DDRD ; 1 6 Сначала записываем DDRD, что бы увеличить дистанцию до команды чтения
OUT DDRB, R9 ; 1 7 R9 равен 0
; DDRC = d2c[PIND & 0x33] | b2c[PINB]
IN R28, PIND ; 1 8 Глюка нет, если заменить на PINB
ORI R28, $CC ; 1 9 Инфа передается по линиям 00110011, поэтому маскируем остальные
LD R9, Y ; 2 11 Адрес 0x200+R28+192
IN R28, PINB ; 1 12
LDI R29, 1 ; 1 13
LD R28, Y ; 2 15 Адрес 0x100+R28
OR R28, R9 ; 1 16
OUT DDRC, R28 ; 1 17

; Выход
LDI R29, 2
CLR R9
STS _wrd, R9
STS _fl, R29
OUT SREG, R8
RETI

_v2: ; DDRB = c2b[PINC];
LD R9, Y ; 2 8 Адрес 0x200+R28
OUT DDRB, R9 ; 1 9

; DDRD = (DDRD & 0xCC) | c2d[PINC];
SUBI R28, -64 ; 1 10
LD R28, Y ; 2 12 Адрес 0x200+R28+64
OR R28, _PREPARED_DDRD ; 1 13
OUT DDRD, R28 ; 1 14

; Выход
CLR R9
SER R28
STS _wrd, R28
STS _fl, R28
OUT SREG, R8
#endasm
}

fifan
02.02.2013, 20:23
Всё прекрасно! Вопрос возник. А сколько занимает таблица перекодировки. Сколько раскладок можно хранить в памяти Атмеги8?

vinxru
02.02.2013, 21:23
Две настраиваемых. Хранятся в еепром. Одна таблица занимает 208 байт. Еепром обьемом 512 байт. И еще 2 дефолтных, которые можно скопировать в настраиваемые. Хранятся в основном ПЗУ.

---------- Post added at 20:23 ---------- Previous post was at 20:04 ----------

но если надо, могу сделать 10 таблиц

fifan
02.02.2013, 21:33
Думаю нужно две раскладки: кириллица и латиница. Переключение по Alt. Не знаю какое у тебя соответствие, а я в Специалисте на FPGA делал так:

http://www.spetsialist-mx.ru/images/PS_2_keyboard1.png

Русская раскладка:

http://www.spetsialist-mx.ru/images/PS_2_keyboard2.png

Кнопки ТЕСТ, РЕЖИМ, TURBO и NORMAL - чисто программно реализованные переключения в плисине и нам не пригодятся.

vinxru
03.02.2013, 00:33
Настрой пару раскладок с помощью этой программы, я её встрою в МК.

vinxru
03.02.2013, 00:34
В этой программе настройки можно задавать одновременное нажатие клавиши и шифта. Например, что бы повесить на кнопку * справа символ умножения и т.п.

vinxru
04.02.2013, 13:33
http://s005.radikal.ru/i209/1302/2e/653d3e147b9e.png

---------- Post added at 12:33 ---------- Previous post was at 12:30 ----------

Могут быть ошибки в схеме

http://s019.radikal.ru/i625/1302/ae/9e590d849caf.png

http://s005.radikal.ru/i209/1302/41/b64935497f19.jpg

vinxru
05.02.2013, 23:00
http://s60.radikal.ru/i168/1302/b5/f5099ac62c2d.jpg

---------- Post added at 22:00 ---------- Previous post was at 21:59 ----------

http://s018.radikal.ru/i509/1302/5c/ecfc66b2d1e5.jpg

Vladimir_S
05.02.2013, 23:21
vinxru, Красиво!

vinxru
06.02.2013, 14:59
Ну, как то так. Вторым этажом над ВВ55-ой.

http://s020.radikal.ru/i720/1302/45/316a9c56ed4e.jpg

http://s001.radikal.ru/i196/1302/24/28c57ded99de.jpg

В свободных местах еще будет контроллер SD и контроллер цвета.

fifan
06.02.2013, 17:27
А код полностью отлажен? Когда реализ?

vinxru
06.02.2013, 17:30
Нет, не полностью. За неделю я код приберу, потыкаю кнопки. Но вроде всё ок.

Жду настроенных раскладок клавиатур, что бы вставить в прошивку :)

fifan
06.02.2013, 18:30
Жду настроенных раскладок клавиатур, что бы вставить в прошивку :)
От кого ждёшь от нас? Если честно я в твоей html программе не разобрался что она делает. Рисунки раскладок я приводил.

vinxru
06.02.2013, 18:51
От кого ждёшь от нас? Если честно я в твоей html программе не разобрался что она делает. Рисунки раскладок я приводил.

Ага. Мне по твоей картинке не совсем понятно.

Моя программа настраивает раскладку. Сверху клавиатура PC, снизу Специалиста.

Надо сначала нажать на клавишу Специалиста, потом на клавишу PC, создастся связь между ними. Все это графически будет понятно отображено.

В итоге в самом нижнем поле сформируется массив чисел, это я вставлю в МК.

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

---------- Post added at 17:51 ---------- Previous post was at 17:44 ----------


134,221,220,217,216,215,214,213,212,211,210,209,20 8,
0,4096,0,145,204,201,200,199,198,197,196,195,194,
193,192,205,144,131,140,0,0,145,176,192,135,189,
188,185,184,183,182,181,180,179,178,177,176,128,12 9,
0,0,196,195,194,205,0,173,172,169,168,167,166,
165,164,163,162,161,160,199,198,197,256,157,156,15 3,
152,151,150,149,148,147,146,256,137,204,201,200,12 8,
0,0,141,133,141,0,0,0,132,136,130,193,160


http://s018.radikal.ru/i515/1302/97/381a8b6e5b27.png

fifan
07.02.2013, 11:02
Ага, будем разбираться. Печатку в скопе с другими я заказываю. Кстати твой элемент на диодах, аноды как входы в эмуляторе работает как 2 ИЛИ, мой с перевёрнутыми диодами не верно пашит. Ставлю твою схему.

vinxru
07.02.2013, 11:40
Я еще не проверял эту схему. Только вчера все разъемы подпаял. Если хочешь быть полностью уверенным, что это заработaет как надо, подожди денек, другой.

У этого специалиста есть 2 неразведенных разъемы DIN5. Я на один из них повесил питание. А на второй клавиатуру по стандарту AT.

---------- Post added at 10:36 ---------- Previous post was at 10:35 ----------


Ага, будем разбираться.

Там несчем разбираться. Тык-тык и готово. Я максимально упростил настройку.

---------- Post added at 10:40 ---------- Previous post was at 10:36 ----------

http://s08.radikal.ru/i181/1302/c6/4e80dac261b6.jpg

vinxru
08.02.2013, 15:21
Сделал еще один режим.

После нажатия клавиши PS/2 клавиатуры происходит немедленное обновление эмулируемой клавиатуры (матрицы). Но так же в это время может произойти прерывание. Вероятность этого 1/100000, но в результате этого нажмется не та кнопка.

Что бы это полностью предотвратить, я сделал кнопку отключения немедленного обновления. То есть обновление будет происходить только лишь по прерыванию. Сейчас это PRSCR, но в любой момент кнопку можно отключить или поменять.

Суть вот в чем. После нажатия кнопки вызывается функция:



intTrigger = 0;
if(scanMode) {
v_i = PINC & 0x3F;
v_j = c2b[v_i];
v_i = c2d[v_i] | prepared_ddrd;
if(intTrigger) return;
DDRB = v_j, DDRD = v_i;
} else {
v_i = b2c[(unsigned char)PINB] | d2c[PIND & 0x33];
if(intTrigger) return;
DDRC = v_i;
}


А в прерывании происходит установка intTrigger = 1.

И глюк случится, если прерывание произойдет между if(intTrigger) return и DDR =. Это всего несколько тактов ATMega. Если на это время отключать прерывания, то глючить начинает только сильнее.

Еще я добавил в прошивку (и программу настройки) клавишу Сброс. Но пока экспериментировать не буду. Ибо у меня всего одна попытка, придется отключить перепрограммирование МК, что бы освободить дополнительный вывод, а с первого раза у меня ничего не работает.


---------- Post added at 14:21 ---------- Previous post was at 14:02 ----------

Еще есть страшная мысль.

Сейчас мне необходимо модифицировать ПЗУ монитора, что бы встроить в неё загрузчик с SD.

Но есть еще один вариант. При нажатии на специальную кнопку, контроллер клавиатуры сам выходит в монитор и вводит коротенькую программу, с помощью директив монитора. А уже эта программа грузит данные с флешки.

Тогда компьютер останется со стандартным ПЗУ.

Как вам эта идея?

b2m
08.02.2013, 16:22
Сейчас мне необходимо модифицировать ПЗУ монитора, что бы встроить в неё загрузчик с SD.

Но есть еще один вариант. При нажатии на специальную кнопку, контроллер клавиатуры сам выходит в монитор и вводит коротенькую программу, с помощью директив монитора. А уже эта программа грузит данные с флешки.

Тогда компьютер останется со стандартным ПЗУ.

Как вам эта идея?
А не проще (если есть свободная нога) подать сигнал на магнитофонный вход? Есть вариации Специалистов без монитора, они после сброса умеют только грузить с магнитофона.

vinxru
08.02.2013, 16:28
Свободных ног не вообще.

Но наверное можно использовать линию клавиатуры. Во время загрузки клава не нужна.

fifan
08.02.2013, 18:07
1. свободная нога есть, но её лучше задействовать под вывод сигнала сброса на плату. Ножку сброса в Атмеге не рекомендуют использовать. По крайней мере после прошивки Атмегу ещё раз перепрошить не получится. Есть лекарство - Atmega Fusebit Doctor.
2. HardWareMan делал в Экспрессе загрузку в ОЗУ информации с SD карты. Нужно немного изменить схему с целью отключения ПЗУ.

vinxru
09.02.2013, 21:23
Только время появилось сесть.

Специальный режим, о котором я писал выше, больше не нужен. Я решил проблемы одновременного вызова двух функций.

На время выполнения функции в основном потоке я устанавливаю переменную intTrigger в единицу.



void updatePorts() {
intTrigger = 1;
...
intTrigger = 0;
}


Таким образом в прерывании я знаю, что она выполняется. И если выполняется, то выталкиваю из стека адрес возврата. И возврат из прерывания происходит в функцию, которая вызвала updatePorts().



OR _intTrigger, _intTrigger
BRNE _v3
OUT SREG, R8
RETI
...
_v3: POP R28
POP R28
MOV _intTrigger, R9 ; =0
OUT SREG, R8
RETI


---------- Post added at 20:23 ---------- Previous post was at 20:21 ----------

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

Я подозреваю, что резисторов на 9 ком недостаточно. Ставьте 4,7 ком.

HardWareMan
09.02.2013, 21:49
Хотя глючок я все равно поймал. Если целый час нажимать случайные клавиши 10 раз в секунду, то через час случайно нажимается случайная кнопка.

Я подозреваю, что резисторов на 9 ком недостаточно. Ставьте 4,7 ком.


И как это ты отловил случайную кнопку среди твоих же случайных кнопок, которые нажимал 10 раз в секунду (итого за час будет 10*60*60=36000)?

vinxru
09.02.2013, 22:05
Сделал массив случайных чисел. Записал его в МК. И этот же массив в тестовую программу, которую на флешку записал.

---------- Post added at 21:04 ---------- Previous post was at 21:00 ----------


Есть лекарство - Atmega Fusebit Doctor.

Во первых, мн лень его собирать. А во вторых, МК запаян на плату. А плата запаяна в комп.

Я рискну на прошлой версии МК. Все равно распаивать.

---------- Post added at 21:05 ---------- Previous post was at 21:04 ----------


HardWareMan делал в Экспрессе загрузку в ОЗУ информации с SD карты. Нужно немного изменить схему с целью отключения ПЗУ.

Была у меня мысль скомпилировать PetitFS под 8080. С одной стороны круто, что не нужен МК. Но я хочу помимо всего запустить CP/M. А там нет свободной памяти.

HardWareMan
10.02.2013, 04:16
Сделал массив случайных чисел. Записал его в МК. И этот же массив в тестовую программу, которую на флешку записал.
Т.е., ты эмулировал нажатия программой того же контроллера, который и проверял? Или все же другим контроллером по PS/2 посылал?

vinxru
10.02.2013, 11:55
Т.е., ты эмулировал нажатия программой того же контроллера, который и проверял?

ага.

HardWareMan
10.02.2013, 17:04
Условия эксперимента нарушены. Пили эмулятор PS/2 клавиатуры, который посылает кнопки.

vinxru
10.02.2013, 17:28
Я проверял только передачу данных между МК и компом. Приём PS/2 вроде нормально работает.

fifan
16.02.2013, 20:03
Ну как, когда представишь публике рабочий экземпляр? Видео можешь представить?

vinxru
16.02.2013, 20:22
Скоро. Бету могу выгрузить как до компа доберусь.

---------- Post added at 19:22 ---------- Previous post was at 19:21 ----------

А видео, потомучто не веришь?

vinxru
16.02.2013, 20:37
Вот бета версия. Там программа на Си для CodeVisionAVR и готовая прошивка. Прошивка не самая быстрая. Для ускорения надо руками подправить ассебмлерный файл. Так же там криво кнопки настроены (русская раскладка вообще криво, а в английской я забыл F12).

vinxru
17.02.2013, 00:38
Записал видео

http://zx.pk.ru/showpost.php?p=576913&postcount=111

fifan
17.02.2013, 17:24
Вот бета версия. Там программа на Си для CodeVisionAVR и готовая прошивка. Прошивка не самая быстрая. Для ускорения надо руками подправить ассебмлерный файл. Так же там криво кнопки настроены (русская раскладка вообще криво, а в английской я забыл F12).
Под этими строками расположены коды нажатий, которые делаются в твоей html программе?


// Английская раскладка

// Русская раскладка
:speccy:

vinxru
17.02.2013, 19:31
да

fifan
18.02.2013, 16:06
Каково назначение двух верхних справа клавиш? Одна я догадываюсь сброс. Хорошо бы предусмотреть переключение режимов STD/MX, т.е. обычный Специалист и МХ. Они отличаются разным назначением самой верхней строки клавиатуры (функциональных клавиш).

vinxru
18.02.2013, 18:23
Одна пустая кнопка - это для удобного удаления неправильной привязки. Аналогичный эффект, это просто даблкликнуть по кнопке.

Вторая кнопка - это переключение раскладок.

Сброс в этой программе пока не настраивается. Я сегодня выгружу версию, где будет эта настройка.

И сделаю переключатель STD/MX

Кнопка Pause на PC-шной клавиатуре всегда используется самим контроллером для перепрограммирвоания во время работы и её назначать нельзя.

fifan
18.02.2013, 19:07
Вот можно посоветовать некоторые соответствия:
Shift - НР
Alt - РУС/LAT
Delete - Сброс
Num Lock - MX/Стандарт
А вот черновая привязка всех клавиш. Жаль проверить ошибки не на чём. Почти один в один с моего Специалиста на ПЛИС (http://www.spetsialist-mx.ru/index9.html).

-- english
390,221,220,217,216,215,214,213,212,211,210,209,20 8,
0,0,0,412,204,201,200,199,198,197,196,195,194,
193,192,461,144,0,396,0,0,401,432,448,391,157,
169,183,166,150,172,185,151,165,167,180,179,384,25 6,
385,0,396,393,387,205,0,168,153,163,173,181,177,
189,184,164,176,256,161,388,0,386,400,178,149,188,
162,148,182,152,146,160,145,400,393,0,392,385,384,
0,0,397,389,397,0,0,0,388,392,386,0,416

-- russian
390,221,220,217,216,215,214,213,212,211,210,209,20 8,
0,0,0,412,204,201,200,199,198,197,196,195,194,
193,192,461,144,0,396,0,0,401,432,448,391,445,
444,441,440,439,438,437,436,435,434,433,400,384,25 6,
385,0,396,393,387,205,0,429,428,425,424,423,422,
421,420,419,418,256,417,388,0,386,400,413,412,409,
408,407,406,405,404,403,145,400,393,0,392,385,384,
0,0,397,389,397,0,0,0,388,392,386,0,416

vinxru
19.02.2013, 00:06
Вот новая версия. Я там F1-F12 подписал.

В твоих раскладках небольшой косяк. В одной клавише можно привязать одновременно НР и какую нибудь клавишу из матрицы. Клавишу HP в настройщике надо отжимать.

Что бы назначить на шифт НР, надо НР нажать. И убедится, что символьная кнопка не выбрана. Если выбрана, то кликнуть по ней.

vinxru
19.02.2013, 00:24
А вот черновая привязка всех клавиш. Жаль проверить ошибки не на чём.

Кроме кучи МГТФ и одной ATMega8, тебе ничего не нужно. Резисторы уже должны быть на плате компьютера.

Ну еще пару диодов и резисторов.

---------- Post added at 23:09 ---------- Previous post was at 23:08 ----------

Я думал тебе сделать плату, но я не делаю металлизации отверстий. А подпаивать микросхемы и панельки с двух сторон, это геморой.

---------- Post added at 23:14 ---------- Previous post was at 23:09 ----------

Подправил
english

134,221,220,217,216,215,214,213,212,211,210,209,20 8,
0,0,0,156,204,201,200,199,198,197,196,195,194,
193,192,205,144,512,140,0,4096,145,176,192,135,157 ,
169,183,166,150,172,185,151,165,167,180,179,128,0,
129,0,140,137,131,205,0,168,153,163,173,181,177,
189,184,164,176,0,161,132,0,130,256,178,149,188,
162,148,182,152,146,160,145,256,137,0,136,129,128,
0,0,141,133,141,0,0,0,132,136,130,0,160

---------- Post added at 23:16 ---------- Previous post was at 23:14 ----------

russian
134,221,220,217,216,215,214,213,212,211,210,209,20 8,
0,0,0,156,204,201,200,199,198,197,196,195,194,
193,192,205,144,512,140,0,4096,145,176,192,135,189 ,
188,185,184,183,182,181,180,179,178,177,144,128,0,
129,0,140,137,131,205,0,173,172,169,168,167,166,
165,164,163,162,0,161,132,0,130,256,157,156,153,
152,151,150,149,148,147,145,256,137,0,136,129,128,
0,0,141,133,141,0,0,0,132,136,130,0,160

---------- Post added at 23:24 ---------- Previous post was at 23:16 ----------

Вот так

http://s45.radikal.ru/i107/1302/80/256a7aeea721.png

vinxru
21.02.2013, 13:25
Мне надо добавить проверку подвисания клавиатуры и её перезагрузку. Сейчас, если вытащить и вставить разъем клавы, то клавиатура может не включиться.

Это не сложно, надо просто сделать.

Vladimir_S
21.02.2013, 16:09
У меня вопрос ко всем, кто делает контроллеры клавиатур. Это что, религия такая, таскать из контроллера в контроллер эти дурацкие раскладки?
Например перед тобой лежит клава на которой четко обозначено, что круглые скобки расположены на цифрах 9 и 0. Зачем их тащить на 8 и 9. Ну и все остальное так же - по маркировке на кнопках делать.

HardWareMan
21.02.2013, 16:16
ЙЦУКЕН он такой, да.

dmluk
21.02.2013, 16:17
А что мешает оставить буквы, цифры, знаки препинания на их текуших местах, как на обычной PC-шной клаве?

Vladimir_S
21.02.2013, 16:19
HardWareMan, а если по существу вопроса?

---------- Post added at 15:19 ---------- Previous post was at 15:18 ----------


А что мешает оставить буквы, цифры, знаки препинания на их текуших местах, как на обычной PC-шной клаве?
так и я о том.

dmluk
21.02.2013, 16:20
HardWareMan, а если по существу вопроса?

Типа раскладка такая. Наследие советского стандарта.

Vladimir_S
21.02.2013, 16:25
Типа раскладка такая. Наследие советского стандарта.
Так на РС клаве оба этих стандарта сохранены. Кириллица - ЙЦУКЕН, латинские - QWERTY. Чего еще то надо?

caro
21.02.2013, 16:29
ИЦУКЕН тут ни при чем.
На Спектрумовской клавиатуре скобки тоже стоят на 8 и 9.
Я их обычно смещаю на 9 и 0, но при этом смещаются и токены расположенные на этих клавишах, что некоторым пользователям не нравится.

dmluk
21.02.2013, 16:31
Так на РС клаве оба этих стандарта сохранены. Кириллица - ЙЦУКЕН, латинские - QWERTY. Чего еще то надо?


Так и я о том же. Оставить клаву как она есть QWERTY/ЙЦУКЕН.
И плюсом - довесить на Capsы, Shiftы и прочие служебные кнопки необходимые кнопки для Спеца.

Несколькими постами ранее, я так понял, была предложена раскладка клавы несколько отличающаяся от стандартоной РСшной.

Vladimir_S
21.02.2013, 16:32
caro, я не про спектрумовскую клаву, там да это посложней. Я про простейшие - РК86, Орион и т.д.

HardWareMan
21.02.2013, 16:54
Я в 11м году напоролся у нас на такую клавку, о которой написал по соседству (http://www.nedopc.org/forum/viewtopic.php?t=9684):

Проходил мимо и заприметил эту клавку:
http://savepic.ru/4094852m.jpg (http://savepic.ru/4094852.jpg)
У нее прикольные квадратные кнопки, как у некоторых ноутбуков, компактное поле да и вообще на ощупь приятная.
http://savepic.ru/4083588m.jpg (http://savepic.ru/4083588.jpg)
Скажу сразу: она USB. Так что контроллер нафиг, замутим свое, на какой-нибудь меге или пике. А сканкоды гонять по обычному уарту. Обычные однобайтовые сканкоды, где старший бит указывает на нажатие/отжатие.
http://savepic.ru/4087684m.jpg (http://savepic.ru/4087684.jpg)
Но ценность данной клавки не в этом. Я разбирал несколько клавиатур с подобными кнопками и заприметил, что у них пленка поля подключается через разъем. А само поле выглядит вполне законченным устройством. Это в отличии от дешевых и не очень других клавиатур.
http://savepic.ru/4085636m.jpg (http://savepic.ru/4085636.jpg)
Вот матрица только подкачала. Было бы просто офигенно, если бы она была прямой, но она не прямая. Она рассчитана так, чтобы отслеживать максимальное количество одновременно нажатых клавиш с учетом частоты их применения. Поэтому, не получится подключить ее напрямую к ВВ55 (точнее получится, если подменить сканкоды в ПСПЗУ, но тогда теряется совместимость с другим софтом, который использует эту матрицу). Поэтому, скорее всего, придется поставить какойнить тайни2313, но протокол будет уже натурально дуплексный UART, а не непонятно что PS/2.
http://savepic.ru/4080516m.jpg (http://savepic.ru/4080516.jpg)
Касаемо буковок скажу: кнопки у нее плоские, квадратные. Я на работе в кореле нарисую нужные буковки в нужной (спецовской!) раскладке, напечатаю на самоклейку и нанесу на клавку. Проблема с раскладками решена. Кстати, предлагаю так же решать проблему раскладки и при применении обычной клавиатуры: уж дешевую отдельную клавку выделить можно, правда?
В то время я прикупил 3 штуки, потому что у нас в городе такая тенденция - дизайны клавок меняются и исчезают самые удобные, остаются только уродские. Недавно, кстати, опять она всплыла в одной конторке ИЧСХ цена почти не изменилась за 2 года... Ну не суть.
Позже, в кореле былы намалеваны кнопки, которые на лазернике распечатывались на самоклейку:
http://savepic.ru/4126598m.png[ (http://savepic.ru/4126598.png)
Как видно - раскладка полностью оригинальная от Специалиста (между стрелками справа кнопка, помеченная крестами, на самом деле "ПС", картинка старая). Внутри клавки сейчас стоит АТмега8515 в корпусе QFP, которая по UARTу (ненавижу PS/2) гоняет сканкоды клавиш (тупо от 0 и по рядам, исключение - комбо сброса) и состояние лампочек. Фотки контроллера не делал. Провод оставил USB - удобно для UARTа, гнезд USB с мамок - вагон. Но вот с контроллером клавиатуре на ответной стороне пока еще не определился. Как решу данный вопрос - сделаю полный фотоотчет. Такие дела.

Vladimir_S
21.02.2013, 17:04
раскладка полностью оригинальная от Специалиста
Я же говорил - религия.

HardWareMan
21.02.2013, 17:08
Я же говорил - религия.
Потому что это не PC клавиатура, а практически родная спецовская. Если бы можно было переделать пленку - я бы переделал. На нормальной РС клавиатуре я бы оставил согласно нарисованным.

vinxru
21.02.2013, 17:17
Я кстати делал когд ато еще 2 варианта раскладки, которые включаются при нажатом шифте.

Но и так быстро привыкаешь.

Vladimir_S
21.02.2013, 17:26
Но и так быстро привыкаешь.
Конечно привыкаешь, но Н-А-Х-Р-Е-Н-А?

HardWareMan
21.02.2013, 17:39
Конечно привыкаешь, но Н-А-Х-Р-Е-Н-А?
Вопрос в плане "НАХРЕНА на стандартной РС клавиатуре" или "НАХРЕНА вообще"?

Vladimir_S
21.02.2013, 17:47
РС клава не в пример удобнее (причем надоела черная, ну подключи белую).
Я просто не понимаю для чего люди делают различные раскладки, ведь на кнопках есть надписи. Вот и надо им соответствовать.

vinxru
21.02.2013, 17:57
Не всегда можно адекватно разместить все кнопки на PC-шной клавиатуре.

HardWareMan
21.02.2013, 18:02
РС клава не в пример удобнее (причем надоела черная, ну подключи белую).
Я просто не понимаю для чего люди делают различные раскладки, ведь на кнопках есть надписи. Вот и надо им соответствовать.
Ну вот и ответ.

fifan
21.02.2013, 18:07
Написали десяток постов в пустую. Никто не предложил существенного выхода из поднятой ситуации. Я не пойму чем вам не нравиться предложенная раскладка?

Если большинство символов совпадает это хорошо. А чтоб подделываться под писишную, то нужно менять Монитор в Специалисте или дотошно следить и прописывать в проге атмегы все регистры под несколько "неудобных" кнопок. Я так понял, дело упёрлось в такие как -/_, =/+ и другие на PS/2 клаве. Но ничего не поделаешь, по крайней мере сейчас. Главное запустить PS/2 адаптер, оттестировать. Один vinxru конечно не уследит за всеми клавишами, их так много, более ста. :speccy:

Главное запустить адаптер. Потом все клавиши отладить. :v2_cool:

Что например скажет b2m на счёт соответствия нажатий клавиш двух клав PS/2 и специалистовской. Он как-то обошёл эту проблему в своём эмуляторе.

Vladimir_S
21.02.2013, 18:07
Не всегда можно адекватно разместить все кнопки на PC-шной клавиатуре.
Это по этому все стараются разместить на одной кнопке символы с разницей в 20Н?

vinxru
21.02.2013, 18:14
Там еще проблема в том, что контроллер клавиатуры должен знать активную раскладку.

Клавиша " ' Э будет привязана к трем различным кнпокам Специалиста в зависимости от РУС/ЛАТ + Шифт.

HardWareMan
21.02.2013, 18:20
Именно. Проблема Спеца в том, что он на клавку не говорит об выбранном языке (ситуация с шифтом решаема). Тот же Орион говорит - там предусмотрено. А в спеце нет. Тупо матрица 12х6. Вот и приходится повторять ее.

Vladimir_S
21.02.2013, 18:23
А софт напрямую в клаву лезет или можно поправить монитор?

vinxru
21.02.2013, 18:27
На последних раскладках потерялся Ъ

b2m
21.02.2013, 18:33
Что например скажет b2m на счёт соответствия нажатий клавиш двух клав PS/2 и специалистовской. Он как-то обошёл эту проблему в своём эмуляторе.
Вроде, нет там никакой проблемы. По умолчанию у меня qwerty, если в меню выбрать jcuken, то клавиши транслируются по таблице.

fifan
21.02.2013, 18:47
Короче, проблему высказываниями здесь не решить. Нужно собирать девайс. Там разберёмся.

HardWareMan
21.02.2013, 22:16
А софт напрямую в клаву лезет или можно поправить монитор?
Я знаю, что адаптированные со спецтрума игры (вроде Lode Runner или D.T.E.), бэйсик "Практик" и еще некоторые обычные игры (КОРТ, Алмаз) точно лезут напрямую, причем некоторые через IN/OUT. Обидно, что одной правкой монитора не обойтись - так бы можно было в нем вывести штатный сигнал языка. Сам сигнал, кстати, есть - там признак в памяти у стандартных мониторов, который переключает высоту тона нажатия клавиш, которая разная для языков.

vinxru
21.02.2013, 23:31
Можно конечно сделать, что бы пользователь сам сообщал контроллеру, что переключился РУС-ЛАТ. Причем, он это уже и так делает, переключая раскладки клавишей Scroll Lock.

Тогда будет крайне непонятно поведение клавиатуры, если Scroll Lock и РУC/ЛАТ будут в противоположных состояниях.

vinxru
24.03.2013, 23:59
Очередная версия.

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

Сделал режим MX. Переключается клавишей Print Screen.

fifan
27.03.2013, 20:01
Как бы хотелось взглянуть на фьюзы для прошивки.

vinxru
27.03.2013, 20:29
http://s018.radikal.ru/i512/1303/89/2f7c133b0bb6.png

fifan
24.06.2013, 06:05
vinxru, ты писал: (http://www.nedopc.org/forum/viewtopic.php?t=10272&start=0) "прошил один из контроллеров клавиатуры с фьюзом RSTDISBL. Т.е. ножка, которая использовалась для перепрограммирования контроллера, теперь используется для вывода данных. В этой поделке она сбрасывает компьютер.
И сразу же нашел ошибку в программе. Вывод "сброс компьютера" оказался подключенным через внутренний резистор 10 ком (программа обнуляла регистр DDRС). Пришлось ставить усилитель на транзисторе. Еще забыл задать начальное состояние сброса. Сразу после включения до нажатия любой клавиши, сброс зажат."
На схеме не где не отображен этот транзистор. Подскажи где его ставить. Ещё на схеме не подписаны выводы синхронизации и данных на PS/2 клавиатуру.

fifan
01.09.2013, 20:09
У меня тоже заработал PS/2 адаптер только наполовину. Объясню почему. Всё в STD режиме работает, но переключаюсь в МХ (в Специалисте_МХ2 по директиве Х) и всё. Висим. Ну вроде такие как ВК, ПС, ПВ, РУС/LAT работают, а вот цифровые, верхний ряд и цифры - не в какую, даже не пищит динамик на нажатие большинства. Переход в МХ режим, как написано здесь (http://www.nedopc.org/forum/viewtopic.php?t=10272&start=0) по Insert'у и по Print Screen'у не происходит и как оно должно происходить - индикация-то режима вроде есть, а толку нет. В МХ нужно вначале вводить дату. Никак. Ладно нажимаю ВК и всё. F6-то не работает, даже игры с Flash-диска не запустить. Обидно.:(
Ещё как организовать сброс? Я так предполагаю нужно вывод Атмеги (какой?) посадить на сброс? Но у нас фьюз RSTDISBL не включен. Я выставлял фьюзы как на рисунке два топика назад. Блин а если он у нас включен - всё! без Atmega Fusebit doctor'а уже этот контроллер не прошить?:mad:
Вот нарисовал выводы на разъём клавы.

fifan
01.09.2013, 20:25
На сайте автора прошивки от 5.06.2013 (я его прошивал), а здесь несколько топиков назад представлен архив с файлами от 24.03.2013.

fifan
02.09.2013, 05:50
Автор написал:
"А у меня все руки не доходят перекинуть F1-F10. Завтра точно сделаю, или я редиска."
Но я говорю, что почти все клавиши не работают в МХ режиме, не только функциональные (в Специалисте не на чем проверить Fn - может и работают). Или только сделано само переключение режима? Кодировки-то для МХ другие (цитата от b2m):

Вот таблица кодов из монитора Специалиста:
00 01 02 03 04 05 06 07 8A 8B 8C 1F
3B 31 32 33 34 35 36 37 38 39 30 2D
6A 63 75 6B 65 6E 67 7B 7D 7A 68 3A
66 79 77 61 70 72 6F 6C 64 76 7C 2E
71 7E 73 6D 69 74 78 62 60 2C 2F 7F
81 0C 19 1A 09 1B 20 08 80 18 0A 0D

А вот уже из Специалиста-МХ:
1B 8A 00 01 02 03 04 05 06 8B 8C 1F
3B 31 32 33 34 35 36 37 38 39 30 2D
4A 43 55 4B 45 4E 47 5B 5D 5A 48 3A
46 59 57 41 50 52 4F 4C 44 56 5C 2E
51 5E 53 4D 49 54 58 42 40 2C 2F 5F
81 0C 19 1A 20 20 20 08 09 18 0A 0D

Как говорится, почувствуйте разницу. Не совпадает верхний ряд, а также 09,1В.
Большие и маленькие буквы - не важно, так уж устроен драйвер.
Остальное совпадает.

Vladimir_S
02.09.2013, 15:36
Ещё как организовать сброс? Я так предполагаю нужно вывод Атмеги (какой?) посадить на сброс? Но у нас фьюз RSTDISBL не включен. Я выставлял фьюзы как на рисунке два топика назад. Блин а если он у нас включен - всё! без Atmega Fusebit doctor'а уже этот контроллер не прошить?
Вместо Atmega Fusebit doctor'а лучше программатор с функцией параллельного программирования AVR взять.
http://www.zx.pk.ru/showpost.php?p=624219&postcount=85
Кстати и цена смешная.

fifan
05.09.2013, 16:11
Автор написал:
"А у меня все руки не доходят перекинуть F1-F10. Завтра точно сделаю, или я редиска."

Прошло четыре дня. Редиска скоро заколосится.:rolleyes:

roma
21.09.2013, 13:59
Имеется в наличии только Atmel48-20PU. Хотелось бы получить прошивку под эту МС, плюс какие фьюзы выставлять ...

Vladimir_S
21.09.2013, 14:49
Имеется в наличии только Atmel48-20PU. Хотелось бы получить прошивку под эту МС, плюс какие фьюзы выставлять ...
Тоже интересно, завтра специально попробую и напишу.Ну или на крайний случай в понедельник.

fifan
21.09.2013, 19:15
попробую и напишу
Прошивай только вот этой прошивкой (в атаче). Мне её автор дал чтобы я проверил режим МХ. А у меня как назло блок питания на Специалисте_МХ2 сгорел. Пока ставлю новый. Фьюзы эти (http://www.zx.pk.ru/showpost.php?p=586994&postcount=175). Режим MX должен переключается клавишей Print Screen. Было и другое описание назначения клавиш (ПВ, ПС и т.д.), но я его потерял. Кто найдёт впишите в тему.

fifan
21.09.2013, 19:51
Вот спаял Atmega Fusebit Doctor. Буду лечить свои атмеги.

Кстати пока не будет работать сброс в PS/2 адаптере. Автор предусмотрел его, но чтобы его задействовать (с вывода 1 атмеги подать на сброс компьютера) необходимо включить фьюз RSTDISBL. Но лучше это пока не далать т.к. потом ещё раз прошить контроллер без специальных мер не удастся. А у меня есть специальные меры - Atmega Fusebit Doctor:v2_dizzy_queen:

Vladimir_S
22.09.2013, 04:45
Вот спаял Atmega Fusebit Doctor.
А мне он уже не понадобится. На параллельном программаторе пофиг какие фьюзы стоят.

Vladimir_S
23.09.2013, 07:47
Пробовал я пробовал, но Atmega48 не заработала. Atmega8 работает с этой прошивкой.
http://zx.pk.ru/showpost.php?p=586194&postcount=173
А с этой не работает.
http://zx.pk.ru/showpost.php?p=628726&postcount=184

---------- Post added at 07:47 ---------- Previous post was at 07:43 ----------

Совсем забыл, фьюз RSTDISBL поставил, но какие бы кнопки не нажимал, никакого шевеления на 1 ноге Атмеги.

fifan
23.09.2013, 16:51
Вот оно что, Михалыч (вернее vinxru). :v2_dizzy_snowball2:
Я то нереагирование клавиатуры списал на сбой моего ПК, думал может что-то по питанию. А оно вон как оказалось - последняя прошивка не рабочая.
Если ты, Vladimir_S, прошил старой прошивкой то попробуй режим МХ - из Монитора 4 переключение по директиве Х. Print Screen пробовал? Должен включиться режим МХ - загорается светодиод на клавиатуре.

:speccy:Что-то скудное описание соответствий клавиш. Сюда буду писать найденные:
Print Screen МХ/Стандарт;
Caps Lock - РУС/LAT;
Scroll Lock - ЙЦУКЕН/QWERTY;
Delete - Сброс;
Esc - АР2;
Tab - ТАВ;
Shift - НР;
Ctrl - ПВ;
Windows - HOME;
Alt - ПС;
Enter - ВК;
Backspace - ЗБ;
Pause/Break - программирование.
...:speccy:

Вот картинка соответствий. Вообще-то они (соответствия) настраиваются самостоятельно, но об этом позже напишу.

roma
23.09.2013, 17:02
Да не так просто заменить АТМЕГУ8 на АТМЕГУ48, АТМЕГА8 имеет 1 КБ РАМ, а АТМЕГА48 имеет только 512 Байт РАМ.

Пробовал заменить исходниках

#include <mega8.h> на #include <mega48p.h>
GICR на EIMSK
WDTCR на WDTCSR,

всё компилируется но при линковке выдаёт что нехватает РАМ, потому что используется много переменных в памяти:

// Переменные в памяти
volatile unsigned char b2c[256]; // Рассчитанный заранее ответ для прерывания.
volatile unsigned char c2b[64]; // Эти переменные должы идти первыми в программе,
volatile unsigned char c2d[128]; // что бы занимать адреса 100h, 200h, 240h, 2C0h
volatile unsigned char d2c[64];

Если бы немного оптимизировать программу и по возможности эти массивы расчитать заранее и записать во флэш, тогда бы и 512 Байт памяти хватило и можно бы было использовать АТМЕГУ48 ...

В программе в зависимости от scanMode используются либо c2b и c2d, либо b2c и d2c.
По идее можно использовать только два массива на 256 и 64 байта и инициализировать их в зависмости от scanMode динамически. На этом экономиться 192 байта. Но этого всё равно не хватает для АТМЕГА48 :-(

Возможно можно упростить код, исключив ненужные режимы?
Интересует только режим эмуляции оригинальной клавиатуры для Специалиста Экспресс.

Vladimir_S
23.09.2013, 19:51
попробуй режим МХ - из Монитора 4 переключение по директиве Х. Print Screen пробовал? Должен включиться режим МХ - загорается светодиод на клавиатуре.
Попробую завтра.

---------- Post added at 19:51 ---------- Previous post was at 19:40 ----------

fifan, Я сейчас только подумал, а 1 нога Атмеги к еденице подтянута? Может что бы сброс заработал, нужно подтянуть?

fifan
23.09.2013, 20:12
fifan, Я сейчас только подумал, а 1 нога Атмеги к еденице подтянута? Может что бы сброс заработал, нужно подтянуть?
Не знаю, автор просто подключал в схему Специалиста, т.е. к выводу 2 DD12 по схеме Специалиста Волкова (http://www.spetsialist-mx.ru/schemes/Spetsialist.png).

fifan
23.09.2013, 20:48
Автор мне сообщил, что нужно прошивать этой прошивкой, в ней работает сброс. Вот в атач скачал. Весь архив тута (https://github.com/vinxru/Specialist_PS2_Keyboard).

Vladimir_S
26.09.2013, 05:30
fifan, Допроверялся. Прошивка в твоем последнем посте рабочая. Работает и сброс и при нажатии на Print Screen загорается светодиод. Но не успел проверить детально, пришлось ненадолго уехать по работе. А когда приехал через пару часиков не могу запустить контроллер. При включении выбрасывает какой то мусор вместо курсора, или если стоит мигающий курсор, то при нажатии на любую клавишу появляется "/" и комп виснет. Все прозванивается как надо и Атмеги менял и ВВ55. Уже крыша едет. Отложу на недельку.

Error404
26.09.2013, 09:55
vinxru пропал куда-то. Пьет чтоле?
А ведь он еще в Орионовской теме обещал выступить с премьерой!

b2m
26.09.2013, 12:09
vinxru пропал куда-то.
Он ушёл на другой форум (www.nedopc.org/forum). Ещё в ЖЖ бывает активен.

perestoronin
26.09.2013, 12:24
vinxru пропал куда-то
Здесь он тоже бывает, но редко, в основном его можно застать на http://www.nedopc.org/forum

fifan
26.09.2013, 16:06
Vinxru здесь больше не пишет. Он тоже собирает Специалист_МХ2. Вот он что написал на счёт его схемотехники: "Ты в курсе, что в плате есть небольшая ошибка. Сигнал CMX формируется из WR процессора, а не из WE памяти. При записи в любое устройство, память работает на выход и регистр цвета на выход. У меня из за этого память глючила."

Vladimir_S
26.09.2013, 21:28
fifan, Если будешь у себя править сигнал СМХ, потом рекомендации выложишь?

HardWareMan
26.09.2013, 22:20
Errata на сигнал CMX давно записана под номером 3 в соответствующей ветке.

АлександрПП
08.10.2013, 23:32
Собрал адаптер. Поначалу работал кое-как, реагировал на нажатие некоторых клавиш. Менял прошивки. Сейчас не реагирует ни на одну кнопку.
Посмотрел пайку. Один недостаток - за неимением подтягивающих резисторов на 1 кОм поставил на 4,7 кОм. Может это оказывать влияние вплоть до отказа в работе?
И, подскажите, какая прошивка последняя?

fifan
09.10.2013, 11:29
Подтверждаю. Прошил и Специалист_МХ2 заработал с PS/2 клавиатурой. Сейчас подстраиваю клавиатуру под себя - есть возможность программировать соответствие клавиш.

roma
17.12.2013, 16:26
Работает ли эта версия PS/2 адаптера у кого либо со специалистом экспресс?
Или она только заточена для специалиста МХ?

fifan
17.12.2013, 19:30
Без разницы с каким Специалистом, должна со всеми работать. МХ - особый переключаемый режим, отличается незначительно. Сравните клавиши здесь (http://www.spetsialist-mx.ru/index4.html) и здесь (http://www.spetsialist-mx.ru/index24.html).

fifan
12.01.2014, 19:36
Прочитал всю тему и не нашёл ссылку на исходники адаптера от Vinxru. Есть всё от схемы до ПО. Сайт. (https://github.com/vinxru/Specialist_PS2_Keyboard)

fifan
03.01.2017, 22:04
Переместил исходники проекта (http://www.spetsialist-mx.ru/Soft/Specialist_PS2.rar) на свой сайт.

tank-uk
10.01.2017, 05:02
fifan, на всякий случай посмотри на картинку
http://uploads.tapatalk-cdn.com/20170110/553739ed54abebccb47051b1be085788.jpg

резистор обведенный красным не нужен и ресет нужно подавать проводом прямо на тригер

fifan
10.01.2017, 11:09
А ведь верно, сброс на схему я не подавал, попробую. Может и резистор не нужно будет выпаивать. Спасибо, tank-uk. До этого я использовал Атмеги8 только в DIP корпусе и в констроллерах интегрированных в основную схему (Специалист 48 SRAM и Специалист SRAM).

fifan
13.01.2017, 10:19
Подключил адаптер к Специалисту_МХ2. Резистор на плате адаптера на выводе сброса не убирал. К эту выходу подпаял проводок идущий прямо на схему сброса.

Минусы работы адаптера на Специалисте_МХ2 - не работает тест клавиатуры в переделанном HardWareMan'ом тесте Рюмика. Просто идёт писк и моргание стелизованного вида клавиатуры.
Второй минус - не соответствие клавиш в МХ режиме (переход по Print Screen). Смещение тестовых клавиш вправо на одну клавишу, т.е. чтоб сработала F6 нужно нажать F7. Нужно переделывать прошивку либо сидеть вручную программировать соответствие.

fifan
14.01.2017, 17:26
Разбираемся сейчас с автором адаптера по моим минусам. Глюк в тесте Рюмика должен лечится уменьшением номинала резисторов - я ставил 4,7 кОм. Кто будет повторять адаптер поставьте пожалуйста резисторы на 3,3 кОм. Резисторы, это те которые подключены и к портам ВВ55 (18 штук).

Второй минус будем наверное решать перепрошивкой.

fifan
19.03.2017, 19:10
Обновил прошивку PS/2 адаптера клавиатуры. Изменения касаются режима МХ: сделано правильное присвоение функциональных клавиш верхнего ряда Специалиста_МХ. Проверено в RAMFOS'е и в моём SpetsCommander'е. В атаче - архив прошивки.
Ещё раз напоминаю, что после записи фьюзев контроллер невозможно будет заново прошить, поможет только Fusebit doctor т.к. фьюз RSTDISBL установлен в 0.

worker_vl
23.03.2017, 09:05
Доброго дня! Есть вопрос по работе адаптера, может кто так-же пробовал: для тестов не стал устанавливать фьюз-бит RSTDISBL и залил прошивку из предыдущего поста. Хотелось-бы узнать, нормальное поведение адаптера или нет, когда после нажатия на кнопку сброс на основной плате, клавиатура перестаёт работать и оживает только после физического передёргивания её разъёма, и то, похоже, не каждый раз оживает. Основная плата из параллельной ветки "от Павля Рябцова", основанная на Специалист-М.

В параллельной теме "Специалист-М и PS/2 клавиатера" что-то похожее начало обсуждаться, но как-то разговор не склеился...

TheAbcs
23.03.2017, 16:52
Тоже поинтересуюсь - а как ведет себя СпециалистМ с подключенным адаптером, в который не воткнута клавиатура?
У меня, вроде бы, тест (Рюмика) отказался запускаться... Это нормально, или мне показалось?
Когда воткнул клавиатуру - тест пошел...

По вопросу с неустановленным фьюзом RSTDISBL - в принципе, я могу это проверить, и плата такая же; но зачем это надо? :-)

worker_vl
23.03.2017, 19:34
но зачем это надо? :-)

А затем, что Фифан предупреждает не зря... после установки бита перепрошивка только в параллельном программаторе :)
Ну да ладно... буду надеяться, что перешивать уже не придётся :)

- - - Добавлено - - -


Тоже поинтересуюсь - а как ведет себя СпециалистМ с подключенным адаптером, в который не воткнута клавиатура?
У меня, вроде бы, тест (Рюмика) отказался запускаться... Это нормально, или мне показалось?
Когда воткнул клавиатуру - тест пошел...
:-)
Подтверждаю! Тест не запускается.

fifan
23.03.2017, 19:43
Да есть такая особенность что если физический не вставлен разъём от PS/2 клавиатуры комп не работает. На Специалисте МХ2 вообще цветная шахматка на экране и зависание.
Я где-то просил, что бы поставили резисторы на адаптер (18 штук) номиналом меньше 4,7 кОм. У кого это так проверьте работает ли тест клавиатуры в тесте Рюмика.

worker_vl
24.03.2017, 08:02
Я где-то просил, что бы поставили резисторы на адаптер (18 штук) номиналом меньше 4,7 кОм. У кого это так проверьте работает ли тест клавиатуры в тесте Рюмика.
К сожалению, эту просьбу я прочёл уже после того, как впаял все 18 штук десятикилоомников и, как ни странно ;) , клавиатура работает без вопросов. Я только до конца не пойму физику вопроса, для чего там уменьшать величину подтягивающих резисторов, неуж-то емкость входа ВВ55 настолько велика, что фронты затягиваются настолько, что порт не успевает распознать единицу? Какое тут отличие от классической Спецовской клавиатуры у которой, к тому-же, ещё и дребезг контактов присутствует, что значит однозначное затягивание фронта...


Да, забыл сообщить: после установки фьюза RSTDISBL, клавиатура перестала отваливаться.

fifan
24.03.2017, 19:24
Изменить номинал резисторов я просил для того чтобы проверить тест клавиатуры в тесте Рюмика. Там все символы кнопок просто моргают и нельзя что-то разобрать. Тест Рюмика (http://www.spetsialist-mx.ru/Soft/test_m.rar) ( в архиве есть ридми) никто не юзал что ли?

worker_vl
24.03.2017, 19:35
Изменить номинал резисторов я просил для того чтобы проверить тест клавиатуры в тесте Рюмика. Там все символы кнопок просто моргают и нельзя что-то разобрать. Тест Рюмика (http://www.spetsialist-mx.ru/Soft/test_m.rar) ( в архиве есть ридми) никто не юзал что ли?

Ну, вообще-то у меня поведение теста как описано в ридми... нажимаю клавишу, мигает место...

fifan
24.03.2017, 20:00
Нет после выбор теста клавы (кнопка 3) высвечивается символическая клава. На ней у меня все поля сразу начинают моргать - глюк.

worker_vl
24.03.2017, 20:09
Нет после выбор теста клавы (кнопка 3) высвечивается символическая клава. На ней у меня все поля сразу начинают моргать - глюк.

Цитата из документа: Клавиша <3> выведет на экран испытательную таблицу сетчатого поля для регулировки статического и динамического сведения цветов телевизоров.

У меня в тесте так-же...

TheAbcs
24.03.2017, 20:48
Ну, вообще-то у меня поведение теста как описано в ридми... нажимаю клавишу, мигает место...
Аналогично... Резисторы вместо 10 кОм запаяны 8,2 кОм, на CLOCK и DATA 4,7 кОм...
Сбросом на клавиатуре действительно удобно пользоваться...

fifan
24.03.2017, 20:53
Я думаю нужно снять видео чтоб все меня поняли. Я написал не моргание при нажатии клавиши, а вообще глюк с морганием почти всего поля. Глюк идёт несмотря на то, что ни одна клавиша не нажата.

Serg6845
30.12.2018, 19:43
Переместил исходники проекта (http://www.spetsialist-mx.ru/Soft/Specialist_PS2.rar) на свой сайт.

кстати - собрал адаптер, выяснил что из 6 имеющихся клавиатур работают две. полез в исходники, нашел пару багов в части работы с железом PS/2.
собственно вот:

//---------------------------------------------------------------------------
// Низкоуровневые функции протокола PS/2

#define ps2_setClock0() { PORTD.PS2_CLOCK = 0; prepared_ddrd |= (1 << PS2_CLOCK); DDRD.PS2_CLOCK = 1; }
#define ps2_setClock1() { prepared_ddrd &= ~(1 << PS2_CLOCK); DDRD.PS2_CLOCK = 0; }

// DataIn и DataOut не нужны - выходы с ОК, 0==Out, In==1
#define ps2_setData0() { PORTD.PS2_DATA = 0; prepared_ddrd |= (1 << PS2_DATA); DDRD.PS2_DATA = 1; }
#define ps2_setData1() { prepared_ddrd &= ~(1 << PS2_DATA); DDRD.PS2_DATA = 0; }

//#define ps2_setData0() { PORTD.PS2_DATA = 0; }
//#define ps2_setData1() { PORTD.PS2_DATA = 1; }

#define ps2_waitClock0() { while(PIND.PS2_CLOCK); }
#define ps2_waitClock1() { while(PIND.PS2_CLOCK==0); }
#define ps2_waitClock() { ps2_waitClock1(); ps2_waitClock0(); }
#define ps2_data() PIND.PS2_DATA
#define ps2_wait() (PIND.PS2_DATA || PIND.PS2_CLOCK)

и вот:

// Отправить байт клавиатуре
// Вход: v_a - байт

void ps2_send() {
// ps2_setDataOut();
ps2_setData0();
delay_us(20);
ps2_setClock1();
delay_us(10);
v_j=0;
ps2_waitClock0();
for(v_i=0; v_i<8; v_i++) {
delay_us(10);
if(v_a&1) { ps2_setData1(); v_j++; } else ps2_setData0();
v_a >>= 1;
ps2_waitClock();
#asm
WDR
#endasm
}
// Бит четности
delay_us(10);
if(v_j&1) { ps2_setData0(); } else { ps2_setData1(); }
ps2_waitClock();
// Стоповый бит
delay_us(10);
ps2_setData1();
ps2_waitClock();

// Пропуск ACK
// ps2_setDataIn();

// Лишний waitClock, из-за него не работали старые клавы
// ps2_waitClock();

if(ps2_data()) reboot(); // Ошибка клавиатуры. Перезагружаем её.
ps2_waitClock1();
ps2_transmitMode();
#asm
WDR
#endasm
}

Mick
17.01.2020, 09:16
Народ, а на али продаются такие вот длинноногие панельки как в посте https://zx-pk.ru/threads/20586-ps-2-adapter-klaviatury-dlya-spetsialista.html?p=897002&viewfull=1#post897002
В чупа чупсе они что то не по гуманным ценам.

Mick
21.01.2020, 19:34
Сам себе и отвечу. Кто не сможет найти длинноногие панельки можно взять на али однорядные длинноногие - https://aliexpress.ru/item/32959627004.html?spm=a2g0s.9042311.0.0.5aa233edUiI E1t

Serg6845
22.01.2023, 12:45
Если вдруг кому еще интересно - небольшая доработка контроллера клавиатуры. Позволяет получить работающий сброс компа с сохранением возможности последовательного программирования контроллера. также поправлено переопределение кнопок - можно переопределить ресет и кнопки переключения раскладок.

схема:
78356

прошивка, исходник и батник для avrdude с фьюзами на всякий случай:
78354

fifan
22.01.2023, 15:21
Оперативно оформил предложение Erg6845'а у себя на сайте (http://специалист-пк.рф/index4.html). Доработка размещена в разделе АДАПТЕР PS/2 КЛАВИАТУРЫ, ссылка на архив размещена в таблице.

otrazhenie
10.02.2023, 07:50
прошил с RSTDISBL = 1
прошивку взял с поста https://zx-pk.ru/threads/20586-ps-2-adapter-klaviatury-dlya-spetsialista.html?p=1171160&viewfull=1#post1171160
29 вывод в 0. он щас вообще висит в воздухе

otrazhenie
17.03.2023, 14:28
Доброго дня. надо бы довести до ума....
атмега48 подойдет вместо 8-й? или можно прошивку под атмегу48?

fifan
21.03.2023, 08:21
Доброго дня. надо бы довести до ума....
атмега48 подойдет вместо 8-й? или можно прошивку под атмегу48?
Не подойдёт. Автор сделал прошивку только для Атмеги8.

otrazhenie
22.03.2023, 07:32
ясно. спасибо.
решил забить окончательно на этот контроллер и спаять оригинальную клавиатуру из старой писишной

otrazhenie
27.07.2023, 10:03
ну не люблю оставлять начатое....перепаял на другой плате....запустилось с прошивкой с сайта специалист-пк.рф