LCD I2C arduino не могу подключить

taras_lebedyk
Offline
Зарегистрирован: 22.03.2016
Добрый день. Пришел набор из Китая, пытаюсь подключить экран, и ничего не получается, пробовал различные библиотеки, различные адреса ничего не помогает, хотел таким сканером
// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    [url]http://www.gammon.com.au/forum/?id=10896[/url]
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
 
#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the 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);           // wait 5 seconds for next scan
}

попробовать опредилить адрес заливаю его а мне только показывает Scanning... и дальше ничего. Что подскажете сделать?

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

а почему дисплей подключен сразу к 3,3 В и к 5 В?

taras_lebedyk
Offline
Зарегистрирован: 22.03.2016

там просто плохо видно он подключен к 5 и к земле

dhog1
Offline
Зарегистрирован: 01.03.2016

Все вы правильно делаете. Ищите контакт со стороны UNO, попробуйте разъемы SCL и SDA на UNO рядом с кварцем.

Можете рассмотреть чип на переходнике. Маркировка PCF8574T даст I2C адрес по умолчанию 0x27, PCF8574AT - адрес 0x3F.

taras_lebedyk
Offline
Зарегистрирован: 22.03.2016

Я это все уже пробовал к сожалению ничего не помогло, а маркировка ida8574p n2k0h5

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

сканер I2C какой адрес выдает?

taras_lebedyk
Offline
Зарегистрирован: 22.03.2016

в том и дело что сканер ничего не выдает пишет что началось сканирование и все ничего более не происходит

dhog1
Offline
Зарегистрирован: 01.03.2016

Код сканера корректно обрабатывает ситуации, когда вообще никакое устройство не подключено к I2C.  Был неправ, дело не в контакте. Что-то у вас с программной средой.

Маркировкой чипа адаптера сильно озадачили. Но дело все равно не в этом.

taras_lebedyk
Offline
Зарегистрирован: 22.03.2016

и что посоветуете сделать? уже куча всего перепробовал

ВН
Offline
Зарегистрирован: 25.02.2016

 прописать ноги Ардуины как входы, дальше сделать пустой бесконеный цикл и посмотреть тестером наряжение на ногах, т.е. проверка на наличие подтягивающих резисторов к  +5В 

dhog1
Offline
Зарегистрирован: 01.03.2016

Ну подсказал же уже. Железо тут вообще ни при чем, этот код работает на пустой плате. Далек от среды ардуино, но специально запустил приведенный вами код на такой же плате, что и на фотографии. Библиотека Wire работает хорошо и не зависает, мне не удалось найти в ее коде возможные причины зависания при неподключенном устройстве.

Если правильно вас понял, вы видите в окне терминала слово Scanning... и на этом все заканчивается. Но чудес не бывает (только если очень редко). Из цикла for вы не выходите, зависнуть там можно только при входе в Wire (ну или в twi.h, которая под ней), никто из них не зависает (у меня, специально мучил).

Какой вывод? Разбирайтесь со средой, с ее установками или что там. Вообще что-нибудь, не требующее перефирии, запускается?

И вам спасибо. Благодаря вам посмотрел библиотеки, twi.h забавно написана, хорошо.

taras_lebedyk
Offline
Зарегистрирован: 22.03.2016

ну я пробовал различные элементы подключать все делает норм а вот с экраном проблемы

Barmalei75
Offline
Зарегистрирован: 20.02.2016

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

У меня тоже экран не сразу завелся, кстати. Решилось заменой библиотеки LiquidCrystal_I2C.

 

 

keefa
Offline
Зарегистрирован: 19.06.2015

Попробуй поменять между собой провода на 4 и 5 ноги между собой. Китайцы иногда путают их на  I2c преобразователях.

wcat
Offline
Зарегистрирован: 18.12.2015

Hi Taras!

Проверь контакты и подтягивающие резисторы на TWI-шине.

Либо какой-то баг с переменными среды - Arduino IDE

У меня этот же код выдает

===

Scanning...
I2C device found at address 0x27  !
done

====

Только что попробовал залить в аналогичную конструкцию.

Плата Arduino Pri Mini

Плата PCF8574 - LCD куплена отдельно и прицеплена на разъеме к 1602L REV.A

BTW, на этом модуле LCD подсветка (контакты 15 и 16) перенесены на другую сторону разъема

2 All:

Завелось все сразу с библиотекой <LiquidCrystal_I2C.h>

Вот только в версии 1.хх библиотеки конструкция

float var;

...

var = GetValue();

lcd.print("value=");

lcd.print(val);

...

работает некорректно - печатает перед десятичной точкой только старшее десятичное значение val...

Решилось сменой версии библиотеки на 2.х, так что детально разбираться не полез :-)

Yours sincerely, Dmitry aka wcat

wcat
Offline
Зарегистрирован: 18.12.2015

...и перевернуть ноги sda scl на TWI

;-)

Yours sincerely, Dmitry aka wcat

keefa
Offline
Зарегистрирован: 19.06.2015

wcat пишет:

...и перевернуть ноги sda scl на TWI

;-)

Yours sincerely, Dmitry aka wcat

Не, где нить в одном месте ;)

taras_lebedyk
Offline
Зарегистрирован: 22.03.2016

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

wcat
Offline
Зарегистрирован: 18.12.2015

Hi Taras!

Нафига отпаивать?

Вариантов - масса!

У тебя не откликается сам интерфейс TWI (точнеее - висящий на нем чип pcf8574).Для порядка прозвони тестером соединения камня на плате UNO c интерфейсом - 28 нога ATMega с 14 ногой pcf8574 и 27 нога ATMega с 15 pcf8574.

На платке с PCF8574 проверь - есть ли перемычка на pull-up резисторы и есть ли они вообще :-)

Все отключи и измерь тестером сопротивление между ногами 16-15 и 16-14 pcf8574 - должно быть в районе 4.7к.

Потом подключи к плате UNO и проверь не изменилось ли сопротивление :-)

Задача - добиться указанного мной выше отклика твоей микропрограммы

===

Scanning...
I2C device found at address 0x27  !
done

===

(все действия - глядя на опубликованные тобой фотки)

при подключении платы. А дальше уже подключай остальные библиотеки :-)

 

Yours sincerely, Dmitry aka wcat

taras_lebedyk
Offline
Зарегистрирован: 22.03.2016

а в чем прикол что сканер ничего не видит и просто пишет Scanning... и все

wcat
Offline
Зарегистрирован: 18.12.2015

Hi Taras!

Прикол в том, что "Радиотехника - наука о контактах" :-)

taras_lebedyk
Offline
Зарегистрирован: 22.03.2016

да но когда отключаю контакт SDA или SCL пишет No I2C devices found

wcat
Offline
Зарегистрирован: 18.12.2015

Hi Taras!

Тестером звонил?

И еще... Я обратил внимание, что у тебя не классическая плата UNO...

На классике стоит ATMega в DIP-е...

BTW,

Scanning...

она пишет только один раз, или лепит строку за строкой?

Yours sincerely, Dmitry aka wcat

taras_lebedyk
Offline
Зарегистрирован: 22.03.2016

тестера нету)

только один раз)

taras_lebedyk
Offline
Зарегистрирован: 22.03.2016

да и ищо на етой плате вместо микросхеми ATmega16U2 стоит ch340g

wcat
Offline
Зарегистрирован: 18.12.2015

Hi Taras!

Без тестера совсем грустно...

Таки-светодиод с резистором в 1к  и две батарейки на 1.5 в (АА, ААА) последовательно :-)

О сопротивлении судишь по яркости свечения светодиода - попробуй на КЗ и через резистор 4.7к на платке PCF8574.

Больше 3 вольт подавать на ножки стремно...

"Только один раз" - значит, ждет в подпрограмме готовности TWI шины и умирает в ней...

Yours sincerely, Dmitry aka wcat

wcat
Offline
Зарегистрирован: 18.12.2015

Hi Taras!At

Только не путай член с трамвайной ручкой - ch340g адаптер USB-UART, а ATMega на твоей плате в серединке стоит! :-D

Такой паучок в 32 MLF корпусе :-)

Yours sincerely, Dmitry aka wcat

Barmalei75
Offline
Зарегистрирован: 20.02.2016

Тарас, это не имеет значения, какая атмега, должно работать, в сериал же выводит информацию, значит драйвера на ch340 встали.

Кстати, можно просто к выводам подпаять провода напрямую, не отпаивая I2C, попробуйте. Схем подключения полно. Исключите сперва версию с неработоспособностью LCD, а затем копайте в сторону I2C

Кстати, модуль сами паяли или купили с пайкой?

---

Да, забыл совсем. Я когда свой паял, обнаружил недостаток - язычки крепления кожуха экрана могут закорачивать I2C. Я прокладку клеил из изоленты между платами.

 

taras_lebedyk
Offline
Зарегистрирован: 22.03.2016

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

Barmalei75
Offline
Зарегистрирован: 20.02.2016

Не забывайте, что после подключения обычным способом (без i2c) надо и библиотеку другую использовать - LiquidCrystal, можно из комплекта ардуино.

Кстати, вот о чем я говорил про плату i2c. Изоляцию прокладывал перед пайкой и поднимал модуль на пару мм.

wcat
Offline
Зарегистрирован: 18.12.2015

Hi Taras!

Если модуль PCF остался припаянным - может быть конфликт по шине. По доке от Philips на выходах pcf8574 при включеннии все уровни высокие, т.е. если выход OD - отключен. Но она КМОПистая, и может быть звон по входам...

Посади SDA и SCL об землю...

Хотя - ША! Если pcf звенит по входам SDA/SCL - значит на шине TWI нет подтягивающих резисторов...

Иными словами, если ты посадишь входы об землю, и квадратики перестанут бегать - ищи на платке с pcf8574 подтягивающие к питанию резисторы... Их либо нет, либо они отключены... У меня на схеме к этой платке пунктиром нарисована перемычка, включающая эти резисторы :-)

Yours sincerely, Dmitry aka wcat

 

Toto_G
Offline
Зарегистрирован: 20.11.2015

На первой фото яркость-контрасность не настроена. Всмысле яркость цифр и яркость подсветки. Надо покрутить больше-меньше.

И когда "квадратики мелькают", - это тоже что-то выводится, но из-за ненастроенной яркости ничего не видно

taras_lebedyk
Offline
Зарегистрирован: 22.03.2016

пробовал крутить ничего не меняется кроме яркости

bwn
Offline
Зарегистрирован: 25.08.2014

taras_lebedyk пишет:

Я это все уже пробовал к сожалению ничего не помогло, а маркировка ida8574p n2k0h5

Недавно тема была, что на подобный адаптер запаяли 8574, но совсем не преобразователь I2C. Может и здесь эта же собака порылась? Правда по  "ida8574p" гугла ничего говорить не хочет.
Попробуйте просмотреть-прозвонить линии SDA-SCL, проверить резисторы, если все нормально и коротышей нет (проц. зависает при коротком на I2C), ищите подобный модуль или микросхему и пробуйте с ними.

P/S Потратьте 300руб на чинатестер, без него совсем никак((((