реклама на сайте
подробности

 
 
> Эмулятор PS/2 клавиатуры, проблемы с передачей данных
vitko
сообщение Jul 4 2007, 12:09
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 8-03-06
Из: Kyiv, UA
Пользователь №: 15 066



Есть устройство на AVR - считыватель карточек, включенный в разрыв PS/2-клавиатуры. При считывании карточки клавиатура блокируется и устройство от имени клавиатуры передает код карточки в виде скан-кодов. Проблема в том, что если в это время дергать PS/2-мышкой, передача идет со сбоями.
Может кто-то что-то посоветовать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vitko
сообщение Jul 5 2007, 16:31
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 8-03-06
Из: Kyiv, UA
Пользователь №: 15 066



В принципе, глобально - вопрос был в том, может ли устройство корректно передать компу масив символов, не умея принимать комманды от ПК и реагировать на них. (скажем, если в середине набора символов есть код нажатия NumLock, ПК сразу начнет передачу комманды "включить/погасить индикатор на клавиатуре"). Может устройство просто проигнорировать команду, переждать несколько мс, а потом передавать оставшиеся символы.
Я так понимаю, Dimmy это удалось.
Относительно передачи байтов, я примерно так и делаю, как говорил Dimmy - перед сбросом в 0 клока проверяю уровень на нем, если 1 - передаю байт заново :

//---------------------------------------------------------
//Send 1 byte
//---------------------------------------------------------
void PS_2Send (uchar byte)
{
unsigned char n;
unsigned char SendBuff[11];

PrepareByteToSend(SendBuff,byte);
for(n=0;n<10;n++) // try 10 times
{
WaitNoSignal(); //ждем,чтоб Clock=1 ~200 мс
if (PS_2SendBit(SendBuff[0]) == false) continue;
if (PS_2SendBit(SendBuff[1]) == false) continue;
if (PS_2SendBit(SendBuff[2]) == false) continue;
if (PS_2SendBit(SendBuff[3]) == false) continue;
if (PS_2SendBit(SendBuff[4]) == false) continue;
if (PS_2SendBit(SendBuff[5]) == false) continue;
if (PS_2SendBit(SendBuff[6]) == false) continue;
if (PS_2SendBit(SendBuff[7]) == false) continue;
if (PS_2SendBit(SendBuff[8]) == false) continue;
if (PS_2SendBit(SendBuff[9]) == false) continue;
if (PS_2SendBit(SendBuff[10]) == false) continue;
PS_Delay_us(50);
break;
}
return;
}

//---------------------------------------------------------
//Send one bit
//---------------------------------------------------------
bool PS_2SendBit (uchar b )
{
PS2_PORT|=(1<<PS2_CLK); // clock high
PS_Delay_us(15);

if (b == 1) PS2_PORT|=(1<<PS2_DATA);
else PS2_PORT&=~(1<<PS2_DATA);
PS_Delay_us(22); //us;

PS2_DDR&=~(1<<PS2_CLK); //CLK as In
if (!(PS2_PIN&(1<<PS2_CLK))) return (false); //low level on PS2_CLK
PS2_DDR|=(1<<PS2_CLK); //CLK as Out
PS2_PORT&=~(1<<PS2_CLK);
PS_Delay_us(40); //us;

PS2_PORT|=(1<<PS2_CLK);
return (true);
}

Так называемый АСК, выдаваемый хостом - это запрет на передачу на время обработки им полученной комманды (буфера у него нет).
Можно ли его наличие считать признаком приема байта и какие у него тогда должны быть временные параметры ?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- vitko   Эмулятор PS/2 клавиатуры   Jul 4 2007, 12:09
- - =GM=   Цитата(vitko @ Jul 4 2007, 12:09) Проблем...   Jul 4 2007, 12:59
- - GDI   Мышка же к другому порту подключается или я не в т...   Jul 4 2007, 13:05
- - vitko   С питанием и наводками все ОК. PS/2-мышка использу...   Jul 4 2007, 13:43
- - rezident   Насколько я помню в протоколе PS/2 интерфейса не п...   Jul 4 2007, 15:51
- - AndryG   rezident, совершенно верно - квитирования нет. Е...   Jul 4 2007, 16:47
|- - zltigo   Цитата(AndryG @ Jul 4 2007, 19:47) Если в...   Jul 4 2007, 18:07
- - Dimmy   не знаю, как клавиатура на мышь, но мышь на порт к...   Jul 4 2007, 18:51
- - rezident   Вот в этом сообщении я уже приаттачил страничку с ...   Jul 4 2007, 20:13
- - Dimmy   Эту статью я видел. Ну и посмотрите на рисунок 2. ...   Jul 4 2007, 20:25
- - rezident   Device-to-Host communication это передача от девай...   Jul 4 2007, 20:33
- - Dimmy   Совершенно с вами согласен!!! :-) И я ...   Jul 4 2007, 21:25
|- - zltigo   Цитата(Dimmy @ Jul 5 2007, 00:25) Впрочем...   Jul 4 2007, 21:54
- - Dimmy   Для направления на путь истинный - см пост выше. Э...   Jul 4 2007, 22:01
|- - zltigo   Цитата(Dimmy @ Jul 5 2007, 01:01) Это не ...   Jul 4 2007, 22:28
|- - Dimmy   ЦитатаВ принципе, глобально - вопрос был в том, мо...   Jul 5 2007, 18:48
|- - vitko   Цитата(Dimmy @ Jul 5 2007, 21:48) Только ...   Jul 6 2007, 09:12
- - Dimmy   Да, настраивать прерывание по CLK надо на фронт (т...   Jul 5 2007, 20:16


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016