Необходима помощь с I2C LCD + Arduino - DS-LCDD5

Я новичок на этом форуме и относительно новичок в Arduino (с точки зрения программного обеспечения) Я создал много проектов, но всегда просто копирую/вставляю/изменяю пример кода.

Я нашел пару таких модулей (дочерняя плата PIC18 на задней панели обычного ЖК-дисплея 16x2). В техническом паспорте указано, что им можно управлять с помощью I2C, но мой уровень квалификации слишком низок, чтобы понять, как это сделать. Может кто-нибудь, пожалуйста, дать мне совет, как действовать дальше?

Скетч "Сканер I2C" идентифицирует его по адресу 0x14 , но обычные библиотеки I2C-LCD не работают с ним. Я использую его с Arduino UNO, SDA(A4), SCL(A5), резисторами 1k8 на каждом. Модуль работает на 100% с последовательным методом 1 провода в соответствии с руководством.

Вот как, я думаю, это должно работать, но это ничего не дает:


// Включить библиотеку проводов Arduino для I2C
#include <Wire.h>
 
// Define Slave I2C Address
#define SLAVE_ADDR 0x14   // 7-битный адрес = 0010100D, 0x14 шестнадцатеричный



void setup () {
  
 Wire.begin();                           // Инициализировать связь I2C в качестве ведущего


  // Write something to the Slave
 Wire.beginTransmission(0x14);           //  0x14  (SLAVE_ADDR)  0010100
  Wire.write(0x28);                       //  00101000
  Wire.write(0x00);                      //  Register address  "0"
  Wire.write("A");                       //  некоторый текст
  Wire.endTransmission();

 }

void loop () {
 
}

Ссылка на руководство: http://www.i-lcd.com/PDFs/Drivers/Technical%20data%20on%20DS-LCDD5%20Interface%20Module%20(ИДЕНТИФИКАТОРЫ).pdf

, 👍1

Обсуждение

Попробуйте опустить " Провод.запись(0x28);`., @Gerben

Если провода не длинные, перейдите к чему-то в диапазоне от 3,3 до 4,7 К. На мой взгляд, есть проблема с библиотеками I2C, они не все совместимы. Я нашел один, который работает, и положил его в папку со своим скетчем. С тех пор у меня больше не было проблем с I2C-ЖК-дисплеем., @Gil

Технический паспорт или прошивка неверны. Смотрите это для решения: <https://forum.arduino.cc/t/need-help-with-i2c-code-for-a-16x2-lcd-ds-lcdd5/918289/28?u=jdev99> Спасибо вам за все советы. Джо, @Jdev99


2 ответа


0

Попробуйте заменить букву "А" на одинарные кавычки "а" Провод.запись('A'); или Провод.запись(0x41);

вы также можете попробовать добавить (байт) перед шестнадцатеричным значением: Провод.запись((байт)0x28);

,

2

Итак, после того, как я "вспомнил", что у меня есть осциллограф, я подключил его и заметил, что не получаю "подтверждения" от модуля.

Затем я поиграл с тактовой частотой и обнаружил, что получаю "подтверждение", если я установлю ее между 16000 кГц и 18000 кГц с помощью команды "Wire.setClock". :размышления:

Затем по простому совпадению я обнаружил, что текст должен попасть в R1, а НЕ в R0, а команды управления-в R2, а НЕ в R1. :гримаса: Но я не смог заставить работать ни одну из команд RGB. Я попробовал это на всех 6 модулях, которые у меня есть, те же результаты. Я просто буду придерживаться последовательной связи, когда мне понадобится использовать что-либо из этого.

Таким образом, либо данные неверны, либо прошивка в модуле неисправна. По крайней мере, я многое узнал о работе I2C в процессе, что и было моей целью.

https://forum.arduino.cc/t/need-help-with-i2c-code-for-a-16x2-lcd-ds-lcdd5/918289/28?u=jdev99

Спасибо вам за все советы. Джо

Рабочий код:

'''

// Включить библиотеку проводов Arduino для I2C #включить <Провод.h><Провод.h>

// Определите Ведомый адрес I2C #определить SLAVE_ADDR 0x14 // 7-битный адрес = 0010100D, 0x14h

void setup() {

Wire.begin(); // Инициализировать связь I2C в качестве ведущего провода.setClock(16000); // работает только 16000-18000

//Очистить провод дисплея.Начать передачу(0x14); Провод.запись(0x02); Провод.запись(0x01); Провод.конечная передача();

}

пустой цикл () {

//Начать печать в строке 1, провод pos1.Начать передачу(0x14); Провод.запись(0x02); Провод.запись(128); Провод.конечная передача();

// Напишите что-нибудь на подчиненный провод.beginTransmission(0x14); // 0x14 (SLAVE_ADDR) 0010100 Провод.запись(0x01); // Адрес регистрации "0" Wire.write("ABCDEFGHIJKLMNOP"); // некоторая текстовая передача Wire.endTransmission();

delay(3000);

//Очистить провод дисплея.Начать передачу(0x14); Провод.запись(0x02); Провод.запись(0x01); Провод.конечная передача();

//Начать печать на проводе line2, pos1 .Начать передачу(0x14); Провод.запись(0x02); Провод.запись(192); Провод.конечная передача();

// Напишите что-нибудь на подчиненный провод.beginTransmission(0x14);
Провод.запись(0x01);
Телеграфируйте.пишите("1234567890-=+*/@");
Провод.конечная передача();

delay(3000);

//Очистить провод дисплея.Начать передачу(0x14); Провод.запись(0x02); Провод.запись(0x01); Провод.конечная передача();

}

'''

,