ARDUINO Проблемы с дисплеями 1602 и подобными

Evgeniy2020

✩✩✩✩✩✩✩
12 Июл 2020
91
0
@sampkube, код в студию :)
А так проверьте еще раз схему, есть ли резисторы на шине i2c и тд....
 

Evgeniy2020

✩✩✩✩✩✩✩
12 Июл 2020
91
0
Всем доброго времени суток! Столкнулся с проблемой того что сразу после прошивки мк(ATtiny2313) на дисплей выводиться корректная информация. После переподачи питания, помимо нужной инфы выводиться всякие спец символы, по типу полных клеток, скобок, амперсантов и тд. Поскольку сразу после прошивки инфа дается верно, то думаю что это не программная составляющая, а аппаратная. Возможно провода экранировать ? или питания не хватает ?
грешу на ногу ресет которая в воздухе, но сомневаюсь что она может так сказываться. В общем подскажите самые распространённые проблемы, я думаю далеко от них я не ушел :ROFLMAO:
 

Evgeniy2020

✩✩✩✩✩✩✩
12 Июл 2020
91
0
@Геннадий П, на все сразу. В общем я на макетке(ту что паять надо) вывел себе колодку для программирования - питания. Питаю от программатора usb isp. От программатора питается МК, светодиод, дисплей с подсветкой, подстроечник для подсветки.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,838
592
44
@Evgeniy2020, Ну, по идее если по параллельной шине подключаешь, то ресет тоже нужно подключать на ардуину. Смотри схему подключения.
 

Evgeniy2020

✩✩✩✩✩✩✩
12 Июл 2020
91
0
@Геннадий П, ардуину уже не использую. Напрямую питаю от программатора, через него и шью
UPD:Надо было массив символов при объявлении сделать пустым. char lol[10] = ""; а не просто инициализировать =)
 
Изменено:

Геннадий П

★★★★★★✩
14 Апр 2021
1,838
592
44
Сначала удивился, почему биполярник подключен напрямую к микросхеме, без резистора по цепи базы.
Но потом посмотрел даташит, оказывается у нее есть токовый ограничитель на выходах.
1628152278573.png 1628152309491.png
 

Deni24

✩✩✩✩✩✩✩
3 Окт 2021
1
0
ВСЕ РЕШЕНО!!!! Я сам искал ответ на этот вопрос долго, мне помогло смена адреса дисплея с 0x27 на 0x3F и все заработало.
 

epa

✩✩✩✩✩✩✩
2 Окт 2021
1
0
Добрый день.
Столкнулся с такой проблемой, что после спаивания Модуля управления дисплеем (I2C) и самим дисплеем LCD1602A, перестала работать подсветка.

WhatsApp Image 2021-11-07 at 16.02.55.jpegWhatsApp Image 2021-11-07 at 16.03.03.jpegWhatsApp Image 2021-11-07 at 16.04.07.jpeg
Вроде бы взял, самый обычный скетч, проверил подсветка в программе включается, но толку нет. Сам скетч:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей
void setup()
{
lcd.init();
lcd.backlight();// Включаем подсветку дисплея
lcd.print("Hello World!");
lcd.setCursor(8, 1);
lcd.print("LCD 1602");
}
void loop()
{
// Устанавливаем курсор на вторую строку и нулевой символ.
lcd.setCursor(0, 1);
// Выводим на экран количество секунд с момента запуска ардуины
lcd.print(millis()/1000);
}

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

Тигран Оганджанян

✩✩✩✩✩✩✩
9 Апр 2020
14
4
Добрый день! Подключил LCD дисплей 1602 при помощи библиотеки ESP8266_LCD_1602_RUS.h к Node MCU.
Работает, но периодически путает буквы:
вместо "Давление" пишет " вавление"
или вместо "Влажность" пишет "Вьанность"
а иногда, нормально выдает без ошибок через раз короче.
Сначала думал на помехи и наводки, но в таком случаи буквы бы путались хаотично... а тут получается конкретно в одних и тех же словах ошибается. Так что скорее всего дело в коде...

C++:
#define BLYNK_PRINT Serial //Blynk+MeteoControl
#include <BlynkSimpleEsp8266.h>
#include <ArduinoOTA.h> // Для прошивки по вафле
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <TimeLib.h>
#include <WidgetRTC.h>
#include <ESP8266_LCD_1602_RUS.h>

// раздефайнить или задефайнить для использования
#define DEBUG_ENABLE

#ifdef DEBUG_ENABLE
#define DEBUG(x) Serial.println(x)
#else
#define DEBUG(x)
#endif

LCD_1602_RUS lcd(0x27, 16, 2);

#define SEALEVELPRESSURE_HPA (1013.25) //Blynk+MeteoControl
Adafruit_BME280 bme; // I2C

String spaces = "                ";
char auth[] = "***********";
char* ssid[] = {"*****","**********"};
char* pass[] = {"*******","*********"};

bool isFirstConnect=true;
float MyH, MyP, MyT, MyCO2;
long my_timer;
int attempt_conect_count, MyStatus=1;

BlynkTimer timer;
WidgetRTC rtc;


void setup() {
  DEBUG("Tigran-Setup");
  // D1,D2 - I2C by BME280-Module
  ArduinoOTA.setHostname("Mini_CO2_LCD");
  ArduinoOTA.begin();
  MultyWiFiBlynkBegin();
  timer.setInterval(3000, UpdateLCD);
  setSyncInterval(10 * 60); // Sync interval in seconds (10 minutes)
  if (!bme.begin()) {DEBUG("Could not find a valid BME280 sensor, check wiring!");}
  my_timer = millis();

  Serial.begin(9600);         // открыть порт
  lcd.init();                 // инициализация дисплея
  lcd.backlight();            // включить подсветку
}


void loop() {
  ArduinoOTA.handle();
  if (Blynk.connected()) {
    Blynk.run();
    my_timer = millis(); // "сбросить" таймер
    attempt_conect_count=0;  // "сбросить" счетчик попыток перподключиться
  } else {
    if (millis() - my_timer > 60*1000) { // Таймер чтобы не чаще чем раз в 60 сек. пытался законектиться
      DEBUG("Потерена связь с Блянком, делаю повторную попытку");
      Blynk.run();
      if (!Blynk.connected()) {
        DEBUG("Нет результата пробую преподключться... попытка №"+String(attempt_conect_count));
        MultyWiFiBlynkBegin(); //
        attempt_conect_count++;
        if (attempt_conect_count>3) {ESP.deepSleep(1e6);} //Заснуть на 1 сек. (Перегрузить)
      }
      my_timer = millis();   // "сбросить" таймер
    }
  }
  timer.run();
}

void UpdateLCD() {
  //BME280 (Temperature, Pressure, Humidity)
  MyT=bme.readTemperature()+0.7;
  DEBUG("Temperature = " + String(MyT) + " *C");
  MyP=bme.readPressure() / 100.0F *0.750062;
  DEBUG("Pressure = " + String(MyP) + " mmHg");
  MyH=bme.readHumidity();
  DEBUG("Humidity = " + String(MyH) +" %");
  Blynk.virtualWrite(V1,MyT); //LED Widget status
  Blynk.virtualWrite(V2,MyH); //LED Widget status
  Blynk.virtualWrite(V3,MyP); //LED Widget status

  //MHZ-Z19 (PPM CO2)
  #define mySerial Serial // Serial битрейд обязтельно 9600!!!
  static byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; //команда чтения
  byte response[9];
  byte crc = 0;
  while (mySerial.available())mySerial.read();//очистка буфера UART перед запросом
  memset(response, 0, 9);// очистка ответа
  mySerial.write(cmd,9);// запрос на содержание CO2
  mySerial.readBytes(response, 9);//читаем 9 байт ответа сенсора
  //расчет контрольной суммы
  crc = 0;
  for (int i = 1; i <= 7; i++)  {crc += response[i];}
  crc = ((~crc)+1);
  if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) )  {   //проверка CRC
    DEBUG("CRC error");
  }else{
     //расчет значеия CO2
     MyCO2 = (((unsigned int) response[2])<<8) + response[3];
     DEBUG("CO2: " + String(MyCO2) + "PPM");
     Blynk.virtualWrite(V4,MyCO2); //LED Widget status
  }

  delay(50);
  lcd.setCursor(0, 0);
  lcd.print(spaces);    // очищаем цифры с прошлого вывода
  lcd.setCursor(0, 0);        // курсор слева 1 строчка
  lcd.print("СО2: ");
  lcd.setCursor(5, 0);  // курсор,строчка
  lcd.print(String(MyCO2) + " PPM");

  switch (MyStatus) {
  case 1:
    lcd.setCursor(0, 1);        // курсор слева 2 строчка
    lcd.print(spaces);    // очищаем цифры с прошлого вывода
    lcd.setCursor(0, 1);        // курсор слева 2 строчка
    lcd.print("Температура: ");
    lcd.setCursor(12, 1); // курсор,строчка
    lcd.print(String(MyT));  
    MyStatus=2;
    break;
  case 2:
    lcd.setCursor(0, 1);        // курсор слева 2 строчка
    lcd.print(spaces);    // очищаем цифры с прошлого вывода
    lcd.setCursor(0, 1);        // курсор слева 2 строчка
    lcd.print("Влажность: ");
    lcd.setCursor(11, 1); // курсор,строчка
    lcd.print(String(MyH) + "%");  
    MyStatus=3;
    break;
  case 3:
    lcd.setCursor(0, 1);        // курсор слева 2 строчка
    lcd.print(spaces);    // очищаем цифры с прошлого вывода
    lcd.setCursor(0, 1);        // курсор слева 2 строчка
    lcd.print("Давление: ");
    lcd.setCursor(10, 1); // курсор,строчка
    lcd.print(String(MyP));  
    MyStatus=1;
    break;  
  }
}

void MultyWiFiBlynkBegin() {
  int ssid_count=0;
  int ssid_mas_size = sizeof(ssid) / sizeof(ssid[0]);
  do {
    DEBUG("Trying to connect to wi-fi " + String(ssid[ssid_count]));
    WiFi.begin(ssid[ssid_count], pass[ssid_count]);  
    int WiFi_timeout_count=0;
    while (WiFi.status() != WL_CONNECTED && WiFi_timeout_count<20) { //waiting 5 sec (Если делать больше 5 сек. и нет вайфая он вываливаеться с ошибкоой!)
      delay(500);
      Serial.print(".");
      ++WiFi_timeout_count;
    }
    if (WiFi.status() == WL_CONNECTED) {
      DEBUG("Connected to WiFi! Now I will check the connection to the Blynk server");
      Blynk.config(auth);
      Blynk.connect(5000); //waiting 5 sec
    }
    if (ssid_count<ssid_mas_size) {DEBUG("Next SSID");}
    ++ssid_count;
  }
  while (!Blynk.connected() && ssid_count<ssid_mas_size);
  if (!Blynk.connected() && ssid_count==ssid_mas_size) {
    DEBUG("I could not connect to blynk =( Ignore and move on. but still I will try to connect to wi-fi " + String(ssid[ssid_count-1]));
  }
}

BLYNK_CONNECTED() {
  if (isFirstConnect) {} //При первом запуске
  isFirstConnect = false;
  rtc.begin(); // Synchronize time on connection
  DEBUG("BLYNK_CONNECTED syncVirtual ports");
  Blynk.syncVirtual(V0);
}

Пока решил отказаться от кириллицы, с латынью все ОК. Наверное библиотека глючная...
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
Сам дисплей нужен с поддержкой кириллицы, подобные библиотеки лучше не использовать
 

Nikanor

★★✩✩✩✩✩
1 Окт 2020
180
52
если дисплей без поддержки кириллицы, то одновременно можно выводить не более 8 символов кириллицы.
если больше - будут произвольно русские буквы меняться на всякую фигню.
 

Nikanor

★★✩✩✩✩✩
1 Окт 2020
180
52
@Эдуард Анисимов, я не ищу, потому что нормальных для не руссифицированного дисплея 1602 нет.
если я не прав - можете указать какая, на ваш взгляд, нормальная.

а при подключении через i2c вообще засада....
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,281
Москва
У меня полобное было при очень быстром выводе на экран. До конца не разобрался. Было так
Есть статический текст, а выводилось только значение - цифры. Так вот в какой то момент статика менялась. Пришлось сделать так, что бы вместе с цифрами повторялся текст.
 

Fundi1330

✩✩✩✩✩✩✩
12 Янв 2022
1
0
LCD 1602 выводит только квадратики при всём этом когда сзади кручу, то квадратики становяться или ярче или темнее.
Вот код, все библиотеки подключил:
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Using version 1.2.1

// The LCD constructor - address shown is 0x27 - may or may not be correct for yours
// Also based on YWRobot LCM1602 IIC V1
LiquidCrystal_I2C lcd(0x27, 20, 4); // адрес, En, Rw, Rs, d4, d5, d6, d7, backlighPin, backlighPol pol

void setup()
{
lcd.begin(16,2); // sixteen characters across - 2 lines
lcd.backlight();

lcd.setCursor(0,0);
lcd.print("ABOBA");

lcd.setCursor(1,1);
lcd.print("uuuu!");
}
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,838
592
44
Для начала подсветкой поморгать, чтобы убедиться что данными обменивается.
 
  • Лойс +1
Реакции: Lumenjer

zhd-dm

✩✩✩✩✩✩✩
27 Мар 2022
5
0
Добрый день! Прикупил недавно Arduino nano на чипе MEGA328P AU1648 и дисплей. Собрал схему, скачал исходный код, загрузил - ошибка. Хотел собрать вывод температуры компонентов компьютера на отдельный дисплей по этому проекту Алекса: https://alexgyver.ru/pcdisplay/. Код вроде как скомпилировался и залился на ардуинку, по крайней мере ошибок нет и после загрузки ардуинка каждую секунду моргает датчиком. В видео у него в самом начале простецкая рабочая схема, которую я и собрал, но вот код именно этой сборки я не нашел, везде улучшенные, с кнопками, дополнительными датчиками. Подскажите, пожалуйста, могу ли я просто используя эту схему вывести температуру компонентов? Что в коде надо изменить? Заранее очень благодарен.
 

Вложения