И опять про LCD и PCF8574... ну никак не запущу!!!
- Войдите на сайт для отправки комментариев
Всем добрый день. Прошу помощи. Скажу сразу - новичек. Не во всем пока разбираюсь. И не пойму в какую тему обратится(((
Начну по порядку))
Имеется Arduino UNO Rev.3 + LCD Keypad Shild от DFRobot + PCF8574AN.
LCD Keypad Shild от DFRobot - http://www.dfrobot.com/index.php?route=product/product&path=53_130&product_id=51#.UP_eHR0z2KJ
На этом шилде контак RW - запаен на общий. Когда подключал "нормально" с библитекой LiquidCrystal - никаких проблем не было. Начитавшись форумов, решил попробовать включить по I2C.
Сумел RW "отодрать" от общего)))
Собирал различные схемы и заливал различные библиотеки:
http://www.dfrobot.com/index.php?route=product/product&path=48&product_i...
http://jt5.ru/examples/oled-i2c/
Пробовал и на 0023 и на 1.0 - ничего не получается.
Несколько раз проверял монтаж.... полный "зеро"
Можете подсказать - что не так????
Можете подсказать - что не так????
Нет результатов диагностики. i2cScanner - видит Вашу железку? Попробуйте запустить по i2c что-нибудь другое, заведомо рабочее.
90% что дело не в программной части, а в аппаратной... неконтакт, непропай, неверное подключение
1. Какой монтаж?
2. Как вы проверяли монтаж?
Прозвоните все линии и 5 раз перепроверьте правильность подключения.
Спасибо за ответы.
"Попробуйте запустить по i2c что-нибудь другое, заведомо рабочее."
I2C проверял часами RTC DS1307. Все работает, вывожу время на LCD.
"90% что дело не в программной части, а в аппаратной... неконтакт, непропай, неверное подключение"
Смонтировано на монтажной плате. Монтаж проверял тестором. Проверял непосредственно на контактах LCD, Arduino и ногах микросхемы PCF8574.
Попробую все сделать с самого начала))
Может кто нибудь подскажет где скачать заведомо рабочую библиотеку на LiquidCrystal I2C???
Оно заработало!))
Проверил еще раз монтаж. Все нормально.
Ничего не запустилось, не высвечивает, хоть тресни. В итоге полез в инет. Нашел следующее:
https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/I2CIO
The only difference between the two is the I2C base address. The base address for the PCF8574 is 0x20 and the base address for the PCF8574A is 0x38. The library doesn't make any assumption as to the device being used, and it is up to the user to configure it during initialization of the application.
Я в первом посте писал, что у меня PCF8574AN
Указал:
LiquidCrystal_I2C lcd(0x38,16,2);
Все заработало!
Может кому пригодится)))
В догонку версия Arduino 1.0
Я в первом посте писал, что у меня PCF8574AN
Вам i2cScanner и должен был показать этот адрес устройства.
Да, надо было сразу пройти и не ломать голову. Спасибо.
У меня тож не работает дисплей, уже не знаю,что делать. Приобрел дисплей, который уже смонтирован с PCF8574. Все джамперы A0,A1,A2 одеты. Согласно таблицы дисплей имеет в этом случае адрес 0x40. Скачал библиотеку LiqiudCrystal_I2C.h. Подключил GNd,5V, SCL, SDA , A4 и A5 на ардуино уно. Дисплей показывает только квадраты (артефакты). Поменя местаими SCL и SDA, думал может ошибся, но дисплей не хочет работать.
Что- то я упустил?
Что- то я упустил?
Ссылку на свой дисплей и код, который заливаете.
PCF8574 бывают разные - и адреса у них разные получаются. Так что I2C сканером проверь адрес.
Это тока в мультиках рисуют на стене дверь и потом входят в нее - в жизни все по другому.
Я игрался с переборкой библиотек и адресов - запустил (правда долго игрался)
Загрузил вот этот код:
Дисплей засветился,но "Hello, World" не показывает
I2C scan показывает адресс 0x20, попробовал вставить lcd.begin (16,2)б тоже без результатно
Вот упертый... вам сюда.
заценил шутку) Display прияпаян к PCF8574, не видно,что на нем написано, что-то вроде 94V-0 , вот такой http://arduino.cc/en/uploads/Tutorial/LCD_bb.png. C-Control производитель
Значит руки не из нужного места - потому что я тоже запустил 2 дисплея и 16х2 и 20х4. Пробовал разные библиотеки, смотрел их работу - дописал вариант инита в обычную. Все нормально работает - подобных плат у меня 5 шт.
Просто производитель, делающий модуль PCF8574 для этого дисплея может его развести как угодно, то есть сам дисплей может быть подключен к PCF8574 так как взбредет в голову производителю модуля.
Поэтому может оказаться так что например шина данных так и находится в младших 4 битах, а вот EN, RW, RS могут быть подключены по другому:
ТАк же на этом модуле должен быть потенциометр регулировки контрастности, крутить пробовали?
Конечно пробовал. Может если не трудно порекомендуйте пару библиотек
Так записано в библиотеке:
На плате PCF8574 RW на 6 пине, En на 4, а Register Select на 5.
Нужно значит изменить запись в библиотеке на эту?
Нет.
Тож не помогло. Вот нашел Datasheet со схемой подключения, там вроде Enable к 11 выходу подключается, Rw к 9, а RS к 10.
Поменял, тоже безрезультатно.
Может что-то упустил?
Что поменял? Для этой схемы:
И кстати,
Так записано в библиотеке:
Либо если в вашей библиотеке есть метод send то выглядеть он должен так:
есть в библиотеке вот что:
это подойдет?
Нет.
1. если использовать LiquidCrystal_I2C библиотеку, но у вас D4-D7 ноги дисплея подсоединены к 4-7 выводам PCF8574 то необходима правка как тут:
так и тут:
а конкретнее необходимо отредактировать:
портанул как раз только что эту библиотеку в свой проект (не ардуино вообще), завелось все с первого раза
на других библиотеках нужно смотреть для какого подключения она предназначена и редактировать соответствующее место где идет перетасовка старшей и младшей половины байта
Всем привет!
Мучаю модуль с PCF8574T на борту. Адрес сканером определятся как 0x27.
Библиотеку скачал отсюда https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads .
Контакты на модуле прозвонил и поменял в скетче.
Результат банальный, не работает, т.е. светятся одни квадраты. Что я не так сделал?
Сам скетч:
http://yadi.sk/d/inX8u3YXHUAgm
P.S. Разобрался. Сам себе злобный буратино, не заметил непропай на RW.
UNO R3 + LCD 1602 + i2c с индексом - Т (PCF8574T)
Питание 5в Выходы подключил к А4 и А5.
Дисплей просто светиться и ничего не отображает
/*
* Displays text sent over the serial port (e.g. from the Serial Monitor) on
* an attached LCD.
* YWROBOT
*Compatible with the Arduino IDE 1.0
*Library version:1.1
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
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();
Serial.begin(9600);
}
void loop()
{
// 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());
}
}
}
А так хотел запустить. . .
попытался залить другой скетч - пишет collect2.exe: error: ld returned 5 exit status
#include <LiquidCrystal.h>
//YWROBOT
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#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};
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 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.printByte(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.printByte(i+j);
}
i+=16;
delay(4000);
}
}
void loop()
{
}
Хотя если поставить в устройствах Mini или Leonardo - загружает, но . . . также ничего не отображается.
как конкретно разведена PCF8574?
Китайцы, их за левую ногу, эти модули штампуют как Майтрея нашепчет, сиречь в нескольких вариациях - соединение пинов PCF8574 и LCD везде разное, соответственно, под каждый вариант нужна своя библиотека (точнее, бибилиотека может и одна, но в ней надо четко прописывать конкретное соответствие пинов).
Tomasina - респект и уважуха за систематизацию вопросов по подключению PCF8574
Ну молодец!!!!!!!
Сказал, ничего не сказав. :)
У меня до этой стадии пока не доходит, скетч не проверяется. Вроде как в последней версии (1.6.3) косяки.
И эта версия под ХР не идет. Ставлю вместо UNO Mini или Leonardo - заливается, но ничего не кажет. Откуда плясать - первое предложение поступило, только непонял - надо распиновку проверять? Распаивать платы?
прозвонить тестером или светодиодом какой номер пина PCF8574 идёт на соответствующий номер разъема LCD.
Прозвонил, получается самая нижняя схема. Какая библиотека подойдет под нее?
Запустил.
Оказывается arduino-1.6.3-windows с косяками и под ХР выбрасывает в ошибку.
Сделал откат до 1,6,0 все пошло. Залилось, но. . . ничего не отображается.
А делов то - вывернута контрастность. :)
http://elchupanibrei.livejournal.com/27443.html - здесь универсальная библиотека для I2C модулей на PCF8574 модулей дядюшек Ли. Возможно придётся подправить в LiquidCrystal_I2C.h адрес. Мой модуль сканером определился как 0x3F. В библиотеке его не было. Прописал адрес и всё заработало.
зачем его прописывать, если адрес выставляется в строке инициализации?
Русский язые библиотекой поддерживается?
Вместо выделенного 3F было 27. Следовательно при А2=1, А1=1, А0=1 происходило обращение по адресу 0х27. В строке иницилизации выбирается адрес прописанный в библиотеке. Мне же надо было обращение по адресу 0х3F. Русский похоже не поддерживается.
Вместо выделенного 3F было 27. Следовательно при А2=1, А1=1, А0=1 происходило обращение по адресу 0х27. В строке иницилизации выбирается адрес прописанный в библиотеке. Мне же надо было обращение по адресу 0х3F. Русский похоже не поддерживается.
Вместо выделенного 3F было 27. Следовательно при А2=1, А1=1, А0=1 происходило обращение по адресу 0х27. В строке иницилизации выбирается адрес прописанный в библиотеке. Мне же надо было обращение по адресу 0х3F. Русский похоже не поддерживается.
Всем здравствуйте, подниму темку, что бы не плодить.
В общем ошибся при разводке платы, сделал не стандартно. 8574 подключил биты по возрастанию RS RW E D4 D5 D6 D7 LED а в библиотеке стандартной RS RW E LED D4 D5 D6 D7
получается RS RW E как надо,предчувствие, что изменить нужно здесь
подскажите как подправить библиотеку, а то запутался, пробую варианты все не то, что надо показывает. Понятно, что можно дорожки порезать и спаять, но хочется разобраться.
ИМХО - лучше порезать дорожки. Вы сделали одно изделие и под него измените библиотеку и забудете об этом. Потом, пользуясь этой библиотекой в других проектах будете находится в непонятках "а почему не работает". Кроме того, если будете передавать программу на свое изделие кому - нибудь, придется объяснять про правку библиотеки. И еще куча аргументов в пользу скальпеля против пилюль.
Я так и сделал уже, все работает. С моими знаниями такие правки как головой в стенку, пока не по зубам.
ИМХО - лучше порезать дорожки. Вы сделали одно изделие и под него измените библиотеку и забудете об этом. Потом, пользуясь этой библиотекой в других проектах будете находится в непонятках "а почему не работает". Кроме того, если будете передавать программу на свое изделие кому - нибудь, придется объяснять про правку библиотеки. И еще куча аргументов в пользу скальпеля против пилюль.
Например в ArduinoJson при переходе с пятой на шестую версию немножко изменился апи. Старые проекты перестали собираться.
Решение самое простое, в хуке recipe.hooks.prebuild выбирать нужную ветку.
Как раз тот самый случай, два проекта на одной библиотеке с разными версиями, один использует новую версию библиотеки, а другой старую в пре-билде переключают ветки и собираются.
Мдя, порезать дорожки все таки не лучший совет был. Просто заменил библиотеку на ту у которой можно переназначать выводы, ссылок не буду писать, без труда находится. Восстановил все обратно, заодно посмотрел как это реализовано. А по поводу того, что в других проектах работать не будет, вопрос спорный, никакой это не стандарт подключения. Еще раз урок получил, голову иногда включать нужно.