Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
15.02.2018, 10:11
|
|
Прописка
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Клавиатура Mera-REFA KL-13 теряет 1 бит при передаче в Arduino
Клавиатура Mera-REFA KL-13 (вероятно от компьютера Mazovia 1016, Polish PC XT) подключена к arduino, за основу взял ps/2 и доработал его до стабильной работы
все клавиши определяются, но если зажать и держать, или же нажимать несколько раз одну клавишу - она определяется двумя или тремя последовательностями символов, а не одной. Причина этого один бит, который иногда отваливается вначале или в конце последовательноси символов.
Сейчас по прерыванию CHANGE считывается пришедшая информация
FALLING дает похожий результат, но ошибок больше
HIGH дает результат такой же как CHANGE
остальные виды прерываний показывают нули
__________________
Самое главное умение - умение радоваться жизни.
Последний раз редактировалось AVRkin; 09.03.2018 в 16:15.
|
|
|
|
15.02.2018, 13:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,106
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Клавиатура Mera-REFA KL-13 теряет 1 бит при передачи в Arduino
Ничего, что я только на передачу байтов насчитал больше 2,5 мс, а сколько времени уходит на ваш красивый serial print (hex)?
|
|
|
|
15.02.2018, 16:07
|
|
Прописка
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Клавиатура Mera-REFA KL-13 теряет 1 бит при передачи в Arduino
В таком варианте ошибок меньше, но они тоже есть
Я не могу обойтись без вывода, т.к. нужно знать что прочла Arduino
PHP код:
|
int clockPin = 7; int dataPin = 4; byte data = B0; int test = 0; int counter = 0; int numbits = 14; String a ; int get ;
void setup() { pinMode(dataPin, INPUT); pinMode(clockPin, INPUT); Serial.begin(19200); }
void loop() { if(digitalRead(clockPin) == LOW && test == 0 && counter ‹ numbits) { test = 1; data = data ›› 1; if(digitalRead(dataPin) == HIGH) { bitSet(data, 7); } counter++; } if(digitalRead(clockPin) == HIGH && test == 1) { test = 0; }
if(counter ›= numbits) { Serial.print(data, BIN); data = B0; counter = 0; } }
|
__________________
Самое главное умение - умение радоваться жизни.
|
|
|
|
16.02.2018, 00:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,106
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Клавиатура Mera-REFA KL-13 теряет 1 бит при передачи в Arduino
А давайте и я вам покидаю своих текстов?
Вот обработка в основном цикле:
Код:
|
sbrc flags,KEYBY ; byte recieved from keybd
call keybyte |
keybyte очень большая, я её приводить не буду.
А вот прерывание:
Нажмите, чтобы открыть спойлер
PHP код:
|
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- keyint: ; синхросигнал клавиатуры _- ; Ext Int 0 /// keyboard syn rising -_ /// 30-50us импульс и так же пауза S 0 1 2 3 4 5 6 7 p s /// kbitctr 10 9 8 7 6 5 4 3 2 1 0 -1 in wri2,sreg /* push2y y ld2 Yh,Yl,$140 st Y+,kbitctr st2 $140,Yh,Yl pop2y y */ mov wri1,kbitctr dec kbitctr /// ctr = 10: start bit хоть приём хоть педерача sbrc kbdmode,INCMD rjmp sykbcd //; ---------› идёт передача в клаву
cpi wri1,10 breq syend1 ; приём, start-bit ===›
tst kbitctr breq synpa ; =0: parity bit received, prepare to ACK brlt synlb ; =-1: ACK 400 us
clc sbic KBDPORT-PIN,KBDDATA ; recieve bit lsb first, 1 is hi sec ror kbdin ; shift data bit in kbdin syend1: rjmp syend ; ===›
synpa: cbr flags,(1‹‹KEYPA) sbis KBDPORT-PIN,KBDDATA sbr flags,(1‹‹KEYPA) ; set KEYPA = ~p in wri1,MCUCR cbr wri1,(1‹‹ISC10) out MCUCR,wri1 ; INT1 set falling keyb sync rjmp syend ; ===›
synlb: lds wri1,kbset+2 ori wri1,2 sts kbset+2,wri1 ; ***1 3*100us ACK + current interval piece KBSYN_PULLDOWN ldi wri1,(1‹‹INCMD) or kbdmode,wri1 syex: ldi wri1,10 mov kbitctr,wri1 ; clear to receive from keybd rjmp syend ; ===›
sykbcd: //; command to keyboard ======================================= cpi wri1,2 breq sypa ; 2 parity 1.37 brge syda ; A..3 data bits 1.20/1.29 tst wri1 breq syack ; 0 ACK? 1.87 brge sy0h ; 1 stop 1.20 ; cpi wri1,-2 brge sys0 ; -1 ACK ends, set raising edge int 0.87 ldi wri1,~(1‹‹INCMD) and kbdmode,wri1 rjmp syex ; -2 release after stop
sypa: asr flags rol flags ; flags[7] aka KEYPA --› (C) rjmp sybit syda: lsr kbdin ; (C) --› data sybit: brcs sy0h sy1h: KBDAT_PULLDOWN rjmp syend ; ===› syack: sbic KBDPORT-PIN,KBDDATA nop ; ACK: low from kbd ; sbr flags,(1‹‹NAK) ; NAK: release net
sys0: in wri1,MCUCR sbr wri1,(1‹‹ISC10) out MCUCR,wri1 ; INT1 set raising keyb sync rjmp syend
sy0h: KBDAT_RELEASE syend: out sreg,wri2
reti
|
Будете разбираться?
PS Пардон, не удалось сделать, чтобы не разбегалась табуляция. Админы, а где тег ‹ ASM › ?
Последний раз редактировалось makakus; 16.02.2018 в 00:43.
|
|
|
|
16.02.2018, 00:56
|
|
Прописка
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Клавиатура Mera-REFA KL-13 теряет 1 бит при передачи в Arduino
ок, а какая инфа от меня требуется?
__________________
Самое главное умение - умение радоваться жизни.
|
|
|
|
16.02.2018, 10:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,106
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Клавиатура Mera-REFA KL-13 теряет 1 бит при передачи в Arduino
Сообщение от AVRkin
|
какая инфа от меня требуется?
|
Мне от вас? Зачем? У меня всё работает: клавиши определяются, лампочки на клавиатуре загораются.
Вам нужен осциллограф, а лучше китайский клон лог.анализатора от saleae за $10, смотреть временные диаграммы на шине ps2 и дёргать ножками порта после/на время/ещё как-то возникновения событий в программе, наблюдать их все вместе. И получится.
Вот, нашёл свою картинку из 2013 года, когда разбирался:
Кстати, а они ещё бывают - клавы с PS/2? Понятно, что большинство с usb-разъёмом совместимы, но встречались и не- встречались с "оригинальной" времянкой...
|
|
|
|
16.02.2018, 22:23
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
|
Re: Клавиатура Mera-REFA KL-13 теряет 1 бит при передачи в Arduino
AVRkin Полностью присоединяюсь к сказанному уважаемым makakus - тут не инфа нужна и не исходный текст. В текущей ситувции только у Вас на столе комбинация подопытных. Логический анализатор и дополнение в программе на место вывода - формирование строба на любой ноге по завершению чтения байта.
И анализ происходящего. Вот с такими данными уже будет о чем говорить дальше…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
Сказали "Спасибо" mike-y-k
|
|
|
17.02.2018, 22:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,106
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Клавиатура Mera-REFA KL-13 теряет 1 бит при передачи в Arduino
Сообщение от mike-y-k
|
формирование строба на любой ноге
|
А я ещё знаете как делаю? Сдвигаю байт в свободную лапку, с максимально возможной скоростью. Потом saleae мне расшифровывает эти байты по протоколу rs232. Скорость приходится подстраивать по букве 'U' получается порядка 1,6 - 1,8 Мбод (кварц 14,7456 МГц)
|
|
|
Сказали "Спасибо" makakus
|
|
|
18.02.2018, 03:40
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
|
Re: Клавиатура Mera-REFA KL-13 теряет 1 бит при передачи в Arduino
makakus, можно и так, плюс добавить к стандартному анализатору обработку дополнительного канала и сравнение с прошедшим по последовательной шине с учетом получающейся задержки. Весьма полезное дополнение для отладки.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
19.02.2018, 23:06
|
|
Прописка
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Клавиатура Mera-REFA KL-13 теряет 1 бит при передачи в Arduino
постоянно на выходах +5в
__________________
Самое главное умение - умение радоваться жизни.
Последний раз редактировалось AVRkin; 09.03.2018 в 16:15.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:52.
|
|