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

в 15:45, , рубрики: diy или сделай сам, индикатор, индикатор загрузки, Электроника для начинающих, метки: ,

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

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

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

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

Автор: Sergey_Morozov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js