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

от автора

Всем привет!
Мне сразу очень понравилась статья про стрелочную индикацию загрузки процессора и памяти. Бывает нужно глянуть, сколько осталось свободной памяти, запуская третий-четвертый экземпляр тяжелой программы/игры (не хочется доводить до ситуации, кода предыдущие экземпляры свопятся). Или с загрузкой процессора — раньше я думал, что современные 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% — тем точнее.

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

Спасибо за внимание, желаю и Вам найти в шкафу стрелочный индикатор.

ссылка на оригинал статьи http://habrahabr.ru/post/215911/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *