Последняя разработка для вашего компьютера! USB-унитаз. Совмещает все достоинства обычного унитаза и быстрый слив содержимого в Интернет. |
Реклама нового гаджета. |
— Что такое гаджеты? — Это такие штуки, которые покупаешь, хвастаешься жене, она спрашивает, сколько они стоят, и говорит: «Ну и гад же ты»… |
Энциклопедия мужчин. |
В старые добрые времена у двухпроцессорного системника BeBox был замечательный аппаратный гаджет — так называемый «Blinkenlights», две полоски LED`ов на передней панели корпуса, демонстрирующие загрузку каждого из двух центральных процессоров в режиме реального времени.
![]() |
Один из процессоров полностью загружен; второй получает только питание. Очевидно, пользователь отключил один из процессоров с помощью программы «Pulse». |
Лирическое отступление: | |
---|---|
![]() | |
Кстати, о «Pulse». В BeOS до версии 3 существовал тест на уровень интеллекта пользователя: с помощью программы «Pulse» можно было отключить любой процессор, даже если это был последний — или вообще единственный — оставшийся работающий процессор в компьютере. Если пользователь отключал и его тоже, чтобы проверить, как его компьютер будет работать с нулём работающих процессоров, он не проходил тест. (Неизбежная после такого эксперимента жёсткая перезагрузка возвращала все процессоры в рабочее состояние). В четвёртой версии BeOS инженеры Be, Inc., изучив статистику, ужаснулись и убрали этот тест: если в системе оставался один работающий процессор, он становился неотключаемым. |
«Blinkenlights» были гениальной идеей. Люди до сих пор останавливаются рядом со стендом Be, Inc. в музее компьютеров, завороженно наблюдая, как растут и уменьшаются полоски загрузки процессоров в соответствии с тем, что происходит на экране. Вроде бы и простенькая вещица, но именно подобные незамысловатые устройства и придают компьютеру индивидуальность, которой часто так не хватает в общении человека и его железного коня.
Понятно, под Windows подобных штук в промышленных масштабах никто не делал.
У меня никогда не было BeBox. Когда их выпускали, я ещё пешком под стол ходил был уверен в том, что MS DOS 6.22 — это верх гениальности, что Windows 95 не протянет и двух лет, и что не может быть игры круче «Quake I». Но, когда я познакомился с философией BeOS и проникся её идеями, устройство мне понравилось. Я продолжал о нём думать, и в далёком 2005-м году спаял себе индикатор процессорной нагрузки, подключающийся к LPT-порту. Схема простенькая, и это было моим первым со школьных времён общением с паяльником не ради починить, а просто так. На передней панели моего старого системника нашлась декоративная вкладка, которую можно было безболезненно удалить, и на место которой идеально вписались восемь светодиодов.
Какое-то время я пользовался сторонними драйверами для вывода информации на этот гаджет. Но, поскольку у меня фоновой задачей постоянно бежит расчёт SETI@home, показывать нагрузку центрального процессора оказалось бессмысленно — она всегда равна 100%. Поэтому я плюнул и сам написал простенький драйвер для этого устройства, чтобы LED`ы показывали текущий трафик в сети по логарифмической шкале: одна лампочка — 5 килобит в секунду, две — 15, три — 50, и так далее.
Оказалось, это крайне, неимоверно удобно. У меня компьютер видно из кухни, за 8 метров по прямой. Я могу одновременно помогать [Bad username or site: shele4ka title= @ livejournal.com] с готовкой и видеть, чем занят мой компьютер, качает ли он что-то или уже нет.
Но это было восемь лет назад. А сейчас, когда я купил себе новый компьютер, оказалось, что в новом корпусе нет декоративной вклдаки, вместо которой можно засунуть полоску из восьми LED`ов. И, как будто этого мало, оказалось, что LPT-порта у него вообще нет.
Очень сложно подключать устройство к компьютеру, если в компьютере нет соответствующего порта. Можно считать, что жестокий мир бросил мне вызов, который я собираюсь принять.
Цель проекта: изучить программирование микроконтроллеров. Изучить программное использование USB-интерфейса и получить опыт в написании драйверов для самостоятельно собранных USB-устройств. Попутно — получить удовольствие.
Техническое задание: создать устройство на основе микроконтроллера Atmel AT90USB162, которое выводило бы на некий вид индикаторов информацию о компьютере, как то: загрузка на каждом из четырёх ядер, процентное соотношение занятой и свободной памяти, использование сетевого канала, отображение громкости проигрываемого звука — в общем или в какой-то полосе частот. Предусмотреть лёгкую и простую схему расширения функциональности с помощью дополнительных плагинов, подгружаемых на стороне компьютера, — если я завтра захочу, чтобы устройство отражало мне курс акций Google, мне не должно требоваться перепаивать всю схему. Передача данных осуществляется с помощью USB.
Предлагаемое решение: собрать четыре модуля по 12 LED`ов в каждом; предусмотреть возможность индивидуального подключения для каждого LED`а. Забрать всё это в красивый самодельный корпус и разместить полоски LED`ов вертикально по сторонам монитора:
о о о о | Монитор | о о о о |
о о о о | о о о о |
Дополнительные технические задания:
- Корпус должен учитывать возможное изменение размера монитора. То есть, левая и правая части не должны быть скреплены между собой жёстко. А ну как я перейду с 22-дюймового монитора на 32-дюймовый?
- В идеале — все четыре модуля LED`ов должны быть взаимозаменяемыми. Ну, скажем, не четыре, а три, потому что я ещё хочу —
- вывести на правую боковую поверхность правого нижнего модуля (на схеме выше указан жёлтым цветом) энное количество кнопок, которые:
- В обычном состоянии — позволят мне управлять громкостью микшера или отключать звук вообще.
- Во «втором состоянии» — позволят мне отобразить на этом модуле таймер в виде бинарных часов, изменение дисплея будет происходить каждую секунду. Легко увидеть, что 12 LED`ов позволят мне отобразить 212 − 1 = 4095 секунд, то есть 1 час 8 минут и 15 секунд. Разумно ограничить максимальное время таймера одним часом.
- Этот таймер должен быть полностью независим от компьютера. Расчёт времени будет выполняться внутри самого микроконтроллера. Однако я хочу иметь возможность установить время таймера как с компьютера, так и с помощью кнопок.
- Потребуется как следует продумать, какой будет реакция на нажатия боковых кнопок. Я не хочу потерять возможность менять громкость звука, когда работает таймер. При этом мне нужно иметь возможность менять показания таймера во время его работы.
- Дополнительное устройство вывода — 4-циферный 7-сегментный LED-дисплей, который будет закреплён в одном из модулей. Я ещё пока не решил, в каком. На него я буду выводить:
- текущее время — получая его по USB с компьютера;
- текущую температуру
- воздуха — с использованием одноконтактного термометра DS18B20, подключённого непосредственно к микроконтроллеру;
- компьютерных компонентов — получая данные через USB.
- возможно — оставшееся время работы таймера.
Благодаря тому, что у этого дисплея всего 12 хвостов, с точки зрения схемотехники его вполне можно рассматривать как отдельный модуль, ничем не отличающийся от других (у 12 LED`ов, естественно, 13 хвостов, — ну так один будет просто висеть в воздухе). Включаться этот датчик будет в такой же 14-пиновый разъём, как и все остальные модули. - Питание вся эта штукенция будет получать от USB. Пяти вольт вполне достаточно, а по силе тока USB предлагает мне целый ампер, — а нужно мне всего-то около 250 миллиампер.
- Написать для всей этой штуки драйвер с красивой управляющей программой на стороне компьютера, которая будет регулировать, что именно и в какой последовательности отображается на каждом из индикаторов. Она же позволит мне устанавливать и сбрасывать время таймера, настраивать логарифмическую шкалу индикаторов и делать прочие кошерные вещи.
- В перспективе — заставить компьютер пробуждаться ото сна последствием нажатия одной из кнопок на нижнем правом модуле. Научить собранное устройство уходить в спящий режим, просыпаться, тестировать самоё себя, отображая информацию на подключённом дисплее, и вообще вести себя экологически грамотно.
Принципиальная схема уже, в общих чертах, готова; я жду получения LED`ов и сопротивлений из Китая. Первый шаг — научиться выводить произвольную информацию на одну полоску из 12 LED`ов. Пока я работаю с программным эмулятором микроконтроллера, чтобы не сжечь сам прибор. Обещаю информировать о развитии событий.
no subject
кстати в маках охуенно режим сна реализован: там кнопка пауэр начинает медленно "дышать"
no subject
no subject
no subject
no subject
no subject
no subject
no subject