В статье автор более подробно описывает внутренние механизмы работы компьютера с внешними устройствами.
Канал GPIO
Для подключения различных внешних устройств в компьютере физически используются линии SCL/SDA контроллера периферийных устройств, а для управления ими - порты 215-218. Теоретически могут поддерживаться самые различные устройства, если это предусмотрено прошивкой микроконтроллера. Рассмотрим работу с некоторыми поддерживаемыми устройствами.
Работа с I2C расширителями PCF8574 или PCF8574A
Работа с этим типом устройств в базовом варианте описана ранее, однако следует сделать несколько замечаний о том, как это работает "изнутри". Как уже было сказано, контроллер внешних устройств (КВУ) работает практически без прерываний, через прерывания работают только клавиатура и запросы от главного процессора. Все остальные задания обрабатываются в главном цикле программы. Текущая реализация работы с расширителями не блокирует выполнение главного цикла: в каждом цикле по мере готовности выдаётся очередная команда аппаратному интерфейсу I2C AVR. В таком режиме время выдачи команды на расширитель приблизительно равно 250 мкс, а последовательное переключение выходов из программы на Паскале (запись в порт - ожидание выполнения - запись в порт) формирует импульс длительностью около 350 мкс. Этого вполне хватает для большинства практических задач.
Если нужно большее быстродействие, можно использовать расширители PCA8574 или PCA8574A, которые совместимы по выходам и идентификаторам, но поддерживают работу на частоте 400 кПд против 100 кГц у стандартной PCF-серии. Для работы с ними необходимо перенастроить интерфейс I2C на более высокую частоту, это можно сделать, записав последовательно 0xB8 в порт 220, 17 - в порт 221 и 0x82 - в порт 219. Эта процедура запишет нужное значение в регистр TWBR микроконтроллера и установит необходимую скорость работы шины. Работа с этими расширителями не проверялась, но ожидается, что это сократит время посылки примерно до 150 мкс.
Выходной буфер микросхем PCF8574 или PCF8574A имеет так называемый "слабый" (weak) pull-up резистор сопротивлением 100 кОм и, фактически, может рассматриваться как выход с открытым стоком. Это свойство микросхемы в данном контексте полезно при подключении внешних устройств со своим питанием - исключаются взаимные влияния и нет необходимости ставить промежуточные буферные элементы.
Эту особенность необходимо учитывать при проектировании исполнительных устройств. Так, при управлении активным низким уровнем можно использовать ключи на транзисторах структуры p-n-p с питанием 5 В в исполнительной цепи или простейшие оптопары серии PC817. Альтернативно можно поставить на вход буферные элементы 74HC04 (КР1564ЛН1), при этом необходимо поставить подтягивающие резисторы сопротивлением 10 кОм на входные линии, чтобы избежать неопределённого состояния при отключённом адаптере.
Микросхема PCF8574 интересна как раз таким своим устройством выходного каскада: замыкание на общий провод не вызовет проблем. Кроме этого, управляющая посылка для неё состоит из двух байт, что ускоряет работу. Если будет необходима поддержка других типов расширителей, например, серии MCP*, которые имеют "полноценные" управляющие логические уровни, пишите запросы и предложения в редакцию, поддержка будет добавлена.
GPIO/LPT адаптер
В качестве внутреннего стандарта предлагается использовать стандартизованный интерфейс, оформленный как LPT-порт компьютера в разъёме DB25F, который может в зависимости от ситуации быть и LPT-портом, и 24-канальным интерфейсом GPIO.
Рис. 1. Схема адаптера
Рис. 2. Вариант печатной платы устройства
Рис. 3. Вариант печатной платы устройства
Схема адаптера показана на рис. 1, штриховой линией показан вариант подключения разъёма (Х3). На рис. 2-7 приведены три варианта печатной платы, отличающихся подключением к контактам разъёма Х2 или Х3. Сделано это из соображений удобства с разных точек зрения: первый вариант (рис. 2, рис. 3) имеет минимальные размеры и эффективен, если разъём использовать без корпуса, например, для встраиваемых приложений. Два других варианта рассчитаны на установку внутрь корпуса разъёма DB25, монтажная площадка около контакта VCC служит для припаивания оплётки и фиксации кабеля. Второй вариант (рис. 4, рис. 5) оптимизирован с точки зрения порядка выходов для GPIO - по порядку, третий вариант (рис. 6, рис. 7) соответствует стандартным портам IBM PC для работы с LPT-портом. Во всех устройствах использованы микросхемы PCF8574AТ в корпусе SOIC.
Рис. 4. Вариант печатной платы устройства
Рис. 5. Вариант печатной платы устройства
Рис. 6. Вариант печатной платы устройства
Рис. 7. Вариант печатной платы устройства
Третий вариант имеет встроенную поддержку в BIOS (версия прошивки 4.63 и выше): при установке программно или через системную консоль бита LPT в LST-IOBYTE вывод на печать будет формировать сигналы протокола Centronics Standard Parallel Port (SPP) с формированием сигналов Strobe и контролем сигнала BUSY (рис. 8). Поскольку тайминг у КРИСС CP/M существенно (минимум в сто раз) медленнее требований стандарта, стабильная работа не гарантирована, однако это предоставляет удобный канал управления своими исполнительными устройствами.
Рис.8.
Ещё один нюанс, который следует иметь в виду. Стандарт IEEE-1284 параллельной шины требует наличия подтягивающих (pull-up) резисторов на стороне компьютера сопротивлением 2,2 кОм и резисторов сопряжения в линии для согласования с кабелем с волновым сопротивлением 50 Ом. В этом адаптере этого нет, как нет и поддержки требований стандарта обеспечения выходного тока не менее 20 мА на линию. Если это будет необходимо, то потребуется дополнительный шинный формирователь с внешним питанием.
Подключение собственных I2C устройств
КРИСС CP/M поддерживает любые пользовательские Slave I2C устройства со следующими ограничениями (только для этой версии прошивки, в будущих версиях планируется эти ограничения сократить):
- код SLA устройства не должен быть 1111, 1110, 11101, 11100 - эти номера зарезервированы для других типов устройств;
- устройство должно иметь один управляющий/информационный байт данных, в настоящее время поддерживает только двухбайтные пакеты.
Работа с такими устройствами не отличается от работы с расширителями PCF8574.
Продолжение следует
Автор: И. Решетников, г. Видное Московской обл.