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

Геннадий П

★★★★★★✩
14 Апр 2021
1,925
618
44
На макетке я это не собирал, заказывал платы.
Как вы без проверки на макетке? Соберите на макетке, оттестируйте, а уже потом на плату переносите.

Скетч сами писали или готовый откуда то взяли?

Если I2C, может не оказаться подтягивающих резисторов.
По плате видно что дисплей напрямую подключается, через 4-битный интерфейс.
 

Sana956

★✩✩✩✩✩✩
5 Мар 2022
40
15
Все шлейфы уже снял, не осталось ничего кроме питания.
4.95v и на контроллере и на экране. Экран впаян непосредственно в плату. Все свободное место на плате - земляной полигон.
Top.jpgBottom.jpg
 
Изменено:

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,327
960
58
Марий-Эл
Логический анализатор нужно подрубить и сигналы смотреть.

Я сегодня с дисплеем возился с SPI интерфейсом.
По даташиту тактовая может быть 6МГц, так он 2 еле тянет.
 

Sana956

★✩✩✩✩✩✩
5 Мар 2022
40
15
Знаешь, такое ощущение, что сдвигается адресация, потому, что всегда на одних и тех же местах одни и те же символы, каждой букве или цифре присваивается определенная кракозябра. Это не случайный мусор, который был бы при помехах например.
 

alex5+95+69

✩✩✩✩✩✩✩
16 Июн 2019
2
1
Проект метеостанции гувера собрал подключил дисплей и по итогу на нём 4 белых полосы. если кидать пробную прошивку или заходить в режим отладки то всё работает текст есть. но как только заливаю любую прошивку метеостанции на экране 4 белые полосы и контрастность пробовал крутить, не помогло.
 

ПЕРЧИК

✩✩✩✩✩✩✩
26 Май 2023
1
0
Добрый вечер, разбирался с дисплеем 16 на 2 на I2C надо было написать имя на кириллице и я создал символы и вроде всё верно ,но вывод какую-то хрень вот код программы
C++:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
  byte Char_1[8] = {B00100,B01010,B01010,B01010,B10001,B11111,B10001,B10001};//A
  byte Char_2[8] = {B00111,B00101,B00101,B00101,B01001,B01001,B01001,B10001};//Л
  byte Char_3[8] = {B11111,B10000,B10000,B11111,B10000,B10000,B10000,B11111};//Е
  byte Char_4[8] = {B10001,B10010,B10100,B11000,B11000,B10100,B10010,B10001};//К
  byte Char_5[8] = {B11111,B10000,B10000,B10000,B10000,B10000,B10000,B11111};//C
  byte Char_6[8] = {B01010,B00100,B10011,B10101,B10101,B11001,B11001,B10001};//Й
  byte Char_7[8] = {B11111,B10000,B10000,B11110,B10001,B10001,B10001,B11110};//Б
  byte Char_8[8] = {B11110,B10001,B10001,B11110,B10000,B10000,B10000,B10000};//Р
  byte Char_9[8] = {B10001,B10001,B10001,B11111,B10001,B10001,B10001,B10001};//Н
  byte Char_10[8] = {0x11,0x11,0x11,0x1F,0x11,0x11,0x11,0x11};//Н
void setup() {
  lcd.createChar(1,Char_1);
  lcd.createChar(2,Char_2);
  lcd.createChar(3,Char_3);
  lcd.createChar(4,Char_4);
  lcd.createChar(5,Char_5);
  lcd.createChar(6,Char_6);
  lcd.createChar(7,Char_7);
  lcd.createChar(8,Char_8);
  lcd.createChar(9,Char_9);
  lcd.createChar(10,Char_10);
  lcd.init();
  lcd.home();
  lcd.backlight();
  lcd.write(1);
  lcd.write(2);
  lcd.write(3);
  lcd.write(4);
  lcd.write(5);
  lcd.write(3);
  lcd.write(10);
}
void loop() {

}
 

Вложения

PiratFox

★★★★★✩✩
13 Фев 2020
1,707
474
@ПЕРЧИК, в приведенном коде символы в дисплей почему-то пишутся до его инициализации, это первая ошибка. Ещё шину I2C нужно инициализировать функцией Wire.begin();, причём сделать это до lcd.init();. Опять же, память дисплея не резиновая, в неё можно записать не более 8-ми пользовательских символов одновременно, нумерация от 0 до 7.
 
Изменено:

dgleming

✩✩✩✩✩✩✩
30 Май 2023
1
0
Подскажите пожалуйста, никак не получается ничего вывести на дисплей 1602. Резистор сзади i2c крутил, был просто синий экран, после того как покрутил - появились квадратики на всей верхней строке, уже неплохо.
Пробивал адрес кодом из примеров - 0x27. Опять же кодом из примеров пробовал мигать дисплеем по адресу 0х27 - все прекрасно мигает. Но какой бы код и библиотеку не пробовал использовать - на экран ничего не выдает. Соединения везде хорошие. Ниже пример кода
C++:
#include <LCD_1602_RUS.h>

LCD_1602_RUS lcd(0x27, 16, 2);

void setup()
{
  Serial.begin(9600);
  Serial.println("status");
  Serial.println(lcd.status());
  Serial.println("avaliable");
  Serial.println(lcd.availableForWrite());
  lcd.init();                      // initialize the lcd
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(2, 0);
  lcd.print(L"Теперь можно");
  lcd.setCursor(3, 1);
  lcd.print(L"по-русски");

}

void loop()
{
}
UPD: status и avaliable в консоль выдают 0
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,707
474
@dgleming, нужна библиотека Wire. Без неё шина I2C не работает. Вы хоть предыдущие посты читайте. И да, я не уверен, что ваша библиотека LCD_1602_RUS будет работать по I2C, они разные бывают. Впрочем, нужно пробовать. Подробнее см. вот здесь и здесь.
 
Изменено:

ValeDeMare

✩✩✩✩✩✩✩
16 Ноя 2022
8
0
Добрый день, опыт работы с ардуино минимальный. Пытаюсь подключить дисплеи к ардино для вывода простой текстовой инфы Изначально взял дисплей 1602 с платкой под I2C, подключил по инструкции, библиотеку покинул, ни один пример из папки библиотеки не вывел на дисплей ничего, только загорается подсветка, причем даже если в скетче нет вообще никаких команд связанных с дисплеем. Взял OLED дисплей, посчитав, что 1602 попался бракованный. Подключил, любой скетч из папки библиотеки приводит к хаотичному набру пикселей на экране + несколько столбцов с левого края периодически меняют расположение пикселей. Пробовал 2 разных ардуинки (обе ардуино нано). Обе явно не кирпичные, так как адекватно считывают показания с датчиков и управляют нагрузкой. Пробовал и через макетку подклчать и напрямую проводами на распаянную гребенку, разницы никакой, от шевеления проводов до включения картина на OLED несколько меняется, но всё так набор пикселей временами с более-менее правильным узором...
Библиотека на OLED GyverOLED, запитывал OLED от пинов ардуинки, 1602 питал и от ардуинки и от лабораторника, дата/клок подключаю к А4,А5.
что может быть не правильно?
 

Vaqtincha

★✩✩✩✩✩✩
14 Ноя 2022
148
24
Uzbekistan, Fergana
Буквально вчера сталкивался с этой проблемой (дисплей у меня первый и нет опыта)
Но помог мне код

Код:
#include <Wire.h>

void setup() {
  Serial.begin (115200);

  // Leonardo: wait for serial port to connect
  while (!Serial) 
    {
    }

  Serial.println ();
  Serial.println ("I2C scanner. Scanning ...");
  byte count = 0;
  
  Wire.begin();
  for (byte i = 8; i < 120; i++)
  {
    Wire.beginTransmission (i);
    if (Wire.endTransmission () == 0)
      {
      Serial.print ("Found address: ");
      Serial.print (i, DEC);
      Serial.print (" (0x");
      Serial.print (i, HEX);
      Serial.println (")");
      count++;
      delay (1);  // maybe unneeded?
      } // end of good response
  } // end of for loop
  Serial.println ("Done.");
  Serial.print ("Found ");
  Serial.print (count, DEC);
  Serial.println (" device(s).");
}  // end of setup

void loop() {}
Должен показывать подключенных устройств и адрес.
 

poty

★★★★★★✩
19 Фев 2020
3,118
917
@ValeDeMare, без информации о том, как подключили, какой конкретно дисплей использовали с какой конкретно платой I2C ничего особенно полезного получить будет невозможно. Ответы выше стоит рассматривать серьёзно, в них проблем нет, просто источников проблем может быть гораздо больше.
 

ValeDeMare

✩✩✩✩✩✩✩
16 Ноя 2022
8
0
@VitalikV, премного благодарен, действительно было дело в контрасте, и с oLED тоже разобрался, по крайней мере один скетч заработал
 
Изменено: