Не получается корректно подключить дисплей 16х2
- Войдите на сайт для отправки комментариев
Ср, 14/10/2015 - 19:23
Всем привет, пытаюсь подключить LCD дисплей к ардуино через i2c, ранее я этого не делал, но много видео пересмотрел. Для начала я узнал адрес самого модуля с помощью офф скетча, предназначенного для этого
#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
}
Монитор порта выдал мне адрес 0х3f
скачал библиотеки для i2c с разных источников, загружал примеры, менял адрес модуля, но везде одно и тоже, просто загорается подсветка, никакого текста нет...
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display
void setup()
{
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.print("Hello, world!");
}
void loop()
{
}
и второй вариант
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display
void setup()
{
lcd.init(); // initialize the lcd
lcd.begin(16,2);
}
void loop()
{
// Print a message to the LCD.
lcd.backlight();
lcd.print("Hello, world!");
}
Короче результат один, горит только подсветка на дисплее. Что я сделал не так?
Выходы А4 и А5 подключены к SDA и SCL соответственно. Питание подключал как к 3.3 В так и к 5 В, массу естественно тоже не забыл)
Выходы А4 и А5 подключены к SDA и SCL соответственно. Питание подключал как к 3.3 В так и к 5 В, массу естественно тоже не забыл)
а резистор контрастности крутил?
у меня вот этот код работал:
//YWROBOT //Compatible with the Arduino IDE 1.0 //Library version:1.1 #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3f,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display void setup() { lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.print("Hello, world!"); } void loop() { }Выходы А4 и А5 подключены к SDA и SCL соответственно. Питание подключал как к 3.3 В так и к 5 В, массу естественно тоже не забыл)
а резистор контрастности крутил?
у меня вот этот код работал:
//YWROBOT //Compatible with the Arduino IDE 1.0 //Library version:1.1 #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3f,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display void setup() { lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.print("Hello, world!"); } void loop() { }да крутил, нет толку, твой скетч тоже не пашет
Выходы А4 и А5 подключены к SDA и SCL соответственно. Питание подключал как к 3.3 В так и к 5 В, массу естественно тоже не забыл)
а резистор контрастности крутил?
у меня вот этот код работал:
//YWROBOT //Compatible with the Arduino IDE 1.0 //Library version:1.1 #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3f,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display void setup() { lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.print("Hello, world!"); } void loop() { }да крутил, нет толку, твой скетч тоже не пашет
так, ради интереса - поменяй местами SDA & SCL.
хотя, наверное, бред сказал. Ты же как то считал адрес ))
Посмотри вот сюда - http://playground.arduino.cc/Code/LCDi2c
Там разные библиотеки в зависимости от твоего дисплея.
То есть сначала надо понять какой у тебя дисплей а потмо подключать нужную библиотеку.
Если библа скомпилировалась, то обычно она рабочая. Ищи непропай, соплю, не дожатый экран и т.п. При нормально выставленной контрастности должны немного быть видны прямоугольники знакомест.
И кстати, как дисплея зовут? А то может какой эксклюзив))))
Ради интереса, попробуй еще раз вот этот код
и вот библиотеки которые работают у меня https://yadi.sk/d/rhaD_Brejk9dm
//YWROBOT //Compatible with the Arduino IDE 1.0 //Library version:1.1 #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display void setup() { lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.print("Hello, world!"); } void loop() { }1. Непроинициализированный дисплей ( если только подать питание)
должен показать одну строку темную, а другую - светлую.
Если этого нет - крутите потенциометр контрастности.
2. Из библиотеки:
#define En B00000100 // Enable bit
#define Rw B00000010 // Read/Write bit
#define Rs B00000001 // Register select bit
Попробуйте прозвонить откуда и куда идут зти сигналы.
Возможно ( а я об этом где-то слышал) разводка платы не соответствует этим дэфайнам.
Ради интереса, попробуй еще раз вот этот код
и вот библиотеки которые работают у меня https://yadi.sk/d/rhaD_Brejk9dm
//YWROBOT //Compatible with the Arduino IDE 1.0 //Library version:1.1 #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display void setup() { lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.print("Hello, world!"); } void loop() { }КАКОГО ХРЕНА?
Заработало...
[/quote]
КАКОГО ХРЕНА?
Заработало...
[/quote]
может причина в библиотеках, а может и в такой незначительной мелочи, как адрес модуля i2c 3f и 3F. только в этом разница кода который я дал.
КАКОГО ХРЕНА?
Заработало...
[/quote]
может причина в библиотеках, а может и в такой незначительной мелочи, как адрес модуля i2c 3f и 3F. только в этом разница кода который я дал.
[/quote]
Пробовал и большую и маленькую F(f)
КАКОГО ХРЕНА?
Заработало...
может причина в библиотеках, а может и в такой незначительной мелочи, как адрес модуля i2c 3f и 3F. только в этом разница кода который я дал.
[/quote]
Пробовал и большую и маленькую F(f)
[/quote]
ну и ладно, главное заработало )))