...

понедельник, 17 марта 2014 г.

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

Всем привет!

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


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

Напоследок небольшое видео:


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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий