Необходима помощь с 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
@Jdev99, 👍1
Обсуждение2 ответа
Попробуйте заменить букву "А" на одинарные кавычки "а"
Провод.запись('A');
или
Провод.запись(0x41);
вы также можете попробовать добавить (байт)
перед шестнадцатеричным значением:
Провод.запись((байт)0x28);
Итак, после того, как я "вспомнил", что у меня есть осциллограф, я подключил его и заметил, что не получаю "подтверждения" от модуля.
Затем я поиграл с тактовой частотой и обнаружил, что получаю "подтверждение", если я установлю ее между 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); Провод.конечная передача();
}
'''
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- ЖК-дисплей I2C отображает странные символы
- Экран LCD 16*02 I2C показывает только первый напечатанный символ
- Sainsmart LCD 2004 - проблема с библиотекой LiquidCrytal_I2C, не удается скомпилировать
- Что означают цифры позади lcd (0x27)?
- ATtiny85 I2C ЖК
- Документы по использованию i2C LCD с библиотекой Newliquidcrystal_1.3.5
- 16/2 arduino I2C ЖК-дисплей не загорается?
Попробуйте опустить " Провод.запись(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