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

Геннадий П

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

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

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

Sana956

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

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

★★★★★★✩
23 Сен 2019
2,281
945
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,724
481
@ПЕРЧИК, в приведенном коде символы в дисплей почему-то пишутся до его инициализации, это первая ошибка. Ещё шину 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,724
481
@dgleming, нужна библиотека Wire. Без неё шина I2C не работает. Вы хоть предыдущие посты читайте. И да, я не уверен, что ваша библиотека LCD_1602_RUS будет работать по I2C, они разные бывают. Впрочем, нужно пробовать. Подробнее см. вот здесь и здесь.
 
Изменено: