Как-то попались мне в руки старые стрелочные индикаторы уровня от старого магнитофона, и я решил вдохнуть в них новую жизнь, сделав из них «хардварные виджеты» для отображения загрузки процессора и оперативной памяти компьютера.
Скажу сразу, что на оригинальность я не претендую, наверняка до меня уже делали подобное, просто хочется рассказать о своём опыте.
Первым делом я заменил оригинальные шкалы с децибелами на свои собственные, для этого пришлось ломать корпус.
Затем на скорую руку я развёл плату:
В центре микроконтроллер ATMEGA8, именно он управляет стрелками, используя аппаратный ШИМ. Чтобы индикатор зашкалило, достаточно вполне небольшого тока, поэтому включаем их через резистор в пару килоом. Встроенной подсветки у индикаторов нет, поэтому чтобы они смотрелись красиво, и их было видно и в темноте, на плате я разместил по три оранжевых светодиода на том месте, поверх которого я планировал их приклеить. При этом светодиоды можно включать программно, в теории можно даже менять их яркость, используя уже софтварный ШИМ.
Подключать устройство к компьютеру было решено через USB, для этого используется микросхема FT232. Да, можно обойтись и без неё, используя программный USB, но я ему не доверяю — работает весьма нестабильно на некоторых контроллерах. Через FT232 же устройство видится как виртуальный COM-порт, в который мы будем писать данные.
Первым делом в микроконтроллер был зашит бутлоадер, после чего программатор был убран в ящик — прошивку стало легко обновлять прямо по USB. Настал этот сладкий момент, когда устройство готово, и остаётся только написать софт.
Прошивка же предельно проста:
// Ноги, которые подключены к индикаторам, настраиваем на вывод
DDRB |= (1<<1) | (1<<2);
// Включаем таймер и ШИМ:
TCCR1A |= (1<<COM1A1) | (1<<COM1B1) | (1<WGM10);
TCCR1B |= CS10;
После этого просто пишем в регистры OCR1A и OCR1B значения, которые нужно показать, а именно — то, что получаем по USART. Опытным путём было установлено, что стрелка стоит на максимальном значении, когда в регистрах число более 90. Дальше дело было за простой математикой.
Приложение для PC тоже не отличается особой сложностью — нужно просто получать процент загрузки процессора с памятью и посылать эти данные в виртуальный COM порт.
Сначала я хотел встроить эти индикаторы прямо в пятидюймовый отсек на системном блоке, но он стоит под столом, поэтому устройство было вынесено отдельно.
Стрелочки очень красиво подёргиваются. Получилось весьма удобно.
Автор: ClusterM