Нужна помощь по LCD "LCM1602A-14 I2C"

Тема в разделе "Arduino & Shields", создана пользователем doberman985, 21 апр 2019.

  1. doberman985

    doberman985 Нерд

    Всем доброго времени суток. Прикупил в китае странные LCD 1602 IMG_20190420_085959.jpg IMG_20190420_090013.jpg проблема такая.
    1. Datasheet для него не нашёл. Запросил его у продавца.
    2. Datasheet есть, но какой-то кривой (англо китайский во вложениях).
    3. Прогнал его на скетче для определения адреса. (0x3E). IMG_20190421_081300.jpg
    4. Попытка отправить на него данные не увенчалась успехом. IMG_20190420_090319.jpg IMG_20190421_074200.jpg .
    5. После общения с продавцом по алгоритму работы данного устройства выяснилось что во время работы:
    - вывод CS не требует подключения
    - вывод PSB это переключение способа ввода вывода (если подать 1 на него то общение должно происходить по шине I2C, если 0 то по SPI)
    6. Продавец ещё отправил образец кода для работы с ним. (в описании в TXT)
    (Поковырявшись в образцах так и не въехал как правильно с ним работать).


    Код (C++):
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x3E,16,2);  // Устанавливаем дисплей
    void setup()
    {
      lcd.init();        
      lcd.backlight();// Включаем подсветку дисплея
      lcd.print("Arduino");
      lcd.setCursor(8, 1);
      lcd.print("LCD 1602");
    }
    void loop()
    {
      // Устанавливаем курсор на вторую строку и нулевой символ.
      lcd.setCursor(0, 1);
      // Выводим на экран количество секунд с момента запуска ардуины
      lcd.print(millis()/1000);
    }
     

    Вложения:

    Последнее редактирование: 21 апр 2019
  2. Un_ka

    Un_ka Гуру

    Попробуй адрес 0x3F . А в скетче , по-моему , надо сначала место курсора поставить , а потом что - либо выводить. Какую-нибудь библиотеку продавец предлагает или обычные сойдут?
     
  3. doberman985

    doberman985 Нерд

    0x3F не работает. В скетче курсор установлен.
    Код (C++):
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x3E,16,2);  // Устанавливаем дисплей
    void setup()
    {
      lcd.init();        
      lcd.backlight();// Включаем подсветку дисплея
      lcd.print("Arduino");
      lcd.setCursor(8, 1);
      lcd.print("LCD 1602");
    }
    void loop()
    {
      // Устанавливаем курсор на вторую строку и нулевой символ.
      lcd.setCursor(0, 1);
      // Выводим на экран количество секунд с момента запуска ардуины
      lcd.print(millis()/1000);
    }
    Насчёт библиотек с продавцом не общался.
     
  4. Un_ka

    Un_ka Гуру

    Пообщайся . У тебя в сетапе сначала принт а потом курсор.
     
  5. doberman985

    doberman985 Нерд

    Поменял тоже не работает. Но даже если и в сетапе стоит наоборот то в лупе всё корректно, должно было хотя бы счёт показать. Написал продавцу по библиотеке. Буду ждать.
     
    Последнее редактирование: 21 апр 2019
  6. Limoney

    Limoney Гик

    Делай как в Datasheet (англо китайский во вложениях). Библиотеки нет точно.
     
  7. doberman985

    doberman985 Нерд

    Увы но я учусь на примерах других людей. Сам же написать код пока не способен. Я так понимаю мне нужно работать с библиотекой Wire.h? Команды её изучил но как и с чего начать :( . Попробовал накидал что то в этом роде:
    Код (C++):
    #include <Wire.h>
    byte val = (0x01, 0x01, 0x32) ;
    void setup()
      {
      Wire.begin();        // подключиться к шине i2c (адрес для мастера не обязателен)
      }
    void loop()
    {
      Wire.beginTransmission(0x3E); // передача на устройство #62 (0x3E) адрес устройства задан в техническом описании
      Wire.write(val);            // отправить байт значения
      Wire.endTransmission();     // остановить передачу
    }
     
  8. parovoZZ

    parovoZZ Гуру

    лучше по учебнику. И не по абдуриновскому, а по-человеческому. Керниган и Рич, например.
     
  9. ИгорьК

    ИгорьК Гуру

    Как тебя побило то, сердечный! :) И начал язык не с того, и железа накупил поганого, все никак не израсходуешь :)
     
    Airbus нравится это.
  10. Airbus

    Airbus Радиохулиган Модератор

    Кидать не надо-если есть библиотека то есть и примеры кода.Адрес может быть "не тот" для этого есть сканер-поищи в гугле если не найдёшь я тебе свой скетч кину.а щас я устал с Ночного Энска пойду посплю чуток.Вот лови.
    Код (C++):
    // i2c_scanner
    //Скомпилено!
    //SDA-A4
    //SCL-A5 не иначе!
    #include <Wire.h>
    void setup()
    {
    Wire.begin();
    Serial.begin(9600);
    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
    }
     
     
  11. b707

    b707 Гуру

    сканер он уже запускал, у него адрес 3Е - см первое сообщение
     
  12. b707

    b707 Гуру

    doberman985 - учите для начала язык программирования, то что у вас написано в сообщении #7 - показывает что вы совсем ничего не знаете.
    Что вот например написано в этой строчке: ?
    Код (C++):
    byte val = (0x01, 0x01, 0x32) ;
    В общем, не пытайтесь пока писать свой код, пользуйтесь готовым примером из #3, похоже он работает.
    Поищите в гугле "квадраты на дисплее 1602" например
    https://19dx.ru/2018/08/pochemu-kvadraty-na-displee-1602/
     
  13. ZAZ-965

    ZAZ-965 Гуру

  14. doberman985

    doberman985 Нерд

    Да спасибо ZAZ-965 я уже сам в эту сторону начал копать и тоже наткнулся на эту библиотеку. Буду пробовать.
     
  15. doberman985

    doberman985 Нерд

    Всем спасибо особенно ZAZ-965 библиотека подошла всё заработало
    Код (C++):
    #include <Wire.h>
    #include <DFRobot_LCD.h>
    DFRobot_LCD lcd(16,2);
    void setup()
      {
        lcd.init();
        lcd.setCursor(1, 0);
        lcd.print("AMPERKA");
        lcd.setCursor(1, 1);
        lcd.print("lcd1602 module");
      }
    void loop()
    {
    }
    IMG_20190506_141658.jpg

    Тема закрыта
     
    ZAZ-965 нравится это.
  16. ZAZ-965

    ZAZ-965 Гуру

    У DFRobot Gravity подсветка на RGB светодиоде, на вашем экземпляре цвет подсветки меняется?
     
  17. fv1144

    fv1144 Нерд

    Что написано в этой строчке? byte в Arduino IDE где то определяется как неявный указатель? Я уже час рою директорию с arduino-nightly и пока не понимаю, чем это отличается от
    Код (C++):
    byte val = (0x32) ;
     
  18. parovoZZ

    parovoZZ Гуру

    тебе учебник пересказать? 1000 рублей в час.
     
  19. fv1144

    fv1144 Нерд

    Какой учебник? В C++ типа данных byte нет.
     
  20. parovoZZ

    parovoZZ Гуру

    Там много чего нет, что не мешает создать свое.
    В atmel studio жмакаешь контекстное меню и выбираешь "go to definitions" и переносишься в файл с определением. Как в вашем блокнотоIDE такое сделать - я вообще ХЗ. Ответ очевиден - для разбора библиотек выбранная IDE не подходит.