Как стать автором
Обновить

Еще раз про стрелочные индикаторы (и совсем без МК)

Время на прочтение3 мин
Количество просмотров58K
Всем привет!
Мне сразу очень понравилась статья про стрелочную индикацию загрузки процессора и памяти. Бывает нужно глянуть, сколько осталось свободной памяти, запуская третий-четвертый экземпляр тяжелой программы/игры (не хочется доводить до ситуации, кода предыдущие экземпляры свопятся). Или с загрузкой процессора — раньше я думал, что современные Crysis, Call of Duty, Mass Effect и т.д. грузят и видеокарту, и проц. Теперь я знаю, что даже когда картинка подтормаживает — проц загружен не больше 30-40%. Ну или с ходу оценить, все ли ядра использует рендеринг. А какое удовольствие глазу доставляют дергающиеся стрелочки.
Вторая реализация хоть и так же наглядна, но в душу не запала — нет той зрелищности.
Поэтому я решил — когда-нибудь непременно повторю со стрелками.
Единственная проблема, из-за которой я не сделал это сразу — это лень отсутствие индикаторов конечно. И вот, разбирая старый-старый хлам в старом-старом шкафу, я нашел ИХ.



Как раз два стрелочных индикатора из старого бобинного магнитофона. Ох сколько он в свое время перемотал бобин с Кино и Modern Talking.

Итак, чтобы идея заработала, были нужны:
  • красивые индикаторы с подходящей шкалой;
  • аппаратная часть для подключения индикаторов к компьютеру;
  • программа для вывода загрузки памяти и процессора.

Когда задачи ясны — и работать проще.

Красивые индикаторы

Корпуса головок оказались залиты клеем от души, однако тот не выстоял под обычным канцелярским ножом. Разделил пополам, достал старую шкалу, по размерам нарисовал и распечатал новую. Собрал в обратном порядке.



После написания статьи посмотрел на фотографии и разобрал их опять. Взял у жены красный лак для ногтей и покрасил стрелки. Получилось заметнее — это видно на видео.

Аппаратная часть

Тут я с контроллерами мудрить не стал. На мамке есть LPT, он мне для каких-то других целей пригодится вряд ли, так что нечего ему простаивать.
LPT это 8 бит, 4 бита на канал, 16 положений стрелки — меня вполне устроило. Простейший ЦАП — резисторы и диоды, рисуем для двух каналов (эстеты, простите за ISIS):



Точностью резисторов пренебрег, запилил то, что бывает в природе (10, 20, 39, 82 кОм). Как водится, паяем макет:



и проверяем в работе. Калибровка заключается в установке стрелок подстроечниками на максимальное деление шкалы при передаче в порт значения 255. С железом все.

Программа

Сложнее всего оказалось найти драйвер для работы с LPT (Win 8 х64). После нескольких часов поисков я наконец нашел DLPortIO (драйвер + библиотека) 32 бит, но с инструкцией по установке в 64-битные системы. Ссылку, к сожалению, уже потерял, лишь сохранил себе на Яндекс.Диск.
Дальше — проще. Через полчаса программа на Delphi (единственное, что еще как-то помню со времен учебы) была написана:
Спойлер
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  MemStatus.dwLength := sizeof( TMemoryStatus );
  GlobalMemoryStatus( MemStatus );
  MemVal := round(15*MemStatus.dwMemoryLoad/100) shl 4; //верхние 4 бита - память, нижние - CPU
  CPUUsage3:= CPUUsage2;  //небольшое
  CPUUsage2:= CPUUsage1;  //сглаживание
  CPUUsage1:= CPUUsage;   //
  CPUUsage := 0;
  CollectCPUData;
  for i:= 0 to GetCPUCount - 1 do begin
    CPUUsage:= CPUUsage + GetCPUUsage(i);
  end;
  CPUUsage:= CPUUsage / GetCPUCount;
  CPUUsage:= (CPUUsage + CPUUsage1 + CPUUsage2 + CPUUsage3)/4; //небольшое сглаживание
  CPUVal := Round(15 * CPUUsage);
  CPUVal := CPUVal or MemVal;
  DlPortWritePortUchar (888, CPUVal);
end;


Два раза в секунду читаются значения загрузки RAM и CPU и отправляются в порт &H378. В комментариях к оригинальной статье был вопрос про то, сколько ресурсов кушает программа, показывающая загрузку ресурсов. Отвечаю: согласно диспетчеру задач загрузки процессора более 0% не было, а вот памяти — 956к (тут бы руки мне оторвать: я пошел простейшим путем, у меня создается форма, а потом она скрывается. Ничего, еще доберусь до оптимизации и поправлю).
Точность в первой половине шкалы хромает, чем ближе к 100% — тем точнее.



Корпуса нет и не планируется, пусть себе лежат на мониторе. Подсветки нет, но планируется. Думаю откуда запитать. Конструкция носит скорее эстетический характер плюс удовольствие от сделанного/собранного/спаянного лично, а ведь это бесценно.
Напоследок небольшое видео:


Спасибо за внимание, желаю и Вам найти в шкафу стрелочный индикатор.
Теги:
Хабы:
Всего голосов 53: ↑51 и ↓2+49
Комментарии46

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
11 сентября
Митап по BigData от Честного ЗНАКа
Санкт-ПетербургОнлайн
19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн