1

Тема: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

Индикатор уровня на светодиодной шкале SHB10R.

Основная статья - http://rcl-radio.ru/?p=67845

Индикатор содержит 20 светодиодов на канал (ПК ЛК итого 40 шт) по 2 светодиодной шкале SHB10R.

http://forum.rcl-radio.ru/uploads/images/2019/12/eeff7691174a0cd391280a1641f0d8ea.jpeg

http://forum.rcl-radio.ru/uploads/images/2019/12/81135ad4fcce83f779db24bef1db8fc2.png

http://forum.rcl-radio.ru/uploads/images/2019/12/3d61a066225abe04d6a822daa34f6f85.png

Компоненты:

SHB10R - 4 шт

Arduino Nano

BC547 - 4 шт

Резисторы 470 Ом 0,125 Вт 20 шт

Резисторы 4,7 кОм 0,125 Вт 2 шт

Резисторы 1 кОм 0,125 Вт 4 шт


http://forum.rcl-radio.ru/uploads/images/2019/12/438ea54ec525f6a35184b441faa37b39.gif

#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip

  byte i,dig,seg,dig_l,dig_r,sum_r,sum_l,old_r;
  int arr_r[15],arr_l[15];
  int arr_r_max = 0,arr_l_max = 0,l,r,n,m;
  unsigned long times;

void setup() { 
  MsTimer2::set(4, to_Timer);MsTimer2::start();
  analogReference(INTERNAL);// аудио вход 1,1 В максимум
  for(i=0;i<=13;i++){pinMode(i,OUTPUT);}
  pinMode(A0,INPUT);
  pinMode(A1,INPUT);
}

void loop() {
if(n==0){
  for(int i = 0; i < 15; i++){ 
    arr_r[i] = analogRead(A0)/15;
    arr_l[i] = analogRead(A1)/15;
    arr_r_max = max(arr_r_max, arr_r[i]);
    arr_l_max = max(arr_l_max, arr_l[i]);
    delay(1);
    } 
    dig_r = arr_r_max;dig_l = arr_l_max;
    if(dig_r>20){dig_r=20;}
    if(dig_l>20){dig_l=20;}
    arr_r_max=0; arr_l_max=0;}

  if(analogRead(A0)/10<dig_r){dig_r=dig_r-1;delay(10);n=1;}else{n=0;}
  if(analogRead(A1)/10<dig_l){dig_l=dig_l-1;delay(10);m=1;}else{m=0;}
/// медленное затухание шкалы
  //if(analogRead(A0)/10<dig_r){dig_r=dig_r-1;delay(30);n=1;}else{n=0;}
  //if(analogRead(A1)/10<dig_l){dig_l=dig_l-1;delay(30);m=1;}else{m=0;} 

}// loop

void to_Timer(){    
 
  switch(i){
    case 0: if(dig_r<=10){cl();dig=0;seg=dig_r;digital();segment();}else{dig=0;seg=10;digital();segment();}break;
    case 1: if(dig_r<=10){cl();dig=1;seg=0;digital();segment();}else{dig=1;seg=dig_r-10;digital();segment();}break;
    case 2: if(dig_l<=10){cl();dig=2;seg=dig_l;digital();segment();}else{dig=2;seg=10;digital();segment();}break;
    case 3: if(dig_l<=10){cl();dig=3;seg=0;digital();segment();}else{dig=3;seg=dig_l-10;digital();segment();}break;
    }i++;if(i>3){i=0;}
    delay(3);
    cl();}

void segment(){ 
 switch(seg){
            //  1       2        3      4       5       6       7       8       9       10
    case 0: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(9,0);ch(10,0);ch(11,0);break;
    case 1: ch(2,1);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(9,0);ch(10,0);ch(11,0);break;
    case 2: ch(2,1);ch(3,1);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(9,0);ch(10,0);ch(11,0);break;
    case 3: ch(2,1);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(9,0);ch(10,0);ch(11,0);break;
    case 4: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,0);ch(8,0);ch(9,0);ch(10,0);ch(11,0);break;
    case 5: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,0);ch(8,0);ch(9,0);ch(10,0);ch(11,0);break;
    case 6: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(9,0);ch(10,0);ch(11,0);break;
    case 7: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(9,0);ch(10,0);ch(11,0);break;
    case 8: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(9,1);ch(10,0);ch(11,0);break;
    case 9: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(9,1);ch(10,1);ch(11,0);break;
   case 10: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(9,1);ch(10,1);ch(11,1);break;}}   

void digital(){  
   switch(dig){ 
     case 0: ch(0,0);ch(1,0);ch(12,0);ch(13,1);break;//1
     case 1: ch(0,0);ch(1,0);ch(12,1);ch(13,0);break;//2
     case 2: ch(0,0);ch(1,1);ch(12,0);ch(13,0);break;//3
     case 3: ch(0,1);ch(1,0);ch(12,0);ch(13,0);break;//4
     }}

void cl(){
   dig=0;seg=0;segment();digital();
   dig=1;seg=0;segment();digital();
   dig=2;seg=0;segment();digital();
   dig=3;seg=0;segment();digital();
  }     

void ch(int pin, int logic){digitalWrite(pin,logic);}

2 (2019-12-08 22:29:23 отредактировано andrys)

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

Какой входной уровень сигнала для  минимального и максимального уровня ?

3

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

опорное АЦП 1,1 В, перегруз до 5 В, сигнал подается с линейного выхода

4

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

Вижу, в скетче нельзя изменить выводы на светодиоды.  Так ?  Делаю на Arduino Mini из отдельных светодиодов на макетной плате.

5

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

Можете менять как Вам удобно.
case 10: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(9,1);ch(10,1);ch(11,1);break;
просто изменится порядок подключения

6

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

Только в этой строчке case 10: ? Остальные не трогать ?

liman324 пишет:

Можете менять как Вам удобно.
case 10: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(9,1);ch(10,1);ch(11,1);break;
просто изменится порядок подключения

7

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

Нет, во всех. Если у Вас первый светодиод подключен к выводу 5, то
case 0: ch(5,0);ch(3,1);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(9,0);ch(10,0);ch(11,0);break;
...
case 10: ch(5,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(9,1);ch(10,1);ch(11,1);break;

8

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

http://forum.rcl-radio.ru/uploads/images/2020/01/2d7df0625d626e661ccf2f2d4914fc38.jpg http://forum.rcl-radio.ru/uploads/images/2020/01/cff638e5779e38ae61e020873bd2c19e.jpg http://forum.rcl-radio.ru/uploads/images/2020/01/7a2c7f359733dd41223890b24c0245ec.jpg

Спаял такую плату, схема выводов на фото.

9

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

case 0: ch(10,0);ch(11,0);ch(9,0);ch(8,0);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 1: ch(10,1);ch(11,0);ch(9,0);ch(8,0);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 2: ch(10,1);ch(11,1);ch(9,0);ch(8,0);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 3: ch(10,1);ch(11,1);ch(9,1);ch(8,0);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 4: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 5: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 6: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 7: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,1);ch(4,0);ch(3,0);ch(2,0);break;
    case 8: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,1);ch(4,1);ch(3,0);ch(2,0);break;
    case 9: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,1);ch(4,1);ch(3,1);ch(2,0);break;
   case 10: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,1);ch(4,1);ch(3,1);ch(2,1);break;

10

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

Это Вы уже исправили скетч под  мою разводку схемы ?  А строки 66-69 править не нужно  (включение баз транзисторов - мультиплексирование) ?

11

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

case 0: ch(12,0);ch(1,0);ch(13,0);ch(0,1);break;//1
     case 1: ch(12,0);ch(1,0);ch(13,1);ch(0,0);break;//2
     case 2: ch(12,0);ch(1,1);ch(13,0);ch(0,0);break;//3
     case 3: ch(12,1);ch(1,0);ch(13,0);ch(0,0);break;//4

12

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

Спасибо. Вспоминаю как заливать в миниАрдуино. Что то не получается.

13

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

Так, прошил удачно. Но что-то с мультиплексированием. Работает оба канал так: из середины вниз, от верха в середину. Не пойму закономерность кода в мультиплексировании. Помогите.

14

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

перед }// loop
поставьте:

dig_r = 7;
dig_l = 7;

определите по уровню сигнала какие у Вас нижние индикаторы а какие верхние

dig_r = 18;
dig_l = 18;

можно поканально:

dig_r = 7;
dig_l = 0;

потом

dig_r = 18;
dig_l = 0;

и аналогично для левого

если каналы перепутаны, то редактируйте:

     case 0: ch(12,0);ch(1,0);ch(13,0);ch(0,1);break;//1
     case 1: ch(12,0);ch(1,0);ch(13,1);ch(0,0);break;//2
     case 2: ch(12,0);ch(1,1);ch(13,0);ch(0,0);break;//3
     case 3: ch(12,1);ch(1,0);ch(13,0);ch(0,0);break;//4

Если у Вас сверху вниз работают, то сделайте зеркально:
   // case 0: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(9,0);ch(11,0);ch(10,0);break;
    case 0: ch(10,0);ch(11,0);ch(9,0);ch(8,0);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 1: ch(10,1);ch(11,0);ch(9,0);ch(8,0);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 2: ch(10,1);ch(11,1);ch(9,0);ch(8,0);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 3: ch(10,1);ch(11,1);ch(9,1);ch(8,0);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 4: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 5: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 6: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 7: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,1);ch(4,0);ch(3,0);ch(2,0);break;
    case 8: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,1);ch(4,1);ch(3,0);ch(2,0);break;
    case 9: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,1);ch(4,1);ch(3,1);ch(2,0);break;
   case 10: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,1);ch(4,1);ch(3,1);ch(2,1);break;

15

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

Вроде бы нужно так:
     case 0: ch(12,0);ch(1,0);ch(0,0);ch(13,1);break;//1
     case 1: ch(12,0);ch(1,0);ch(0,1);ch(13,0);break;//2
     case 2: ch(12,0);ch(1,1);ch(0,0);ch(13,0);break;//3
     case 3: ch(12,1);ch(1,0);ch(0,0);ch(13,0);break;//4
Тогда "бегает" две  в параллель из верха и центра.
Может нужно менять ещё строки 37-40 и 69-72 ?

16 (2020-01-10 01:11:45 отредактировано andrys)

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

http://forum.rcl-radio.ru/uploads/images/2020/01/87d257d0da517076cb4482647073a8da.jpg вот выверил схему свою.

17

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

http://forum.rcl-radio.ru/uploads/images/2020/01/8eb6b5742276c8aefab2cc223dd4ab78.jpg

18

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

В каких строках регулируется чувствительность каналов ?

19

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

Что бы ни чего не паять проще будет редактировать код.

Вы написали: из середины вниз, от верха в середину

Значит у Вас перевернуто подключение индикаторов, то есть Вам нужно полностью поменять все строки кода:

// case 0: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(9,0);ch(11,0);ch(10,0);break;
    case 0: ch(10,0);ch(11,0);ch(9,0);ch(8,0);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 1: ch(10,1);ch(11,0);ch(9,0);ch(8,0);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 2: ch(10,1);ch(11,1);ch(9,0);ch(8,0);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 3: ch(10,1);ch(11,1);ch(9,1);ch(8,0);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 4: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,0);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 5: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,0);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 6: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,0);ch(4,0);ch(3,0);ch(2,0);break;
    case 7: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,1);ch(4,0);ch(3,0);ch(2,0);break;
    case 8: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,1);ch(4,1);ch(3,0);ch(2,0);break;
    case 9: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,1);ch(4,1);ch(3,1);ch(2,0);break;
   case 10: ch(10,1);ch(11,1);ch(9,1);ch(8,1);ch(7,1);ch(6,1);ch(5,1);ch(4,1);ch(3,1);ch(2,1);break;

то есть не  10 11 9 8 7 6 5 4 3 2
а 2 3 4 5 6 7 8 9 11 10

Тогда индикаторы будут работать снизу вверх как положено.

Далее у Вас в принципе 4 -е блока светодиодов по 10 шт, они могут быть перепутаны, поэтому сначала настройте правый канал:

перед }// loop
поставьте:

dig_r = 18;
dig_l = 0;

левый канал у Вас не горит , а правый один блог нижний горят все 10 диодов, в верхнем блоке 8 диодов, если они перепутаны то надо редактировать код:

     case 0: ch(12,0);ch(1,0);ch(0,0);ch(13,1);break;//1
     case 1: ch(12,0);ch(1,0);ch(0,1);ch(13,0);break;//2
     case 2: ch(12,0);ch(1,1);ch(0,0);ch(13,0);break;//3
     case 3: ch(12,1);ch(1,0);ch(0,0);ch(13,0);break;//4

например не 12 1 0 13
а 12 13 0 1

что бы понять какой где у Вас блог загорается первым, замедлите динамическую индикацию:
MsTimer2::set(4, to_Timer);MsTimer2::start();
заменить на
MsTimer2::set(200, to_Timer);MsTimer2::start();// если быстро мигает 200 увеличте

20

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

первую часть выполнил, "бегают" снизу вверх. Сейчас буду разбираться с блоками.

21

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

по фото у Вас получается в одной стороне у Вас низы ПК ЛК, во второй колонке верхи ПК ЛК, то есть
12 1 0 13
надо менять

12 0 1 13

или на

13 1 0 12

22

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

да, именно так, сейчас правлю

liman324 пишет:

по фото у Вас получается в одной стороне у Вас низы ПК ЛК, во второй колонке верхи ПК ЛК, то есть
12 1 0 13
надо менять

12 0 1 13

или на

13 1 0 12

23 (2020-01-10 01:49:00 отредактировано andrys)

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

Это 13 1 0 12http://forum.rcl-radio.ru/uploads/images/2020/01/d1bfcfa563969a5f01f8a036609abefb.jpg
Правый канал - угадал

24

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

Если 12 0 1 13 - то меняется по диагонали.

25

Re: Индикатор уровня аудио сигнала на светодиодной шкале SHB10R

либо два первых числа менять местами, либо два последних