| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Клавиатура Mera-REFA KL-13 теряет 1 бит при передачи в Arduino
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.RUN
Регистрация: 08.10.2007
Сообщений: 2,758
Сказал спасибо: 1,100
Сказали Спасибо 1,033 раз(а) в 568 сообщении(ях)
|
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.RUN
Регистрация: 08.10.2007
Сообщений: 2,758
Сказал спасибо: 1,100
Сказали Спасибо 1,033 раз(а) в 568 сообщении(ях)
|
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.RUN
Регистрация: 08.10.2007
Сообщений: 2,758
Сказал спасибо: 1,100
Сказали Спасибо 1,033 раз(а) в 568 сообщении(ях)
|
Re: Клавиатура Mera-REFA KL-13 теряет 1 бит при передачи в Arduino
Сообщение от AVRkin
|
|
какая инфа от меня требуется?
|
Мне от вас? Зачем? У меня всё работает: клавиши определяются, лампочки на клавиатуре загораются.
Вам нужен осциллограф, а лучше китайский клон лог.анализатора от saleae за $10, смотреть временные диаграммы на шине ps2 и дёргать ножками порта после/на время/ещё как-то возникновения событий в программе, наблюдать их все вместе. И получится.
Вот, нашёл свою картинку из 2013 года, когда разбирался:
Кстати, а они ещё бывают - клавы с PS/2? Понятно, что большинство с usb-разъёмом совместимы, но встречались и не- встречались с "оригинальной" времянкой...
|
|
|
|
16.02.2018, 22:23
|
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,282
Сказал спасибо: 11,860
Сказали Спасибо 4,159 раз(а) в 3,177 сообщении(ях)
|
Re: Клавиатура Mera-REFA KL-13 теряет 1 бит при передачи в Arduino
AVRkin Полностью присоединяюсь к сказанному уважаемым makakus - тут не инфа нужна и не исходный текст. В текущей ситувции только у Вас на столе комбинация подопытных. Логический анализатор и дополнение в программе на место вывода - формирование строба на любой ноге по завершению чтения байта.
И анализ происходящего. Вот с такими данными уже будет о чем говорить дальше…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
Сказали "Спасибо" mike-y-k
|
|
|
17.02.2018, 22:48
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.10.2007
Сообщений: 2,758
Сказал спасибо: 1,100
Сказали Спасибо 1,033 раз(а) в 568 сообщении(ях)
|
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
Адрес: Москва СЗАО/МО
Сообщений: 12,282
Сказал спасибо: 11,860
Сказали Спасибо 4,159 раз(а) в 3,177 сообщении(ях)
|
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, время: 06:13.
|
|