Просмотр полной версии : Контроллер клавиатуры для "Пентагон-128" на ATMega8/48/88/168/328
это кнопки, которые замыкаются на землю, типа /res или /turbo, можете повесить на них любые такие кнопки
Продублирую еще раз свои прошивки
Прошил вашу прошивку и исправил Fuse и все заработало.
Важно иметь хороший инструмент: Очень рекомендую программатор MiniPro TL866! Прошивает все, еще тестирует логику!
Добрый день!
РАЗОБРАЛСЯ, rdfe к номеру три на рисунке ниже, поменял несколько атмег и кварцев на 24 МГц - теперь работает как часы.
Собрал данную схему от EvgenRU. Но подключить к Пентагон 128к так и не получилось.
Клавиатру в начале один раз мигает, после чего включается нум-лок и скролл-лок.
Если подключать /RDFE от DD49.1 2нг., то проходит инициализация но потом не работает ресет по клавише принт-скрин и не действуют светодиоды.
Пробовал делать схему формирования /рдфе на логическом элементе ЛЛ1, но результата не дало.
Возможно нужно убрать диоды и резисторы?
Далее привожу схему вариантов подключения:
http://savepic.ru/13725287.png
П.С. Схема завелась только на одном экземпляре кварца 24МГц, на 16, 20, 27 не заработало, прошивки на каждый кварц своя. Atmega8A - DIP корпус.
- - - Добавлено - - -
Прошил вашу прошивку и исправил Fuse и все заработало.
Важно иметь хороший инструмент: Очень рекомендую программатор MiniPro TL866! Прошивает все, еще тестирует логику!
Если не секрет, то какие фьюзы исправили?
Если не секрет, то какие фьюзы исправили?
На Atmega88
lfuse:w:0xEE:m -U hfuse:w:0xD5:m
Я тут опробовал еще такой вариант, вроде как даже стабильнее работает
INT0_Handler:
in YL,PinD ; PinD -> YL receive data from bus ; 1 cycle
// ------- 2 cycle both -------------
sbic PinC,0x03 ; if (PinC.3=0) skip next line (IF KA10=0) ; 1/2 cycle, 2 byte instruction
bld YL,2 ; move bit 3 of port C to bit 2 of data from port D ; 1 cycle, 2 byte instruction
// ----------------------------------
sbic PinD,0x02 ;if PinD.2=0 skip rjmp
rjmp release_bus ; release data bus if no kbd interrupt
ldd r20,Y+0x00 ; put data to r20 from SRAM key table at 0x100+YL ; 2 cycles, 4 byte instruction
//4+5 cycles before set data on port FE
out DDRB,r20 ; 1 cycle, 2 byte instruction
reti ; 4 cycles
release_bus:
out DDRB,CONST00 ; turn data bus to HI-Z state ; 1 cycle, 2 byte instruction
reti ; 4 cycles
и в _RESET нужно поменять
//ldi r16,ISC01 ; falling edge int 0
ldi r16,ISC00 ; any logical change on int 0
привет.
повторил вариант контроллера на мега328р 27мгц от внешнего генератора. компутер - ленинград2. не работает.
клавиатура и джойстик в моем ленинграде опрашиваются через мультиплексоры КП11, выборка клава-джой сделана с шины адреса А5. выборка-чтение мультиплексора сделано из А0 и А5 диодным ИЛИ, IORQ и RD через ЛЛ1. вижу 8 четких импульсов.
подключал в разъем клавиатуры, шину адреса после диодов подтягивал на +5в резисторами. не работает, некрасивый сигнал на входе мультиплексора, подтянул на +5в. все красиво. не работает.
брал шину адреса от процессора - не работает.
брал шину адреса и данных от процессора - не работает.
засинхронизировался по чтению порта клавы, на втором канале осц смотрю, что происходит на шине данных. после falling edge через примерно 350-400ns появляется низкий уровень от атмеги. я решил, что это долго. поставил генератор на 32мгц. ничего не изменилось особо. не работает.
мультиплексор родной клавиатуры особо не мешает появлению низкого уровня от атмеги. на всякий случай оторвал RDFE от него и посадил на лог 1. теперь мультик точно не мешает. не работает.
собрал сигнал чтения из А0, IORQ и RD через ЛЛ1. не работает.
обратил внимание, что при нажатии на кнопку механической клавиатуры в штатном режиме лог 0 на шине данных появляется только в одном из 8 импульсов чтения. после этого импульса следующий приходит с некоторой задержкой, это отрабатывает процедура чтения. от атмеги лог 0 появляется в каждом импульсе RDFE и самих импульсов может быть не 8, а 6 или 4 или 2.
к сожалению только одна из 3х клавиатур вообще завелась с этим контроллером, т.е. проходит инит и загораются 2 лампочки. реагирует на numlock, capslock.
мужики, куда копать?
Если на NumLock CapsLock реагирует, значит контроллер работает, подтягивать ничего не нужно, нужно проверить правильно ли ШД/ША подключены и попробовать прошивки под другие частоты, вроде как уже на предыдущих страницах у кого-то заработало с прошивкой под другую частоту. Тут как лотерея :)
перепробовал все прошивки, пересобирал сам с разными к-тами. не летит.
пока отложил, может еще какие мысли появятся. или придет клавиатура от "корвета".
Воспользовался куском прошивки для зажигания индикаторов в другом контроллере (DATA - PD2, CLOCK - PD3, Atmega48), но почему-то индикаторы не реагируют никак. Что я делаю не так?
.def ps2_parity_cnt = r13 ; счетчик единиц в байте с PS/2 клавиатуры для контроля четности
.def temp = r16 ; временный регистр для основной программы и подпрограмм
.def cnt = r20 ; регистр для счетчиков циклов
.def KBD_IND = r23 ; состояние индикаторов клавиатуры
; Set keyboard staus indicators
KBD_SEND_INDICATORS:
ldi temp,0xED ; keyboard command Set status indicators
rcall KBD_SEND ; subroutine send command to keyboard
mov temp,KBD_IND ; indicatoes value
;---------------------------------------------------------------------------------------
; Запись байта в клавиатуру
;---------------------------------------------------------------------------------------
KBD_SEND:
rcall KBD_SEND_BYTE
ret
;-------------------------------------------------------------------------------------------
KBD_SEND_BYTE:
sbi DDRD,0x03 ; set CLK pin as output (=0)
rcall Delay100mS ; Wait 100ms
sbi DDRD,0x02 ; 1->DDRD.2 DATA (=0)
rcall Delay5mS ; 5ms
cbi DDRD,0x03 ; set CLK pin as input (=1)
rcall Delay100uS
; начинается тактирование CLK от клавиатуры
rcall WAIT_CLK0
rcall Delay100uS
; цикл отправки 8 бит данных -------------------------------
ldi cnt,0x08
clr ps2_parity_cnt
rjmp L02A5
READ_LOOP:
rcall WAIT_CLK0
L02A5:
ror temp ; KBD_BYTE>> (сдвиг вправо, выдвинутый бит помещается в C)
brcs SEND_1 ; если C=1
;Отправка бита = 0
sbi DDRD,0x02 ; 1->DDRD.2 (в режим записи, на пине 0, т.к. PortD.2 = 0)
rjmp L02AB
SEND_1: ; Отправка бита = 1
cbi DDRD,0x02 ; 0->DDRD.2 (в режим чтения) вроде как отправляется 1
inc ps2_parity_cnt ; вычисление бита четности
L02AB:
rcall WAIT_CLK1
dec cnt
brne READ_LOOP
; конец цикла отправки ---------------------------------------
; отправка бита четности
rcall WAIT_CLK0
cbi DDRD,0x02
sbrc ps2_parity_cnt,0x00
sbi DDRD,0x02
rcall WAIT_CLK1
; стоповый бит
rcall WAIT_CLK0
cbi DDRD,0x02
rcall WAIT_CLK1
; ACK
rcall WAIT_CLK0
rcall WAIT_CLK1
ret
;---------------------------------------------------------------------------------------
;----------------------------------------------------------------------------------------
; Подпрограммы ожидания смены уровня CLK
;
; Проверка переполнения таймера и CLK: цикл пока таймер не переполнится или CLK не станет равно 1
; Если таймер переполнился, значит таймаут и бит не принят
WAIT_CLK1:
sbis PinD,0x03 ; CLK=1 пропускаем jmp
rjmp WAIT_CLK1 ; loop
ret
; Проверка переполнения таймера и CLK: цикл пока таймер не переполнится или CLK не станет равно 0
WAIT_CLK0:
sbic PinD,0x03 ; CLK=0 пропускаем jmp
rjmp WAIT_CLK0
ret
; init indicators
ldi KBD_IND,0 ; 0 = все погашены
rcall KBD_SEND_INDICATORS
ldi temp,0x02
eor KBD_IND,temp ; XOR with indicator value for NumLock
rcall KBD_SEND_INDICATORS
А инициализация клавиатуры сделана в начале? Плюс, нужно учитывать привязку к частоте кварца
Да, сама клавиатура работает как надо, просто в прошивке нет поддержи индикаторов. По нажатию Нумлока выдаётся нулевой импульс на нужную ножку атмеги (переключение турбо), всё отрабатывает как надо. Но вот индикаторы вообще никак не поддержаны. Вот и хочу зажигать их тогда, когда мне надо.
Атмега работает от внутреннего генератора 8МГц, потому что с внешним 11МГц была нестабильная работа - иногда атмега вообще не запускалась. А на внутреннем всё пока работает стабильно.
Значит тогда в коде отправки данных в клавиатуру нужно тайминги задержек подгонять под 8МГц, сейчас они там от 20МГц вроде установлены
blackinwoman
26.10.2017, 01:27
поясните плиз некоторые моменты по прошивке от EvgenRU
я попробовал на Atmega48PU и с внешним кварцем хотябы даже на 16 мгц запускает контроллер черезе раз, не говоря про частоты выше, в принципе не запускается
ставил разные fuse для кварца, но результата стабильного запуска не добился, менял кварцы и контроллеры ... я так понимаю прошивка не тестировалась на 48 atmega ? все дело в том, что 48атмегу в продаже можно найти на 20мгц, на частоты выше никогда не видел, но на 20мгц пока не нашел кварц с которым она смогла бы запуститься
непонятная ситуация сaps lock, светодиод загорается при нажатии этой клавиши и контроллер виснет, т.к. перестает срабатывать сброс
зачем входы контроллера для сигналов A08-A15 всегда в ЛОГ 1 ? а если придеться подключать к Scorpion, где буфер клавиатуры собран на 155ЛП9, то на входах всегда будут торчать подзарезанные сигналы с ША, хотя теоритически пока не нажата нужная клавиша на входах должно быть ЛОГ 0 ?
мне пока не удалось запустить, максимум это бредовая или очень медленная работа контроллера и то через раз, может просто керамический кварц не подходит, генератор частоты в атмеге такой дохленький и нужен внешний клок для нормальной работы ?
поясните плиз некоторые моменты по прошивке от EvgenRU
я попробовал на Atmega48PU и с внешним кварцем хотябы даже на 16 мгц запускает контроллер черезе раз, не говоря про частоты выше, в принципе не запускается
ставил разные fuse для кварца, но результата стабильного запуска не добился, менял кварцы и контроллеры ... я так понимаю прошивка не тестировалась на 48 atmega ? все дело в том, что 48атмегу в продаже можно найти на 20мгц, на частоты выше никогда не видел, но на 20мгц пока не нашел кварц с которым она смогла бы запуститься
Шейте avrdude с той строкой, которая указана в readme.txt
непонятная ситуация сaps lock, светодиод загорается при нажатии этой клавиши и контроллер виснет, т.к. перестает срабатывать сброс
Ну, это видимо, потому что у вас оно нестабильно работает.
зачем входы контроллера для сигналов A08-A15 всегда в ЛОГ 1 ? а если придеться подключать к Scorpion, где буфер клавиатуры собран на 155ЛП9, то на входах всегда будут торчать подзарезанные сигналы с ША, хотя теоритически пока не нажата нужная клавиша на входах должно быть ЛОГ 0 ?
Ну, тут всё просто, там не ЛОГ 1, а Z состояние, т.к. шина данных подтянута резисторами к VCC, то лог 1 на входе не нужен, поэтому на выходе выставляется либо 0, либо Z состояние, которое дает ЛОГ 1 на подтянутой ШД.
мне пока не удалось запустить, максимум это бредовая или очень медленная работа контроллера и то через раз, может просто керамический кварц не подходит, генератор частоты в атмеге такой дохленький и нужен внешний клок для нормальной работы ?
Если прошивка через avrdude не поможет, попробуйте в параллель кварцу поставить резистор 1-3МОм.
А пару конденсаторов от выводов кварца на землю, по 20..30pF пробовали ставить?
blackinwoman
27.10.2017, 20:05
А пару конденсаторов от выводов кварца на землю, по 20..30pF пробовали ставить?
конечно, но амплитуда генератора атмеги очень слабенькая все равно, не тянет оно керамический кварц, причем только при режиме full swing, в других щуп осцилла вообще давит генерацию и синусойды нету ...
Шейте avrdude с той строкой, которая указана в readme.txt
а какой смысл ? я изучил вопрос про fuse именно данного варианта и перепробовал все варианты, стабильной работы нет ... я покупал атмеги в одном местном китайском магазине города, могу в европейском купить, но что это даст они разве различаются ?
да почитал тему и действительно, с внутреннем генератором работает стабильно (имеется ввиду что клавиатура запускается и не отваливается постоянно и ресет работает, а остальное нет), как тут ранее и сообщали ...
Если прошивка через avrdude не поможет, попробуйте в параллель кварцу поставить резистор 1-3МОм.
попробую, но надежды мало
расскажите лучше разве может atmega48, которая максимально есть только на 20мгц, работать на 24 мгц ?
расскажите лучше разве может atmega48, которая максимально есть только на 20мгц, работать на 24 мгц ?
20МГц - это максимальная гарантированная, а так зависит от конкретного образца, у меня работает на 40МГц, другие 48-ые на 24 все тянут, не исключен и брак. Ну и еще от самой прошивки зависит, что-то может стабильно работать на 27, при этом другая прошивка может глючить (имеется в виду какая периферия задействована). Но эта прошивка проверялась, так что должно быть норм на 48 атмеге.
расскажите лучше разве может atmega48, которая максимально есть только на 20мгц, работать на 24 мгц ?
Максимальная рабочая частота атмеги48 по даташиту - 16 МГц (это у старых, у новых - 20МГц, но китайцы любят их перемаркировывать, так что я бы не доверял надписи на чипе), и насиловать её увеличением частоты в полтора раза не стоит. Судя по тому, что пишут в интернетах, они такое не любят. Ещё говорят, что шанс успешно затактировать на повышенной частоте от внешнего генератора намного выше, чем от кварца.
Но при всём при этом, на 16МГц она должна работать вообще без проблем.. Есть смысл попробовать разные меги и разные кварцы (глючные кварцы у китайцев тоже часто попадаются).
blackinwoman
27.10.2017, 21:08
Максимальная рабочая частота атмеги48 по даташиту - 16 МГц (это у старых, у новых - 20МГц, но китайцы любят их перемаркировывать, так что я бы не доверял надписи на чипе)
во! тут вот сходится, что работает на 16000 и не работает ни в какую на 20мгц ...
ATMega48PA должен без проблем взлететь на 20МГц. Если это только не заботливо перемаркированный китайцами старый чип. Думаю, есть смысл попробовать другие МК
blackinwoman
29.10.2017, 01:39
ATMega48PA
у меня 48PU 4 штуки, 3 штуки купил в одном магазине, сегодня одну в другом надеясь на оригинал
ибо 48PA в dip нету нигде, только под заказ
вообщем потестировал еще раз и все четыре работают одинаково, видимо из одного склада дядюшки Ляо, хотя на свежем надпись была хорошо видна под разными углами, а сейчас подстерлась, как и на остальных ...
с кварцем 14000 работают без ошибок, не виснут
с кварцем 16000 запускаются, но если понажимать caps lock виснут
с кварцем 20000 не запускаются
с кварцем 24000 не запускаются
кварцы разные, блокировочные ёмкости не влияют на стабильность
EvgenRU, а насколько критичен сигнал RDFE по длительности для запуска и стабильной работы ?
omercury
29.10.2017, 13:12
20МГц - это максимальная гарантированная, а так зависит от конкретного образца, у меня работает на 40МГц.
уже в который раз читаю эту забавную писанину...
Методику ИЗМЕРЕНИЯ частоты в студию!
Всё очень просто
Берется лупа, смотрится на кварц, определяется частота :-D
omercury
30.10.2017, 00:59
Берется лупа, смотрится на кварц, определяется частота :-D
А я думал берётся частотомер, пишется ногодрыг тактов на 10 и замеряется частота.
На заборах тоже много что пишут, а на поверку оказывается всё совсем-совсем иначе. ;)
Кварцы имеют неприятную особенность работать на гармониках(причём это штатный режим), и в случае разгона, совсем не на тех, на которых хотелось бы.
Вероятность, что Ваша мега по-факту работает на 20 значительно выше, чем если бы она завелась на 40.
Кварцы имеют неприятную особенность работать на гармониках
поэтому у меня есть кучка кварцевых генераторов выдающих ТТЛ наружу =)
blackinwoman
30.10.2017, 20:14
ИТОГ
собрал внешний тактовый генератор на ЛН1, кстати удобная штука проверять кварцы
и все абсолютно также, как и со встроенного в атмега48, тоесть даже на 16000 зависает, если потыкать кнопки ...
вывод, это перемаркированные atmega48-10 т.е. на 10Мгц ?! (т.к. на 16 я не нашел) или ?
как это не приятно, сидишь тратишь время в пустую, за свои же деньги, но попытаюсь все вернуть, просто больше никде не купить, только под заказ в недели две
Ладно, сейчас для успокоения совести зашью 48PA-PU
UPD: зашил, вроде работает, осциллом проверил, частота прыгает от 12 до 27 МГц, поставил атмегу8 частота четко стоит 24МГц... видимо еще с фьюзами нужно поколдовать или с кондерами, т.к. на 8-ой кондеры можно не ставить, если фьюз CKOPT стоит, а у 48-ых его нет.
А еще, у моего какая-то странная сигнатура, пришлось править стандартный конфиг, чтобы прошилось :)
Если вдруг не промывали плату от флюса, то можно попробовать промыть. По моему опыту, подобные необъяснимые чудеса вызывались либо дуэтом высокой частоты и плохо смытого флюса ФТС, либо помехами от импульсного БП (но последнее в данном случае исключено).
PS. в прошивку хорошо бы работу с WDT добавить чтобы не зависала...
omercury
30.10.2017, 23:28
с фьюзами нужно поколдовать или с кондерами, т.к. на 8-ой кондеры можно не ставить, если фьюз CKOPT стоит, а у 48-ых его нет.
Ёмкость нагрузки кварцевого резонатора вполне себе паспортная величина, причём именно для резонатора, а вовсе не для МК. Для примера вложение.
ДШ от Atmel/Microchip можете выкинуть, там всё равно ничего полезного нет...))) строго говоря там указана ёмкость вывода от 0 до 10pF, то есть даже в этом обделались...
Более менее стандартная величина ёмкости пина у разных МК порядка 5pF, вот из этого исходить в данном случае и надо. Для резонатора эти ёмкости включены последовательно, то есть 2,5pF.
Есть ещё паразитная ёмкость самого резонатора порядка 5pF.
Читайте спецификацию (ДШ) на свой кварц и строго следуйте рекомендациям производителя.
Чаще всего высокочастотные кварцы имеют меньшую нагрузочную способность, обычно 16pF, но попадаются и 12 и даже меньше, такие от незнания считаются "неактивными")))
В общем для Вашего случая расчёт ёмкости конденсаторов будет примерно таким:
С=(16-5-2,5)*2=17pF для одинаковых конденсаторов на обоих выводах генератора.
Вангую, что у Вас стоят рекомендованные отмелем 22pF...
UPD
С учётом ёмкости монтажа я бы поставил 12-15pF.
- - - Добавлено - - -
и все абсолютно также, как и со встроенного в атмега48, тоесть даже на 16000 зависает, если потыкать кнопки ...
Проверьте на плате, все ли ножки GND подключены к земле и все ли Vcc и AVcc подключены к питанию.
Если нет, наэМГТэФьте недостающие соединения.
blackinwoman
31.10.2017, 00:38
частота прыгает от 12 до 27 МГц,
у меня с генератора ничего не прыгает, чистый синус на 20000, при этом ничего не запускается ...
ставишь кварц на 14000 и "не единого разрыва", на 16000 подвисает, на 16384 еще больше подвисает ...
Если вдруг не промывали плату от флюса, то можно попробовать промыть.
промыл, но у меня обычная канифоль из припоя пос61, да и сигнал вроде не колбасит
помехи минимальны менее 160млв
PS. в прошивку хорошо бы работу с WDT добавить чтобы не зависала...
я так понял, чем выше частота, тем не стабильнее работает прошивка
Вангую, что у Вас стоят рекомендованные отмелем 22pF...
да, но сейчас генератор дает хороший синус
Проверьте на плате, все ли ножки GND подключены к земле и все ли Vcc и AVcc подключены к питанию.
да
Вангую, что у Вас стоят рекомендованные отмелем 22pF...
UPD
С учётом ёмкости монтажа я бы поставил 12-15pF.
не повлияло абсолютно ни на что, я понимаю что это влияет на стабильность, но когда контроллер не может запуститься совсем на нужной частоте ...
еще тут мне посоветовал https://en.wikipedia.org/wiki/Simon_Brattel
that we have had genuine AVR devices that wouldn't run correctly at full speed before now. Especially when they became warm - Atmel had an isse a few years back where they were building crap
кстати на моих 4х атмегах дата коды стоят такие
1021B
1503
т.е. 2010 и 2015 годы ?
Есть у меня этот контроллер (кварц 20, микросхемка ATMEGA8-16) и собранная плата Пентагон 128 с AY и контроллером дисковода (плата 2014 года). Возможно самый нубский вопрос, но разъем J1 как распаян? если смотреть на картиночку, то левая верхняя нога - 1, куда дальше счет вести? Вправо и потом вниз и влево? Верно? КАРТИНОЧКА (https://static.wixstatic.com/media/469476_2f53d50005d24201a62e78dd76aee28c~mv2.jpg/v1/fill/w_462,h_551,q_85,usm_0.66_1.00_0.01/469476_2f53d50005d24201a62e78dd76aee28c~mv2.jpg)
в шамотном порядке
1 2
3 4
5 6
7 8
9 10
Спасибо! Неожиданно конечно ))) Ну что же, буду пробовать подключать клавиши
Ох ох... Никак не пойму. Я подключил питание на первую ногу, завел клавиатурные сигналы K0-K7 и KD0-KD3. Больше ничего не подключал. В результате словил такой глюк: индикатор на контроллере постоянно моргает (мелко так, часто, вполсилы). Через какое-то время (минутки 2-3) Пентагон вываливается в Бейсик. Клавиатура при этом не реагирует никак на нажатия, индикаторы на ней не горят. Если отключаю контроллер и просто замыкаю контакты на разъеме XP1, то срабатывают соответствующие кнопочки. Где ковырять? Сказано что надо на третью ногу ЛА3 еще 2 контакта подключить. Я не подключал. Может это повлиять? Опять-таки, на контроллере куча свободных контактов остается. Они получается и не нужны?
marinovsoft
20.02.2018, 17:55
В стартовом посте темы
список деталей + назначение выводов разъемов X1 и J1.rar
Больше ничего не подключал.
И землю не подключали?
Назначение выводов есть. Получается 15 контактов. Остальные значит не нужны? Т.е. никуда не подключаю? Верно мыслю? Среди контактов есть только сигналы клавиатуры, мэджик и питание. Земли нет.
Другое дело, если разъем контроллера X1 надо тоже подключать к плате Пентагона. Его я никак не задействовал. Но я так понял, это разъем для подключения с целью прошивки.
marinovsoft
21.02.2018, 08:46
Без земли работать не будет.
Без земли работать не будет.
а где она на J1 ? у меня были подозрения что земля нужна... и кстати, это наверное не решает проблему со ресетом в бейсик? в первых постах написано про 3-ю ногу на ЛА3, это обязательно?
Добрый день всем.
Народ, помогите разобраться с контроллером клавиатуры для Pentagon 128 2014.
Никак не могу однозначно определить с какой ноги какой микросхемы снять /RDFE. Может подскажет кто-нибудь?
Спасибо.
solegstar
21.02.2018, 15:24
с какой ноги какой микросхемы снять /RDFE.
С 1 или 19 ноги DD44.
- - - Добавлено - - -
вообще, этот же сигнал есть на системном разъеме. контакт А5.
Спасибо!!!
Буду пробовать...
Ну все-таки, ребят, подскажите... Надо и J1 и X1 подключать? я совсем не разобрался.
Вечер добрый всем!
Народ, собрал схему на ATMEGA48 - клавиатура не работает:(
Схему прилагаю...
Все правильно сделал?
Фьюзы зашивал вот эти:
avrdude -p atmega48 -c USBasp -U flash:w:KBD13_M48_nw_MODIFIEDv5_3_24MHz.hex -U lfuse:w:0xEE:m -U hfuse:w:0xD5:m
Кварц на 24Mhz
Подключаю к Pentagon 128 2014.
При включении клавиатура зажигает 3 диода и тухнет. После этого NumLock не зажигает диод, клавиатура не отвечает даже на ресет.
Может в схеме где-то ошибся?
Еще бы увидеть что там нарисовано... выложите на какой-нибудь хостинг картинок, например, savepice.ru
PS: на всякий проверьте CLK, DAT клавиатуры правильно подключены?
Простите, схема и правда неразборчиво вышла...
Залил сюда:
https://cdn1.savepice.ru/uploads/2018/2/28/b3ebb1c4c4bad6ba3a65545f610b0390-full.png
CLK, DAT включено правильно...
Проверьте, есть ли генерация на PB7.
Светодиоды на клавиатуре загораются при подаче питания, а раз не реагирует - значит атмега не запустилась, может конденсаторы не те на кварце или еще что-то, посмотрите так же что на CLK и DAT, если есть чем посмотреть, анализатором или осциллографом.
PS: по схеме вроде бы всё верно, единственное, можно наверное не ставить подтяжки на CLK, DAT, т.к. они есть в клавиатуре, ну и я, например, AVCC, AREF и второе GND не подключаю.
Плату взял RK86-keyboard-controller, немного доработал и собрал по схеме.
- - - Добавлено - - -
Проверьте, есть ли генерация на PB7.
Светодиоды на клавиатуре загораются при подаче питания, а раз не реагирует - значит атмега не запустилась, может конденсаторы не те на кварце или еще что-то, посмотрите так же что на CLK и DAT, если есть чем посмотреть, анализатором или осциллографом.
PS: по схеме вроде бы всё верно, единственное, можно наверное не ставить подтяжки на CLK, DAT, т.к. они есть в клавиатуре, ну и я, например, AVCC, AREF и второе GND не подключаю.
Спасибо за ответ.
Резисторы подтяжки clk/dat я убрал.
Возможно дело в конденсаторах на кварце.
Ставил 22пФ. Может надо больше емкости? Попробую поменять конденсаторы.
Осцилографа к сожалению нет. Хотя, если придется, я думаю найду чем посмотреть.
AVCC, AREF и второе GND я так понял подключать не обязательно, но если подключено - это не может повлиять на работоспособность схемы?
А фьюзы правильные ставлю - lfuse:w:0xEE:m -U hfuse:w:0xD5? Для ATMEGA48?
а с чем связана уборка подтяжки clk/dat какие мотивации?
AVCC, AREF и второе GND я так понял подключать не обязательно, но если подключено - это не может повлиять на работоспособность схемы?
Если подключено, то это даже лучше.
А фьюзы правильные ставлю - lfuse:w:0xEE:m -U hfuse:w:0xD5? Для ATMEGA48?
Ну да, я вроде такие и рекомендовал для этой прошивки.
Можете еще попробовать такие
-U lfuse:w:0xee:m -U hfuse:w:0xdd:m -U efuse:w:0xff:m
а с чем связана уборка подтяжки clk/dat какие мотивации?
С тем, что в клавиатуре она есть, в самом контроллере по заверению производителей.
Чтобы не быть голословным - процитирую "Both CLOCK and DATA lines are implemented on the keyboard end as open-collector outputs with pull-up resistors to +5V. It is possible (and sometimes necessary) for the host system to actively pull these lines LOW." ссылка http://oap.sourceforge.net/keyboard_faq.html#KEYBOARDFAQ_005 ну и много где еще об этом написано.
Помогите кто-нибудь... я никак не могу заюзать контроллер. Я его купил готовый, плата зеленого цвета. разъем X1 отсутствует, есть только контакты, куда я припаял проводочки с 5 по 9.
если подаю питание на контроллер (1 нога J1 +5В, 5 нога X1 -), то клавиатура никак не реагирует (не загораются индикаторы Casps, Num и Scr).
Подключаю все сигналы с клавиатуры (KA и KD), 5В, GND, M1, IQRD (на 3 ножку ЛА3), и выходит картинка 64823
правда в цвете. При этом длинные гудки из бипера. Отключаю IQRD - обычное 128-е меню, клава не реагирует.
Я не силен в схемотехнике, так что объясните пожалуйста на пальцах (ну, почти) или как-то попроще...
если плата рабочая то по любому клавиатура должна вспыхивать индикаторами (или перепутали что с питанием)
к томуже для работы клавиатура недостаточно 5 проводков, нужно еще распять шину идущий от пентагона к самой клавиватуре (КА и КL)
довольно сложно на пальцах объяснить тому кто со схемотехникой незнаком
для начала фото платки в студию
если плата рабочая то по любому клавиатура должна вспыхивать индикаторами (или перепутали что с питанием)
точно не перепутал. даже тестером замерял - питание приходит на контроллер.
к томуже для работы клавиатура недостаточно 5 проводков, нужно еще распять шину идущий от пентагона к самой клавиватуре (КА и КL)
довольно сложно на пальцах объяснить тому кто со схемотехникой незнаком
так там все распаяно разъем J1 то имеется, к нему и подаю сигналы клавиатуры с платы пентагона. плата 2014 года, с контроллером дисковода, кемпстоном и AY. я понимаю, если мне говорят например "замерь напряжение на 5 ноге такой то микрухи", про схемотехнику - в плане не смогу разораться, если будет что-то типа "подтяни сопротивление по стольки то вольтам" или что-то подобное.
для начала фото платки в студию
пока под рукой нет нормальной камеры (телефон на зарядке даже), сфотал на вэбку 64826
точно не перепутал. даже тестером замерял - питание приходит на контроллер.
а до клавиатуры? посмотрите питания на разъеме https://cs8.pikabu.ru/post_img/2016/12/03/7/148076321215150918.png
а до клавиатуры? посмотрите питания на разъеме
спасибо, проверю. но повторюсь еще раз: контроллер купил полностью собранный и готовый к работе. не собирал его сам. единственное, он мне показался плохо собранным: кварц болтался, дорожки пытаются отваливаться даже при банальной подпайке проводочков.
Проверил, питание на клавиатуру идет. Да и при включении пентагона, все три индикатора клавиатуры моргают. после чего ни один индикатор не хочет загораться. контроллер подключил прямо к пентагону, +5 вольт и GND. остальное пока не подключил. Начинаю подозревать, что контроллер имеет кривую прошивку или неисправен. Кварц стоит на 20, атмега - 48
Felix_73
02.04.2018, 11:47
Кварц лучше поставить 24.576,ну и по возможности прошивку проверить.
И убедиться в правильном подключении разъёмов.
Кварц лучше поставить 24.576
если меняем кварц, что-то еще на плате поменять придется?
ну и по возможности прошивку проверить.
не знаю, как это делается. да и заново прошить без помощи не смогу.. никогда такого не делал
И убедиться в правильном подключении разъёмов.
если о разъемах на контроллере, то там все верно. на пентагоне единственный разъем, откуда берутся сигналы клавиатуры. правда я не уверен в IQRD... сейчас он у меня берется с 3-й ноги микросхемы ЛА3 (DD49). WAIT у меня вообще не подключен, т.к. не понял, куда конкретно припаять проводок )))) кто пишет на микросхему, кто пишет "до диода"... какого опять-таки... но вроде ведь и без WAIT реакция то какая-то должна быть? и почему при подключении IQRD вылазит цветная "шахматка" с циферками и пищит бипер?
Felix_73
02.04.2018, 20:12
Просто меняем кварц,больше ничего.
Потом смотрим как платка проходит тест ,без подключения к Пентагону.
*Если подать питание на плату контроллера, на плате загорается светодиод и тухнет через 3 сек.
Если подключить клавиатуру, светодиод реагирует на нажатие print screen.
На клавиатуре загораются и тухнут светодиоды если нажимать Num Lock. Caps Lock, Scroll Loc
С разъема Х1: M1 - 27я нога Z80; WAIT - 24я; /RES - 26я
И сделайте нормальное фото платы!
Просто меняем кварц,больше ничего.
Потом смотрим как платка проходит тест ,без подключения к Пентагону.
*Если подать питание на плату контроллера, на плате загорается светодиод и тухнет через 3 сек.
Если подключить клавиатуру, светодиод реагирует на нажатие print screen.
На клавиатуре загораются и тухнут светодиоды если нажимать Num Lock. Caps Lock, Scroll Loc
Понятно, буду пробовать.
С разъема Х1: M1 - 27я нога Z80; WAIT - 24я; /RES - 26я
у Пентагона М1 есть на системном разъеме. я собственно туда и подключаю. или надо именно на сам проц?
/RES - это Reset? Так он тоже есть на системном разъеме. могу туда подключить.
И сделайте нормальное фото платы!
вот собственно https://drive.google.com/file/d/1s3QQI8Ep9bM8VwuZQ0suu12xuzXXvKiB/view?usp=sharing
https://drive.google.com/file/d/1O_MSZGAq5uWVEUWcjpbimW472uVlKudV/view?usp=sharing
https://drive.google.com/file/d/1ftIX4PVu2pgcGnfsJvwEjF7iZ5Sr3oo_/view?usp=sharing
Еще на системном разъеме Пентагона есть KEY SELECT. Кто-нибудь знает, что это за сигнал и для чего он нужен?
tipa, известный косяк (http://zx-pk.ru/threads/17270-kontroller-klaviatury-dlya-quot-pentagon-128-quot-na-atmega8-48-88-168-328.html?p=818536&viewfull=1#post818536):
http://i101.fastpic.ru/thumb/2018/0402/ef/37cc3125292fe3027be51c07229bfdef.jpeg (http://fastpic.ru/view/101/2018/0402/37cc3125292fe3027be51c07229bfdef.jpg.html)
Надрезать.
Вот ведь! мне сразу контроллер не понравился. "допиливать" приходится ))) спасибо за наводку! буду теперь снова пробовать. отпишусь о результатах.
Вот тут ещё под вопросом дорожки. Но, возможно, это из-за качества фото и бликов.
https://image.prntscr.com/image/ScLWLxwLRO6TbeuDnN8Vtw.png
По качеству платы - она как будто сделана "на коленке"...
tipa, кстати, я вдруг обратил внимание что стоит Atmega8-16. Насколько мне известно, успешных запусков этой схемы на Atmega8 не было. Да, прошивка есть, но её просто скомпилили под этот чип, не проверяя на практике. Я тоже пытался, буквально пару недель назад, запустить эту схему с Atmega8-16 (48/168 просто нет на руках) и ничего не получилось. Тогда я собрал по быстрому на макетке облегчённую версию (http://zx-pk.ru/threads/17270-kontroller-klaviatury-dlya-quot-pentagon-128-quot-na-atmega8-48-88-168-328.html?p=853715&viewfull=1#post853715) и она отлично завелась. И автор облегчённой версии на своём сайте (http://www.avray.ru/ru/zx-spectrum-ps2-keyboard/) даже писал что тоже не смог завести эту схему с Atmega8, что в прошивке для Atmega8 явные ошибки, потому он её исправил и переделал:
В интернете я наткнулся на очень интересную реализацию данного решения, собственно вот здесь
покопавшись в архивах с прошивками я нашел прошивку под Atmega8, но, она почему-то не заработала…
Долго, очень долго я пытался её запустить, но ничего не получалось, при этом под Atmega48 и 168 всё было хорошо (по словам тех кто их подключал).
В итоге, я решил дизассемблировать прошивку от Atmega8 и Atmega168, порывшись в даташитах, я обнаружил, что в Atmega8 перепутаны некоторые порты (видимо прошивка делалась до кучи и не проверялась), так же для регистра TIFR пришлось переписать часть кода, т.к. его номер 0x58 и он недоступен для команд sbis и cbis. Ковыряясь дальше, я обнаружил, что на одном из входов шины адреса не был включен PullUp из-за чего в приведенной схеме автору пришлось поставить подтягивающие резисторы на все адресные пины. Проанализировав схему, я убрал подтягивающие резисторы с CLK и DATA выходов, т.к. они есть в самой клавиатуре (по заверению производителей). Так же убрал светодиод, т.к. он всё-равно внутри и некому им любоваться. Подправил работу дополнительных кнопок.
В итоге, прошивка заработала с кварцем 24МГц, причем очень даже отлично! Лучше чем родная клавиатура!
PS: так же я удалил из прошивки работу с клавиатурными скриптами, они мне не нужны, да и вообще мало кому нужны, это позволило еще больше ускорить реакцию на нажатия клавиш. В версии 2.0 удалось избавиться от самопроизвольных нажатий на кнопки BTN1, BTN2 при инициализации контроллера.
Так что рекомендую (http://zx-pk.ru/threads/17270-kontroller-klaviatury-dlya-quot-pentagon-128-quot-na-atmega8-48-88-168-328.html?p=855578&viewfull=1#post855578). Там из деталей только атмега, кварц и резистор. :) А для этой платы приобрести 48/168 атмегу.
Вот тут ещё под вопросом дорожки. Но, возможно, это из-за качества фото и бликов.
По качеству платы - она как будто сделана "на коленке"...
Проверил, в этих местах нормально, нет замыкания. видимо следы флюса так бликуют. Согласен, что плата плохо собрана. уже даже не раз об этом тут писал.
- - - Добавлено - - -
И автор облегчённой версии на своём сайте (http://www.avray.ru/ru/zx-spectrum-ps2-keyboard/) даже писал что тоже не смог завести эту схему с Atmega8, что в прошивке для Atmega8 явные ошибки, потому он её исправил и переделал:
Так что рекомендую (http://zx-pk.ru/threads/17270-kontroller-klaviatury-dlya-quot-pentagon-128-quot-na-atmega8-48-88-168-328.html?p=855578&viewfull=1#post855578). Там из деталей только атмега, кварц и резистор. :) А для этой платы приобрести 48/168 атмегу.
значит 2 варианта - новая плата либо атмега48.... если меняю атмегу, то прошивать надо? верно? а вот как это сделать.... надо к X1 приделать USB?или атмегу шить на программаторе?
tipa, прошивать в любом случае надо, старую Атмегу8 в новую схему, новую Атмегу48 в старую схему. Я шил на программаторе TL866, но можно проще каким нибудь USBasp (https://www.aliexpress.com/wholesale?catId=0&initiative_id=&SearchText=USBasp).
В общем, ребята, решил я попробовать довести до ума имеющуюся плату. Куплю атмегу, на работе нашелся подходящий программатор, коллеги обещали помочь с прошивкой. ну и кварц поменяю. вот если дело не пойдет, то будем вооружаться безWAITовым упрощенным вариантом. Что и как, отпишусь обязательно!
Felix_73
03.04.2018, 20:05
Кондёр С6 рядом с линейкой диодов смущает своим размером,лучше бы заменить.
Поменял кварц на 24 МГц, заказал 48-ю атмегу. в конце недели привезут. какую говорите прошивку в нее загнать надо? а то я совсем запутался в них. и не совсем понимаю, момент с вот этим: ТЫЦ (http://photo.qip.ru/users/zorel/4030463/96414781/#mainImageLink) что именно там делается? все как на картинке надо поставить?
прошивать будем на вот этом: ТЫЦ (http://www.triton-prog.ru/index.php?productID=117)
Felix_73
06.04.2018, 08:16
Поменял кварц на 24 МГц, заказал 48-ю атмегу. в конце недели привезут. какую говорите прошивку в нее загнать надо? а то я совсем запутался в них. и не совсем понимаю, момент с вот этим: ТЫЦ (http://photo.qip.ru/users/zorel/4030463/96414781/#mainImageLink) что именно там делается? все как на картинке надо поставить?
прошивать будем на вот этом: ТЫЦ (http://www.triton-prog.ru/index.php?productID=117)
У меня данный контроллер нормально работает с прошивкой 1.0 ,на первой страничке прошивки есть.
Фузы выставляем как на картинке. Почитайте первые странички темы,там всё написано про прошивку АТМЕГи.
все печально :( 65000 65001 65002
1 картинка: отключен IORD и RES (сфоткалось плохо, так то цвета и яркость - в норме)
2 картинка: отключен только RES
3 картинка: подключено все
из остального: светодиод на контроллере не гаснет совсем, кварц поставил на 24, атмега новая, 48-я. прошивка весила 8кб, взята из первого поста. фузы выставлены как на картинке из первого поста.
если просто подаю питание, то на клавиатуре нет реакции ни у CAPS, ни у NUM, ни у SCROLL....
когда подключен IORD, или RES, пентагон перестает реагировать на RESET....
походу в топку этот многострадальный контроллер, жалко только 1000 руб, которые за него уплачены и еще 350 за новую атмегу......
Felix_73
14.04.2018, 21:15
Программатор какой использовали?
У некоторых программаторов фузы,"зеркальные" и выставляются наоборот.
Дорожку на плате подрезали:
http://zx-pk.ru/threads/17270-kontroller-klaviatury-dlya-quot-pentagon-128-quot-na-atmega8-48-88-168-328/page32.html ?
Программатор какой использовали?
У некоторых программаторов фузы,"зеркальные" и выставляются наоборот.
Дорожку на плате подрезали:
http://zx-pk.ru/threads/17270-kontroller-klaviatury-dlya-quot-pentagon-128-quot-na-atmega8-48-88-168-328/page32.html ?
Цитата: "прошивать будем на вот этом: ТЫЦ (http://www.triton-prog.ru/index.php?productID=117)" (пост #319)
Дорогу подрезал. Короче, рекомендации все выполнены. Еще забыл написать: светодиод на контроллере не гаснет, даже если ничего не подключено, а только подано питание и все.
Felix_73
15.04.2018, 09:29
Дорогу подрезал. Короче, рекомендации все выполнены. Еще забыл написать: светодиод на контроллере не гаснет, даже если ничего не подключено, а только подано питание и все.
Симптомы - не правильно прошита Atmega (фузы) ,ещё ,на крайняк, замените микросхему ЛЛ1.
Диоды прозвоните.
Диоды прозвоните.
на плате контроллера?
Коллеги помогите разобраться.
Подключил Атмегу к питанию и клавиатуре, при выключении клавиатура мигает 3 светодиодами, но реакции на нажатие Num Lock и Caps Lock нету.
Сморю осциллографом сканкоды идут с клавиатуры, наживаю 8 раз кнопки и 28 нога атмеги переходит в логический ноль (садится на землю) и сканкоды прекращают идти.
Правильно ли я понимаю, что Амега запустилась и программа выполнятся, заполняет буфер (8 байт) сканкодами, он переполняется и она ждет когда он освободится. То есть придет запрос прерывания на 4 ногу и она их будет выдавать данные из буфера. Но почему тогда нет реакции на Num Lock и Caps Lock?
Коллеги помогите разобраться.
Подключил Атмегу к питанию и клавиатуре, при выключении клавиатура мигает 3 светодиодами, но реакции на нажатие Num Lock и Caps Lock нету.
Сморю осциллографом сканкоды идут с клавиатуры, наживаю 8 раз кнопки и 27 нога атмеги переходит в логический ноль (садится на землю) и сканкоды прекращают идти.
Правильно ли я понимаю, что Амега запустилась и программа выполнятся, заполняет буфер (8 байт) сканкодами, он переполняется и она ждет когда он освободится. То есть придет запрос прерывания на 4 ногу и она их будет выдавать данные из буфера. Но почему тогда нет реакции на Num Lock и Caps Lock?Судя по всему кроме питания все остальные сигналы на контроллер не поданы?
На 4 входе Меги по умолчанию должна быть 1, иначе контроллер всё время находится в режиме обработки прерывания,
ему просто нет времени для обработки остальных событий.
Сигналы A0 и /IoRD1 надо выставить в 1 (подключи к +5V).
Мдаааа, дело оказалось в клавиатуре Compaq (SDM4700P) с дополнительными кнопками для Interneta. нашел обычный Sven Elegance 5800 USB И через переходник на PS/2 все заработало!
HP KB-0316 тоже не работает.
Мдаааа, дело оказалось в клавиатуре Compaq (SDM4700P) с дополнительными кнопками для Interneta. нашел обычный Sven Elegance 5800 USB И через переходник на PS/2 все заработало!
HP KB-0316 тоже не работает.
А вы не задумывались о принципе работы этого "преходника"? Погуглите, удивитесь. Я думал, что там чхема собрана, ан нет. Так что если клава такой режим не поддерживает, то и работать в нём не будет.
А вы не задумывались о принципе работы этого "преходника"? Погуглите, удивитесь. Я думал, что там чхема собрана, ан нет. Так что если клава такой режим не поддерживает, то и работать в нём не будет.
Compaq SDM4700P и HP KB-0316 клавиатуры старые чисто PS/2. видно у них протокол ps/2 реализован немного по другому.
Купил Atmega48-20PU, прошил прошивкой KBD13_48nw.HEX, кварц 24.576, подключил к 2W (http://zx-pk.ru/threads/28550-novosibirskij-m2-m3-(-2w-3w-).html) только сигналы клавиатуры, IQRD1 и /RES. Отлично работает, только макросы с ресетом типа <WinMenu>+<L> - RESET,LOAD ""<CR> по всей видимости начинают отрабатывать раньше чем закончится ресет у компа, в итоге получается только "<CR>. Поставил прошивку 90 года, там RESET "шустрый" и всё успевает.
http://i104.fastpic.ru/thumb/2018/0422/20/_4608f9e8638d47e1a0a5fd0aea587220.jpeg (http://fastpic.ru/view/104/2018/0422/_4608f9e8638d47e1a0a5fd0aea587220.jpg.html) http://i104.fastpic.ru/thumb/2018/0422/c4/ad977ce44e2034e8152e0e67215f16c4.jpeg (http://fastpic.ru/view/104/2018/0422/ad977ce44e2034e8152e0e67215f16c4.jpg.html)
Felix_73
22.04.2018, 09:19
Отлично работает, только макросы с ресетом типа <WinMenu>+<L> - RESET,LOAD ""<CR> по всей видимости начинают отрабатывать раньше чем закончится ресет у компа, в итоге получается только "<CR>. Поставил прошивку 90 года, там RESET "шустрый" и всё успевает.
Можно с кварцем "поиграться" - поставить на 20 МГц.
Все ребят. я намучался и отправляю контроллер в топку. Все советы испробовал, прошивки разные втыкал, эффект один и тот же: при подаче питания горит и не гаснет светодиод, а вот светодиоды на клаве никак не реагируют. жалко денег, которые потрачены на этот кусок г...на. Я не ругаю сам контроллер, я ругаю конкретно мой экземпляр, заведомо кривой. Учитывая, что я покупал его в июле прошлого года, а заюзать получилось только в этом году, уже бодаться с продавцом нет смысла. Всем огромное спасибо за помощь, посмотрю, может и безWAITовый соберу... а может клаву какую переделывать возьмусь.
blackinwoman
26.04.2018, 23:52
возвращаюсь к теме клавиатуры и прошивки от EvgenRU
отсюда
http://www.avray.ru/ru/zx-spectrum-ps2-keyboard/
итоги :
с версией прошивки 5.5 не заработала ни одна мега8 48 328 на частоте 18 МГц, 20 и тем более 24, контроллеры просто не запускаются (после подачи питания, контроллер не зажигает светодиоды на клавиатуре) ... на 16МГц запускаются, но не хватает скорости контроллера нажимать кнопки на Пентагоновских машинах, на 16384 уже работает лучше, но все равно очень плохо
прошил версию 4 и она есть только для 8 меги, стало запускаться на 18 и 20+ МГц, на 24 все равно не запускается, но это особенность контроллера
клавиатура работает на 18МГц и еще лучше на 20Мгц, но стабильность еще не тестировал
вот так ...
потестировал версию 4 и оказалось что не работает ряд A12 (с 6 до 0) плюс точка, запятая, точнее на цифровом numpad поле эти клавиши нажимаются, а вот на обычном ряду над буквами нет и вместо этого выбирается E extend режим ... Тоесть или так обрабатывает коды прошивка, то ли моя клавиатура эти коды так выдает, что прошивка уже их не понимает
Имею Компаньон2, схема (https://yadi.sk/i/fSzIS3LS3Y6r4v), монтажная (https://yadi.sk/i/VRFSjYSo3Y6rBA)
Схема клавиш (https://yadi.sk/i/rd61QxB13Y6rHx) (пришлось самому срисовывать с клавиатуры Компаньона2).
Прошивка от EvgenRU отсюда (http://www.avray.ru/ru/zx-spectrum-ps2-keyboard/).
Используемые Меги Atmega48V-10PU, Atmega328P-PU, Atmega8-16PU. Кварцы 20МГц и 24МГц.
Сигнал /RDFE взят с 15 вывода микросхемы D18(схема Компаньона2) опытным путем.
Меги Atmega328P-PU и Atmega8-16PU на отрез отказались работать, хотя с ps/2 клавиатурой общаются, с Компаньоном2 ни как не реагируют, даже если ножку /RDFE пальцем трогать, естественно отпаяв от вывода 15 микросхемы D18(схема Компаньона2).
Заработала только Atmega48V-10PU, кварц 24МГц, и то линейка клавиш А14(через раз работает) и А15(ни как не работает).
Опытным путем заменил диоды VD1-VD8(схема Компаньона2) на диоды шотки с "напряжением падение на диоде" 0,45 вольта, против 0,7В(измерено с помощью тестера Маркуса) у установленных диодов VD1-VD8(схема Компаньона2). Клавиатура ps/2 полностью заработала и даже повтор символа при удержании клавиши.
Вопрос как добавить в прошивку программный ресет (вывод PC0 /reset(zx)) при нажатии на какую либо клавишу (три клавиши есть "Выключение", "Спать", "Пробуждение"), в asm не селен? Пока ресет (вывод PC0 /reset(zx)) срабатывает на клавишу "PrintScrn".
При каком условии срабатывает выводы /BTN1 /BTN2?
Вопрос про RGB, Sekam мне не удается починить (может кто подскажет работу Sekam (https://yadi.sk/i/et9sdVWa3Y9SGw) схемы?), то возникает вопрос по переделки в pal, с какими CXA1645 или AD725 будет корректно работать?
Вопрос как добавить в прошивку программный ресет (вывод PC0 /reset(zx)) при нажатии на какую либо клавишу (три клавиши есть "Выключение", "Спать", "Пробуждение"), в asm не селен? Пока ресет (вывод PC0 /reset(zx)) срабатывает на клавишу "PrintScrn".
При каком условии срабатывает выводы /BTN1 /BTN2?
Для установки других клавиш нужно править прошивку.
/BTN1, /BTN2 это выводы которые замыкают на землю, можно к любому контакту подключать, где подразумевается кнопка с замыканием на землю
Для установки других клавиш нужно править прошивку.Так подскажите где и что править.
Разобрался я с этим "резетом". Вот здесь добавил строчки
CHECK_F11:
cpi KBD_BYTE,0x78 ; check F11 pressed
; brne CHECK_RESET
brne CHECK_RES
; Push BTN2
sbi DDRC,0x02 ; set BTN2 - output LOW
rjmp NEW_KBD_LOOP
CHECK_RES:
cpi KBD_BYTE,0xB7 ; #E0, 0x37 (ACPI) power released
breq RES
CHECK_RESET:
cpi KBD_BYTE,0xFC ; #E0, 0x7C print screen pressed second 2 bytes process RESET button
brne CHECK_SHIFTS
; reset button
// cli
sbi DDRC,0x00 ; RESET - output LOW
rjmp NEW_KBD_LOOP
RES:
sbi DDRC,0x00 ; RESET - output LOW
rcall LONG_WAIT_15 ; пауза
cbi DDRC,0x00 ; RESET inactive, HI-Z mode
rjmp NEW_KBD_LOOP
CHECK_SHIFTS:
Теперь надо подумать над кнопкой "Динамик ", думаю вывод PB5 использовать.
/BTN1, /BTN2 это выводы которые замыкают на землю, можно к любому контакту подключать, где подразумевается кнопка с замыканием на землюУ меня на землю замыкает СТАРТ INV Динамик и RES.
Как вы переходите в режим e и g? Эти режимы у меня висят на линии Y1, и она ни куда в данный момент не подключена. Хотя мой Компаньон переходит успешно в эти режимы при нажатии клавиш ps/2 клавиатуры E - ESC и G - Del. Можно ли так же организовать режимы RUS и LAT, то есть без подключения лишних проводов (В данный момент у меня /BTN1 и /BTN2 ни куда не подключены)?
Еще вопрос, у вас подключено к VGA монитору, каким образом? Через какой нибудь специализированный адаптер?
Уважаемые, имею клон Пентагона sblive.narod.ru/ZX-Spectrum/GRM2Plus/GRM2PlusV8SCH.tif с такой вот интересной пометкой на схеме - Interface keyboard PC/XT. Как видно мы на колодке имеет RDFE, WAIT, RES и 5в с землёй. Какие контакты брать кроме них?
caro, вопрос , а не хватит ресурсов 328 меги ,что бы добавить kempston mouse в этот контроллер ?
caro, вопрос , а не хватит ресурсов 328 меги ,что бы добавить kempston mouse в этот контроллер ?Ножек у 328 не хватит.
Ножек у 328 не хватит.
А если шифратор поставить 8>3 для адресов , у меги освободится 5 ног , скорости 328-ой хватит что бы обработать клаву и мышь без wait ?
- - - Добавлено - - -
Микра ИВ1
67024
Если бы только на одной адресной линии был сигнал..., а так он может быть на нескольких одновременно, в этом основная трудность создания таких контроллеров.
Если бы только на одной адресной линии был сигнал..., а так он может быть на нескольких одновременно, в этом основная трудность создания таких контроллеров.
Вообще нет проблемы ,шифратор нам экономит ноги , код в меге спокойно делает дешифрацию.
Вообще нет проблемы ,шифратор нам экономит ноги , код в меге спокойно делает дешифрацию.В Спектруме адресная шина клавиатуры может иметь любое из 256 состояний, а не 8,
как отображает данный шифратор.
А вообще, даже если изменить схему, например поставив дополнительные регистры на входе и выходе,
переключая ножки контроллера по мере необходимости, надо еще посмотреть и посчитать хватит ли его
быстродействия на обработку двух прерываний с учетом времени дополнительных операций.
На одно прерывание я прикинул должно хватить, например сделать клавиатуру безWAITовой,
а мышку с минимально возможным торможением.
Но схему надо при этом дорабатывать, по типу схемы ZXMC с буфером адреса и регистром данных.
Добрый день.
Что-то я совсем запутался с подключением.
Собрал схему, при включении загорается светодиод на контроллере и все три на клавиатуре.
Потом все гаснет и не работает. Хоть что нажимай.
Не могу понять откуда взять IORQ. Пентагон - 128 , плата 2014, хотя на ней написано что 2016 :)
Кто пишет с DD19, кто с DD49.
Обьясните пожалуйста :)
Буду очень благодарен.
Спасибо.
И ещё. Нужен ли wait и res? Или только IORQ достаточно
Уже думаю не важно, т.к. плата при подаче напряжения и больше ничего не работает.
Один раз моргают лампы на клавиатуре и все. Потом тишина, ни на что не реагирует.
Добрый день.
Реши всетауи добить контроллер :)
Купил USBAVR, вынул МК из платы , подключил , чип не отвечает. Курил мануалы, все такое. Купил чистые МК 8 и 48.
Подключаю чистый МК , все читается, тут же вставляю присланный с набором - чип не отвечает. Пробовал AVRDUDESHELL.
Хочу теперь попробовать прошить чистый МК. Посмотрим что получится.
В архиве с прошивкой под МК8 и 48 есть строка запуска avrdude.
Ее можно использовать чтобы не накосячить с фьюзами ? До этого дел с МК не имел вообще :)
Всем привет.
Заработал контроллер. Прошил новый МК8. Что интересно, на плате диод перестал загораться совсем. Но клавиатура работает.
Подключил только +5в , GND, IORQD и КА-КD, Reset и M1. Ну то что было выведено на разьем уже. Wait не подключал и M1 то же.
Коллеги.
Тема что-то затихла. Никто не отвечает но все же задам вопрос. Мало ли.
Интересует соответствие клавиш PS/2 клавишам Spaccy. В теме случайно прочитал что reset выведен на print screen.
А вот остальные ? MAGIC например на какой клавише ?
И т.д.
Так же нашел одно несоответствие, хотя возможно это зависит от клавиатуры. Работая с дискетами команда FORMAT почему-то оказалась не на клавише 0 а на следующей. где - и _.
Коллеги.
Тема что-то затихла. Никто не отвечает но все же задам вопрос. Мало ли.
Интересует соответствие клавиш PS/2 клавишам Spaccy. В теме случайно прочитал что reset выведен на print screen.
А вот остальные ? MAGIC например на какой клавише ?
И т.д.
Так же нашел одно несоответствие, хотя возможно это зависит от клавиатуры. Работая с дискетами команда FORMAT почему-то оказалась не на клавише 0 а на следующей. где - и _.
В своей версии я делал так, чтобы цифровые клавиши на PC клавиатуре при нажатом Shift работали как на PC, поэтому FORMAT съехало, можно нажать её другой комбинацией, вроде или слеш или кавычка, где-то там. Доп клавиши это F11 и F12, А так, соответствие можно посмотреть в исходнике, там вроде более менее понятно должно быть.
PS: светодиод я в своей версии тоже убрал, т.к. по сути он не нужен, если на клавиатуре они есть
Господа. Добрый день.
При использовании возникло пару вопросов по контроллеру PS/2.
Есть игра Exolon - пробую назначить клавиши для игры, но при нажатии почему-то фиксируется не одно а сразу 2 или 3 нажатия. Т.е. надо выбрать Left , нажимаю любую клавишу и сразу значение попадает в Left, Right и возможно в следующую.
Странно, только в этой игре так. Игра кривая ?
В арканоиде например нет возможности выбрать устройство ввода и назначить клавиши, стартует сразу, но и ничего не работает.
Хотя в том же Flying Shark то-же нет возможности что-то выбрать но все работает.
Странные вещи происходят.....
Andreyanov
28.03.2019, 08:55
Доброго дня. Подскажите, как перейти в режим E ? Прошивка последняя 5.5 от EvgenRU,собрано на Atmega8, Пентагон 128. В файле readme c прошивкой написано что на клавише Esc но не работает, и соответственно не могу ввести команду FORMAT в TR-DOS.
- - - Добавлено - - -
В своей версии я делал так, чтобы цифровые клавиши на PC клавиатуре при нажатом Shift работали как на PC, поэтому FORMAT съехало, можно нажать её другой комбинацией, вроде или слеш или кавычка, где-то там. Доп клавиши это F11 и F12, А так, соответствие можно посмотреть в исходнике, там вроде более менее понятно должно быть.
PS: светодиод я в своей версии тоже убрал, т.к. по сути он не нужен, если на клавиатуре они есть
Это читал ....не получается.
Проблема решена заменой АП5
Немного оффтопика, сорри, если не сюда, и вообще никому не интересно
но все же на ардуине, значит на Атмега?
https://4.bp.blogspot.com/-uEbxTi_5bs4/XHYdVjC1QLI/AAAAAAAATds/-Or0Mhl7lcs8yVXf1_lFodlb99ABmZ3_QCPcBGAYYCw/s640/20190227_083232.jpg
http://www.zx81keyboardadventure.com/2019/03/zx-key-external-keyboard-for-zx81s-and.html
довольно интересное, а главное доведенное до финала, решение))
там еще 4 часть.
ps - если сильный оффтоп - потом значит потру.
balu_dark
09.04.2019, 17:59
Пущщай будет для коллекции. Но рекомендую все файлы проекта оттуда приаттачить сюда - потому как через пару лет внешние сайты могут протухнуть , а народу может срочно понадобиться.
Для установки других клавиш нужно править прошивку. Хочу попробовать сделать на ATMega8 с генератором где-то на 32 - 41 МГц для освоения турбо. Какую прошивку заливать в этом случае? Как схема изменится?
Хочу попробовать сделать на ATMega8 с генератором где-то на 32 - 41 МГц для освоения турбо. Какую прошивку заливать в этом случае? Как схема изменится?
Заливайте на 30-32МГц, больше 32МГц вряд ли потянут, у меня из 50 атмег на 40МГц завелась только одна, на 32МГц штук 5, так что не факт, что найдется подходящая микросхема. Схема вроде меняться не должна никак. Если уж совсем никак, придется выводить сигнал WAIT
Если уж совсем никак, придется выводить сигнал WAIT Ну, или отключать турбо на время, при появлении RDFE... Ну, это уже надо лезть в схемотехнику скорпа...
omercury
21.04.2019, 10:09
А если взять atXmega?
:)
Немного оффтопика, сорри, если не сюда, и вообще никому не интересно
но все же на ардуине, значит на Атмега?
https://4.bp.blogspot.com/-uEbxTi_5bs4/XHYdVjC1QLI/AAAAAAAATds/-Or0Mhl7lcs8yVXf1_lFodlb99ABmZ3_QCPcBGAYYCw/s640/20190227_083232.jpg
http://www.zx81keyboardadventure.com/2019/03/zx-key-external-keyboard-for-zx81s-and.html
довольно интересное, а главное доведенное до финала, решение))
там еще 4 часть.
ps - если сильный оффтоп - потом значит потру.
Одно не могу понять. Почему нельзя сделать нормальный пробел, ввод и стрелки ? Да классика конечно но блин можно же улучшить
В своей версии... Как выставлять фьюзы при прошивке программатором?
https://i109.fastpic.ru/big/2019/0423/73/60a5bcfccdddee65a12a613d4a082d73.jpg
Как выставлять фьюзы при прошивке программатором?
Как тут, галочка это 0, без галочки 1
https://cdn1.savepice.ru/uploads/2019/4/23/8ffd145df8c3e6f14f0686a1da540349-full.jpg
Как тут... Спасибо, с этими понятно:
CKSEL0=1
CKSEL1=1
CKSEL2=1
CKSEL3=1
SUT0=0
SUT1=0
BODEN=1
BODLEVL=1
BOOTRST=1
BOOTSZ0=1
BOOTSZ1=1
EESAVE=0
CKOPT=0
SPIEN=0
WDTON=1
RSTDISBL=1
А что делать с этими?
LB1
LB2
BLB01
BLB02
BLB11
BLB12
marinovsoft
24.04.2019, 17:50
Это Lock-bits. Читаем из контроллера и не меняем.
В общем, первая попытка прошла неудачно.
Спаял на макетке по схеме EvgenRU на ATMega8A. Кварц 24 МГц. Прошил 4-ю версию, т.к. кто-то писал, что она заработала на скорпе.
Микропроцессор завёлся, но данные с клавиатуры ошибочные идут... и нестабильные, то одни, то другие, то вообще не идут...
Закономерность этих сбоев пока не понял, но заметил, что нажатие многих клавиш выдаёт "пробел" (или "enter")...
marinovsoft
25.04.2019, 21:17
1. На Скорпионе в режиме турбо контроллер не успевает. Даже на 27 МГц, на 32 может и успел бы, но мой МК не тянет - нужно пробовать внешнее тактирование.
2. Для работы нужна микросхема ЛЛ1 (или ЛЛ4 как вариант), первый и второй вывод заводим на 1 и 15 вывод DD36 КП11, третий вывод - на 4 вывод МК.
3. Прошивка 5.5, кварц 25 МГц.
Поменял прошивку с 4 на 5.5, больше ничего не менял. Результат - комп вообще перестал реагировать на какие-либо нажатия кнопок на клавиатуре. При этом микропроцессор вроде бы работает, светодиоды зажигаются.
В связи с этим просьба к EvgenRU скомпилировать 4-ю прошивку под кварц 32,768 МГц (такой у меня есть, хочу с ним попробовать), а ещё лучше конечно выложить исходник 4-й прошивки, чтобы можно было самим компилировать прошивку под имеемый кварц, ведь к более поздним версиям исходники же выложены...
И ещё такое заметил. При подключенном контроллере параллельно подключенная механическая клавиатура не работает. Всё это о зелёном скорпионе...
В связи с этим просьба к EvgenRU скомпилировать 4-ю прошивку под кварц 32,768 МГц (такой у меня есть, хочу с ним попробовать), а ещё лучше конечно выложить исходник 4-й прошивки, чтобы можно было самим компилировать прошивку под имеемый кварц, ведь к более поздним версиям исходники же выложены...
Честно говоря, до 5-ой версии я как-то не особо заботился об исходниках, поэтому у меня их как таковых нет, а пятую версию я прилично так переписал.
У меня есть какие-то старые исходники, но что из них что я уже не помню.
Выкладываю какие-то 4 ихсодника старых, вроде бы один из них похож на 4-ую версию.
PS: кстати, у версии 4 и 5 разные схемы, у 5-ой вообще нет светодиодов и /RDFE вроде на другом выводе висит, наверное поэтому и не работает
Выкладываю какие-то 4 ихсодника старых, вроде бы один из них похож на 4-ую версию.
PS: кстати, у версии 4 и 5 разные схемы, у 5-ой вообще нет светодиодов и /RDFE вроде на другом выводе висит, наверное поэтому и не работает Спасибо! Слона-то я и не заметил:)
P.S. посмотрел - RDFE на 4-ом пине и там и там... Отличия только в названиях доп. кнопок...
P.P.S. видимо это всё-таки более поздние версии исходников, т.к. в 4 версии доп. кнопки именовались BTN1, BTN2, а в 5.5 - magic и turbo. В этих исходниках именуются magic, turbo...
marinovsoft
27.04.2019, 17:16
Не помню есть ли прошивка без оверклока на 20 МГц - я бы попробовал ее
Сейчас снова попробовал версию 5.5, но прошивал с установленным фьюзом CKOPT=1. Результат тот же самый. Микроконтроллер работает, судя по вспыхиванию светодиодов, а реакции на нажатие кнопок нет... (доп кнопки у меня пока не подключены, про них сказать ничего не могу - reset, magic, turbo)...
Судя по тому, что подключенная параллельно механическая клавиатура не работает, думаю, что контроллер постоянно крутится в прерывании и не выходит из него... А на нажатие кнопок не реагирует потому что основной цикл вообще не выполняется, всё время крутится прерывание... В 4 версии видимо как-то иначе выполнение прерывания организовано было...
EvgenRU, какой компилятор посоветуете для ковыряния кода, AVR Studio 6 пойдёт? Или надо Atmel Studio 7?
Сейчас снова попробовал версию 5.5, но прошивал с установленным фьюзом CKOPT=1. Результат тот же самый. Микроконтроллер работает, судя по вспыхиванию светодиодов
EvgenRU, какой компилятор посоветуете для ковыряния кода, AVR Studio 6 пойдёт? Или надо Atmel Studio 7?
Нет в схеме 5-ой версии светодиодов!
Подойдет любая, я делал в 5-ой, но на 7-ой тоже нормально собирается
Нет в схеме 5-ой версии светодиодов! Светодиоды, которые на клавиатуре...
Сейчас решил вернуться к первоначальному варианту, когда клавиатура работает, но неправильно.
Прошил 4-ю версию - и никакой реакции на нажатие клавиш теперь нет.
Думаю выгорели выходы микропроцессора когда я нажимал параллельно подключенную механическую клавиатуру...
Ну что. После кучи гнева и неудачных моментов контроллер я все-таки запустил.
Вот что заработало: плата контроллера с первой ревизии (где дорожка замыкает). Цепляю на плату Пентагона 128 2016 года (синюю).
Что было сделано:
1. Устранено замыкание на плате (обязательно!)
2. Установлена ATMega48 и кварц на 24 МГц
3 Прошивка KBD13_48nw (внимательно ставим фьюзы!!!!)
4. Все сигналы кроме WAIT есть на системном разъеме Пентагона, а WAIT припаян прямо на плату.
Использую самую дешевую клаву Oklick, все пашет. Позже сделаю фотографии и выложу, вдруг кому интересно.
Подойдет любая... Посмотрел логическим анализатором в состоянии после включения (когда на экране начальное меню):
https://i110.fastpic.ru/big/2019/0606/40/e2f0a5afa686aae3337e2557bb2c3040.png
Channel 2 - это INT\
Channel 1 - это 15 вывод КП11 скорпиона
Вопрос, в той ли полярности, как надо контроллеру формируются импульсы?
Channel 2 - это INT\
Channel 1 - это 15 вывод КП11 скорпиона
Вопрос, в той ли полярности, как надо контроллеру формируются импульсы?
Да вроде да, там CSKB- (DD66[3]), значит активный при нуле, аналогично /RDFE, /INT тоже активный при нуле
Надо проверить, если на PrtScr ресет работает - значит с клавиатурой контроллер общается нормально, если нет, значит нужно или контроллер менять или кварц подбирать.
Если ресет работает - значит уже что-то с обработкой порта, или контроллер притормаживает или сигналы какие-то не очень.
Надо проверить, если на PrtScr ресет работает - значит с клавиатурой контроллер общается нормально, если нет, значит нужно или контроллер менять или кварц подбирать. Спасибо, подключил ресет, так и оказалось, сброса нет...
marinovsoft
11.06.2019, 19:13
Я тут недавно один эксперимент провел - подал тактовуюю с генератора на 1533ЛА3. Reset,F11,F12 - работают, остальное - нет; с кварцем, подключенным к атмеге работают все. Кварц использовал тот же самый.
Для проверки прошил атмегу на внутренний RC-генератор. Вставил - ресет заработал, CapsLock, NumLock, ScrollLock тоже работают судя по светодиодам, больше ничего. Видимо надо кварц подбирать...
P.S. Нашёл неконтакт на кварце, пропаял. Прошил под кварц прошивкой 5,5 (и 4 тоже пробовал). Теперь на кнопки вообще не реагирует, а светодиоды на клавиатуре хаотично перемаргивают. Припаял блокировочный конденсатор - ничего не изменилось. Видимо надо кварц на меньшую частоту... Возможно причина в том, что у меня ATMega8A , а не ATMega8 и она такую частоту не тянет?
Возможно причина в том, что у меня ATMega8A , а не ATMega8 и она такую частоту не тянет?
Если в DIP корпусе, то вполне возможно, у меня 8А ни один не заработал
CapsLock, NumLock, ScrollLock тоже работают
Они работают просто при поданном питании. Проверь без контроллера , должны тоже включаться светодиоды.
Прошил под кварц прошивкой 5,5 (и 4 тоже пробовал). Теперь на кнопки вообще не реагирует, а светодиоды на клавиатуре хаотично перемаргивают.
А это скорее говорит о попытке работы контроллера ,но неправильной.
Если в DIP корпусе, то вполне возможно, у меня 8А ни один не заработал
У меня ATMEGA8A и кварц на 20MHz. Отлично работает.
Я подал тактовуюю с генератора на 1533ЛА3. Reset,F11,F12 - работают, остальное - нет; с кварцем, подключенным к атмеге работают все. Кварц использовал тот же самый. При такой замене надо Атмегу перепрошивать с другими фьюзами. С кварцем CKCEL0..3=1111, с внешним генератором CKCEL0..3=0000
У меня ATMEGA8A и кварц на 20MHz. Отлично работает. Вот и я думаю, надо кварц где-то на 20 ставить (сейчас 24 стоит).
P.S. Нашёл кварц на 20MHz, впаял, прошил прошивку 5.5 для 20 МГц. Результат: чехарда со светодиодами прекратилась, ресет и локи работают, остальные клавиши не работают. Причём при нажатии клавиш в динамике слышны тихие щелчки как при нормально работающей клавиатуре...
marinovsoft
14.06.2019, 18:56
При такой замене надо Атмегу перепрошивать с другими фьюзами. С кварцем CKCEL0..3=1111, с внешним генератором CKCEL0..3=0000
Вот я слона-то не заметил :) Снова проверил с внешним генератором. С кварцем 27Мгц - попытки старта, неработоспособен. То же самое с 30 МГц и одним 25 МГц кварцами, на другом 25 МГц взлетел. Странно, что ранее я проверял на 27 МГц без внешнего генератора, было все ок.
Лотерея. Нужно атмегу подбирать...
у меня 8А ни один не заработал Накупил разных кварцев. Результаты:
- кварц 16, прошивка 5.5 на 16 - не работает (ну, то есть только сброс работает)
- кварц 18.432, прошивка 5.5 на 16 - работает, но пропускает нажатия клавиш
- кварц 18.432, прошивка 5.5 на 20 - работает, но пропускает нажатия клавиш
- кварцы 20 и больше, прошивки на 20 и больше - не работает...
Всё это на ATMega8A и скорпионе.
EvgenRU, не могли бы вы скомпилировать прошивку под кварц 18.432 МГц?
marinovsoft
17.06.2019, 19:41
Я хоть и не EvgenRU, но скомпилировал http://rgho.st/6PmLzjLB9
Я хоть и не EvgenRU, но скомпилировал http://rgho.st/6PmLzjLB9 О, спасибо, только забрать никак не могу. Пишет, что этот ресурс заблокирован роскомнадзором, пробовал через два разных анонимайзера - не скачивается.
Нет ли возможности куда-либо ещё выложить?
marinovsoft
17.06.2019, 21:01
https://dropmefiles.com/ja9Ud
https://dropmefiles.com/ja9Ud Это скачалось, спасибо! Завтра буду пробовать...
P.S. попробовал - тоже пропускает нажатия клавиш. Видимо действительно надо ATMega8 вместо ATMega8A или какие-то схемные решения...
P.P.S. попробовал кварцы на 18 и 17.7, результат тот же (даже чуть хуже) - пропускает нажатия клавиш.
Съездил в ЧипиДип, купал ATMega8 без букв, прошил на 24, кварц на 24. Результат тоже отрицательный, сброс, маджик и локи работают, нажатия других клавиш - нет... Не знаю что и думать теперь...
Осталось только на 20 попробовать :)
Еще можно посмотреть как порт работает, что-то у меня как-то было с портом... но то на Альтере было...
Осталось только на 20 попробовать :) Прошил ATMega8 на 20, с кварцами на 20 и более результат тот же, локи и сброс работают, нажатия на клавиши нет. С кварцем 18,4 заработало, но пропускает нажатия на клавиши... В общем, похоже результат такой же, как и с ATMega8A...
Так вот же описал как решается (пост 374)
Вот что заработало: плата контроллера с первой ревизии (где дорожка замыкает). Цепляю на плату Пентагона 128 2016 года (синюю).
Что было сделано:
1. Устранено замыкание на плате (обязательно!)
2. Установлена ATMega48 и кварц на 24 МГц
3 Прошивка KBD13_48nw (внимательно ставим фьюзы!!!!)
4. Все сигналы кроме WAIT есть на системном разъеме Пентагона, а WAIT припаян прямо на плату.
Использую самую дешевую клаву Oklick, все пашет. Позже сделаю фотографии и выложу, вдруг кому интересно.
8-я атмега походу вообще не годится в этот контроллер, т.к. уже у многих были "приключения". я сам с "приключений" начал.
Спаял рекомендованный выше элемент ИЛИ, только использовал не ЛЛ1, а два диода.
Поведение контроллера никак не изменилось...
8-я атмега походу вообще не годится в этот контроллер, т.к. уже у многих были "приключения". я сам с "приключений" начал.
Я уже писал, у меня нормально работает. Только в Exolon заметил что назначение клавиш не корректно. Жмёшь один раз - выскакивает сразу на нескольких. Но это не беда. А так все ок
Я уже писал, у меня нормально работает... На пентагоне, вероятно, работает. Я запускаю на скорпионе, перепробовал уже всё возможное (для ATMega8) - результата нет.
Сегодня попробовал тактовать от внешнего кварцевого генератора на 20 МГц. Результат точно такой же, как и с кварцем на 20 МГц...
Попробовал внешний генератор на 24 МГц. Не запускается...
В общем, от внешнего генератора работает точно так же, как и от кварца на такую же частоту...
marinovsoft
13.07.2019, 05:36
Для статистики: на алишной atmega328 на 25МГц не взлетело.
Решил сам скомпилировать прошивку. Поставил AtmelStudoi 6.2, проклял всё. Мало того, что она при установки накачала с интернета и установила кучу какого-то дерьма больше чем на Гиг, жутко тормозит на моём компе, еле шевелится. Наустанавливала каких-то драйверов USB и перестал работать мой любимый программатор. Но исходник всё-таки как-то скомпилировала и он оказался рабочим.
Снёс её и весь мусор, который она наустанавливала, программатор всё равно не работает. Переустановил софт программатора - не помогло. Долго плясал с бубном, наконец как-то оживил его...
Установил AVRStudio 4.19, компактный, быстрый, удобный... Всё вроде бы хорошо, вот только исходник не компилируется, выдаёт кучу ошибок. Не знаю, что и делать теперь...
AVRASM: AVR macro assembler 2.1.42 (build 1796 Sep 15 2009 10:48:36)
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(95): error: Undefined symbol: YL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(95): error: Undefined symbol: PinD
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(95): error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(98): error: Undefined symbol: PinC
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(99): error: Undefined symbol: YL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(99): error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(105) : error: Undefined symbol: DDRB
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(109) : error: Undefined symbol: PinD
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(113) : error: Undefined symbol: DDRB
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(126) : error: Undefined symbol: PortC
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(132) : error: Undefined symbol: PortD
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(139) : error: Undefined symbol: ACSR
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(139) : error: Undefined symbol: ACD
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(148) : error: Undefined symbol: RAMEND
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(149) : error: Undefined symbol: SPL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(150) : error: Undefined symbol: RAMEND
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(151) : error: Undefined symbol: SPH
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(155) : error: Undefined symbol: ISC01
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(157) : error: Undefined symbol: MCUCR
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(158) : error: Undefined symbol: INTF0
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(160) : error: Undefined symbol: GIFR
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(161) : error: Undefined symbol: INT0
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(163) : error: Undefined symbol: GICR
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(185) : error: Undefined symbol: XH
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(185) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(236) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(236) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(240) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(240) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(243) : error: Undefined symbol: ZH
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(243) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(244) : error: Undefined symbol: ZL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(244) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(247) : error: Undefined symbol: ZL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(247) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(253) : error: Undefined symbol: YH
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(253) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(309) : error: Undefined symbol: DDRC
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(316) : error: Undefined symbol: DDRC
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(325) : error: Undefined symbol: DDRC
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(351) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(351) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(352) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(352) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(359) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(359) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(360) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(360) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(368) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(368) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(369) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(369) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(377) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(377) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(391) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(391) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(410) : error: Undefined symbol: DDRC
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(418) : error: Undefined symbol: DDRC
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(425) : error: Undefined symbol: DDRC
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(444) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(444) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(449) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(449) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(455) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(455) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(464) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(464) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(470) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(470) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(474) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(474) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(478) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(478) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(489) : error: Undefined symbol: ZH
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(489) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(490) : error: Undefined symbol: ZL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(490) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(491) : error: Undefined symbol: ZL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(491) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(493) : error: Undefined symbol: ZH
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(493) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(499) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(499) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(546) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(546) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(547) : error: Undefined symbol: ZH
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(547) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(548) : error: Undefined symbol: ZL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(548) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(553) : error: Undefined symbol: XL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(553) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(556) : error: Undefined symbol: ZH
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(556) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(557) : error: Undefined symbol: ZL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(557) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(562) : error: Undefined symbol: ZL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(562) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(564) : error: Undefined symbol: ZL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(564) : error: Invalid register
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(566) : error: Undefined symbol: ZL
D:\Temp\Work\Kb_avray\AtmelKb01\AtmelKb01.asm(566) : FATAL: Giving up after 100 errors
P.S. Заменил ассемблер в AVRStudio4 на ассемблер выдранный из AtmelStudio6. Результат - ошибки компиляции идут те же самые, как будто ничего не менял...
Такое впечатление, как будто inc-файл описаний микропроцессора не подключается...
marinovsoft
23.07.2019, 04:57
Создайте новый проект мастером, а потом скопипастите исходный код в новый asm-файл проекта.
Создайте новый проект мастером, а потом скопипастите исходный код в новый asm-файл проекта. Ну естественно я так и делал.
В общем проблему решил таким образом.
Добавил в начале ассемблерного файла строки:
.DEVICE ATmega8
.include "m8def.inc"
После этого компиляция прошла чисто, без ошибок. Полученный HEX-файл прошил в МК и проверил в устройстве - работает точно так же, как авторский.
AlexCrush
29.07.2019, 10:18
Хочу выразить благодарность EvgenRU за исходники прошивки.
Я не очень понял, базируется ли эта прошивка на прошивке от caro, но ему в любом случае тоже благодарность.
На базе этой прошивки я сделал контроллер клавиатуры для своего клона.
Контроллер работает на ATMega162 на 20мгц, без WAIT-ово обрабатывает три прерывания:
INT0: чтение kempston-джойстика (при желании можно было заменить на kempston-мышь, технических проблем нет).
INT1: запись TRDOS порта FF для того, чтобы с клавиатуры менять дисководы A/B - из контроллера выходит сигнал DriveA/B.
INT2: чтение клавиатуры
Плюсом добавил OLED экранчик для отображения режимов работы (Turbo/normal дисковод A/B, джойстик Sinclair/Cursor/Kempston).
INT1: запись TRDOS порта FF для того, чтобы с клавиатуры менять дисководы A/B - из контроллера выходит сигнал DriveA/B. Отличная идея, спасибо! только при чём здесь прерывание?
AlexCrush
29.07.2019, 16:35
Отличная идея, спасибо! только при чём здесь прерывание?
Что хочется: менять дисковод и программно (обычным *"b") и "аппаратно" с клавиатуры.
Можно сделать как минимум двумя методами:
1. Вывести с контроллера клавиатуры сигнал "DriveSwap" и через XOR смешать его с 0 битом TRDOS порта FF
2. В контроллере клавиатуры отлавливать вывод в порт FF, и выводить уже заXOR-енный вариант наружу.
Я сделал 2, т.к. так нужно меньше корпусов - все биты данных и так приходят к контроллеру клавиатуры, и остается только подключить к нему же еще и сигнал записи в TRDOS порт FF. И подключаю я его на прерывание.
2. В контроллере клавиатуры отлавливать вывод в порт FF, и выводить уже заXOR-енный вариант наружу.
Я сделал 2... imho можно постоянно ксорить этот порт, не дожидаясь никаких прерываний...
Serg6845
29.07.2019, 22:10
imho можно постоянно ксорить этот порт, не дожидаясь никаких прерываний...
интересно будет посмотреть на результат переключения дисководов во время записи на диск...
я бы блокировал возможность переключения с клавы если активна выборка дисковода (мотор включен).
AlexCrush
30.07.2019, 10:15
imho можно постоянно ксорить этот порт, не дожидаясь никаких прерываний...
В микроконтроллер не приходит сигнал "этого порта", приходит обынчая шина данных процессора, и сигнал записи в порт (на прерывание). Постоянно ксорить не выйдет. Тогда уж проще снаружи XOR-элемент поставить и не мучать МК.
Свой вариант с прерыванием я выбрал в том числе из-за возможности попутно узнать выбранный дисковод и отобразить его на экранчике (и экономии XOR-элемента).
- - - Добавлено - - -
интересно будет посмотреть на результат переключения дисководов во время записи на диск...
я бы блокировал возможность переключения с клавы если активна выборка дисковода (мотор включен).
Границу каждый проводит сам, но для меня это называется overengineering
Serg6845
31.07.2019, 09:02
Границу каждый проводит сам, но для меня это называется overengineering
по мне - так банальная "защита от дурака". которая рано или поздно понадобится. но да - границу каждый проводит сам.
AlexCrush
31.07.2019, 14:10
которая рано или поздно понадобится
В целом, у меня осталась одна свободная ножка на атмеге :-) можно туда притянуть сигнал MOTOR_ON.
Хотя можно завязаться на 3й бит порта FF
Gavrilov_S
17.08.2019, 17:42
Куда то подевались прошивки которые подходят для Пентагона 128к. По ссылке на 1 странице kay_kb13.zip для кая. Он подойдет для Пентагона?
Добрый день.
Платку собрал. Клавиатура реагирует нормально ( включаются и отключаются кнопками num lock, Caps и Scroll). Светодиод на платке горит.
Подключил к Пентагону 13 клавиатурных проводов, провод Ресет. При нажатии на print screen Пентагон сбрасывается. Другие клавиши не реагируют. Вычитал в теме, что обязательно нужно подключить IQRD1.
Куда надо подключать IQRD1, т.е. на какой пин разъема пентагона? Может кварц поставить 24 МГц?
P.S. Пентагон 2014, красная плата.
Спасибо.
Mahaon, IQRD1 сигнал чтения порта клавиатуры. На красном пенте 1,19 нога DD44 (если склероз не изменяет, схемы под рукой нет)
Добрый день.
Куда надо подключать IQRD1, т.е. на какой пин разъема пентагона? Может кварц поставить 24 МГц?
P.S. Пентагон 2014, красная плата.
Спасибо.
На разъеме платы пентагона это KEY_SELECT
Я сам каким-то чудом это выяснил, не обошлось без посторонней помощи.
Да, спасибо, все работает. А что делает Magic?
Якобы должен скидывать на диск текущее состояние памяти
azx987sa
17.01.2020, 13:20
https://dropmefiles.com/ja9Ud
Замечательный ресурс. Главное удаляет быстро.
Хочу выразить благодарность EvgenRU за исходники прошивки.
Я не очень понял, базируется ли эта прошивка на прошивке от caro, но ему в любом случае тоже благодарность.
На базе этой прошивки я сделал контроллер клавиатуры для своего клона.
Контроллер работает на ATMega162 на 20мгц, без WAIT-ово обрабатывает три прерывания:
INT0: чтение kempston-джойстика (при желании можно было заменить на kempston-мышь, технических проблем нет).
INT1: запись TRDOS порта FF для того, чтобы с клавиатуры менять дисководы A/B - из контроллера выходит сигнал DriveA/B.
INT2: чтение клавиатуры
Плюсом добавил OLED экранчик для отображения режимов работы (Turbo/normal дисковод A/B, джойстик Sinclair/Cursor/Kempston).
А в турбо 7мгц успевает без wait ? Вашу версию не выложите ?
AlexCrush
26.01.2020, 20:17
Да, в турбе успеваю без Wait. Atmega 162 на 20 МГц.
Постараюсь на днях выложить прошивку, я её изрядно переделал
- - - Добавлено - - -
Вот: https://github.com/AlexCrush/Magic08KB
AlexCrush, а кемпстон мышь тудаже может влезет?
да и ускоритель умножения на риск 20 мегагерц )
AlexCrush
27.01.2020, 09:36
а кемпстон мышь тудаже может влезет?
Если постараться - влезет.
Есть две проблемы:
1. Свободные внешние прерывания. Их у ATMega162 всего 5 (Int0-2 + PCInt0 + PCInt1). Int0-2 - заняты, PCInt0 и 1 можно настроить только на PortA и PortC, которые заняты под шины адреса и данных. Можно выкинуть порт DOS FF, это не особо нужная вещь, тогда освободится Int1.
2. Имхо, софта, поддерживающего мышь - доли процента, а уж случаев, когда без мыши не обойтись - прям исчезающе мало.
да и ускоритель умножения на риск 20 мегагерц )
Не распарсил.
Если речь о том, чтобы сделать быстрый умножитель, как предлагалось в теме про caro multicard - то, имхо, это умножение еще на пару порядков менее полезно, чем kempston mouse.
Но если отбросить вопрос "зачем", то сделать, конечно, можно.
AlexCrush, «Но если отбросить вопрос "зачем", то сделать, конечно, можно.»
да, это ответ внутренним комплексам - с помощью 20 мгц risc процессора обслуживать клавиатуру для z80
а так будет оправдание - ускоритель
AlexCrush
27.01.2020, 15:17
:v2_dizzy_roll: А, ну к счастью, у меня такого комплекса нету.
Считаю применение аврки в данном случае вполне оправданным. Это ж не просто "поморгать светодиодом".
AlexCrush
30.01.2020, 21:45
А в турбо 7мгц успевает без wait ?
Я тут внезапно вспомнил одну вещь - отсутствие wait-а в турбе обеспечивается не контроллером клавиатуры, а тем, что в моём клоне турбо отключается на время IORQ, т.е при вводе-выводе. Поэтому надо прореагировать на чтение из порта за 2.5 цикла Z80, т.е. за 700нс. Мега на 20 MHz успевает это сделать тютелька-в-тютельку. Еще один-два такта меги - и не успеет.
Для NoWait в честных 7мгц надо гораздо более шуструю мегу, таких нет.
С другой стороны, большая доля zx-периферии не будет работать корректно, если не делать отключения турбы при IORQ. У меня были проблемы с ВГ93, к примеру.
Пока я отрисовывал схему и печатку ZX-777 посетила очередная безумная идея - сделать для этого компа плату расширения.
Но не в том понимании что это будет шина типа ZX BUS или Nemo BUS, а плата с разъемами под корпус mATX. Очень неохота большие шлейфы паять.
Теперь вопрос, в компе с разъема снимается адрес и данные клавы
KL0...KL5 - данные
KA08....KA15, EKA11, EKA12, EKA15 - адреса
насколько я понял EKA11, EKA12, EKA15 - это нужны для расширенной клавы причем с отдельными линиями и если клава умеет замыкать несколько клавиш сразу, то они не нужны.
Так вот хотел взять за основу схему из этой темы, но мне не нужен сигнал ее выбора, т.е. она должна работать автономно. Не делали такой вариант?
...мне не нужен сигнал ее выбора, т.е. она должна работать автономно... Эта схема без сигнала выбора не работает, но есть другие схемы...
Эта схема без сигнала выбора не работает
Вроде в теме исходники есть, можно ведь если что поправить. Просто вдруг кто уже делал.
Да и есть 48 меги в наличии.
но есть другие схемы...
Вполне бы сгодились если они на меге 48
Вроде в теме исходники есть, можно ведь если что поправить. Просто вдруг кто уже делал. Да, делали, смотри соседнюю тему, но я сам только этот пробовал...
andrew76
04.03.2020, 22:40
Да, есть такая проблема, сам не смог ввести :) постараюсь исправить на днях
PS: смещены, потому что я делал для удобства ввода символов на цифрах с шифтом, особенно актуально для ввода текстов и в 128 бейсике. Проще наверное на отдельную кнопку повесить :) И еще надо будет перевод в E режим для ввода символов | и \
А в итоге как решили этот вопрос (ввод ERASE)? Прошивал версию 1.3 и 5.5 , так же не вводиться ERASE. Только по клавише «Э».
И какая последняя прошивка с поддержкой скриптов? В 5.5 скрипты не работают.
Sent from my iPhone using Tapatalk
Клавиши решил не переделывать, раз по Э можно ввести, т.к. раскладка отличная для тех кто привык к ПЦ (PC)
Насчет скриптов, в моих прошивках их нет, я их выкинул за ненадобностью
andrew76
01.04.2020, 21:01
Клавиши решил не переделывать, раз по Э можно ввести, т.к. раскладка отличная для тех кто привык к ПЦ (PC)
Насчет скриптов, в моих прошивках их нет, я их выкинул за ненадобностью
Мне скрипты показались удобными.
Sent from my iPhone using Tapatalk
Northwood
03.04.2020, 01:28
В схеме контроллера PS/2 клавиатуры у меня только один вопрос:
Для чего сигнал KA10 взят не из одного порта микроконтроллера PDx вместе с остальными адресными битами KA8...KA10, а взят из порта PC ?
Чтобы было легче понять суть вопроса, приведу раскладку сигналов на микроконтроллере в данной схеме:
Порт микроконтроллера PD:
PD0 - KA8
PD1 - KA9
PD2 - ~сигнал обращения к порту клавиатуры
PD3 - KA11
PD4 - KA12
PD5 - KA13
PD6 - KA14
PD7 - KA15
Порт микроконтроллера PC:
PC0 - ~Reset
PC1 - ~ Magic
PC2 - ~WAIT
PC3 - KA10
PC4 - Keyboard Data
PC5 - Keyboard Clock
PC6 - ~Keyboard Reset
Почему бы выделенные цветом сигналы не поменять местами, чтобы раскладка стала выглядеть более логично ?
PD0 - KA8
PD1 - KA9
PD2 - KA10
PD3 - KA11
PD4 - KA12
PD5 - KA13
PD6 - KA14
PD7 - KA15
Порт микроконтроллера PC:
PC0 - ~Reset
PC1 - ~Magic
PC2 - ~WAIT
PC3 - ~сигнал обращения к порту клавиатуры
PC4 - Keyboard Data
PC5 - Keyboard Clock
PC6 - ~Keyboard Reset
Микроконтроллер (МК) работает в режиме программного опроса PS/2 клавиатуры и аппаратного прерывания
по "сигналу обращения к порту клавиатуры", который поступает на его вход INT0, совмещенный с выводом PD2.
Надеюсь этого достаточно для понимания того, почему выбран первый вариант раскладки портов МК?
andrew76
03.04.2020, 13:32
Микроконтроллер (МК) работает в режиме программного опроса PS/2 клавиатуры и аппаратного прерывания
по "сигналу обращения к порту клавиатуры", который поступает на его вход INT0, совмещенный с выводом PD2.
Надеюсь этого достаточно для понимания того, почему выбран первый вариант раскладки портов МК?
Меня тоже смущала такая распиновка, теперь ясно почему был сделан такой выбор. Кстати в каких прошивках , наверное ранних, нет подтяжки этого входа к +5V (если на этом порту вообще это возможно программно), пришлось поставить один резистор.
Sent from my iPhone using Tapatalk
Northwood
06.04.2020, 17:57
Такой вопрос:
Контроллер собран на МК ATMega48PA-PU, кварц стоит на 20 МГц, фьюзы - LockBit - 0xFF, Extended - 0xFF, High - 0xDC, Low - 0xEF.
С прошивкой "KBD13_48nw.HEX" в принципе всё работает, кроме управления Турбо-режимом (на F11 нажимаются CS+9).
Хотел попробовать новую прошивку, пробовал "KBD13_M48_nw_MODIFIEDv5_5_20MHz.hex", но с ней вообще никаких признаков жизни: После включения питания на клавиатуре загораются все 3 индикатора, тухнут и больше не загораются. Нет никакой реакции ни на Caps/Scroll/Num Lock, ни на PrintScreen. Пробовал менять фьюзы на LockBit - 0xFF, Extended - 0xFF, High - 0xDD, Low - 0xEE - ничего не изменилось - ничего не работает.
Вернул прошивку "KBD13_48nw.HEX", всё заработало. Фьюзы назад не возвращал, всё-равно работает точно так же, получается, что BODLEVEL0 и CKSEL0 на работу никак не влияют.
blackmirror
06.04.2020, 19:02
получается, что BODLEVEL0 и CKSEL0 на работу никак не влияют.
Судя по этому (http://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega48pa), биты влияют на то, будет ли у нас BODlevel 2.7 или 4.3В и сколько мы будем ждать включение кварца прежде чем начать выполнение программы, либо 1К тактов либо 4.1ms + 16К тактов. В большинстве случаев оно конечно не влияет, но при шумном питании 4.3В может приводить к внезапным reset'ам, аналогично 1К тактов может оказаться недостаточным для стабилизации кварца.
Northwood
20.04.2020, 15:49
Начинаю попытки освоить микроконтроллеры AVR, хочу выяснить, почему прошивка "KBD13_M48_nw_MODIFIEDv5_5_20MHz.hex" не запускается в МК ATMega48PA-PU с кварцем 20 МГц.
Но тут же возникла проблема - исходник "KBD13_M48_nw_MODIFIEDv5_5.asm" не компилируется в AVR Studio 4.19, обнаруживает 101 ошибку, все касаются имён переменных.
Скачал и установил AVR Studio 4.19 build 730. Создал новый проект, тип проекта выбираю "Atmel AVR Assembler", задал путь к проекту и его имя, в поле "Debug Platform" выбираю "AVR Simulator", в поле "Device" выбираю "ATmega48PA".
В создавшийся автоматически asm-файл копирую исходник из файла "KBD13_M48_nw_MODIFIEDv5_5.asm". Запускаю build и получаю ошибки.
Нашёл отличное подробное описание ассемблера, смотрю в код и на ошибки:
Самая первая - в строке in YL,PinD. В документации в описании команды IN (чтение из порта) сказано, что первый операнд должен быть регистр процессора Rd (R номер), а второй - адрес порта. В исходном коде стоят не установленные заранее переменные YL и PinD, которые ассемблер и не понимает. Если посмотреть текст от начала и до места этой ошибки, то нигде не видим определения этим двум переменным.
Может я что-то упустил и не вижу очевидного ? Или это не полный исходник ? Или нужна другая среда разработки ?
YL и PinD описаны в файле m48def.inc (или m48pdef.inc - без разницы)
и много ещё переменных описывается в этом файле,
который должен подключаться оператором
.include "m48def.inc"
в самом начале исходника.
исходник "KBD13_M48_nw_MODIFIEDv5_5.asm" не компилируется в AVR Studio 4.19, обнаруживает 101 ошибку, все касаются имён переменных... Я же чуть выше писал, как это исправить... Не поленись, прочитай...
Northwood
21.04.2020, 22:04
Я же чуть выше писал, как это исправить... Не поленись, прочитай...
Это уже решено, спасибо. hex-файл теперь компилируется байт в байт такой же, как в архиве.
- - - Добавлено - - -
И так, пытаюсь выяснить, почему эта прошивка у меня не работает, в то время, как нормально работает версия 1.3:
Изучил, каким образом конфигурируются порты в ATmege. Т.к. отладочной платы у меня нет, то припаял 3 светодиода разных цветов к портам PB3, PB4 и PB5, в исходном коде в разных циклах и этапах инициализации клавиатуры зажигаю те или иные светодиоды, для того чтобы понять, не зациклилась ли в бесконечности программа в том или ином месте. Как оказалось, программа зацикливается на этапе чтения данных из клавиатуры то в "DATA_1_LOOP" в бесконечном ожидании сброса бита 4 порта C (KB_DAT), то в "KBD_DATA_LOOP". Т.е. взаимодействие контроллера с клавиатурой в версии 5.5 выполнено некорректно. Оно не работает с моей клавиатурой "A4 Tech KL-7MU", в то время, как прошивка версии 1.3 работает с этой же клавиатурой нормально.
Продолжаю дальше разбираться.
- - - Добавлено - - -
P.s. если кто-нибудь кинет в меня ссылкой на описание стандарта, по которому должно происходить взаимодействие контроллера с клавиатурой, то буду премного благодарен.
blackmirror
21.04.2020, 22:57
Northwood,
https://wiki.osdev.org/PS/2_Keyboard
К сожалению винда долгое время использовала Scan Code Set 2 и китайцы иногда делают клавиатуры, которые только его и поддерживают. Если для такой клавиатуры попробовать сменить набор кодов, то клавиатура уйдёт в состояние ошибки(что для программы может быть неожиданностью), и её потребуется сбрасывать. Еще могут быть варианты с тем, в каком наборе кодов по умолчанию она работает, хотя после сброса по идее индикаторы в любом случае должны управляться.
Northwood
21.04.2020, 23:19
Northwood,
https://wiki.osdev.org/PS/2_Keyboard
Спасибо, информация ценная.
Я вот что ещё нашёл:
https://osdev.fandom.com/ru/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D 0%B5%D1%80_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0 %B5%D0%B9%D1%81%D0%B0_PS/2
Здесь как раз описан сам процесс передачи непосредственно байта информации, как нужно управлять линиями Clock и Data, что ожидать на этих линиях при приёме байта от клавиатуры, какие паузы требуется выжидать после каждой смены уровня сигнала. Для начала я хочу проверить и убедиться, насколько согласованно происходит управление и прослушивание линий Clock и Data. И если там всё в порядке, тогда перейду к изучению непосредственно передаваемых кодов.
если кто-нибудь кинет в меня ссылкой на описание стандарта, по которому должно происходить взаимодействие контроллера с клавиатурой, то буду премного благодарен. http://abzac.retropc.ru/content?id=421
Northwood
24.04.2020, 23:48
Ура! Победил прошивку 5.5, удалось заставить её работать с моей клавиатурой "A4 Tech KL-7MU" :v2_yahoo:
Вся проблема оказалась в неверных задержках - они оказались слишком малы.
Сам алгоритм взаимодействия с клавиатурой оказался правильным, всё соответствует описанному протоколу PS/2.
Но!
1) Я сравнил реальные задержки в паузах перед началом передачи 11-битного пакета после установки 0 на линиях CLK и Data, с учётом установленной константы задержки для кварца 20 МГц, с необходимыми паузами в описании PS/2, и они оказались в 1,5 раза меньше необходимого. Правильные задержки получились после изменения константы как для кварца 32 МГц. Но это не помогло.
2) Изучив в документации детально процесс обмена данных между клавиатурой и хостом, как я уже говорил раньше, я повесил светодиоды на порт B и на разных этапах зажигал тот или иной светодиод, чтобы выяснить, в каком месте обмен зависает. И вот тут оно мне повыносило мозг:
а) когда я в прошивке повесил включение 1-го светодиода после выхода из подпрограммы "KBD_SEND_BYTE" (после завершения передачи всего 11-битного пакета, после самой первой передачи в клавиатуру команды "сброс" - байта 0xFF), а 2-го светодиода после приёма ответа из клавиатуры, то оказалось, что прошивка зацикливается на самом первом этапе, т.е. во время попытки передать клавиатуре команду "сброс".
б) но когда я повесил включение светодиодов внутри подпрограммы "KBD_SEND_BYTE" после каждого из этапов - перед началом передачи, после передачи стартового бита, после передачи 8 бит данных, после передачи бита чётности и после передачи стопового бита, то подпрограмма успешно проходила до конца. Хотя для зажигания и выключения светодиодов я не использовал регистры, всё делал побитовыми командами sbi и cbi. Убираю зажигание светодиодов - и подпрограмма зависала, поэтому выяснить, на каком конкретно этапе она зависает, не удалось. Однако, в подпрограмме "KBD_SEND_BYTE" в нескольких местах используется задержка - подпрограмма "SMALL_WAIT", и тогда я решил измерить, сколько тактов она занимает вместе с вызовом rcall - 8 тактов, и сколько занимает моя подпрограмма, которая управляет тремя светодиодами - 13 тактов. После того, как я в подпрограмме "SMALL_WAIT" дописал 5 шт NOP, тем самым добавив ей дополнительные 5 тактов, клавиатура начала нормально работать. Но всё это в совокупности с исправлением константы общей задержки.
Northwood
29.04.2020, 13:38
У меня есть две клавиатуры PS/2, одна более старая - "A4 Tech KL-7MU", она работает без вопросов, а вторая более новая - "A4 Tech KL-23MU", и с ней имеются проблемы. Вторая клавиатура не работает ни на старой прошивке версии 1.3, ни на новой.
Напомню, что изначально с версией 5.5 у меня не заработала ни одна клавиатура, пришлось увеличить задержку в подпрограмме SMALL_WAIT, и как я понял, это особенность работы конкретного микроконтроллера ATmega48PA-PU - после того как подержали в 0 KB_CLK, потом сигнал отпустили, переведя 5-й бит порта C в режим чтения и уровень 1 обеспечивается резистором подтяжки на плате контроллера, то эта 1 не сразу начинает считываться из порта PinC, для этого и вызывалось короткое ожидание SMALL_WAIT. Особенностью МК ATmega48PA-PU является то, что это время ожидание пришлось увеличить с 8 до 13 тактов.
И так, клавиатура "A4 Tech KL-7MU", как я сообщил ещё несколько дней назад, заработала нормально. Но попробовал снова подключить клавиатуру "A4 Tech KL-23MU" и она не смотря ни на что не захотела работать.
Удалось выяснить, что не удаётся передать команду "сброс" (байт 0xFF):
Подержали в течении 100 мкс в нуле CLK и Data, отпустили CLK, далее клавиатура выдаёт 1-й тактовый импульс: дождались 0 на CLK, мы передаём 1-й бит данных (уровень 1 из байта 0xFF), клавиатура выдала 1 на CLK, а далее тактовые импульсы из клавиатуры прекращаются. Т.е. всё стопорится после передачи 1-го бита из команды 0xFF (сброс), МК зависает на вечном ожидании 0 на CLK.
Если вначале работы прошивки я убираю выдачу команды "сброс", а сразу начинаю основной цикл работы с клавиатурой, то клавиатура нормально работает, кроме индикаторов - они не горят. Т.е. клавиатура игнорирует любые попытки зажечь индикаторы, но нормально считываются все нажатые клавиши.
blackmirror
29.04.2020, 19:15
Удалось выяснить, что не удаётся передать команду "сброс" (байт 0xFF):
Подержали в течении 100 мкс в нуле CLK и Data, отпустили CLK, далее клавиатура выдаёт 1-й тактовый импульс: дождались 0 на CLK, мы передаём 1-й бит данных (уровень 1 из байта 0xFF), клавиатура выдала 1 на CLK, а далее тактовые импульсы из клавиатуры прекращаются. Т.е. всё стопорится после передачи 1-го бита из команды 0xFF (сброс), МК зависает на вечном ожидании 0 на CLK.
Судя по картинке, 100мкс в нуле нужно держать только CLK: http://4a4ik.blogspot.com/2015/07/ps2.html .
Еще там написано:
0xFF (Reset) - клавиатура отвечает "подтверждаю" (ack = 0xFA), затем переходит в состояние "Reset".
То есть после посылки команды ей нужно дать возможность прислать нам 0xFA, и только после сброса придёт 0xAA.
Вообще очень похоже на то, что клавиатура вообще не понимает наши команды, может ей бит чётности не нравится? Или микроконтроллер меняет данные не по тому фронту...
Northwood
29.04.2020, 19:53
Судя по картинке, 100мкс в нуле нужно держать только CLK: http://4a4ik.blogspot.com/2015/07/ps2.html .
На картинке одно, а в тексте немного другое:
Когда хост желает начать передачу данных, он сначала выставляет на линии Data и Clock логические нули и удерживает их не менее 100 мкс,
Допускаю, что на картинке временная диаграмма изображена не точно, а тексту доверия больше.
Еще там написано:
0xFF (Reset) - клавиатура отвечает "подтверждаю" (ack = 0xFA), затем переходит в состояние "Reset".
То есть после посылки команды ей нужно дать возможность прислать нам 0xFA, и только после сброса придёт 0xAA.
Вообще очень похоже на то, что клавиатура вообще не понимает наши команды, может ей бит чётности не нравится? Или микроконтроллер меняет данные не по тому фронту...
Вы невнимательно прочитали:
Команда "Reset" не отправляется вообще, тактовые импульсы со стороны клавиатуры прекращаются после первого же отправленного бита, который = 1.
Но если в передаваемой команде последний бит = 0, например, команда 0xF0 (установить Scan Code), то такая команда отправляется успешно.
Но эта клавиатура глючит и на ПЦ. Она периодически самопроизвольно сбрасывается, из-за чего каждый день по десять раз в день приходится заходить в настройки клавиатуры и восстанавливать скорость автоповтора и заново включать Num Lock. Но не уверен, что эти две проблемы связаны друг с другом.
blackmirror
29.04.2020, 21:03
Оттуда же:
Есть 3 начальных состояния линий Data и Clock:
Data = 1, Clock = 1 - хост ждёт данные от устройства
Data = 1, Clock = 0 - хост хочет передать данные устройству
Data = 0, Clock = 0 - Передача данных запрещена
Не уверен что резкий переход из состояния 0/0 в состояние 1/1 клавиатура воспримет как наше желание отправить ей команду. Поскольку она посылает один импульс, вероятнее всего это ACK, а поскольку DATA=1, клавиатура пытается сказать что она ничего не понимает.
PS: Невнимательно прочитал, про переход DATA в 1 не было. Может особенность клавиатуры после разрешения передачи данных отправлять один бит.
Northwood
30.04.2020, 11:06
Оттуда же:
Не уверен что резкий переход из состояния 0/0 в состояние 1/1 клавиатура воспримет как наше желание отправить ей команду. Поскольку она посылает один импульс, вероятнее всего это ACK, а поскольку DATA=1, клавиатура пытается сказать что она ничего не понимает.
Я уже пробовал и так и так:
1) Выставляем CLK=0, пауза 5 мкс, выставляем Data=0, пауза 100 мкс, отпускаем CLK=1, пауза 13 тактов и далее ждём, когда клавиатура выставит CLK=0.
2) Выставляем CLK=0, пауза 100 мкс, выставляем Data=0, пауза 5 мкс, отпускаем CLK=1, пауза 13 тактов и далее ждём, когда клавиатура выставит CLK=0.
Клавиатуре "A4 Tech KL-23MU" по барабану, хоть так, хоть так, команду "Reset" передать не возможно. Стартовый бит=0 передаётся, бит0 данных=1 передаётся, а дальше CLK от клавиатуры прекращаются, хоть ты тресни, если пропустить Reset и перейти в основной цикл, то все клавиши опрашиваются, обрабатываются, клавиатурой можно пользоваться. Но индикаторы молчат.
Клавиатуре "A4 Tech KL-7MU" тоже по барабану, хоть так, хоть так работает отлично, без каких либо вопросов, команду "Reset" выполняет, индикаторы работают.
PS: Невнимательно прочитал, про переход DATA в 1 не было. Может особенность клавиатуры после разрешения передачи данных отправлять один бит.
Не вижу смысла дальше бодаться с клавиатурой "A4 Tech KL-23MU". Максимум что я сделаю, это ограничение ожидания CLK=0 и 1, так чтобы если в течении 15 мс CLK от клавиатуры не пришёл, передача байта в клавиатуру обрывалась и микроконтроллер не зависал, а продолжал работать дальше. Вот здесь лучше всего будет воспользоваться таймером прерывания.
Northwood
30.04.2020, 18:43
Выкладываю версию 5.6.1.
Что изменилось по сравнению с 5.5:
1) Чуть добавил тактов задержки вначале передачи байта из контроллера в клавиатуру, иначе не работало у меня на ATmega48PA-PU;
2) Изменил раскладку горячих клавиш:
F12 - Reset;
Print Screen - Magic;
Pause / Break - Пауза On/Off (включение / отключение вечного WAIT);
Scroll Lock - Тумблер1 On/Off (для включения / отключения Турбо-режима);
Right Shift + Scroll Lock - Тумблер1 + Тумблер2 On/Off (только с внешним генератором, для включения / отключения Турбо2-режима).
3) Сделал ограничение ожидания CLK от клавиатуры. Теперь если CLK не пришёл в течении 15 мс, то отправка или приём байта прерывается (используется таймер внутреннего прерывания). В предыдущих версиях МК зацикливался на вечном ожидании CLK.
Выложил 2 архива для разных микроконтроллеров: для ATmega-8A и ATmega48PA.
- - - Добавлено - - -
P.s. Третья цифра в номере версии теперь будет обозначать раскладку горячих клавиш.
Т.е. раскладка для x.x.1:
F12 - Reset;
Print Screen - Magic;
Pause / Break - Пауза On/Off (включение / отключение вечного WAIT);
Scroll Lock - Тумблер1 On/Off (для включения / отключения Турбо-режима);
Right Shift + Scroll Lock - Тумблер1 + Тумблер2 On/Off (для включения / отключения Турбо2-режима).
По мере появления желающих получить другую раскладку, сделаю версии 5.6.2, 5.6.3 и т.д.
- - - Добавлено - - -
P.p.s.
В архивах вложены 2 варианта принципиальной схемы и описание фьюзов:
а) с внешним кварцем;
б) с внешним генератором.
Внимание!
Перед тем как шить фьюзы под внешний генератор, убедитесь, что Ваш адаптер для программатора тактирует микроконтроллер внешним генератором, а не просто подключает кварц, иначе после прошивки фьюзов Вы потеряете возможность дальнейшей перепрошивки микроконтроллера! Хотя собрать внешний генератор на 1 микросхеме совсем не сложно.
Northwood
04.05.2020, 15:35
Сделал 2-й вариант раскладки горячих клавиш.
Кроме того, убрал реакцию на клавишу F11, которая частично дублировала клавишу Pause/Break, которую я забыл убрать прошлый раз, поэтому размеры hex-файлов уменьшились.
Нумерацию версий вернул 2-значную, т.к. гораздо удобней оказалось к именам файлов добавлять префикс "keys1", "keys2".
Keys1:
Reset - F12;
Magic - Print Screen;
Pause - Pause/Break;
Fixed Button1 - Scroll Lock;
Fixed Button1 + Fixed Button2 - Right Shift + Scroll Lock (работает только с внешним генератором).
Keys2:
Reset - Print Screen;
Magic - F12;
Pause - Pause/Break;
Fixed Button1 - Scroll Lock;
Fixed Button1 + Fixed Button2 - Right Shift + Scroll Lock (работает только с внешним генератором).
Если будут другие пожелания, сделать ещё варианты раскладки горячих клавиш, то добавлю варианты.
serg_svd
14.05.2020, 22:23
Заинтересовался схемой данного контроллера, но в итоге он у меня не работает как надо. Выручайте!
МК я поставил ATMega168PA в корпусе TQFP32 из-за того, что по ТТХ у него заявлена поддержка тактовой частоты 20 МГц при напряжении питания 5 В, в отличии от той же ATmega8A.
Прошил я его прошивкой KBD13_M168P_nw_MODIFIEDv5_5_20MHz с сайта https://www.avray.ru/ru/zx-spectrum-ps2-keyboard/.
После прошивки соответствующей конфигурации системных битов МК не смог работать с клавиатурой. После подачи питания на клавиатуре кратко вспыхивают светодиоды, а после уже они не реагируют на нажатие клавиш Caps Lock, Num Lock, Scroll Lock. В комментариях на том же сайте я нужной информации не нашел, которая смогла бы мне помочь в запуске. Затем была найдена эта тема. После ее прочтения стало грустно, так как слишком много сообщений о неработоспособности прошивок или самого контроллера. И симптомы такие же как у меня.
Попробовал установить все же ATmega8A c соответствующей прошивкой и с тем же кварцем 20 МГц. Тоже не заработало.
Затем я попробовал установить тактовую частоту 8 МГц от внутреннего генератора. При этом другую прошивку не шил. И, о чудо, клавиатура стала реагировать на указанные выше клавиши! Но спектрум их нажатия не определял.
На данный момент после всех экспериментов у меня стоит МК ATmega8A, кварц 16 МГц и прошивка KBD13_M8_nw_MODIFIEDv5_5_16MHz. Клавиатура с МК общается, но спектрум по-прежнему, на нажатия кнопок не реагирует.
Попробовал и прошивку версии 5.6 Keys2 из предыдущего сообщения, ситуация несколько хуже предыдущей. Ухудшение в том, что после хаотичного нажатия клавиш Спектрум зависает. Уж не знаю почему.
Пробовал на плате HARLEQUIN 128 Issue 2D. Правда есть пока неуверенность в том, что правильно подключил сигнал /RDFE к 6 выводу элемента микросхемы U5B. В теме об этой версии Спектрума есть только одно упоминание о том, что данный сигнал надо брать оттуда.
Как заставить работать данный контроллер клавиатуры?
Как заставить работать данный контроллер клавиатуры? По моим изысканиям получается, что ATmega8A вообще не подходит для данной схемы, потому что она плохо разгоняется. Только ATmega8...
Сделал для вашего Harlequin версию работающую по фронту, а не по спаду, т.к. на 6 выводе U5 у вас прямой сигнал RDFE, а не инвертированный
Сделал для вашего Harlequin версию работающую по фронту, а не по спаду, т.к. на 6 выводе U5 у вас прямой сигнал RDFE, а не инвертированныйСудя по схеме этот сигнал с активным низким уровнем.
На схеме сигналы RD и WR на самом деле должны быть обозначены как /RD и /WR то есть сигналы с активным низким уровнем.
Судя по схеме этот сигнал с активным низким уровнем.
На схеме сигналы RD и WR на самом деле должны быть обозначены как /RD и /WR то есть сигналы с активным низким уровнем.
Да, не заметил...
По моим изысканиям получается, что ATmega8A вообще не подходит для данной схемы, потому что она плохо разгоняется. Только ATmega8...
У меня работает 8а (планарка) на 27мНz в этом варианте схемы
https://zx-pk.ru/threads/17270-kontroller-klaviatury-dlya-quot-pentagon-128-quot-na-atmega8-48-88-168-328/page11.html пост 109.
прошивка отсюда
https://www.avray.ru/ru/zx-spectrum-ps2-keyboard/
У меня работает 8а (планарка) на 27мНz в этом варианте схемы... У меня десяток ATmega8A от китайцев и пара из ЧипДипа, ни один на частоте больше 18 МГц не работает стабильно...
serg_svd
15.05.2020, 12:55
Только ATmega8...
Эту сложнее достать уже, даже для проверки. Есть мысль запаять обратно ATMega168PA и поставить кварц 24(25) МГц, Скорее всего проще найти б/у 25 МГц на платах от компьютерных железок. Не шить прошивку, а установить биты конфигурации на работу с внешним кварцем и обязательно активировать CKOUT. Тогда смогу проверить на соответствующем выводе, есть ли генерация на этой частоте. Напрямую на кварце не могу своим частотомером сигнал посмотреть. Он его шунтирует и генерация срывается. А у ATmega8A, насколько помню, бита CKOUT нет.
У меня работает 8а (планарка) на 27мНz в этом варианте схемы
Да эта схема в принципе не отличается от схемы с сайта https://www.avray.ru/ru/zx-spectrum-ps2-keyboard/ там только нюансы. Резисторы подтяжки на клавиатуре, по идее, есть внутри самой клавиатуры. Можно проверить тестером. Диоды на выходах КА распаяны на самой плате Harlequin 128k issue 2D. Вернее там вместо диодов транзисторы.
Судя по схеме этот сигнал с активным низким уровнем.
Там стоит 74HC32, а это 4×2ИЛИ элемента. На выходе низкий уровень же будет, если все входные лог. 0. Да и запись в 74HC541 по выводам /OE тоже при активном лог. 0. Значит по спаду надо прерывание /RDFE.
- - - Добавлено - - -
А вообще я не сильно понимаю, зачем такие частоты нужны для кварца. Я измерил частотомером сигнал на 6 выводе U5B, там 400 Гц всего. Неужели МК не будет успевать генерировать коды нажатия клавиш с кварцем на те же 16 МГц? С ассемблером не дружу, поэтому работу прошивки могу оценить лишь приблизительно
marinovsoft
15.05.2020, 13:05
А вообще я не сильно понимаю, зачем такие частоты нужны для кварца.
Нужно успевать реагировать на запросы со стороны спектрума :)
А вообще я не сильно понимаю, зачем такие частоты нужны для кварца. Я измерил частотомером сигнал на 6 выводе U5B, там 400 кГц всего.Вот это очень странно, учитывая, что клавиатура опрашивается по прерываниям с частотой кадров, то есть 50 Герц, и при этом происходит опрос по 8 адресным линиям, то частота должна быть порядка 400 Герц.
Меня смущает, что на втором входе выборки регистра U6 (порт чтения клавиатуры) имеется еще один сигнал под названием AL.
serg_svd
15.05.2020, 14:20
caro, опечатка. Там действительно 400 Гц. Я ошибку исправил
Меня смущает, что на втором входе выборки регистра U6 (порт чтения клавиатуры) имеется еще один сигнал под названием AL.
Он меня тоже смущает. И я не нашел его назначения
А вообще я не сильно понимаю, зачем такие частоты нужны для кварца. С момента выставления сигнала чтения клавиатуры /RDFE до момента получения данных с клавиатуры проходит 2 такта процессора Z80. За время этих двух тактов Атмега должна переключится на программу обработки прерываний, прочитать адресную линию Z80, по этим данным из таблицы (заранее приготовленной) прочитать данные нажатых клавиш и выставить эти данные на шину данных Z80.
Мы очень много хотим от Атмеги по быстродействию. Поэтому, либо разгонять Атмегу, либо останавливать процессор Z80, пока Атмега всё это переварит...
P.S. (даже меньше двух тактов, потому что ещё тратится время на формирование сигнала /RDFE тормозной дискретной логикой)
serg_svd
15.05.2020, 15:13
За время этих двух тактов Атмега должна переключится на программу обработки прерываний, прочитать адресную линию Z80
А зачем это? Механическая клавиатура, простите, тоже читает состояние шины Z80? :)
Мне видится это так. МК выполняет 2 задачи: 1) скан клавиатуры и сохранение в буфер кода нажатой клавиши; 2) и при поступлении прерывания по /RDFE, формирование на своих портах эквивалента сигнала нажатой клавиши.
Частота сигнала /RDFE 400 Гц. Это не очень высокая частота прерываний. Другое дело, что в паузах надо обрабатывать сигнал с клавиатуры. А вот тут я слабо пока владею информацией, но в данной схеме не совсем корректно реализован опрос клавиатуры. Сигнал DAT, на мой взгляд, надо было тоже вешать на прерывание и накапливать код в буфер. Надо бы с кодом разобраться, но как я уже говорил, я ассемблер практически не знаю.
Сигнал DAT, на мой взгляд, надо было тоже вешать на прерывание и накапливать код в буфер.Запросы на прерывание при чтении порта клавиатуры нельзя пропускать ни в коем случае,
тем более что на обработку такого события отводится очень мало времени.
Если одновременно обрабатывать по прерыванию еще и опрос PS/2 клавиатуры,
то неизбежно возникнет конфликт и времени на отработку прерывания от Z80 просто не хватит.
А программный опрос PS/2 клавиатуры хорошо отработан и не вызывает никаких проблем,
даже если время от времени прерывается запросами от Z80, тем более что они идут с такой низкой частотой.
PS. Кстати можно на Спектруме написать такой короткий цикл чтения матрицы клавиатуры,
что контроллер во время пауз не будет успевать отрабатывать PS/2 клавиатуру.
serg_svd
15.05.2020, 16:26
Пока не пойму в чем тут может быть проблема?
В определении какое прерывание будет в приоритете: PS/2 или /RFE?
Конфликта прерываний тем более не будет, если приоритетным поставить обработку клавиатуры PS/2. Прерывания по архитектуре МК не могут выполнятся одновременно. Я тут полистал информацию и поправлю сам себя же. Это CLK от клавиатуры надо посадить на прерывание, а по нему считывать и накапливать бит из DAT. Так правильнее.
Во всех устройствах клавиатура - это самый медленный источник сигнала. При обработке МК сигнала от кнопки напрямую, задержки на анти дребезг могут составлять до 100 мс! А вы боитесь не успеть клавишу опросить.
МК в шину ZX должен выдавать код последней нажатой клавиши или 0, если клавиша отпущена. То есть этот код просто отдается на шину ZX из буфера по прерыванию /RDFE.
PS. Кстати можно на Спектруме написать такой короткий цикл чтения матрицы клавиатуры,
что контроллер во время пауз не будет успевать отрабатывать PS/2 клавиатуру.
Да пусть будет так, но, повторюсь, кто сказал, что за паузу между этими циклами МК должен раз за разом успевать вычитывать код из клавиатуры PS/2???
Я или реально не понимаю проблему, или кто-то изначально усложнил задачу и пытается ее оптимизировать на скорость, а не на алгоритм работы
PS. Мне нужны данные о тактовой частоте клавиатуры PS/2, которая она выдает на вывод CLK. Надо обмозговать и попробовать на свой взгляд переписать этот обработчик. Как я его вижу. Правда я не программист, но попытаться стоит.
Это CLK от клавиатуры надо посадить на прерывание, а по нему считывать и накапливать бит из DAT Ты ищешь проблему там, где её вообще нет. Контроллер прекрасно успевает работать с PS/2 клавиатурой без каких-либо прерываний, по опросу. А вот с портом Спека не успевает, поэтому на нём и прерывание.
Можно конечно посадить на прерывания то и другое, но тогда не будет хватать ног для данных, т.к. прерывания в МК могут поступать только с некоторых фиксированных пинов и нарушают возможность чтения байта с этого порта.
Правда я не программист, но попытаться стоит.Пытайся, может станешь программистом.
serg_svd
15.05.2020, 21:06
Ты ищешь проблему там, где её вообще нет. Контроллер прекрасно успевает работать с PS/2 клавиатурой без каких-либо прерываний, по опросу. А вот с портом Спека не успевает, поэтому на нём и прерывание.
Объясните мне пожалуйста, почему тогда при тактовой частоте до 16 МГц включительно клавиатура и микроконтроллер общаются адекватно, а при бОльшей частоте они уже друг друга не видят?
Пытайся, может станешь программистом.
Это не мой хлеб, но мне интересно это занятие.
В общем провел я эксперимент, как и планировал. Закатал ATMega168PA на плату и поставил кварц 25 МГц. Биты конфигурации выставил на внешнее тактирование и разрешил выход тактового сигнала на порт CLKO (РВ0). После подачи питания частотомер показал на этом выводе частоту в 25 МГц. Причем стабильную частоту, без скачков и провалов. Это стало доказательством, что МК дружит с кварцем на этой частоте. Проши прошивку KBD13_M168P_nw_MODIFIEDv5_5_25MHz.hex.
Результат отрицательный. Клавиатура не дружит с МК, Снизил тактовую до 8 МГц, клавиатура и МК заработали на этой частоте. Воспользовался случаем и проверил с какой частотой идет тактирование порта CLK клавиатуры. Всего 137 Гц. Что-то маловато. По вики там частота 10-16 кГц должна быть.
В общем делаю выводы из своего эксперимента. Прошивка не работает, где-то в ней ошибка.
К выше сказанному добавлю еще один глупый вопрос. А почему контроллер должен срабатывать по спадающему фронту /RDFE? Z80 в этот же момент будет считывать код нажатой клавиши или код только защелкнется в буфере и считается на следующем такте?
Объясните мне пожалуйста, почему тогда при тактовой частоте до 16 МГц включительно клавиатура и микроконтроллер общаются адекватно, а при бОльшей частоте они уже друг друга не видят? Элементарно, Ватсон, микропроцессор при разгоне глючит, это не его частота.
Northwood
16.05.2020, 11:41
А зачем это? Механическая клавиатура, простите, тоже читает состояние шины Z80? :)
Вот именно, что читает. А конкретно, читает 8 старших бит шины адреса, потому что они составляют строки на матрице клавиатуры, 5 бит данных - это столбцы. На пересечении адресных бит и бит данных расположены клавиши. В зависимости от того, какой выставлен старший байт порта 0xFE процессором, клавиатура должна выдать на шину данных тот или иной код. МК делает тоже самое. Только если на механической клавиатуре это реализовано развязывающими диодами, то в МК это приходится обрабатывать программно.
serg_svd
16.05.2020, 22:11
Вот именно, что читает.
То есть за один такт читается состояние линий КА, а за другой KD? Я Вас правильно понял?
микропроцессор при разгоне глючит, это не его частота.
Значит эта конструкция ненадежная? Стоит забросить и собирать на ПЛИС?
То есть за один такт читается состояние линий КА, а за другой KD?
Примерно так, но KD не читает, а записывает
Значит эта конструкция ненадежная? Стоит забросить и собирать на ПЛИС?
На ПЛИС однозначно будет лучше, а так зависит от МК, если тянет 24МГц, то будет нормально работать
serg_svd
16.05.2020, 22:55
а так зависит от МК, если тянет 24МГц, то будет нормально работать
Так по моим измерениям у меня стабильный запуск на 25 МГц. Контроллер не сбоит, не капризничает. На выводе CLKO стабильная частота тактирования выдается. Я считаю, что пашет он на этой частоте. По-другому это проверить можно только написав некоторую тестовую прошивку, с работой на этой частоте. Но на ум ничего толкового не приходит. А мигать светодиодом - это не показатель
Ну так попробуйте загрузить прошивку для другой частоты кварца, например 24 и 27, а кварц оставьте 25, может тайминги сойдутся
Ну так попробуйте загрузить прошивку для другой частоты кварца... Конечно было бы идеально, если бы прошивка была универсальная и сама настраивалась на частоту кварца...
serg_svd
17.05.2020, 12:53
Ну так попробуйте загрузить прошивку для другой частоты кварца, например 24 и 27, а кварц оставьте 25, может тайминги сойдутся
Перепробовал абсолютно все, от 16 МГц, до 32 МГц. Чуда не произошло.
Northwood
18.05.2020, 01:16
а так зависит от МК, если тянет 24МГц, то будет нормально работать
Так по моим измерениям у меня стабильный запуск на 25 МГц. Контроллер не сбоит, не капризничает.
Перепробовал абсолютно все, от 16 МГц, до 32 МГц. Чуда не произошло.
У меня всё отлично работает на МК "ATmega 48PA-PU" на частоте 20 МГц с соответствующей прошивкой на 20 МГц. Но не версия 5.5, которая у меня вообще не заработала, а с моими доработками 5.6.
Как я уже говорил ранее, причиной, по которой у меня не заработала версия 5.5, была слишком малая задержка вначале старта передачи байта из контроллера в клавиатуру, когда контроллер первый раз подаёт 0 на CLK, а затем его отпускает и ждёт первый CLK импульс от клавиатуры спустя некоторое время паузы. С паузой в 8 тактов в версии 5.5 у меня вообще не работало никак, а с паузой в 13 тактов заработало отлично.
Константы задержек, которые определяются при выборе прошивки под свой кварц, в моём случае оказались не критичны. С кварцем на 20 МГц, у меня отлично работают варианты прошивок от 20 до 32 МГц включительно.
К сожалению, за неимением ATmega 8 на ней проверить нет возможности.
serg_svd
18.05.2020, 09:42
Northwood, а сможете мне откомпилировать Вашу прошивку под m168PA на 20 МГц и 25 МГц? Я попробую.
serg_svd
21.05.2020, 21:08
Сделал 2-й вариант раскладки горячих клавиш.
Взял за основу исходник из архива kbd_firmware_v5_6_keys2_m48_with_src.zip
Создал новый проект в 7 студии для ATMega168PA и перекопировал туда содержимое файла .asm.
Также закомментировал .include "m48def.inc" ввиду ненужности.
Для кварца 25 МГц выставил .equ TIMING_COEFF = 19. После чего произвел компиляцию проекта и прошил полученный .hex файл.
Теперь МК реагирует на нажатия клавиш Caps Lock, Num Lock и Scroll Lock. Но Арлекин не реагирует на эту клавиатуру. Я все же подозреваю, что неправильно беру сигнал /RDFE/
serg_svd
24.05.2020, 12:29
Несколько дней собирался с духом, ибо азарт с этой схемой пропал...
Первое, что я сделал, попробовал этот же исходник, что указал постом выше, скомпилировать под кварц 20 и 25 МГц. Результат: МК с клавиатурой работает, ZX нет.
Второе... Не давал покоя сигнал ALL на 19 выводе U6, хотя везде, где рекомендовали как получить сигнал /RDFE, везде участвовали элементы ИЛИ.
72687
Решил попробовать собрать из диодов элемент ИЛИ. Диоды припаял катодами к 1 и 19 выводу U6. С анодов и взял "/RDFE". Тоже не заработало с этими же кварцами.
В общем, откладываю я эту схему в мусорку. У меня с ней не сложилось совсем. И мысли закончились
serg_svd, вот не помню ник товарища ,он только его собрал и к пентагону прицепил ,и у него все ок вроде , попробую постучать ему ,может ,что подскажет тебе.
serg_svd
24.05.2020, 14:33
JV-Soft, у Пентагона схема немного иная. В частности, формирование сигнала /RDFE я смотрел вообще по схеме Ленинграда. А так здесь (https://zx-pk.ru/threads/29455-harlequin-128k-issue-2d-sborka-naladka-podklyuchenie-pereferii.html?p=976619&viewfull=1#post976619) проскочило упоминание о подключении данного контроллера к такой же плате, как у меня. Я написал в личку romancha, может он еще что подскажет.
Добрый день.
Странная штука но у меня эта железка заработала почти сразу. Проблема была в том, что изначально присланный "pic" не был прошит.
Купил другой, прошил и все заработало.
marinovsoft
25.05.2020, 08:58
AndyP, вы не путаете с этим?
https://zx-pk.ru/threads/24088-zx-hid-keyboard-controller/page13.html
Нет. Не путаю. Там была проблема в самой клавиатуре.
А этот контроллер вот.
https://uploads.tapatalk-cdn.com/20200525/6b6ba0b4406afdb353d59c3ce93de402.jpg
marinovsoft
25.05.2020, 09:46
В этом контроллере нет PICов.
serg_svd
25.05.2020, 10:09
А этот контроллер вот.
По фото не совсем видно, но там микросхема логики? Это скорее всего первоначальный вариант. Не уверен...
Тут и диоды присутствуют, и резисторы подтяжки...
PS. кажется понял, что это за схема. Там используется сигнал WAIT.
AndyP, Вы же его подключали к своему ZX?
В этом контроллере нет PICов.
Да вы правы, там ATMEGA. Описался.
- - - Добавлено - - -
По фото не совсем видно, но там микросхема логики? Это скорее всего первоначальный вариант. Не уверен...
Тут и диоды присутствуют, и резисторы подтяжки...
PS. кажется понял, что это за схема. Там используется сигнал WAIT.
AndyP, Вы же его подключали к своему ZX?
Я пробовал ставить ATMEGA8 и ATMEGA48. WAIT возможно и используется (он есть на схеме) но я его не подключал.
Насчет логики посмотрю, если интересует. Подключал к Pentagon 128 - 2014
serg_svd
25.05.2020, 11:26
Я об этой схеме говорю.
72705
Я по ней и собирал. Подключил только KD-KA, +5V, GND и IQRD
Все.
- - - Добавлено - - -
Логика SN74LS32N - 555ЛЛ1 - как на схеме.
serg_svd
25.05.2020, 13:39
Хм! Тогда по сути Вам и м-ма логики не нужна была. Можно было перемычку кидать. Но не в этом дело.
Я просто не пойму причину неработоспособности в моём случае и полную работоспособность схемы в Вашем.
А скажите! В самом Пентагоне есть уже подтягивающие резисторы на +5 В по линиям КА и диоды по линиям KD? Просто упрощение схемы в этом плане меня ранее и смутило. Ведь по линиям КА в моей плате стоят подтягивающие резисторы. А вот по линиям KD(KB у меня) диодов то у меня и нет....
У меня была мысль его турбировать - потому собирал всю схему целиком.
По схеме у меня наоборот. Сопротивления на KD, диоды на КА.
https://i.ibb.co/mbf7pLY/2020-05-25-16-55-42.png (https://ibb.co/k5NFZRr)
serg_svd
25.05.2020, 16:10
В HARLEQUIN 128 Issue 2D
Линии КВ подключены так:
72713
А линии КА так:
72712
Felix_73
01.10.2020, 11:05
Изготовил вот такую платку,с разъёмом PS/2.
http://images.vfl.ru/ii/1601538463/6bf47aaa/31796558_m.jpg (http://vfl.ru/fotos/6bf47aaa31796558.html)
Прекрасно работает на Pentagon128
http://images.vfl.ru/ii/1601538623/96222a38/31796579_m.jpg (http://vfl.ru/fotos/96222a3831796579.html)
Прошивки v5.5 и v5.6_24 МГц работают стабильно,кварц на платке 20 МГц.
Если надо чистую платку,пишите в личку.
Felix_73
03.10.2020, 21:42
Очень жаль что не USB :(
https://zx-pk.ru/threads/24088-zx-hid-keyboard-controller.html изучайте!
Оригинально :) моя же фотография показывается :)
Я к тому писал, что вариант исполнения с разъёмом понравился. Так то usb я уже запустил ;)
Сделал вот такую платку с разъёмом PS/2
В названии темы ATmega8 есть, но не пойму работает ли прошивка с ней (и какая)? Мне нужно для ленина-1 клавиатуру подключить, как я понял 555лл1 тут не нужна будет, кварц на 20 Мгц, как на схеме...
- - - Добавлено - - -
Нашёл ответ на свой вопрос: https://zx-pk.ru/threads/17270-kontroller-klaviatury-dlya-quot-pentagon-128-quot-na-atmega8-48-88-168-328.html?p=909555&viewfull=1#post909555
baralgin1003
23.12.2020, 23:51
доброго времени суток. подключаю контроллер к ленину 1 (конструктор zx kit, включение меги88 такое же). Собрано все чисто, мега шьется с платы, но комп виснет при подключении сигнала /IORD (без разницы клава подключена или нет). Прошивки лил и с той темы и отсюда... Фьюзы, естественно, верные. Реакции на капс лок нет, хотя при сбросе кнопкой компа диоды на клаве моргают. Все уже проверил, не знаю куда копать...
nimdasys_inbox_ru
09.02.2021, 13:59
А возможна ли реализация на МК ATmega644-20PU (DIP 40) ?!
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot