July 2025

S M T W T F S
  12345
67891011 12
13141516171819
20212223242526
2728293031  

Style Credit

Expand Cut Tags

No cut tags
Monday, March 25th, 2013 13:53
Последняя разработка для вашего компьютера! 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`ов вертикально по сторонам монитора:

о 
о 
о 
о 
 
 
 
 
Монитор 
 
 
 
 о
 о
 о
 о
о 
о 
о 
о 
 о
 о
 о
 о

Дополнительные технические задания:

  1. Корпус должен учитывать возможное изменение размера монитора. То есть, левая и правая части не должны быть скреплены между собой жёстко. А ну как я перейду с 22-дюймового монитора на 32-дюймовый?
  2. В идеале — все четыре модуля LED`ов должны быть взаимозаменяемыми. Ну, скажем, не четыре, а три, потому что я ещё хочу —
  3. вывести на правую боковую поверхность правого нижнего модуля (на схеме выше указан жёлтым цветом) энное количество кнопок, которые:
    • В обычном состоянии — позволят мне управлять громкостью микшера или отключать звук вообще.
    • Во «втором состоянии» — позволят мне отобразить на этом модуле таймер в виде бинарных часов, изменение дисплея будет происходить каждую секунду. Легко увидеть, что 12 LED`ов позволят мне отобразить 212 − 1 = 4095 секунд, то есть 1 час 8 минут и 15 секунд. Разумно ограничить максимальное время таймера одним часом.
    • Этот таймер должен быть полностью независим от компьютера. Расчёт времени будет выполняться внутри самого микроконтроллера. Однако я хочу иметь возможность установить время таймера как с компьютера, так и с помощью кнопок.
    • Потребуется как следует продумать, какой будет реакция на нажатия боковых кнопок. Я не хочу потерять возможность менять громкость звука, когда работает таймер. При этом мне нужно иметь возможность менять показания таймера во время его работы.
    Количество кнопок будет определено позже. Я хочу ограничиться минимумом, для простоты интерфейса. К тому же, я ещё ограничен количеством линий ввода-вывода самого микроконтроллера; у него всего лишь 22 линии ввода-вывода, и 16 из них уже заняты. Пока я рассчитываю на три кнопки, но это ещё не точно.
  4. Дополнительное устройство вывода — 4-циферный 7-сегментный LED-дисплей, который будет закреплён в одном из модулей. Я ещё пока не решил, в каком. На него я буду выводить:
    • текущее время — получая его по USB с компьютера;
    • текущую температуру
      • воздуха — с использованием одноконтактного термометра DS18B20, подключённого непосредственно к микроконтроллеру;
      • компьютерных компонентов — получая данные через USB.
    • возможно — оставшееся время работы таймера.
    Благодаря тому, что у этого дисплея всего 12 хвостов, с точки зрения схемотехники его вполне можно рассматривать как отдельный модуль, ничем не отличающийся от других (у 12 LED`ов, естественно, 13 хвостов, — ну так один будет просто висеть в воздухе). Включаться этот датчик будет в такой же 14-пиновый разъём, как и все остальные модули.
  5. Питание вся эта штукенция будет получать от USB. Пяти вольт вполне достаточно, а по силе тока USB предлагает мне целый ампер, — а нужно мне всего-то около 250 миллиампер.
  6. Написать для всей этой штуки драйвер с красивой управляющей программой на стороне компьютера, которая будет регулировать, что именно и в какой последовательности отображается на каждом из индикаторов. Она же позволит мне устанавливать и сбрасывать время таймера, настраивать логарифмическую шкалу индикаторов и делать прочие кошерные вещи.
  7. В перспективе — заставить компьютер пробуждаться ото сна последствием нажатия одной из кнопок на нижнем правом модуле. Научить собранное устройство уходить в спящий режим, просыпаться, тестировать самоё себя, отображая информацию на подключённом дисплее, и вообще вести себя экологически грамотно.

Принципиальная схема уже, в общих чертах, готова; я жду получения LED`ов и сопротивлений из Китая. Первый шаг — научиться выводить произвольную информацию на одну полоску из 12 LED`ов. Пока я работаю с программным эмулятором микроконтроллера, чтобы не сжечь сам прибор. Обещаю информировать о развитии событий.

Tags:
Monday, March 25th, 2013 12:11 (UTC)
если комп стоит в спальне — ну его нахуй чтоб оно мигало

кстати в маках охуенно режим сна реализован: там кнопка пауэр начинает медленно "дышать"
Monday, March 25th, 2013 12:30 (UTC)
Комп стоит в кабинете, который просматривается из кухни сквозь салон. Кроме того, понятно, будет кнопка выключения. :)
Monday, March 25th, 2013 12:35 (UTC)
как думаешь сколлько будет стоить?
Monday, March 25th, 2013 12:45 (UTC)
Будет видно. Самый ценный ресурс - моё время, которое оценивается в 32 доллара за час работы (плюс-минус). Все детальки, вместе взятые, обойдутся в сравнимую сумму, порядка 30 баксов.
Monday, March 25th, 2013 13:52 (UTC)
Готов быть бета-тестером :)
Monday, March 25th, 2013 16:41 (UTC)
Я собираюсь собрать такую штуку в единственном экземпляре. Прошивку и драйвер, конечно, выложу, но делать ещё одну такую же не буду.
Monday, March 25th, 2013 14:00 (UTC)
А я как-то встречал статьи (в мобильных вроде журналах), как присобачить экран от старенькой Нокии на корпус системника, чтобы этот экран показывал название и время текущей композиции из ВинАмпа...
Monday, March 25th, 2013 16:42 (UTC)
У меня рука не поднимется расковырять работающее устройство. Или не выкинуть неработающее.