CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

Обмен данными по PS/2

Обмен данными через PS/2 осуществляется асинхронно по последовательному протоколу.

Для обмена информацией используется 2 линии:
1 — DATA (по этой линии передаются сами данные)
5 — CLOCK (по этой линии передаются тактовые сигналы)

Данные передаются по одному байту за раз (невзирая на направление передачи – к устройству или от него).
Байт данных передаётся побитно:
1. Первым идёт Стартовый бит (START bit) (он всегда передаётся низким уровнем (логический «0»))
2. Далее передаётся сам байт данных (начиная от младшего бита к старшему).
Т.е. если нужно передать байт 0xF0, который в двоичной системе будет выглядеть, как 11110000, то передаваться он будет так: '0',’0’,’0’, ’0’, ’1’, ’1’, ’1’, ’1’.

3. После данных идёт бит чётности (Parity bit) (если число чётное – будет ‘1’, а если нечётное – ‘0’)
бит чётности – это контрольный бит, принимающий значения '0' или '1' и служащий для проверки общей чётности двоичного числа (чётности количества единичных битов в числе).

Бит чётности формируется при поразрядном (побитном) выполнении операции «Исключающее-ИЛИ» (XOR).
т.е. для примера 11110000 бит четности будет ‘1’


4. Стоп-бит (Stop bit) (всегда логическая «1»)

5. В случае передачи данных к устройству (от ПК к мышке/клавиатуре) за Стоп-битом следует бит подтверждения приёма (ACK bit) (acknowledgement) (логический ‘0’)

Все остальное время, когда нет данных для передачи, обе линии имеют высокий уровень сигнала. Частота следования импульсов линии Clock составляет около 10-25КГц.

Чтобы отправить данные PS/2-устройству нужно выполнить следующее:

1. прижать линию CLOCK к земле (установить на линии логический ‘0’) не менее, чем на 100 ms
2. прижать к земле линию DATA
3. отпустить линию CLOCK
4. Теперь нужно подождать, пока устройство прижмёт линию CLOCK к земле.
5. Установить на линии DATA первый бит данных
6. Подождать пока устройство установит последовательно высокий, а затем низкий уровень.
7. повторить шаги 5-6 для следущих 7 бит данных и бита чётности.
8. отпустить линию DATA
9. подождать пока устройство сначала прижмёт к земле линии DATA и CLOCK, а затем отпустит их.
Пример реализации можно посмотреть в функции PS2::write (см. далее)

Обычно, после приёма байта данных/команды устройство подтверждает получение – отправлением байт подтверждения.
Клавиатура и мышка возвращают байт 0xFA


PS2 и Arduino

Для работы с PS/2-устройствами (мышь, клавиатура), Arduino может использовать библиотеку PS2
файл с библиотекой: ps2.zip

Открыв архив, видим папку ps2, которую нужно поместить в библиотечную директорию Arduino IDE (\hardware\libraries\).

Библиотека PS2 представляет собой класс C++:
class PS2
{
	public:
		PS2(int clk, int data);
		void write(unsigned char data);
		unsigned char read(void);
	private:
		int _ps2clk;
		int _ps2data;
		void golo(int pin);
		void gohi(int pin);
};

Конструктор класса принимает два параметра типа int – номера портов ардуины, к которым подключены линии Clock и Data.
/*
 * к Pin 5 -  подключена линия Data, а к pin 6 – линия Clock
*/
PS2 mouse(6, 5);

Функция golo переводит порт в режим вывода и устанавливает на нём логический ‘0’
, функция же gohi переводит порт в режим ввода и подключает на нём подтягивающий резистор. Обе функции имеют тип private и используются только внутри класса.

Нам же доступны всего две функции:
write – записывает байт в линию PS/2.
Бит чётности подсчитывается строчкой
parity = parity ^ (data & 0x01);

read – считывает байт из линии PS/2
бит чётности не проверяется :(


читать далее: Подключаем к Arduino/CraftDuino мышку PS/2

Ссылки:
http://www.arduino.cc/playground/ComponentLib/Ps2mouse
  • +2
  • 22 октября 2009, 12:37
  • admin

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.