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

ТехнарьКто

★★★★★✩✩
13 Янв 2020
273
435
Вижу, что мысль о важности первоначальных проверок, просто пролетела у всех мимо ушей.

Коротко поясню.

Какие бывают Linux?

Бывают для аппаратной части процессоров
1) x86 операционные системы 32bit
2) x86 операционные системы 64bit
3) ARM операционные системы 32bit
4) ARM операционные системы 64bit.

Для x86 это всем привычные
1) настольные компьютеры
2) ноутбуки
Для процессоров ARM
3) смартфоны (телефоны)
4) планшеты
5) ноутбуки
6) всякие Raspberry.

Для телефонов соответственно IDE могут быть разные, например глюкавое ArduinoDroid.

IDE для Linux теоретически может быть любое для C, С++ но скетчи под это дело надо переделывать в нормальный код, это уже не ArduinoIDE для новичков.

Eclipse
Bluefish
NetBeans
Komodo IDE
Anjuta
MonoDevelop
CodeLite
Kdevelop
и еще много всякого. А вот что умудрился использовать вопрошающий, загадка.

Может быть использовано и ArduinoIDE но работать будет не на всех Linux.

Для ArduinoIDE разных версий, совместимость скетчей отсутствует, почему так происходит придумайте сами.
Например на совершенно рабочий скетч ArduinoIDE стала выдавать ошибку компиляции "'prog_char' does not name a type", оказывается просто изменили 'prog_char' и теперь надо просто 'char'. А формально оба скетча рабочие, просто прошиваться будут только на разных версиях ArduinoIDE. И это относиться не просто к скетчам, а и к библиотекам. Взяли скрестили новую версию библиотеки со старым ArduinoIDE или наоборот старую библиотеку с новой версией ArduinoIDE и работать скетч уже не будет. Поэтому. Установили в какой-то операционной системе какую то IDE. Написали по какому то примеру какой то скетч, а не работает. То ли с железом проблема. То ли программы сорятся. То ли ошибок в скетче понаделали. Если скетч старый и рабочий, а у Вас стоит ArduinoIDE с новыми правилами написания скетчей, все равно формально скетч рабочий - просто факт.
И какая ситуация конкретно у спрашивающего, форуму не ведомо. Для начинающих. Установили в чем-то какой-то IDE. Запускаете из примеров Blink. Меняете частоту вспышек. Убеждаетесь, что эти изменения вызваны Вашими действиями. Это Важный шаг. Не надо этот шаг пропускать, типа и так все понятно и просто. Если лампочки на ардуинке мигают то это говорит о том, что какой то процесс идет. Но не говорит о том, что все правильно сделано. При этом может и не работать. Шаг следующий. Устанавливаете или используете установленную библиотеку. Запускаете примеры из этой библиотеки. Разбираетесь почему не работает. И только после того, как убедитесь, что Ваше устройство (в данном случае дисплей) работает на примерах из библиотеки, начинаете с этим делать что то свое. И не раньше. А вопросы не работает стандартное, совсем другая тема.
Если хотите адекватный ответ, пишите операционную систему полностью. Версию IDE полностью. Версию использованной библиотеки полностью. Работала ли первоначальная проверка вспышкой и стандартные примеры на используемой библиотеке.

PS Когда захотел помочь. Получилось как обычно. Думаешь одно, а все совсем иначе. А вопрошающий считает, что вокруг одни экстрасенсы и всю дополнительную информацию про него обязаны знать.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@ТехнарьКто, понял о чем говорите, но при проблемах совместимости обычно даже компиляция не проходит, а здесь все успешно компилируется и загружается.
Что касается "проверки на примере из библиотеки", так это он и есть, за исключением выводимого текста и дополнительного мигания.

прямоугольники могут появиться только в 3 случаях:
1. на дисплей не приходят данные
2. контрастность на максимуме
3. контроллер запрограммирован на их вывод

3 - в коде этого нет
2 - уже проверено
остается только 1 вариант
 
  • Лойс +1
Реакции: SarmatK

ТехнарьКто

★★★★★✩✩
13 Янв 2020
273
435
@ТехнарьКто, понял о чем говорите, но при проблемах совместимости обычно даже компиляция не проходит, а здесь все успешно компилируется и загружается.
С чего Вы так решили?

Что касается "проверки на примере из библиотеки", так это он и есть, за исключением выводимого текста и дополнительного мигания.
Если мигает светодиод, не значит, что прошивается. И даже если вдруг прошивается, откуда у Вас уверенность, что ArduinoIDE совместима с библиотекой, а скетч использует синтаксис требуемый для версии IDE топикстартера?

прямоугольники могут появиться только в 3 случаях:
1. на дисплей не приходят данные
2. контрастность на максимуме
3. контроллер запрограммирован на их вывод

3 - в коде этого нет
2 - уже проверено
остается только 1 вариант
Не хочу показаться грубым, но прямоугольники в простейшем случае просто признак успешного внутреннего теста дисплея. Подключите только питание на LCD1602 I2C и полюбуйтесь прямоугольниками. По Вашему будет вариант1. А уж из за чего появился этот вариант, мне не ведомо. Провода включены не туда, версия IDE не та, версия библиотеки не та. Синтаксис скетча не под то. Полный ХЗ.

Скетч прекрасно работает на том, что я приводил выше, но это только для окошек (windows). Дал заведомо работающую сборку но мне гордо заявили про Linux. Мне это заявление про Linux говорит только о том, что человек понятия не имеет, что Linuх-ов очень много и они сильно разные.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
Избыточное цитирование
@ТехнарьКто, автор пишет о мигающей подсветки дисплея, которая есть в коде, т.е. отсюда вывод что все успешно компилируется и прошивается и версии/компиляторы совместимы.
Не хочу показаться грубым, но прямоугольники в простейшем случае просто признак успешного внутреннего теста дисплея. Подключите только питание на LCD1602 I2C и полюбуйтесь прямоугольниками. По Вашему будет вариант1. А уж из за чего появился этот вариант, мне не ведомо. Провода включены не туда, версия IDE не та, версия библиотеки не та. Синтаксис скетча не под то. Полный ХЗ.
Прямоугольники говорят о запуске контроллера дисплея и готовности принимать данные с контроллера, соответственно раз запрограммированные строки не появляются - данные на дисплей не приходят, т.е. вариант 1.
Провода подключены куда надо, т.к., повторюсь, подсветка дисплея мигает.
Ошибки синтаксиса компилятор бы не пропустил.

Исходя из вышесказанного склоняюсь к версии о плохой пайке/неотмытом флюсе между платой дисплея и модулем i2c
 

ТехнарьКто

★★★★★✩✩
13 Янв 2020
273
435
автор пишет о мигающей подсветки дисплея, которая есть в коде, т.е.
Откуда уверенность про подсветку? Возможно оно мигает из за пропадающего контакта в куче лишних соединений, когда автор шевелит все подряд в надежде, а вдруг заработает.

Вот работа скетча автора без каких либо изменений в момент включения подсветки..
1.jpg

Вот так у него должно выглядеть, если бы было то, что Вы предполагаете. Два ряда прямоугольников.
2.jpg
 
Изменено:

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@ТехнарьКто, в корне не верно, если данные не приходят - будет 1 строка с прямоугольниками, а 2 строки с прямоугольниками будут только если данные приходят и контрастность на максимуме(2 вариант который отпал, когда автор проверил мультиметром и я заметил вывод 2 строк, а не 1 как в базовом примере).
Так что, повторюсь, здесь 1 вариант - данные на дисплей не приходят.
 

ТехнарьКто

★★★★★✩✩
13 Янв 2020
273
435
автор пишет о мигающей подсветки дисплея, которая есть в коде, т.е. отсюда вывод что все успешно компилируется и прошивается и версии/компиляторы совместимы.
О да, конечно. Вот этот кусок кода

lcd.backlight();
Flash(500);
lcd.noBacklight();
Flash(500);


Так что, повторюсь, здесь 1 вариант - данные на дисплей не приходят.
Другими словами Вы считаете, что управление подсветкой на дисплей по интерфейсу I2C приходит в виде каких то других данных и по какому то другому интерфейсу I2C ? 😂
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
О да, конечно. Вот этот кусок кода

lcd.backlight();
Flash(500);
lcd.noBacklight();
Flash(500);
правильно! именно этот кусок кода и отвечает за мигание подсветки.

Другими словами Вы считаете, что управление подсветкой на дисплей по интерфейсу I2C приходит в виде каких то других данных и по какому то другому интерфейсу I2C ? 😂
Прочитайте внимательнее.
Я говорил про данные, передаваемые МЕЖДУ модулем i2c и дисплеем, а не между ардуиной и i2c модулем.
Сам i2c модуль подключается к дисплею через параллельный интерфейс, вот в нем и может заключаться проблема.

для наглядности:
ардуино ----------------> I2C Module -------Error------>Display

@SarmatK, предположу еще точнее, на фото у контакта D0 нету отблеска припоя снизу, похоже именно он и не припаялся
1626654044363.png
 
Изменено:
  • Лойс +1
Реакции: ТехнарьКто

ТехнарьКто

★★★★★✩✩
13 Янв 2020
273
435
предположу еще точнее, на фото у контакта D0 нету отблеска припоя снизу, похоже именно он и не припаялся
:)

@SarmatK,

Пропаивай контакт D0. IamNikolay по фото определил причину, как бы смешно на техническом форуме это не звучало.

Закрываем тему.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@ТехнарьКто, для 100 % уверенности необходимо прозвонить контакт, как я автору и предлагал ранее. А так, визуально - проблема именно там.

Пропаивай контакт D0. IamNikolay по фото определил причину, как бы смешно на техническом форуме это не звучало.
Чтобы смешно не звучало - нужно уточнить что фото неработающей платы, а не ✋:)
 

SarmatK

✩✩✩✩✩✩✩
13 Июл 2021
14
2
Вот это очень зря. Дисплей у тебя подключен к +5 ардуины, а он идет напрямую и поэтому он мог вполне не выдержать такого издевательства.
Не, от 5 до 15V я подавал на Vin.

1. Вы почему-то считаете, что мы тут экстрасенсы?
2. Сначала прошиваете стандартный блинк "Blink" из примеров. Если светодиод мигает. Это подтвердит, что Вы смогли правильно настроить порт и научились прошивать простейшие скетчи.
3. Затем прошиваете "Здравствуй мир" в примерах это "Hello World". Вот когда это у Вас получиться, тогда и поговорим.
4. Пусть научиться запускать стандартные примеры из стандартных библиотек, а не любит мозг сообществу самодельными скетчами.
1. А какая разница, на на какой ОСи я работаю? На сайте arduino.cc английским по белому написано, что продукт - кроссплатформенный. Я им верю пока. :)
2. Blink у меня заработал за день до того, как я перешел к примеру "Здравствуй мир".
3 и 4: "Здравствуй мир" не самодельный, он взят из примеров. Его модификации я делал только для того, чтобы проверить доходят ли команды до дисплея.
Вижу я Вас чем-то задел, приношу свои извинения; даже в мыслях этого не имел!

1. А вот что умудрился использовать вопрошающий, загадка.
2. Для начинающих. Установили в чем-то какой-то IDE. Запускаете из примеров Blink. Меняете частоту вспышек. Убеждаетесь, что эти изменения вызваны Вашими действиями.
1. Я понял из Ваших слов, что продукт этот не такой уж кроссплатформенный. Что ж, если это так важно, я буду указывать все версии. Вы главное не кипятитесь - опыт же дело наживное... :)
2. Если посмотреть на скетч, то можно увидеть, что за полцикла свечения подсветки должен проходить полный цикл свечения (0/1) светодиодов - так и есть на практике.

Если мигает светодиод, не значит, что прошивается.
Откуда уверенность про подсветку? Возможно оно мигает из за пропадающего контакта в куче лишних соединений, когда автор шевелит все подряд в надежде, а вдруг заработает.
Блинк я заставлял передавать "Hello world!" азбукой Морзе, так что - прошивается, прошивается... :)

@SarmatK, Пропаивай контакт D0. IamNikolay по фото определил причину, как бы смешно на техническом форуме это не звучало.
Контакт там нормальный, просто на фото этого не видно. Чтобы не допускать чудес, прозвонил и пропаял - результат тот же. :(

Я тоже решил попробовать параллельным интерфейсом работать (как тут выше советовали), но пока другого дисплея не имею.

Всем большое спасибо за участие в решении! :)

__________________________________________________
++: Версии ПО (упросил товарища поставить на своей выни Arduino IDE):
Arduino IDE v2:1.0.5+dfsg2-4 / Ubuntu 16.04 LTS
Arduino IDE 1.8.15 / Windows 8.1 PRO (Build 9600)

Результат из под винды тот же самый. :(

Либа взята отсюда - https://gitlab.com/tandembyte/LCD_I2C
 
Изменено:

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
Контакт там нормальный, просто на фото этого не видно. Чтобы не допускать чудес, прозвонил и пропаял - результат тот же. :(
а остальные контакты?
D0 отличался визуально, но это не значит что с остальными все хорошо.
проблема явно в параллельном интерфейсе там и флюс(возможно токопроводящий) не отмыт + неизвестно что там между платами, с таким количеством флюса припой мог затечь и замкнуть контакты.
 

ТехнарьКто

★★★★★✩✩
13 Янв 2020
273
435
Результат из под винды тот же самый. :(
Вы меня неправильно поняли. Или я Вам плохо пояснил.
1) Сборку которую я Вам предложил надо просто распаковать на компьютере с виндовс. Установки не требует. Библиотеки содержит. Если при заливке скетча используя эту сборку у Вас появяться надписи на дисплее, значит искать ошибку надо в программном обеспечении. Если надписи не появяться, а будет как было, значит ошибку надо искать в аппаратуре. Аппаратную ошибку Вы тут и без меня активно обсуждаете. Мое предложение просто помогло бы Вам быстро определить, в чем причина.
2) Кросплатформеность не подразумевает полную и безоговорочную совместимость разных версий Arduino IDE c любыми библиотеками, поскольку правила написания скетча изменялись со временем .
3) Работа на линукс ранее подразумевала высокие знания. Теперь увы, даже писать на какой платформе работает линукс стало не модно. А работа на стационарном компе x86 или raspberry pi ARM подразумевает разные архитектуры и разный набор глюков, что многократно затрудняет возможность помочь.

Успехов.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@ТехнарьКто, можно сделать гораздо проще: если все еще полагаете что проблема в софте - скиньте скомпилированную прошивку, она либо зальется либо нет - будет сразу видно
 
  • Лойс +1
Реакции: Wan-Derer

sampkube

✩✩✩✩✩✩✩
21 Июл 2021
14
1
Есть у меня lcd дисплей, спаял его, и он может выключаться и включаться(система видит его. он на пути 0x27). Но текст не показывает. В чем может быть проблема?
 

ТехнарьКто

★★★★★✩✩
13 Янв 2020
273
435
Чтобы понять, какой всё-таки адрес у модуля, подключаемого к плате Ардуино, нужно просто «постучаться» по каждому из возможных адресов. Если кто-то ответит, значит адрес рабочий!
C++:
#include <Wire.h>
 
void setup(){
    Wire.begin();
 
    Serial.begin(9600);
    while (!Serial);
    Serial.println("\nI2C Scanner");
}

void loop(){
    byte error, address;
    int nDevices;
 
    Serial.println("Scanning...");
 
    nDevices = 0;
    for(address = 8; address < 127; address++ ){
        Wire.beginTransmission(address);
        error = Wire.endTransmission();
 
        if (error == 0){
            Serial.print("I2C device found at address 0x");
            if (address<16)
                Serial.print("0");
            Serial.print(address,HEX);
            Serial.println(" !");
 
            nDevices++;
        }
        else if (error==4) {
            Serial.print("Unknow error at address 0x");
            if (address<16)
                Serial.print("0");
            Serial.println(address,HEX);
        }
    }
    if (nDevices == 0)
        Serial.println("No I2C devices found\n");
    else
        Serial.println("done\n");
 
    delay(5000);
}
Загружаем программу на Ардуино, подключаем тестируемое устройство к I2C шине и открываем монитор последовательного порта. Если все подключено правильно, то появится примерно такой отчет:
111.jpg
Это значит, что мой дисплей имеет адрес 0x3Eв шестнадцатеричной системе счисления. Скетч скомпилирован для адреса
0x27. Если у Вас другой адрес, то надо менять адрес в скетче на правильный, чтобы все заработало.
 

SarmatK

✩✩✩✩✩✩✩
13 Июл 2021
14
2
Чтобы понять, какой всё-таки адрес у модуля, подключаемого к плате Ардуино, нужно просто «постучаться» по каждому из возможных адресов. ...
Это я делал - на неверном адресе подсветка не мигала.
Насколько я понял, IamNikolay имел ввиду загрузить не скетч, а именно прошивку, чтобы загрузить её в ардуинку и увидеть где проблема - в программе, или в железке.
 

sampkube

✩✩✩✩✩✩✩
21 Июл 2021
14
1
Нужен дисплей для работы. Есть код(ниже), и в нем работает только мигание дисплея. Текст не показывает.

ARDUINO:
#include <LiquidCrystal_I2C.h>  // подключаем библу
#include <Wire.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);  // адрес, столбцов, строк
void setup()
{
  lcd.init(); 
  lcd.setCursor(1, 0);  // столбец 1 строка 0
  lcd.print("Hello, world!");
  lcd.setCursor(4, 1);  // столбец 4 строка 1
  lcd.print("GyverKIT");   
} 

void loop()
{
    lcd.backlight();
  delay(500);
  lcd.noBacklight();
  delay(500);
}
 

SarmatK

✩✩✩✩✩✩✩
13 Июл 2021
14
2
Спасибо!
Оказалось, что плата интерфейса неисправна - 12-я нога PCF7584 (P7) не соединена со входом D7 дисплея. Напаял проводок сверху и все заработало. Но - ненадолго.:mad: Плата эта постоянно глючит, плюс провода для брэдборды плохо контачат - чуть повернешь что-нибудь, возьмешь в руки или положишь обратно на стол, как тут же все перестает включаться/работать.
Напоминает попытку сделать что-либо из говна и палок. Наверное нужно покупать комплектующие у других продаванов. Знать бы еще у кого... :(

++: А нет ли у кого схемы этого адаптера I2C->LCD, чтобы легче было с ним разбираться?
 
Изменено:

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@SarmatK, как и предполагал ранее...
по поводу проводов - подключите напрямую без макетки
1627649792037.png
 

SarmatK

✩✩✩✩✩✩✩
13 Июл 2021
14
2
@SarmatK, как и предполагал ранее...
Да, Вы всё верно вычислили! :) Спасибо большое!

Нашел еще один косяк в плате адаптера, теперь всё работает нормально. :)

Всех благодарю за поддержку! (y)

___________________________________
P.S. Всё же, не откажусь от схемы адаптера. Если есть у кого - поделитесь, плиз.
 
Изменено:

ТехнарьКто

★★★★★✩✩
13 Янв 2020
273
435
Всё же, не откажусь от схемы адаптера.
Схем много. Выбирай, какая будет понятнее. По сути, схемы одинаковые.
sxem.jpg
sxem-big.jpg
Бывает, что на резисторах подтяжки от VCC к A0, A1, A2 китайцы экономят, не ставят. Номиналы резисторов от VCC к SCL, SDA на китайских платах могут отличаться от схемы в широких пределах. Стоять могут резисторы от единиц до десятков кОм. Адресное пространство состоит из двух частей, фиксированной и изменяемой. Изменяемая часть последние три знака в двоичной системе A0, A1, A2 устанавливаются пользователем. Первые цифры адреса в двоичном коде можно посмотреть в datasheet-е на PCF8574. В зависимости от буквы, первая часть адреса определена в микросхеме.
adres.jpg
Для PCF8574 если A2, A1, A0 в "1" то адрес будет 0100111 это 0x27
Для PCF8574A если A2, A1, A0 в "1" то адрес будет 0111111 это 0x3F

PS Чем мог, помог.
 
  • Лойс +1
Реакции: SarmatK