LXF134:Умный дом
|
|
|
Содержание |
Программируем периферию
- Принято говорить, что Linux умеет все, кроме варки кофе – но это неправда. Андрей Боровский не будет пытаться воспроизвести старое HOWTO на эту тему, но представит вам информацию, по которой вы сможете написать его сами.
Лет 50 назад в моде были прогнозы относительно того, как будет выглядеть повседневная жизнь в XXI веке. Читать их в наше время и забавно, и интересно, и поучительно одновременно. Сами же футурологи прошлого, глядя на наше время, неизбежно испытали бы досаду. И дело не только в том, что мы до сих пор не живем до двухсот лет и не летаем на Луну по путевкам. Посмотрите хотя бы на то, как мы используем компьютеры! Вместо того, чтобы сочинять музыку и прокладывать маршруты для звездолетов, мощнейшие вычислительные средства используются для обмена колкостями в Живом журнале и просмотра видео сомнительного содержания. В этой статье я предлагаю другое применение этих мощностей – в качестве электронного мозга для управления устройствами нашего дома. Хорошем мозгу нужны хорошие мускулы (или хотя бы периферические нервные окончания), так что мы сосредоточимся на проблемах сопряжения домашнего компьютера с внешними устройствами.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Устройства, которые мы рассмотрим, отличаются простотой. Детали, необходимые для их сборки, найдутся в арсенале любого заядлого компьютерщика. Если вы не любите паять – не беда, обойдемся и без пайки. Такой подход имеет оборотную сторону: используемые нами решения не являются профессиональными и, скорее всего, не подойдут для устройств, имеющих хотя бы отдаленное промышленное назначение. Строго говоря, это именно то, что называется словом «hack». Используемые мной подходы не представляют ничего существенно нового. Описания многих из этих трюков можно найти в Интернете, где они ориентированы в основном на ОС Windows. Но когда я занялся интеллектуализацией своего дома, то обнаружил, что Linux гораздо лучше подходит для решения этих задач, нежели ОС от Microsoft. Об этом я и собираюсь вам рассказать. Прежде чем продолжить, произнесу обязательное ритуальное заклинание: следуя приведенным здесь советам, вы действуете на свой страх и риск. Я заранее снимаю с себя ответственность. Все приведенные электрические схемы носят приблизительно-показательный характер (параметры резисторов и конденсаторов не указываю). Если вы задумаете реализовать их – уточните параметры самостоятельно.
Наш лучший друг — параллельный порт
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Параллельный порт как нельзя лучше подходит для наших целей. Стандартные напряжения сигналов на его выводах соответствуют уровням напряжения TTL-электроники, и мы обладаем над ними полным контролем: можем устанавливать и сбрасывать их на сколь угодно продолжительное время. Хотя изначально параллельный порт предназначался для вывода данных на принтер, в более поздних версиях стандарта были добавлены возможности чтения данных с внешнего устройства (те из вас, кто сел за компьютер в 90‑х или ранее, наверное, помнят сканеры, которые подключались к компьютеру через параллельный порт). Впрочем, даже самый «тупой» параллельный порт умеет считывать внешние сигналы – например, сигнал о том, что в принтере закончилась бумага. Схема контактов параллельного порта представлена на рис. 1. Мы располагаем восемью линиями для передачи данных (в базовой версии порта – от компьютера ко внешнему устройству), тремя линиями управления (также работающими на вывод) и пятью линиями состояния (ввод данных). На каждой из этих линий может быть установлена логическая единица (+5 В) или ноль (0 В). Для управления внешним устройством – например, реле – мы выводим уровень логической 1 на соответствующие линии данных порта (рис. 2).
Управлять параллельным портом из Linux можно двумя способами: с помощью файла устройства /dev/parport* и путем непосредственного доступа к адресам порта. В обоих случаях для получения доступа к порту программа должна обладать правами root.
Рассмотрим, как решить эту задачу методом непосредственного доступа к портам (здесь нужно различать «порт» в том смысле, о котором мы говорили выше, и «порт устройства» как канал обмена данными, отображенный в адресное пространство).
Программа, представленная на листинге, предлагает пользователю ввести число и устанавливает сигналы на линиях данных параллельного порта в соответствии с маской его битов.
#include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/io.h> #include <iostream> using namespace std; int main() { int addr = 0x378; if (ioperm(addr,1,1)) { cout << “Невозмож но ус тановить разрешения на дос туп к порту. Вы долж ны быть root'ом.” << endl; return 1; } char i = 1; while (i) { cout << “Введи те чис ло”; cin >> i; outb(i, addr); cout << “Записано” << endl; } return 0; }
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
0x378 – адрес регистра данных первого параллельного порта компьютера. Если в системе есть второй параллельный порт, доступ к его регистру данных осуществляется через ячейку по адресу 0x278. Чтобы получить доступ к адресу регистра порта, программа должна запросить и получить соответствующие полномочия. Мы делаем это с помощью функции ioperm(), которая доступна только процессам, выполняющимся с правами root. Первый ее аргумент – начальный адрес порта устройства, к которому мы хотим получить доступ. Второй аргумент – размер области памяти в байтах. Третий аргумент указывает, должен ли доступ быть включен (1) или выключен (0). Если функция выполнена успешно, она возвращает ноль, в противном случае – -1. Получив доступ к порту устройства, мы можем записывать данные с помощью функций outb(), outw(), outl(), где b означает byte, w – word, l – long. Так, например, если мы запишем в регистр по адресу 0x378 число 4, на выводе 4‑го разъема параллельного порта (линия D2) будет установлено напряжение, соответствующее логической 1. Проверить же работу программы, управляющей портом, очень просто. Для этого нам понадобятся несколько светодиодов и кабель Centronics, которым в былые времена соединяли компьютеры и принтеры (рис. 3). Поскольку параллельный порт предоставляет нам 8 линий данных, с помощью одного только регистра данных мы можем управлять восемью устройствами. Этим возможности параллельного порта не исчерпываются.
Как уже отмечалось, через регистр состояния мы можем передавать данные от внешнего устройства к компьютеру. Простейшее такое устройство – датчик размыкания. Он может, например, сообщить системе, что кто-то открыл входную дверь, окно или дверцу сейфа. Каким образом взаимодействует внешнее устройство и линия состояния порта? По умолчанию на линиях S3–S7 установлены уровни логической 1, и маска регистра состояния выглядит как 11111000b. Чтобы установить на одной из линий состояния логический ноль, мы просто замыкаем эту линию с землей порта через сопротивление 300–500 Ом. В результате значение соответствующего бита в регистре становится равным нулю. Таким образом, сброшенный бит свидетельствует о том, что цепь замкнута; установленный – о том, что разомкнута. Ниже приводится фрагмент программы, которая контролирует состояние датчика размыкания (предполагается, что датчик подключен к линии S5 (вывод 12).
int main() { int addr = 0x379; if (ioperm(addr,1,1)) { cout << “Невозмож но ус тановить разрешения на дос туп к порту. Вы долж ны быть root'ом.” << endl; return 1; } char i; while (1) { i = inb(addr); if (i & 32) cout << “Разомкнуто” << endl; else cout << “Замкнуто” << endl; sleep(1); } return 0; }
Регистр состояния порта LPT1 доступен по адресу 0x379, а порта LPT2 – соответственно 0x279.
Как было отмечено выше, с параллельным портом можно работать и через файл устройства (/dev/parport*, где * – число, обозначающее номер порта). После того как мы открыли устройство порта
fd = open(“/dev/parport0”, O_RDWR|O_NONBLOCK);
мы можем настроить его с помощью вызовов ioctl(). Например, команда PPCLAIM открывает программе доступ к порту:
if (ioctl(fd,PPCLAIM) <0) printf (“Ошибка!”);
Порт, занятый с помощью вызова PPCLAIM, может быть освобожден с помощью вызова PPRELEASE. Константы и макросы, имеющие отношение к параллельному порту, определены в заголовочных файлах <linux/parport.h> и <linux/ppdev.h>.
Для записи данных в порт его можно перевести в режим байтовой передачи:
int mode = IEEE1284_MODE_BYTE; /* or IEEE1284_MODE_NIBBLE, etc. */ ioctl(fd,PPNEGOT,&mode);
после чего можно использовать обычную функцию write(). Для чтения состояния порта мы воспользуемся вызовом PPRSTATUS:
int status; ioctl(fd, PPRSTATUS, &status);
Последовательный порт
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Этот порт гораздо меньше подходит для наших экспериментов – прежде всего потому, что он более «интеллектуален», нежели параллельный. Если в параллельном порту для передачи одного байта соответствующие уровни выставляются одновременно на восьми линиях, то в последовательном одна линия используется для передачи всех восьми битов (электроника, управляющая портом, «знает», когда заканчивается передача одного бита и начинается передача следующего). Использовать последовательный порт для полноценного управления внешним устройством можно только в том случае, если внешнее устройство оснащено такой же умной электроникой. Тем не менее, как минимум 4 линии последовательного порта можно использовать так же, как мы используем линии параллельного. Из этих четырех линий две предназначены для передачи данных от устройства сопряжения в компьютер, а две – наоборот, от компьютера к устройству сопряжения; их мы и рассмотрим. Речь идет о линиях DTR (Data Terminal Ready – компьютер готов к обмену данными) и RTS (Request To Send) – запрос на передачу данных. В отличие от самих линий передачи данных, сигналы на этих служебных линиях могут устанавливаться на сколь угодно длительное время (так же, как и в случае с параллельным портом). Если мы хотим передавать сигналы от внешнего устройства в компьютер, мы можем воспользоваться линиями DSR (Data Set Ready – внешнее устройство готово к работе) и CTS (Clear To Send – внешнее устройство готово к передаче данных).
Однако радоваться рано. Еще одна проблема связана с тем, что уровни напряжения, используемые последовательным портом для отображения нулей и единиц, отличаются от уровней, которые использует параллельный порт (и другая распространенная цифровая электроника). При работе с последовательным портом логической единице соответствует напряжение от -3 до -25 В, а логическому нулю – от +3 до +25 В (в других источниках – от -3 до -12 В и от +3 до +12 В соответственно). В моей системе напряжения составляли -12 В и +3 В. Их, мягко говоря, неудобно использовать напрямую. Скорее всего, вам придется выполнить преобразование уровней напряжения последовательного порта к стандартным уровням TTL. Самый популярный преобразователь такого рода – микросхема MAX232 (рис. 4) и ее многочисленные аналоги. Подробные сведения об этой микросхеме можно получить по адресу http://www.maxim-ic.com/datasheet/index.mvp/id/1798. Поскольку сигналы последовательного порта практически всегда приходит ся преобразовывать в сигналы логики TTL, подобные преобразователи есть почти в каждом устройстве, которое может получать данные с последовательного порта. Микросхема позволяет преобразовывать сигналы с четырех линий (две линии в прямом, две линии в обратном направлении). Общая схема с использованием преобразователя MAX232 приведена на рис. 5. Сигнал, поданный с последовательного порта на вход RS232 In (1), появится в преобразованном виде на выходе TTL OUT (1) и так далее.
Для программного управления последовательным портом мы воспользуемся штатными средствами Linux. Необходимые константы и макросы определены в файле <termios.h>. Почему termios? Дело в том, что в стародавние времена к последовательному порту Unix чаще всего подключали терминал (либо напрямую, либо через «прослойку» из двух модемов и телефонной линии). Ниже приводится простенькая программка, которая устанавливает и сбрасывает сигнал RTS с интервалом примерно в одну секунду.
#include <unistd.h> #include <fcntl.h> #include <errno.h> #include <stdio.h> #include <sys/ioctl.h> #include <termios.h> int main() { int fd; int status; fd = open(“/dev/ttyS0”, O_RDWR | O_NOCTTY | O_NDELAY); if (fd == 1) { perror(“Не могу от крыть файл уст ройст ва “); return 1; } else fcntl(fd, F_SETFL, 0); while (1) { ioctl(fd, TIOCMGET, &status); if (!status) { printf(“Порт недос ту пен\n”); return 1; } status &= ~TIOCM_RTS; ioctl(fd, TIOCMSET, &status); sleep(1); ioctl(fd, TIOCMGET, &status); status |= TIOCM_ RTS; ioctl(fd, TIOCMSET, &status); sleep(1); } return 0; }
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Последовательные порты представлены в Linux устройствами /dev/ttyS*, где * – число (как правило, от 0 до 7), соответствующее номеру порта. Пoрту COM1 соответствует устройство /dev/ttyS0 и так далее. Префикс tty тоже намекает на то, что когда-то порты использовались для подключения терминалов. С этим же связана необходимость использовать флаг O_NOCTTY при открытии файла устройства – без него открытое устройство-терминал стало бы управляющим терминалом нашей программы (и весь стандартный ввод/вывод выполнялся бы через него). Флаг O_NDELAY говорит системе, что на наши операции ввода/вывода не должно влиять состояние сигнала DCD (обнаружение несущей данных). Получив дескриптор файла порта, мы можем управлять им с помощью ioctl(). Вызов ioctl() с константой TIOCMGET возвращает в третьем параметре маску битов состояния порта. Среди этих битов есть и интересующие нас DTR, RTS, DSR и DTS. Выделить соответствующие биты в маске состояния можно с помощью констант TIOCM_DTR, TIOCM_RTS, TIOCM_DSR и TIOCM_CTS. Чтобы изменить состояние порта со стороны компьютера, нужно записать новую маску сигналов с помощью вызова ioctl() с командой TIOCMSET.
Программа управляет сигналами порта COM1. Если указанный порт в системе отсутствует, в маске битов состояния после вызова ioctl() со вторым параметром TIOCMGET будет записано значение 0.
Программу следует запускать от имени пользователя root, иначе ей будет отказано в доступе к файлу порта. Самый простой способ протестировать работу программы – проверить напряжения на контактах разъема. Напряжение замеряется между выводом 5 (земля) и 4 (DTR) или 7 (RTS). Для удобства можно подключить нуль-модемный кабель. Учтите только, что кабели бывают полные и неполные. В неполном кабеле интересующие нас линии DTR и RTS замкнуты на линии DSR и CTS того же устройства, то есть сопряженное устройство просто не получит сигналы через такой кабель. Помните также, что сигнал, который появляется на выходе DTR порта компьютера, будет перекинут кабелем на линию DSR внешнего устройства, а сигнал RTS появится, соответственно, на линии CTS. В кабелях, предназначенных для подключения модемов, линии не перекрещиваются.
Палочка радости
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Еще один интересный для нас порт – порт джойстика или игровой. Скорее всего, он не выведен на заднюю панель вашего ПК, но его можно найти на материнской плате (рис. 6) или на звуковой карте (для экспериментов лучше всего подойдет старая ненужная «звуковуха»). В отличие от других рассмотренных портов, порт джойстика работает только на ввод данных. Он доступен по адресу 0x201, и с ним можно работать с помощью функций inb() и outb() так же, как мы работаем с параллельным портом.
Старшие 4 бита байта считанного из регистра 0x201 отражают состояние кнопок джойстика. Их можно использовать так же, как мы использовали линии состояния параллельного порта. Младшие 4 бита интереснее: они связаны с четырьмя измерителями сопротивления (в интервале примерно от 0 до 100 кОм). В принципе, порт джойстика можно использовать как простой АЦП. Величина сопротивления измеряется по скорости зарядки конденсатора следующим образом: по умолчанию конденсаторы заряжены, и значения соответствующих им битов в регистре порта равны 1. В ответ на запись любого значения в порт конденсаторы разряжаются, а соответствующие им биты принимают значение 0. Через некоторое время (пропорциональное величине измеряемых сопротивлений) конденсаторы снова зарядятся, и соответствующие биты регистра получат значение 1. Из сказанного очевидно, что для корректного измерения величины сопротивления необходимо точно измерить время с момента, когда биты состояния конденсаторов были сброшены и до момента их восстановления (интервал времени составляет несколько микросекунд). В многозадачной системе это, мягко говоря, непросто сделать. Непросто, но не невозможно!
Для обработки сигналов с порта джойстика мы можем воспользоваться «самым мощным оружием» пользовательских программ Linux – системным вызовом iopl(). Этот вызов (который работает только для процессоров, основанных на архитектуре i386) позволяет программе, выполняющейся с правами root, получить особые привилегии при работе с процессором и портами ввода-вывода. После вызова iopl() с аргументом 3 программа получает возможность управлять флагом прерываний с помощью команд процессора CLI и STI. Заблокировав обработку прерываний (на как можно меньшее время) программа сможет измерить продолжительность времени зарядки с максимально доступной точностью. Разумеется, с точки зрения «большого стиля» программирования, блокирование прерываний пользовательской программой не одобряется, так как приводит к снижению производительности системы (и это еще не самое худшее, что может быть), но мы еще в начале договорились, что будем играть не по правилам.
Внешний COM-порт
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Тот факт, что в наших программах взаимодействия с последовательным портом мы не обращаемся к регистрам оборудования напрямую, приносит нам неожиданную пользу. Благодаря этому мы можем использовать наши программы с такими устройствами, как переходник USB-Serial (см. рис.).
Если в Windows для подключения такого устройства придется специально устанавливать драйвера, то в Linux c ядрами 2.6.x все драйвера уже установлены и загружаются при подключении устройства автоматически. Этим устройствам соответствуют файлы /dev/ttyUSB*, где * – номер порта. Для работы с этими портами можно использовать те же вызовы ioctl(), что и для встроенных портов, но нужно учитывать некоторые нюансы. Если устройство по какой-то причине отключилось (а в ходе экспериментов с портом это произойдет неоднократно), драйвер откроет новое, используя первое свободное имя файла, отличное от ранее использованного (в отличие от устройств /dev/ttyS*, для устройств /dev/ttyUSB* существуют только файлы, соответствующие реально подключенным устройствам). В моих экспериментах имена устройств «прыгали» между /dev/ttyUSB0 и /dev/ttyUSB1. В самом простом случае можно просто перебирать допустимые имена устройств и пытаться открыть их. Можно воспользоваться также содержимым директорий /dev/serial/by-id/ и /dev/serial/by-path/. Эти директории содержат символические ссылки на порты, подключенные к системе в данный момент. Имена файлов-ссылок также более информативны, нежели простые имена файлов устройств.