26

Re: Анализатор спектра LCD2004

По  i2c от музыки все работает, но только при громкой музыке. Сигнал беру с аудио выхода ПК на колонки. Как то можно увеличить чувствительность прибора?

З.Ы. Вам спасибо за советы!

З.Ы.1. Для снятия доп. платы с дисплея пока не созрел.

27

Re: Анализатор спектра LCD2004

int sample = analogRead(A0);

замените на

int sample = analogRead(A0)*2;

28

Re: Анализатор спектра LCD2004

liman324 пишет:

...замените на ....

Сделал- заметного улучшения не увидел. Попробую поставить кнопку и поиграться режимами.

29

Re: Анализатор спектра LCD2004

Как подключить кнопку управления? Торможу!

30

Re: Анализатор спектра LCD2004

http://forum.rcl-radio.ru/uploads/images/2021/11/d696a449b1e7ca23ac343b345fb1ae4c.png

31

Re: Анализатор спектра LCD2004

Я себе так и нарисовал!

32

Re: Анализатор спектра LCD2004

Все режимы от кнопки работают. Оставлю управление по  i2c. Снимать доп. плату не хочу, может и куплю другой дисплей. Автору спасибо за советы!

33 (2021-12-14 14:28:29 отредактировано demartin)

Re: Анализатор спектра LCD2004

Если тема еще жива, прошу помощи!

Автору большое спасибо за проект именно с этим LCD экраном, больше нигде найти не смог, а хотелось чуть больше   чем 1602 экран..

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

НО при проверка не генераторе частоты оказалось что пляшут они в совершенно случайном порядке. до 1кГц еще есть какая-то зависимость (несколько полосок вместе двигаются с левого до правого края), но дальше - чистый набор шумов и гармоник на дисплее в случайных местах и случайной высоты!

Что я уже только не пробовал,  и все коды приведенные выше, и входные пины менять и библиотеки переподгружать, и значения подбирать - все одно и тоже... Голову сломал уже! Буду крайне благодарен за хоть какую-то подсказку!

Мне кажется что проблема именно в коде, что-то не правильно он интерпертирует, поскольку все остальное - отображение надписей на дисплее,  и работа реле работает четко. А подключить там что-то не так невозможно.. вход через конденсатор на a2...

http://forum.rcl-radio.ru/uploads/images/2021/12/7559370049ccd554e51c707c70e771ad.png http://forum.rcl-radio.ru/uploads/images/2021/12/1a6217b4da48ca6a0a4a65b9e7b84bf8.png



#define AUTO_GAIN 0      // автонастройка по громкости
  #define VOL_THR 35        // порог тишины (ниже него отображения на матрице не будет)
  #define LOW_PASS 30       // нижний порог чувствительности шумов (нет скачков при отсутствии звука)
  #define DEF_GAIN 80       // максимальный порог по умолчанию 
  #define FHT_N 256         // ширина спектра х2
  #define LOG_OUT 1
  #include <FHT.h> 
  #include <EEPROM.h>
  #include <Wire.h> 
  #include <LiquidCrystal.h>
  #define PIN_RELAY 2
  #define AUDIO_IN 16

 #define printByte(args) write(args);
   double prevVolts = 100.0;
   // --------------- БИБЛИОТЕКИ ---------------
   #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
   #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
      LiquidCrystal lcd(6, 7, 8, 9, 10, 11);
      byte posOffset[20] = {10, 16, 18, 20, 24, 30, 34, 40, 44, 50, 54, 56, 58, 60, 62, 64, 68, 70, 72, 74}; // вч выш
      byte maxValue, maxValue_f,ww=1,gain_sp = DEF_GAIN;
      float k = 0.1;
      int i1,yyy,spek;
      unsigned long gainTimer;

      
   
void setup(){
   Serial.begin(9600);Wire.begin();lcd.begin(20,4);// LCD 20X4
   pinMode(12,INPUT);
  sbi(ADCSRA, ADPS2);
  cbi(ADCSRA, ADPS1);
  sbi(ADCSRA, ADPS0);
   analogReference(EXTERNAL);
   spek = EEPROM.read(100);
   lcd.print("MUTED, please wait..  ");delay(200);
   lcd.print("*");delay(150);
   lcd.print("*");delay(150);
   lcd.print("*");delay(150);
   lcd.print("*");delay(100);
   lcd.print("*");delay(100);
   lcd.print("*");delay(100);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(300);

   lcd.clear();
   
   pinMode(PIN_RELAY, OUTPUT); // Объявляем пин реле как выход
  digitalWrite(PIN_RELAY, HIGH); // Выключаем реле - посылаем высокий сигнал
   lcd.print("                       ON AIR! ENJOY!");delay(200);
   
  
   
   
}



 void loop(){
   if(digitalRead(12)==HIGH){spek++;EEPROM.update(100,spek); ww=1;if(spek>5){spek=0;}delay(300);}

    
      if(spek==0&&ww==1){
      byte v1[8] = {0, 0, 0, 0, 0, 0, 0, 14};
      byte v2[8] = {0, 0, 0, 0, 0, 0, 14, 14};
      byte v3[8] = {0, 0, 0, 0, 0, 14, 14, 14};
      byte v4[8] = {0, 0, 0, 0, 14, 14, 14, 14};
      byte v5[8] = {0, 0, 0, 14, 14, 14, 14, 14};
      byte v6[8] = {0, 0, 14, 14, 14, 14, 14, 14};
      byte v7[8] = {0, 14, 14, 14, 14, 14, 14, 14};
      byte v8[8] = {14, 14, 14, 14, 14, 14, 14, 14};
      lcd.createChar(0, v1);lcd.createChar(1, v2);lcd.createChar(2, v3);lcd.createChar(3, v4);lcd.createChar(4, v5);lcd.createChar(5, v6);lcd.createChar(6, v7);lcd.createChar(7, v8);
      ww=0;}

       if(spek==1&&ww==1){
      byte v1[8] = {0, 0, 0, 0, 0, 0, 0, 4};
      byte v2[8] = {0, 0, 0, 0, 0, 0, 4, 4};
      byte v3[8] = {0, 0, 0, 0, 0, 4, 4, 4};
      byte v4[8] = {0, 0, 0, 0, 4, 4, 4, 4};
      byte v5[8] = {0, 0, 0, 4, 4, 4, 4, 4};
      byte v6[8] = {0, 0, 4, 4, 4, 4, 4, 4};
      byte v7[8] = {0, 4, 4, 4, 4, 4, 4, 4};
      byte v8[8] = {4, 4, 4, 4, 4, 4, 4, 4};
      lcd.createChar(0, v1);lcd.createChar(1, v2);lcd.createChar(2, v3);lcd.createChar(3, v4);lcd.createChar(4, v5);lcd.createChar(5, v6);lcd.createChar(6, v7);lcd.createChar(7, v8);
      ww=0;}



      if(spek==2&&ww==1){
      byte v1[8] = {0, 0, 0, 0, 0, 0, 0, 10};
      byte v2[8] = {0, 0, 0, 0, 0, 0, 10, 10};
      byte v3[8] = {0, 0, 0, 0, 0, 10, 10, 10};
      byte v4[8] = {0, 0, 0, 0, 10, 10, 10, 10};
      byte v5[8] = {0, 0, 0, 10, 10, 10, 10, 10};
      byte v6[8] = {0, 0, 10, 10, 10, 10, 10, 10};
      byte v7[8] = {0, 10, 10, 10, 10, 10, 10, 10};
      byte v8[8] = {10, 10, 10, 10, 10, 10, 10, 10};
      lcd.createChar(0, v1);lcd.createChar(1, v2);lcd.createChar(2, v3);lcd.createChar(3, v4);lcd.createChar(4, v5);lcd.createChar(5, v6);lcd.createChar(6, v7);lcd.createChar(7, v8);
      ww=0;}

      if(spek==3&&ww==1){
      byte v1[8] = {0, 0, 0, 0, 0, 0, 0, 27};
      byte v2[8] = {0, 0, 0, 0, 0, 0, 27, 27};
      byte v3[8] = {0, 0, 0, 0, 0, 27, 27, 27};
      byte v4[8] = {0, 0, 0, 0, 27, 27, 27, 27};
      byte v5[8] = {0, 0, 0, 27, 27, 27, 27, 27};
      byte v6[8] = {0, 0, 27, 27, 27, 27, 27, 27};
      byte v7[8] = {0, 27, 27, 27, 27, 27, 27, 27};
      byte v8[8] = {27, 27, 27, 27, 27, 27, 27, 27};
      lcd.createChar(0, v1);lcd.createChar(1, v2);lcd.createChar(2, v3);lcd.createChar(3, v4);lcd.createChar(4, v5);lcd.createChar(5, v6);lcd.createChar(6, v7);lcd.createChar(7, v8);
      ww=0;}

      if(spek==4&&ww==1){
      byte v1[8] = {0, 0, 0, 0, 0, 0, 0, 31};
      byte v2[8] = {0, 0, 0, 0, 0, 0, 31, 31};
      byte v3[8] = {0, 0, 0, 0, 0, 31, 31, 31};
      byte v4[8] = {0, 0, 0, 0, 31, 31, 31, 31};
      byte v5[8] = {0, 0, 0, 31, 31, 31, 31, 31};
      byte v6[8] = {0, 0, 31, 31, 31, 31, 31, 31};
      byte v7[8] = {0, 31, 31, 31, 31, 31, 31, 31};
      byte v8[8] = {31, 31, 31, 31, 31, 31, 31, 31};
      lcd.createChar(0, v1);lcd.createChar(1, v2);lcd.createChar(2, v3);lcd.createChar(3, v4);lcd.createChar(4, v5);lcd.createChar(5, v6);lcd.createChar(6, v7);lcd.createChar(7, v8);
      ww=0;}

      if(spek==5&&ww==1){
      byte v1[8] = {0, 0, 0, 0, 0, 0, 0, 21};
      byte v2[8] = {0, 0, 0, 0, 0, 0, 21, 21};
      byte v3[8] = {0, 0, 0, 0, 0, 21, 21, 21};
      byte v4[8] = {0, 0, 0, 0, 21, 21, 21, 21};
      byte v5[8] = {0, 0, 0, 21, 21, 21, 21, 21};
      byte v6[8] = {0, 0, 21, 21, 21, 21, 21, 21};
      byte v7[8] = {0, 21, 21, 21, 21, 21, 21, 21};
      byte v8[8] = {21, 21, 21, 21, 21, 21, 21, 21};
      lcd.createChar(0, v1);lcd.createChar(1, v2);lcd.createChar(2, v3);lcd.createChar(3, v4);lcd.createChar(4, v5);lcd.createChar(5, v6);lcd.createChar(6, v7);lcd.createChar(7, v8);
      ww=0;}

    
      analyzeAudio();   // функция FHT, забивает массив fht_log_out[] величинами по спектру

      for (int pos = 0; pos < 20; pos++) {  
        if (fht_log_out[posOffset[pos]] > maxValue) maxValue = fht_log_out[posOffset[pos]];
        
        
        
        int posLevel = map(fht_log_out[posOffset[pos]], LOW_PASS, gain_sp, 0, 31);
        posLevel = constrain(posLevel, 0, 31);

   if(posLevel<7){
    lcd.setCursor(pos, 0);lcd.print(" ");
    lcd.setCursor(pos, 1);lcd.print(" ");
    lcd.setCursor(pos, 2);lcd.print(" ");
    lcd.setCursor(pos, 3);lcd.write((uint8_t)posLevel);}
   
   if(posLevel>7&&posLevel<15){
    lcd.setCursor(pos, 0);lcd.print(" ");
    lcd.setCursor(pos, 1);lcd.print(" ");
    lcd.setCursor(pos, 3);lcd.write((uint8_t)7);lcd.setCursor(pos, 2);lcd.write((uint8_t)posLevel-8);}

   if(posLevel>15&&posLevel<23){
    lcd.setCursor(pos, 0);lcd.print(" ");
    lcd.setCursor(pos, 3);lcd.write((uint8_t)7);
    lcd.setCursor(pos, 2);lcd.write((uint8_t)7);lcd.setCursor(pos, 1);lcd.write((uint8_t)posLevel-16);}    

   if(posLevel>23&&posLevel<31){
    lcd.setCursor(pos, 3);lcd.write((uint8_t)7);
    lcd.setCursor(pos, 2);lcd.write((uint8_t)7);
    lcd.setCursor(pos, 1);lcd.write((uint8_t)7);lcd.setCursor(pos, 0);lcd.write((uint8_t)posLevel-24);}           
      }


   if (AUTO_GAIN) {
    maxValue_f = maxValue * k + maxValue_f * (1 - k);
    if (millis() - gainTimer > 10) {   
    if (maxValue_f > VOL_THR) gain_sp = maxValue_f;
      else gain_sp = 100;
      gainTimer = millis();}
      else {gain_sp = DEF_GAIN;}}
  }// loop

void analyzeAudio() { 
 for (int i = 0 ; i < FHT_N ; i++) {
    int sample = analogRead(AUDIO_IN);
    fht_input[i] = sample; // put real data into bins
    
 }
    fht_window(); // window the data for better frequency response
    fht_reorder(); // reorder the data before doing the fht
    fht_run(); // process the data in the fht
    fht_mag_log(); // take the output of the fht
}

34

Re: Анализатор спектра LCD2004

Попробуйте этот код (вход А0)

#define LOG_OUT 1
#define AUTO_GAIN 1        // автонастройка по громкости
#define LOW_PASS 30        // нижний порог чувствительности шумов (нет скачков при отсутствии звука)
#define DEF_GAIN 120       // максимальный порог по умолчанию 
#define FHT_N 128          // ширина спектра х2
#define LOG_OUT 1

  #include <FHT.h> 
  #include <EEPROM.h>
  #include <Wire.h> 
  #include <LiquidCrystal.h>
  #define PIN_RELAY 2
  #define AUDIO_IN 16

 #define printByte(args) write(args);
   double prevVolts = 100.0;

      LiquidCrystal lcd(6, 7, 8, 9, 10, 11);
      byte posOffset[20] = {2,3,4,6,8,9,11,13,15,17,19,21,23,25,27,29,32,34,36,38};// средний спектр
      byte maxValue, maxValue_f,ww=1,gain_sp = DEF_GAIN;
      float k = 0.1;
      int i1,yyy,spek;
      unsigned long gainTimer;

      
   
void setup(){
    ADMUX  = 0b11000000; ADCSRA = 0b11010110;
/*   
  ADCSRA [2:0] скорость аналогового входа
  000 - CLK/2
  001 - CLK/2
  010 - CLK/4
  011 - CLK/8
  100 - CLK/16
  101 - CLK/32
  110 - CLK/64 '
  111 - CLK/128    
*/
  
   Serial.begin(9600);Wire.begin();lcd.begin(20,4);// LCD 20X4
   pinMode(12,INPUT);

   spek = EEPROM.read(100);
   lcd.print("MUTED, please wait..  ");delay(200);
   lcd.print("*");delay(150);
   lcd.print("*");delay(150);
   lcd.print("*");delay(150);
   lcd.print("*");delay(100);
   lcd.print("*");delay(100);
   lcd.print("*");delay(100);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(50);
   lcd.print("*");delay(300);

   lcd.clear();
   
   pinMode(PIN_RELAY, OUTPUT); // Объявляем пин реле как выход
  digitalWrite(PIN_RELAY, HIGH); // Выключаем реле - посылаем высокий сигнал
   lcd.print("                       ON AIR! ENJOY!");delay(200);
   
  
   
   
}



 void loop(){
   if(digitalRead(12)==HIGH){spek++;EEPROM.update(100,spek); ww=1;if(spek>5){spek=0;}delay(300);}

    
      if(spek==0&&ww==1){
      byte v1[8] = {0, 0, 0, 0, 0, 0, 0, 14};
      byte v2[8] = {0, 0, 0, 0, 0, 0, 14, 14};
      byte v3[8] = {0, 0, 0, 0, 0, 14, 14, 14};
      byte v4[8] = {0, 0, 0, 0, 14, 14, 14, 14};
      byte v5[8] = {0, 0, 0, 14, 14, 14, 14, 14};
      byte v6[8] = {0, 0, 14, 14, 14, 14, 14, 14};
      byte v7[8] = {0, 14, 14, 14, 14, 14, 14, 14};
      byte v8[8] = {14, 14, 14, 14, 14, 14, 14, 14};
      lcd.createChar(0, v1);lcd.createChar(1, v2);lcd.createChar(2, v3);lcd.createChar(3, v4);lcd.createChar(4, v5);lcd.createChar(5, v6);lcd.createChar(6, v7);lcd.createChar(7, v8);
      ww=0;}

       if(spek==1&&ww==1){
      byte v1[8] = {0, 0, 0, 0, 0, 0, 0, 4};
      byte v2[8] = {0, 0, 0, 0, 0, 0, 4, 4};
      byte v3[8] = {0, 0, 0, 0, 0, 4, 4, 4};
      byte v4[8] = {0, 0, 0, 0, 4, 4, 4, 4};
      byte v5[8] = {0, 0, 0, 4, 4, 4, 4, 4};
      byte v6[8] = {0, 0, 4, 4, 4, 4, 4, 4};
      byte v7[8] = {0, 4, 4, 4, 4, 4, 4, 4};
      byte v8[8] = {4, 4, 4, 4, 4, 4, 4, 4};
      lcd.createChar(0, v1);lcd.createChar(1, v2);lcd.createChar(2, v3);lcd.createChar(3, v4);lcd.createChar(4, v5);lcd.createChar(5, v6);lcd.createChar(6, v7);lcd.createChar(7, v8);
      ww=0;}



      if(spek==2&&ww==1){
      byte v1[8] = {0, 0, 0, 0, 0, 0, 0, 10};
      byte v2[8] = {0, 0, 0, 0, 0, 0, 10, 10};
      byte v3[8] = {0, 0, 0, 0, 0, 10, 10, 10};
      byte v4[8] = {0, 0, 0, 0, 10, 10, 10, 10};
      byte v5[8] = {0, 0, 0, 10, 10, 10, 10, 10};
      byte v6[8] = {0, 0, 10, 10, 10, 10, 10, 10};
      byte v7[8] = {0, 10, 10, 10, 10, 10, 10, 10};
      byte v8[8] = {10, 10, 10, 10, 10, 10, 10, 10};
      lcd.createChar(0, v1);lcd.createChar(1, v2);lcd.createChar(2, v3);lcd.createChar(3, v4);lcd.createChar(4, v5);lcd.createChar(5, v6);lcd.createChar(6, v7);lcd.createChar(7, v8);
      ww=0;}

      if(spek==3&&ww==1){
      byte v1[8] = {0, 0, 0, 0, 0, 0, 0, 27};
      byte v2[8] = {0, 0, 0, 0, 0, 0, 27, 27};
      byte v3[8] = {0, 0, 0, 0, 0, 27, 27, 27};
      byte v4[8] = {0, 0, 0, 0, 27, 27, 27, 27};
      byte v5[8] = {0, 0, 0, 27, 27, 27, 27, 27};
      byte v6[8] = {0, 0, 27, 27, 27, 27, 27, 27};
      byte v7[8] = {0, 27, 27, 27, 27, 27, 27, 27};
      byte v8[8] = {27, 27, 27, 27, 27, 27, 27, 27};
      lcd.createChar(0, v1);lcd.createChar(1, v2);lcd.createChar(2, v3);lcd.createChar(3, v4);lcd.createChar(4, v5);lcd.createChar(5, v6);lcd.createChar(6, v7);lcd.createChar(7, v8);
      ww=0;}

      if(spek==4&&ww==1){
      byte v1[8] = {0, 0, 0, 0, 0, 0, 0, 31};
      byte v2[8] = {0, 0, 0, 0, 0, 0, 31, 31};
      byte v3[8] = {0, 0, 0, 0, 0, 31, 31, 31};
      byte v4[8] = {0, 0, 0, 0, 31, 31, 31, 31};
      byte v5[8] = {0, 0, 0, 31, 31, 31, 31, 31};
      byte v6[8] = {0, 0, 31, 31, 31, 31, 31, 31};
      byte v7[8] = {0, 31, 31, 31, 31, 31, 31, 31};
      byte v8[8] = {31, 31, 31, 31, 31, 31, 31, 31};
      lcd.createChar(0, v1);lcd.createChar(1, v2);lcd.createChar(2, v3);lcd.createChar(3, v4);lcd.createChar(4, v5);lcd.createChar(5, v6);lcd.createChar(6, v7);lcd.createChar(7, v8);
      ww=0;}

      if(spek==5&&ww==1){
      byte v1[8] = {0, 0, 0, 0, 0, 0, 0, 21};
      byte v2[8] = {0, 0, 0, 0, 0, 0, 21, 21};
      byte v3[8] = {0, 0, 0, 0, 0, 21, 21, 21};
      byte v4[8] = {0, 0, 0, 0, 21, 21, 21, 21};
      byte v5[8] = {0, 0, 0, 21, 21, 21, 21, 21};
      byte v6[8] = {0, 0, 21, 21, 21, 21, 21, 21};
      byte v7[8] = {0, 21, 21, 21, 21, 21, 21, 21};
      byte v8[8] = {21, 21, 21, 21, 21, 21, 21, 21};
      lcd.createChar(0, v1);lcd.createChar(1, v2);lcd.createChar(2, v3);lcd.createChar(3, v4);lcd.createChar(4, v5);lcd.createChar(5, v6);lcd.createChar(6, v7);lcd.createChar(7, v8);
      ww=0;}

    
      analyzeAudio();   // функция FHT, забивает массив fht_log_out[] величинами по спектру

      for (int pos = 0; pos < 20; pos++) {  
        if (fht_log_out[posOffset[pos]] > maxValue) maxValue = fht_log_out[posOffset[pos]];
        
        
        
        int posLevel = map(fht_log_out[posOffset[pos]], LOW_PASS, gain_sp, 0, 31);
        posLevel = constrain(posLevel, 0, 31);

   if(posLevel<7){
    lcd.setCursor(pos, 0);lcd.print(" ");
    lcd.setCursor(pos, 1);lcd.print(" ");
    lcd.setCursor(pos, 2);lcd.print(" ");
    lcd.setCursor(pos, 3);lcd.write((uint8_t)posLevel);}
   
   if(posLevel>7&&posLevel<15){
    lcd.setCursor(pos, 0);lcd.print(" ");
    lcd.setCursor(pos, 1);lcd.print(" ");
    lcd.setCursor(pos, 3);lcd.write((uint8_t)7);lcd.setCursor(pos, 2);lcd.write((uint8_t)posLevel-8);}

   if(posLevel>15&&posLevel<23){
    lcd.setCursor(pos, 0);lcd.print(" ");
    lcd.setCursor(pos, 3);lcd.write((uint8_t)7);
    lcd.setCursor(pos, 2);lcd.write((uint8_t)7);lcd.setCursor(pos, 1);lcd.write((uint8_t)posLevel-16);}    

   if(posLevel>23&&posLevel<31){
    lcd.setCursor(pos, 3);lcd.write((uint8_t)7);
    lcd.setCursor(pos, 2);lcd.write((uint8_t)7);
    lcd.setCursor(pos, 1);lcd.write((uint8_t)7);lcd.setCursor(pos, 0);lcd.write((uint8_t)posLevel-24);}           
      }


   if (AUTO_GAIN) {
    if (millis() - gainTimer > 10) {      
      maxValue_f = maxValue * k + maxValue_f * (1 - k);
      if(maxValue_f > LOW_PASS) gain_sp = maxValue_f;else gain_sp = DEF_GAIN;gainTimer = millis();}} 
  }// loop

void analyzeAudio() { 
 while(i1 < FHT_N){i1++; 
    do{ADCSRA |= (1 << ADSC);} 
    while((ADCSRA & (1 << ADIF)) == 0);fht_input[i1] = (ADCL|ADCH << 8);}i1=0;
    fht_window(); // window the data for better frequency response
    fht_reorder(); // reorder the data before doing the fht
    fht_run(); // process the data in the fht
    fht_mag_log(); // take the output of the fht
}

35

Re: Анализатор спектра LCD2004

Здравствуйте! Помогите пожалуйста со схемой подключения экрана напрямую к ардуино. Какие куда пины, куда переменный резистор для контраста? Спасибо.

36

Re: Анализатор спектра LCD2004

Здравствуйте. Посмотрите статью http://rcl-radio.ru/?p=42773, подключение lcd1602 и lcd2004 аналогичны. Единственная разница в

lcd.begin(16, 2);// указываем тип дисплея LCD 16X2

lcd.begin(20, 4);// указываем тип дисплея LCD 20X4

37

Re: Анализатор спектра LCD2004

liman324 пишет:

Здравствуйте. Посмотрите статью http://rcl-radio.ru/?p=42773, подключение lcd1602 и lcd2004 аналогичны. Единственная разница в

lcd.begin(16, 2);// указываем тип дисплея LCD 16X2

lcd.begin(20, 4);// указываем тип дисплея LCD 20X4

Я хотел бы собрать по вашему скетчу, а в вашем скетче строка с пинами LiquidCrystal lcd(6, 7, 8, 9, 10, 11). А в статье, что вы мне скинули, там подключение LiquidCrystal lcd(12, 11, 5, 4, 3, 2). Я новичок в этом деле, только учусь. Извините за глупые вопросы. Подскажите как подключить именно по вашему скетчу, куда какой пин. Заранее спасибо.

38

Re: Анализатор спектра LCD2004

liman324 пишет:

Здравствуйте. Посмотрите статью http://rcl-radio.ru/?p=42773, подключение lcd1602 и lcd2004 аналогичны. Единственная разница в

lcd.begin(16, 2);// указываем тип дисплея LCD 16X2

lcd.begin(20, 4);// указываем тип дисплея LCD 20X4

Собрал подключением по I2C, всё заработало, но не нравится скорость

39

Re: Анализатор спектра LCD2004

LiquidCrystal lcd(6, 7, 8, 9, 10, 11);

ARDUINO LCD
D6 =       RS
D7 =       E
D8 =       D4
D9 =       D5
D10 =     D6
D11 =     D7
GND  =   RW
GND =    VSS
+5V =    VDD

40

Re: Анализатор спектра LCD2004

I2C Не нужно использовать, низкая скорость работы дисплея

41

Re: Анализатор спектра LCD2004

опубликуйте скетч который Вы используете я его переделаю под параллельное подключение дисплея

42

Re: Анализатор спектра LCD2004

liman324 пишет:

LiquidCrystal lcd(6, 7, 8, 9, 10, 11);

ARDUINO LCD
D6 =       RS
D7 =       E
D8 =       D4
D9 =       D5
D10 =     D6
D11 =     D7
GND  =   RW
GND =    VSS
+5V =    VDD

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

43

Re: Анализатор спектра LCD2004

Переменный резистор для контраста подключать по такой схеме, как в статье, что вы мне скинули?

да

44

Re: Анализатор спектра LCD2004

liman324 пишет:

Переменный резистор для контраста подключать по такой схеме, как в статье, что вы мне скинули?

да

Спасибо большое!

45

Re: Анализатор спектра LCD2004

karvik7777 пишет:
liman324 пишет:

LiquidCrystal lcd(6, 7, 8, 9, 10, 11);

ARDUINO LCD
D6 =       RS
D7 =       E
D8 =       D4
D9 =       D5
D10 =     D6
D11 =     D7
GND  =   RW
GND =    VSS
+5V =    VDD

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

Ура! Заработало! Спасибо большое.

46 (2023-05-30 17:58:56 отредактировано 3484480)

Re: Анализатор спектра LCD2004

Всем Доброго! Поднимаю тему. Заказал на Али с серым экраном LCD2004. Гораздо эффектнее смотрится. Надоели уже эти синие и желтые экраны. Подключение LCD паралельное. Параметр (А0) умножил на 10. Все отлично скачет и прыгает при  уровне в 0дб. Прокатал на генераторе. Все ровненько поднимается вплоть до 8 кгц. А дальше уже и не нужно особо, только занимать правые полосы для отображения ВЧ, которые, дай бог ,пару раз прыгнут в течении одной песни, а то и вообще не поднимутся.
Итого: конструкция рабочая и поддающаяся настройке - я доволен.