LCD I2C партизанит
- Войдите на сайт для отправки комментариев
Ср, 27/03/2013 - 10:30
Есть обычный LCD i2c модуль 16х2. Из опознавательных знаков на нем YwRobot Arduino LCM1602 IIC V1
При начальном подключении включает подсветку и выводит в верхней строке квадраты. Сзади на плате горит красный диод.
Подключил его к i2c, при посылке данных отзывается на идентификаторы 0x27 и 0xA7. То есть вроде подключен правильно и даже виден.
А дальше начнинается полный привет. Скачал библиотеку LiquidCrystal_I2C , запускаю пример ХеллоВорд и кроме однократного мигания дисплеем добиться ничего не могу
В чем может быть заморочка, куда копать ?
Заработало
Подключил вместо родных выходов SCL SDA 4 и 5й аналоговые выходы
и заработала вот эта либа
http://arduino-info.wikispaces.com/file/view/LiquidCrystal_I2C1602V1.zip...
У меня тоже немного партизан. Я с вопросами. Вкрации вступление.
Заморочился с вывотом значения температуры на ЖКИ 8х2 и 20х4. В общем там проблем не было.
При увеличении температуры стрелочки вверх и наоборот, а при неизменном значении ничего, но так и должно быть, тут проблем нет. Решил добавить символов в момент неменяющейся температура но какой символ под каким номером не знаю, не переберать же все методом втыка.
Вобщем поколдовал и написал скетч для последовательного выведения символов с номерем из библиотеке на том же 8х2 и 20х4.
Написал наверное приметивно, но работает.
Хотя мне интересно что я вобще такое написал.
Вот в чём проблема, при индикации слов "Номер" и "Символ" на 20х4 какаято непонятка получается. Вот фото и код. Вывод слов в строках 16, 18. 30, 32.
#include <LiquidCrystal.h> //подключение библиотеки LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); //подключение ЖКИ int lib = 0; //вводим переменную float lib_saved; // сохранёное значение boolean f_saved = false; // признак того, что значение было сохранено const char num[] = //сообщение при отображении номера в библиотеке {'H', 'o', 188, 'e', 112}; const char symb[] = //сообщение при отображении символа {'C', 184, 188, 179, 'o', 187}; void setup() { lcd.begin(20, 4); // установить число строк и столбцов } void loop() { if(lib == 0){ //начинаем с нулевого символа lcd.setCursor(0, 0); lcd.print(num); // печатаем слово "Номер" lcd.setCursor(0, 1); lcd.print(symb); //печатаем слово "Символ" lcd.setCursor(7, 1); //устанавливаем курсор lcd.write(lib); //выводим нулевой символ lcd.setCursor(7, 0); //устанавливаем курсор lcd.print(lib); //выводим номер символа delay(2000); //любюемся нулевым символом две секунды lcd.clear(); //отчищаем дисплей lib = lib_saved +1; //переходим к следующему символу } else lib = lib_saved +1; lcd.setCursor(0, 0); lcd.print(num); // печатаем слово "Номер" lcd.setCursor(0, 1); lcd.print(symb); //печатаем слово "Символ" if(lib >= 1) //при однозначном значении устанавливаем курсор в последний столбец lcd.setCursor(7, 0); if (lib >=10) //при двузначном на предпоследний lcd.setCursor(6, 0); if (lib >= 100) //при трёхзначном в третий с конца столбез lcd.setCursor(5, 0); lcd.print(lib); //выводим номер символа lcd.setCursor(7, 1); lcd.write(lib); //выводим символ delay(1000); //время отображения символа lcd.clear(); if(lib == 256) //после 265 - го номера начинаем сначала lib = 0; //обнуляя переменную f_saved = true; // После первой итерации значение будет сохранено lib_saved = lib; // Сохраняем значение }и заработала вот эта либа
LiquidCrystal_I2C1602V1.zip
Модуль i2c с адресом 0x20 на котором сзади надпись "I2C lcd1602 www. mjkdz. com" - версия 1 наоборот, не работает (тоже рисует первый ряд квадратиками...), а работает версия 2.0. Маркировка чипа на конверторе i2c затерта.
У Вас где-то if (ветвление) а экран не чистится, поэтому лишние символы и остаются...
пробовал чистить и прописывать слова перед каждым "принтованием", меняются местами по разному, но всё равно "разгул".
Ещё не понятно почему игнарируется
и вроде чётко указываю место установления курсора, почему слово из второй строки (0 , 1); попадает в первую. Когда работает термометр, такого нет.
Вот ещё по If - у, посмотрю. Спасибо.
Ещё не понятно почему игнарируется
lcd.begin(8, 2);
и вроде чётко указываю место установления курсора, почему слово из второй строки (0 , 1); попадает в первую.
Почитай
http://greathard.ucoz.com/44780_rus.pdf
На одиннадцатой стронице со слов "Чтобы произвести переустановку курсора на нужную позицию..."
Тоже сегодня получил примерный LCD, и симптомы такие же, одна строка в квадратах.
Правда, у меня не ардуинка, а iboard pro на меге2560, и никак не могу понять, на какие ноги подключать. смотрел даташит на ардуинке, в одном пишут что это pd0 и pd1, на другом даташите пишут что это не так.
Помогите разобраться. iboard взял у знакомого для отладки. вообще, этот ЖК планирую на тиньку2313 подключить. Но сейчас нужно выяснить, работает ли вообще ЖК. Запустил сканнер i2c, он мне выдал 0x68 адрес. смотрю даташит на свою плату, там нашел пины SDA и SCL, подключаю, но вообще никакой реакции нету.
Спасибо за помощь!
Вчера подключил LCD1602 через модуль I2C у меня MEGA2560, на выводы МЕГА SDA - 20 и SCL - 21.
больше было заморочек с библиотекой LiquidCrystal_I2C перепробывл все 4 что нашел, пошла LiquidCrystal_I2C V2.0.
/************************************************************* project: <type project name here> author: <type your name here> description: <type what this file does> *************************************************************/ #include <Wire.h> #include <LiquidCrystal_I2C.h> uint8_t bell[8] = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4}; uint8_t note[8] = {0x2,0x3,0x2,0xe,0x1e,0xc,0x0}; uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0}; uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0}; uint8_t duck[8] = {0x0,0xc,0x1d,0xf,0xf,0x6,0x0}; uint8_t check[8] = {0x0,0x1,0x3,0x16,0x1c,0x8,0x0}; uint8_t cross[8] = {0x0,0x1b,0xe,0x4,0xe,0x1b,0x0}; uint8_t retarrow[8] = { 0x1,0x1,0x5,0x9,0x1f,0x8,0x4}; LiquidCrystal_I2C lcd(0x20,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display void setup() { lcd.init(); // initialize the lcd lcd.backlight(); lcd.createChar(0, bell); lcd.createChar(1, note); lcd.createChar(2, clock); lcd.createChar(3, heart); lcd.createChar(4, duck); lcd.createChar(5, check); lcd.createChar(6, cross); lcd.createChar(7, retarrow); lcd.home(); lcd.print("Hello world..."); lcd.setCursor(0, 1); lcd.print(" i "); lcd.write(3); lcd.print(" arduinos!"); delay(5000); displayKeyCodes(); } // display all keycodes void displayKeyCodes(void) { uint8_t i = 0; while (1) { lcd.clear(); lcd.print("Codes 0x"); lcd.print(i, HEX); lcd.print("-0x"); lcd.print(i+16, HEX); lcd.setCursor(0, 1); for (int j=0; j<16; j++) { lcd.write(i+j); } i+=16; delay(4000); } } void loop() { }у меня адаптер как второй на фотке сверху - "i2c с адресом 0x20 на котором сзади надпись "I2C lcd1602 www. mjkdz. com""
может кто знает как поменять у него адрес?
видил такие модули с выбором адреса - через резистор 10кОм -> там каието ноги микрухи замыкабтся.
1,2,3 ноги похоже. Если у вас такая же микросхемка.
да точно 1,2 и 3. только пока не знаю как изменить схему, чтобы микруха подхватила новый адрес.
Адрес определяется куда подключены А0, А1 , А2 -к земле (для PCF8574 0X20, PCF8574AP 0X38) или +5. В зависимости от комбинаций подключения будут разные адреса.
спасибо!
Нет ли у кого либы для Codevision?
Хочу к тиньке 2313 подключить такой ЖК через I2C.
Сам пока только начинаю осваивать, и нет навыка портировать исходники.
//ADXL335 Читает аналоговые ADXL3xx акселерометра устройства //и сообщает ускорение к компьютеру. // берем землю , 3,3 вольта объединяем с aref? st-с аселерометра // подключаем к аналоговому входу 0 #include <Wire.h> //подключаем библиотеку на лсд #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2);// задаем параметры дисплея т.е // адрес 0х27 16 символов в каждой строке и 2 строки #if defined(ARDUINO) && ARDUINO >= 100 #define printByte(args) write(args); #else #define printByte(args) print(args,BYTE); #endif uint8_t bell[8] = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4}; uint8_t note[8] = {0x2,0x3,0x2,0xe,0x1e,0xc,0x0}; uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0}; uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0}; uint8_t duck[8] = {0x0,0xc,0x1d,0xf,0xf,0x6,0x0}; uint8_t check[8] = {0x0,0x1,0x3,0x16,0x1c,0x8,0x0}; uint8_t cross[8] = {0x0,0x1b,0xe,0x4,0xe,0x1b,0x0}; uint8_t retarrow[8] = { 0x1,0x1,0x5,0x9,0x1f,0x8,0x4}; const int xpin = A3; // х-оси акселерометра const int ypin = A2; // y-оси акселерометра const int zpin = A0; // z-оси акселерометра void setup() { lcd.init(); //инцилизируем дисплей lcd.backlight(); lcd.begin(0x27,16,2); lcd.createChar(0, bell); lcd.createChar(1, note); lcd.createChar(2, clock); lcd.createChar(3, heart); lcd.createChar(4, duck); lcd.createChar(5, check); lcd.createChar(6, cross); lcd.createChar(7, retarrow); lcd.home(); //lcd.print(); //выводим на дисплей // задаем скорость последовательного интерфейса: Serial.begin(9600); Serial.println(); Serial.println(); analogReference(EXTERNAL); pinMode(xpin, INPUT); pinMode(ypin, INPUT); pinMode(zpin, INPUT); } void loop() { int x= analogRead(xpin); // Serial.print( analogRead(xpin)); // Serial.print("\t"); //добовляем не большую задержку между чтениями delay(300); int y=analogRead(ypin); // Serial.print( analogRead(ypin)); //Serial.print("\t"); //добовляем не большую задержку между чтениями delay(300); int z=analogRead (zpin); //Serial.print( analogRead(zpin)); // Serial.print("\t"); // Здадержка перед следующим чтением // используем float для хранения чисел (данных) float zero_Gx=analogRead(xpin); float zero_Gy=analogRead(ypin); float zero_Gz=analogRead(zpin); float scale = 1; Serial.print((float) x-zero_Gx/scale); lcd.print((float) x-zero_Gx/scale); lcd.setCursor(0,1); //lcd.setCursor(3,0); //lcd.printByte(6); lcd.print("\t"); Serial.print ("\t"); //Serial.println("x"); Serial.print((float) y-zero_Gy/scale); lcd.print((float) y-zero_Gy/scale); lcd.print("\t"); lcd.setCursor(1,0); //lcd.printByte(7); Serial.print ("\t"); // Serial.println("y"); Serial.print((float) z-zero_Gz/scale); //lcd.print((float) z-zero_Gz/scale); //lcd.print("\n"); //lcd.setCursor(2,1); //lcd.printByte(7); //Serial.println(" z"); Serial.print ("\n"); delay(300); }Добрый день) Я не так хорошо понимаю в програмирование( кто нить объяснити от куда взялись лишнии символы на дисплее типа 3 уточки и цифра "1". Програмном коде я их не в бивал и не просил вылазить их на lcd а они постоянно появляються(
Вставка программного кода в тему/комментарий.
Кажется дело в этом:
lcd.print("\t");попробуйте так:
lcd.print("t");Спасибо за подсказку))) немного подругому сделал )) и лишние символы пропали))
Когда выводишь на монитор порта эти данные то без этого не как Serial.print ("\t");
а видно на дисплей прокатывает))
Serial.print((float) x-zero_Gx/scale); lcd.print((float) x-zero_Gx/scale); lcd.setCursor(1,1); //устанавливаем курсор на 1 сторку символ 2 //lcd.setCursor(4,0); //lcd.printByte(6); lcd.print(""); Serial.print ("\t"); //Serial.println("x"); Serial.print((float) y-zero_Gy/scale); lcd.print((float) y-zero_Gy/scale); lcd.print(""); lcd.setCursor(7,1);// 1 строка 7 символ //lcd.printByte(7); Serial.print ("\t"); // Serial.println("y");Ну тогда и коментарии пишете правельней чтоб не путаться
Спасибо тебе, добрый человек. Такую же платку пытаюсь заставить работать. Три библиотеки перепробовал - только эта подошла.
В статье http://we.easyelectronics.ru/lcd_gfx/shema-perehodnika-i2c-dlya-lcd-hd44... - говорится о базовых адресах в зависимости от маркировки чипа PCF8574 :
Вы всерьез думаете, что я читать не умею? Речь шла про базовые адреса в зависимости от буковок чипов, а не как переключать перемычки...
LCD 16x2 куплен на BICe
пример скетча :
/*-----( Import needed libraries )-----*/ #include <Wire.h> // Comes with Arduino IDE #include <LiquidCrystal_I2C.h> /*-----( Declare Constants )-----*/ /*-----( Declare objects )-----*/ // Analog PINS: SDA - A4, SCL - A5 // set the LCD address to 0x27 for a 20 chars 4 line display // Set the pins on the I2C chip used for LCD connections: // addr, en,rw,rs,d4,d5,d6,d7,bl,blpol LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address /*-----( Declare Variables )-----*/ char* myStrings[] = {"Hello, world!", "LCD16x2 Arduino", "Use Serial Mon", "Type to display"}; void setup() /*----( SETUP: RUNS ONCE )----*/ { Serial.begin(9600); // Used to type in characters lcd.begin(16,2); // initialize the lcd for 16 chars 2 lines, turn on backlight // ------- Quick 3 blinks of backlight ------------- for(int i = 0; i< 3; i++) { lcd.backlight(); delay(250); lcd.noBacklight(); delay(250); } lcd.backlight(); // finish with backlight on //-------- Write characters on the display ------------------ // NOTE: Cursor Position: (CHAR, LINE) start at 0 lcd.setCursor(0,0); //Start at character 4 on line 0 lcd.print(myStrings[0]); //lcd.print("Hello, world!"); delay(1000); lcd.setCursor(0,1); lcd.print(myStrings[1]); //lcd.print("LCD16x2 Arduino"); delay(8000); // Wait and then tell user they can start the Serial Monitor and type in characters to // Display. (Set Serial Monitor option to "No Line Ending") lcd.clear(); lcd.setCursor(0,0); //Start at character 0 on line 0 lcd.print(myStrings[2]); //lcd.print("Use Serial Mon"); lcd.setCursor(0,1); lcd.print(myStrings[3]); //lcd.print("Type to display"); }/*--(end setup )---*/ void loop() /*----( LOOP: RUNS CONSTANTLY )----*/ { { // when characters arrive over the serial port... if (Serial.available()) { // wait a bit for the entire message to arrive delay(100); // clear the screen lcd.clear(); // read all the available characters while (Serial.available() > 0) { // display each character to the LCD lcd.write(Serial.read()); } } } }PCF8574T, адрес 0x27, все работает, но русификации не хватает.
PCF8574T, адрес 0x27, все работает, но русификации не хватает.
Ну так ее там и не обещают. :) Хотя, если пошарить по таблице символов 0-255 - какие-то зачатки там есть...
Остальное - либо подбирать из латиницы, либо рисовать "своими" символами.
Девайс, купленные на Aliexpress
Электрическая схемка (нарисовал сам)
PCF8574T, адрес 0x27, все работает, но русификации не хватает.
Ну так ее там и не обещают. :) Хотя, если пошарить по таблице символов 0-255 - какие-то зачатки там есть...
Остальное - либо подбирать из латиницы, либо рисовать "своими" символами.
Вопросов несколько:
1) Как рисовать свои символы?
2) как можно обновить библиотеку имеющихся символов?
1) Как рисовать свои символы?
2) как можно обновить библиотеку имеющихся символов?
Взять документацию на дисплей - там есть примеры создания своих символов.
Обновить библиотеку - залить в память дисплея другую прошивку знакогенератора, в 80-е годы прошлого века было модно русифицировать матричные принтеры примерно такими же методами. Только есть подозрение, что это не так просто сделать.
прошу помочь как подключить МЭЛТ 20х4 и I2C на базе PCF8574T
а какая помощь нужна?
guram, а самому почитать и по форуму и в сети слабо?
ты покажи, что сделал и тогда вопрос задай, или шару ждёмс?
прошу помочь как подключить МЭЛТ 20х4 и I2C на базе PCF8574T
Попиарюсь тогда http://blog.radjah.ru/2014/08/arduino.html
Раджа спасибо разобрался
Добрый день.
Пришел из Китая дисплей 1602A (16х2) с впаяной в него PCF8574T (как на последней фотографии в этой теме). Пробовал разные версии LiquidCrystal, разные инициализации (как и lcd(0x27,16,2), так и с указанием пинов). Вроде как и заводится, но не до конца. Подсветку могу включать-выключать, тут все в порядке. Но в то же время вывести ничего не выходит.
Последний код, который пробовал:
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); void setup() { lcd.init(); // initialize the lcd lcd.backlight(); lcd.print("Hello, world!"); } void loop() { }Я полный чайник в этом всем, пару-тройку разных статей нашел в гугле, но не выходит. Подскажите, может кто сталкивался...
Просил китайца-продавца прислать доку - с тамошними библиотеками даже не компилируется.
а черные квадратики в первой строке светятся?
на плате переходнике есть переменник. его покрути
Ты знаешь что такое "0х27"? Посмотри пост 23. правельно у тебя?
а черные квадратики в первой строке светятся?
на плате переходнике есть переменник. его покрути
Крутил - меняется яркость первой строки, но символы не проявляются. Прочитал на хабре, что у подобных дисплеев нефиксированный вольтаж, и при перестановке с 5В на 3.3В может стать более читаемо. Попробовал, покрутил - все равно ничего нет.
Знаю, правильно. Сканнером определял.
Подсветку могу включать-выключать, тут все в порядке. Но в то же время вывести ничего не выходит.
Подсветка включается smd транзистором на плате i2c переходника, т.е. до нее сигналы и управление - доходит. Дальше надо разбираться с дисплеем: прежде всего, следует регулировкой контраста добиться "строки темных прямоугольников" или появления символов. Ну, или готовиться к тому, что сам дисплей у Вас - мертвый, и придется перепаивать переходник i2c на другой дисплей.
как ни смешно а ситуация похожая))
обычная либа, а скачал уже 2 не работает. вообще ничего
зато LiquidCrystalCyr_I2C сразу. хз почему предыдущие не работают. правда вывод русских символов не заработал, только тех кто совпадает по форме с английскими
ну это буду позже разбираться
либы не переделывал, даже не смотрел толком что внутри
ссылка на всякий http://blockduino.org/Libs/LiquidCrystalCyr_I2C.zip
Подсветка включается smd транзистором на плате i2c переходника, т.е. до нее сигналы и управление - доходит. Дальше надо разбираться с дисплеем: прежде всего, следует регулировкой контраста добиться "строки темных прямоугольников" или появления символов. Ну, или готовиться к тому, что сам дисплей у Вас - мертвый, и придется перепаивать переходник i2c на другой дисплей.
Да, строка темных прямоугольников есть. Одна очень яркая, вторая слегка проявляется, когда при подаче 5В контраст выкрутить на максимум.
Увы, то же самое. Подсветкой управляю, символы не выводятся.
проверяй пайку. значит плохие контакты
прозванивай дорожки. первая строка не должна светится на полной яркости. убавить до середины. хотя как заработает сам поймешь как регулировать
Я бы попробовал на время выкинуть эту гуёвую приблуду PCF8574T, и подключить на прямую... вероятность что заработает увеличивается вдвое
Я уже раза три давал ссылку на статью по подключению дисплея. =\
http://devdotnet.org/post/2013/04/24/Podkluchenie-displeya-LCD-2004-po-s...
http://blog.radjah.ru/2014/08/arduino.html
Нормально завелся китайский дисплей 20x4 и такой же отечественный от МЭЛТ.
Я уже раза три давал ссылку на статью по подключению дисплея. =\
И что Вы хотели этим сказать? Что Вы Д'Артаньян? :) Здесь не перепись тех, у кого "все работает".
Ваша первая ссылка не работает, на второй - нет деталей подключения дисплея, не видно даже версию i2c переходника.
А какие тебе детали нужны? Боишься в 4-х проводах запутаться или что? PCF8574T он и в Африке PCF8574T.
И персонально для твоей ленивой жопы кэш гугла http://webcache.googleusercontent.com/search?q=cache:chW__BZYpcoJ:devdot...
подтверждаю. Я как раз сейчас в Африке и свойства PCF8574T тут не изменились :)))
Всем привет
Недавно из Ebay а купил дисплей 20х4 с I2C адаптором.
http://www.ebay.com/itm/Blue-Serial-IIC-I2C-TWI-2004-204-20X4-Character-...
Пробовал подключит к Arduino Mega2560, но у меня нечего не получалос на экране только две строки с кубиками. Пробовал все библотеки которые нашел в в интернете, до тех пор пока продовец не прислал свой библотеку. После этого библотеки устройство работет очен хорошо
Вот и библотека https://cloud.mail.ru/public/9d4b8b559d5e/I2C
Купил клон Arduino Mega2560 на ebay.com у китайцев. Подключил LCD монитор с i2c переходничком к Iduino Mega 2560(так называется клон), LCD не работает. Программа i2c сканер не видит адреса. Взял другую Arduino Mega2560, подключил. все работает. Каким образом можно еще потестить i2c в Iduino?