A placa de interface serial LCD I2C não exibe texto (pinos incorretos?)

9

Eu tenho uma tela LCD 1602 que funciona bem por conta própria. No entanto, eu queria liberar alguns pinos usando um controlador LCD I2C / IIC que comprei separadamente.

Embora o controlador pareça estar se comunicando com o meu Arduino UNO no endereço correto, não consigo exibir o texto. Por padrão (sem código), parece que o LCD terá 1 linha de 16 "quadrados" sólidos. Ao usar o endereço 27 no meu código, o LCD mudará para 2 linhas de 16 quadrados (veja a foto abaixo). O código também pede que a luz de fundo pisque 3 vezes, o que funciona. No entanto, não consigo nada além de duas linhas de quadrados. (O código completo está na parte inferior desta pergunta).

Estou usando a biblioteca LiquidCrystal_I2C da F Malpartida, que parece ser comumente usada.
Existe uma biblioteca melhor que eu deveria estar usando?

Gostaria de saber se são apenas os pinos errados que estão sendo usados ​​no código. Todos os esboços que vejo online usam os seguintes pinos:

//                    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

Mas todos os LCDs de 1602 que eu vejo on-line têm os mesmos pinos que os meus, como você pode ver na minha foto abaixo:

Controlador I2C LCD

Esses pinos parecem ser padrão:
1602 LCD Pinout

Para me confundir ainda mais, os pinos na placa LCD começam com 1 à esquerda, mas os pinos do código padrão parecem começar com 0! Então, tentei mudar os pinos do código para os números na placa de cristal líquido. O LCD não muda mais para 2 linhas de quadrados e não pisca mais a luz de fundo. Tentei subtrair 1 de cada pino (para começar de 0), mesmo resultado. Então tentei usar os pinos padrão menos 1, mesmo resultado. Assim, os pinos padrão estão de alguma forma mais corretos ?! O que estou fazendo errado?

Alguém mais conseguiu que um desses controladores I2C trabalhasse para eles? Se sim, como?

Código completo:

/* YourDuino.com Example Software Sketch
 16 character 2 line I2C Display
 Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
 [email protected] */

/*-----( Import needed libraries )-----*/
#include <Wire.h>  // Comes with Arduino IDE
// Get the LCD I2C Library here: 
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>

/*-----( Declare objects )-----*/
// set the LCD address to 0x27 for a 20 chars 2 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

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("Hello, world!");
  delay(1000);
  lcd.setCursor(0,1);
  lcd.print("HI!YourDuino.com");
  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("Use Serial Mon");
  lcd.setCursor(0,1);
  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());
      }
    }
  }

}/* --(end main loop )-- */
Bort
fonte
Você se lembrou de adicionar os pullups?
Ignacio Vazquez-Abrams
11
Provavelmente não é o problema, mas você já tentou ajustar o contraste usando o potenciômetro? Os números no código referem-se a qual pino no chip PCF8574 está conectado a qual pino na placa de LCD. P3 na placa I2C está evidentemente conectado ao pino da luz de fundo no LCD. Mas acho que os outros pinos estão errados de alguma forma. Tente usar um multímetro para ver onde os pinos P0-P7 do PCF8574 vão para quais pinos no cabeçalho lcd.
Gerben
2
Embora esse não seja o problema, você deve prestar atenção aos conectores dos pinos soldados no LCD, pois na imagem eles parecem não cobrir completamente o cobre ao redor do orifício; Eu tentaria melhorar esses pontos de solda primeiro.
Jfpoilpret
11
@Gerben, derp. Testei o chip com um multímetro, mas ainda estou completamente confuso. Os pinos 9-12 no chip correspondem a D4-D7 no CD. Pino 6 = E, 5 = RW e 4 = RS. Não consigo descobrir o que é realmente o pino 7. O uso desses valores não me dá resposta do LCD novamente. Além disso, devo subtrair 1 desses pinos? Porque, novamente, todos os códigos padrão existentes têm o pino 0 = RS. Mas isso não pode ser, porque o primeiro pino no chip é A0 (endereço). Basicamente, alterar qualquer pino único interrompe a resposta da luz de fundo ou impede que a segunda linha mostre os caracteres do bloco.
Bort

Respostas:

3

Primeiro de tudo, parece que esses fios não estão conectados corretamente:

insira a descrição da imagem aqui

Eu não desmontei um jumper feminino antes, então esse pode não ser o problema. No entanto, parece provável que isso possa ser uma causa.

Além disso, você precisa ajustar o contraste girando o aparador (a coisa azul que parece meio que tem um parafuso). Os LCDs não exibirão nada, uma versão desbotada do texto ou caixas azuis se o contraste não estiver definido corretamente. Esta é provavelmente a causa.

Pinguim anônimo
fonte
Os jumpers são assim apenas porque mudei o quadro para a foto. Também já ajustei o aparador e é blocos completos ou nada.
Bort
3

Comprei o SainSmart 20x04 e também tive que mudar o endereço para 0x3F. Meu jumper de luz de fundo estava ausente, aquele pequeno cabeçalho à direita da placa I2C fornece a energia de luz de fundo. Alguns códigos que encontrei incluíam isso:

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
Ed Kimble
fonte
1

Tenho o mesmo problema e o corrigi alterando o endereço do LCD 1602A, que está nos tutoriais 0x27, mas no meu dispositivo é 0x3F.

Boa sorte!

Ricardo Herrero
fonte
Mesmo no meu caso, trabalhou ao alterar esta linha: LiquidCrystal_I2C lcd(0x3F,16,2);. Muito obrigado!
Stefan
0

Tanto quanto eu sei, os resistores pull-up devem ser integrados ao monitor.

Você tentou endereços diferentes? Eu tenho um semelhante, que funciona no endereço 0x3F. Talvez isso ajude.

engenheiro
fonte
O quadro foi vendido como "endereço 27" e 27 é o único endereço que responde. Na verdade, é personalizável ao soldar os pinos A1 A2 e A3 logo acima do pote de aparar visto na foto.
Bort
0

Mude este código:

LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Para isso:

LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 8, POSITIVE);

(O argumento antes de "POSITIVO" é alterado de 3 para 8)

oz1ayw
fonte
11
Alguma explicação porque? Não há P8 no PCF8574.
tcurdt
-1

Tenho certeza de que este link será útil para você, tenho o mesmo LCD e trabalhei com o I2C seguindo as etapas neste link http://forum.arduino.cc/index.php?topic=128635.0

omaima
fonte
11
Como em sua outra resposta, postar um resumo do guia aqui no caso do seu link vai 404.
LoganBlades
-2
LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 6, 5, 7, 3, POSITIVE);  // Set the LCD

O módulo I2C D6-> P5 é D5-> P6 (invertido).

Vlecsi
fonte
11
Você pode explicar mais?
Bort
2
Por favor editar o seu post e formatar o código usando o markdown formatação de código (quatro espaços à esquerda). Para obter ajuda, consulte a ajuda do Markdown . Você deve fazer isso selecionando o código e pressionando Ctrl+Kpara que seu navegador faça isso por você. Sua resposta seria mais útil se você tivesse mais detalhes.
Nick Gammon