это кнопки, которые замыкаются на землю, типа /res или /turbo, можете повесить на них любые такие кнопки
это кнопки, которые замыкаются на землю, типа /res или /turbo, можете повесить на них любые такие кнопки
Добрый день!
РАЗОБРАЛСЯ, rdfe к номеру три на рисунке ниже, поменял несколько атмег и кварцев на 24 МГц - теперь работает как часы.
Собрал данную схему от EvgenRU. Но подключить к Пентагон 128к так и не получилось.
Клавиатру в начале один раз мигает, после чего включается нум-лок и скролл-лок.
Если подключать /RDFE от DD49.1 2нг., то проходит инициализация но потом не работает ресет по клавише принт-скрин и не действуют светодиоды.
Пробовал делать схему формирования /рдфе на логическом элементе ЛЛ1, но результата не дало.
Возможно нужно убрать диоды и резисторы?
Далее привожу схему вариантов подключения:
П.С. Схема завелась только на одном экземпляре кварца 24МГц, на 16, 20, 27 не заработало, прошивки на каждый кварц своя. Atmega8A - DIP корпус.
- - - Добавлено - - -
Если не секрет, то какие фьюзы исправили?
Последний раз редактировалось djspawn; 30.04.2017 в 21:35.
Pentagon 128 mod.2014 (upgraded to 1024K)+TURBO+FDD3.5+MultiROM+TurboSound+StereoCovo x+NemoIDE
ZX-Evolution rev.C White+NeoGS+AYX-32+HDD+2xFDD3.5+FDD5.25+ZiFi
Байт 128К+TR-DOS+YM+TURBO+FDD5.25
ReVerSE-U16 Rev.C
Scorpion ZS-256
STM32 AY Player
AY AVR Player
На Atmega88Если не секрет, то какие фьюзы исправили?
lfuse:w:0xEE:m -U hfuse:w:0xD5:m
Я тут опробовал еще такой вариант, вроде как даже стабильнее работает
и в _RESET нужно поменятьКод: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
Код://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.
мужики, куда копать?
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Если на 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[свернуть]
ZX-Evo Rev. C4 (Double-config) / VDAC2 / ZiFi / NeoGS / ZXM-Soundcard Extreme
А инициализация клавиатуры сделана в начале? Плюс, нужно учитывать привязку к частоте кварца
Последний раз редактировалось EvgenRU; 30.09.2017 в 16:01.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)