Схема. Волюметр с 20 светодиодами

      Волюметры часто имеются на аудиоустройствах для индикации громкости. На старом оборудовании были, стрелочные приборы, а на современном часто устанавливают светодиодные индикаторы. Назначение волюметра — дать представление о громкости сигнала. Кроме интенсивности аудиосигнала, подобный индикатор может показывать и другие величины. Светодиодные волюметры встречаются так часто и настолько популярны, что изготовители полупроводников предлагают специальные интегральные схемы для измерения внешних сигналов и отображения результата на светодиодах.
Схема Волюметр с 20 светодиодами 1
      Обычно светодиоды волюметра представляют собой один столбец или строку. Одна из таких популярных микросхем— LM3914 компании National Semiconductors— интересное решение для управления точечным дисплеем, для измерения уровня аналогового напряжения и отображения его на десяти светодиодах (организованных в линейный аналоговый индикатор). LM3914 выпускается уже более 20 лет. Но наша задача — создать индикатор с более чем десятью уровнями. Можно было бы каскадировать несколько схем LM3914, но даже после этого характер устройства не изменится — это будет всего лишь линейный индикатор входящего напряжения. Поэтому нам нужно было найти другое решение.

      На рис. 3.25 показана работа волюметра в режиме столбца и точки. В режиме столбца при увеличении уровня входного сигнала загорается все больше светодиодов (снизу верх). В режиме точки по мере увеличения входного сигнала загорается один светодиод, соответствующий более сильному сигналу. Светодиоды расположены в столбик по вертикали: нижний светодиод означает более низкий уровень сигнала, чем верхний.
Схема Волюметр с 20 светодиодами 2
Спецификация проекта
      Цель этого проекта — создать универсальный волюметр на 20 уровней, используя как можно меньший микроконтроллер. Сопряжение 20 светодиодов с микроконтроллером можно выполнить при помощи всего пяти контактов ввода/вывода. Таким образом, идеальным компонентом для реализации этого проекта будет восьмиконтактный микроконтроллер, имеющий шесть контактов ввода/вывода. Путем программирования можно настроить индикатор на любую зависимость между входным сигналом и выходными светодиодами. Например, на рис. 3.26 показана логарифмическая шкала. Возможна и линейная зависимость — для этого нужно перепрограммировать микроконтроллер. Чтобы отображать входное напряжение линейным образом, входной сигнал следует делить на постоянное число. Для логарифмической шкалы можно задать таблицу соответствия.

Описание проекта
      На рис. 3.27 и 3.28 изображены принципиальные схемы волюметра. В качестве защитного опять использован диод Шоттки (1N5819).
Схема Волюметр с 20 светодиодами 3
      Емкость С1 служит для фильтрации выбросов и нежелательных помех источника питания. С2 — это развязывающий конденсатор (как уже объяснялось ранее). Применен микроконтроллер ATtiny45. Стабилизатора напряжения в этой схеме нет, поэтому входное напряжение может варьироваться лишь от 4,5 до 5,5 В. Светодиоды (с первого по двадцатый) расположены в виде столбика. Поскольку размеры печатной платы под такую конструкцию превышают предельный размер, разрешенный в бесплатной версии программы EAGLE, схема была разбита на две части. Первая часть показана на рис. 3.27, она включает схему управления и десять светодиодов. Остальные десять светодиодов выполнены отдельно (рис. 3.28). Печатные платы этих двух схем проектировались отдельно с таким расчетом, чтобы соединенные вместе они образовали единый столбик из 20 светодиодов.

      Двадцать светодиодов мультиплексируются по методу Чарли (при помощи пяти контактов ввода/вывода микроконтроллера). SL2 — это трехконтактный разъем для подачи сигнала на вход АЦП контроллера. Входной сигнал представляет собой постоянное напряжение, регулируемое при помощи потенциометра (контакты которого подключены к VCC, GND и РВ5). Им может быть также сигнал, поданный на РВ5 и GND. Если это внешний сигнал, то его минимальная и максимальная амплитуды должны быть ограничены 0 (GND) и Uип (VCC).
      Программа вычисляет скользящее среднее по десяти последовательным отсчетам АЦП, делит его на 21 уровень (от 0 до 20) и включает соответствующее количество светодиодов.

Конструкция
      Обе платы односторонние (на стороне компонентов есть всего несколько перемычек). Платы стыкуют, соединяя соответствующие удлиненные печатные дорожки. Полностью собранная конструкция показана на рис. 3.29.
Схема Волюметр с 20 светодиодами 4
Программирование
      Программа выполняется на тактовой частоте 8 МГц. Вход сброса микроконтроллера (РВ5) используется как входной контакт АЦП. Поэтому функцию сброса этого контакта необходимо отключить (при помощи программирования fuse-бита RSTDISBL). После этого контроллер запрограммировать при помощи ISP будет уже нельзя. Поэтому для программирования контроллера применялся STK500 в режиме последовательного программирования под высоким напряжением (HVSP). Поясним самые важные фрагменты кода.

Листинг 3.3
while(1)
{   //сдвинуть значения
for(i=0;i<9;i++)
{
    adcreading[ i ]=adcreading[i+1];
}
//сделать новый отсчет
adcreading[9] = read_adc();
//Вычислить сумму и выполнить дискретизацию
adcsum = 0;
for(i=0;i<10;i++)
{
adcsum = adcsum + adcreading [ i ] ; }
//Разделить сумму 10 отсчетов ADC (от 0 до 2550)
// на 21 уровень(от 0 до 20)
adcsum = adcsum/122;
if (level>adcsum)
{
    for(i=adcsum;i<level;i++)
    {
          statusonoff[ i ]=0;
    }
}
else if(level<adcsum)
{
       for(i=level;i<adcsum;i++)
      {
          statusonoff[ i ]=1;
      }
}
level=adc sum ;
}

      Листинг 3.3 — главный бесконечный цикл программы. Он удаляет предыдущий отсчет АЦП из буфера adcreading, сдвигает остальные значения и берет новый отсчет. АЦП в контроллере ATtiny45 8-разрядный. Затем вычисляется среднее, суммируются все отсчеты в буфере и сумма делится на 21 (это все равно, что сначала поделить сумму на 10, а затем поделить это среднее на 21 уровень). Затем нужное количество светодиодов либо включается, либо выключается (в зависимости от предыдущего уровня). И наконец, значение переменной level обновляется текущим отсчетом. Код мультиплексирования по методу Чарли (как объясняется в следующем разделе) был написан так, чтобы в любой момент, когда statusonoff [р] получает значение 1, загорался светодиод в позиции соответствующей р (и наоборот). Соответствие между уровнем сигнала и числом светящихся светодиодов таково, что при уровне 0 не светится ни один светодиод, а при уровне 20 (самом высоком) включаются все 20 светодиодов.

Листинг 3.4
//Процедура обработки переполнения таймера timer0
ISR (TIM0_OVF_vect)
{
DDRB=0;
PORTB=statusonoff[count])
«pgm_read_byte(&anode[count])
|0«pgm_read_byte(&cathode[count] ) ;
DDRB = l«pgm_read_byte (&anode[ count ])
|l«pgm_read_byte(&cathode[count] ) ;
count++;
if (count==20) count=0;
}

      Листинг 3.4 — процедура обработки прерывания по переполнению таймера Timer0. Поэтому она вызывается с определенной периодичностью. Она выполняет мультиплексирование методом Чарли всех 20 светодиодов. Счетчик count отслеживает тот светодиод, с которым мы работали в предыдущий интервал времени. Хранящееся в statusonof f [count] значение выдается на его анод, а 0— на катод. Затем контакты анода и катода объявляются выходами (посредством обновления регистра DDRB). После этого светодиод включается, (если statusonoff [count] = 1) или наоборот. Этот цикл повторяется для каждого светодиода.
Остальной код состоит из инициализации АЦП и таймера Timer0.

Прилагаемые файлы:    VU_Meter.rar   

Похожие статьи:
Волчок со светодиодами
Мощная светодиодная лампа
Дозиметр на PIN-фотодиоде

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

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