La carte d'interface série LCD I2C n'affiche pas de texte (broches incorrectes?)

9

J'ai un écran LCD 1602 qui fonctionne bien seul. Cependant, je voulais libérer certaines broches en utilisant un contrôleur LCD I2C / IIC que j'ai acheté séparément.

Bien que le contrôleur semble communiquer avec mon Arduino UNO à la bonne adresse, je ne parviens pas à afficher le texte. Par défaut (pas de code), il semble que l'écran LCD aura 1 ligne de 16 "carrés" pleins. Lors de l'utilisation de l'adresse 27 dans mon code, l'écran LCD passera à 2 lignes de 16 carrés (voir photo ci-dessous). Le code demande également que le rétroéclairage clignote 3 fois, ce qui fonctionne. Cependant, je ne peux obtenir que 2 lignes de carrés. (Le code complet est au bas de cette question).

J'utilise la bibliothèque LiquidCrystal_I2C de F Malpartida, qui semble être couramment utilisée.
Existe-t-il une meilleure bibliothèque que je devrais utiliser?

Je me demande si ce sont juste les mauvaises broches utilisées dans le code. Tous les croquis que je vois en ligne utilisent les épingles suivantes:

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

Mais tous les 1602 LCD que je vois en ligne ont les mêmes broches que les miennes, comme vous pouvez le voir sur ma photo ci-dessous:

Contrôleur LCD I2C

Ces broches semblent être standard:
1602 LCD Pinout

Pour encore plus de confusion, les broches de la carte LCD commencent par 1 à gauche, mais les broches du code par défaut semblent commencer par 0! J'ai donc essayé de changer les broches du code en chiffres sur la carte LCD. L'écran LCD ne se transforme plus en 2 lignes de carrés et ne clignote plus le rétro-éclairage. J'ai ensuite essayé de soustraire 1 de chaque broche (pour commencer à 0), même résultat. J'ai ensuite essayé d'utiliser les broches par défaut moins 1, même résultat. Les broches par défaut sont donc plus correctes?! Qu'est-ce que je fais mal?

Quelqu'un d'autre a-t-il réussi à faire fonctionner l'un de ces contrôleurs I2C, et si oui, comment?

Code complet:

/* 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
la source
Avez-vous pensé à ajouter les pullups?
Ignacio Vazquez-Abrams
1
Probablement pas le problème, mais avez-vous essayé de régler le contraste à l'aide du potentiomètre? Les nombres dans le code se réfèrent à quelle broche sur la puce PCF8574 est connectée à quelle broche sur la carte lcd. P3 sur la carte I2C est évidemment connecté à la broche de rétroéclairage de l'écran LCD. Mais je pense que les autres broches sont fausses d'une manière ou d'une autre. Essayez d'utiliser un multimètre pour voir où vont les broches P0-P7 du PCF8574 vers quelles broches de l'en-tête lcd.
Gerben
2
Bien que ce ne soit pas le problème, vous devez faire attention aux en-têtes de broches soudées sur l'écran LCD, d'après l'image, ils ne semblent pas couvrir complètement le cuivre autour du trou; J'essaierais d'abord d'améliorer ces points de soudure.
jfpoilpret
1
@Gerben, derp. J'ai testé la puce avec un multimètre, mais je suis toujours complètement confus. Les broches 9-12 sur la puce correspondent à D4-D7 sur le lCD. Broche 6 = E, 5 = RW et 4 = RS. Je ne peux pas comprendre ce qu'est la broche 7. L'utilisation de ces valeurs ne me donne à nouveau aucune réponse de l'écran LCD. De plus, suis-je censé soustraire 1 de ces broches? Parce que là encore, tous les codes par défaut ont la broche 0 = RS. Mais cela ne peut pas être le cas, car la première broche de la puce est A0 (adresse). Fondamentalement, la modification d'une seule broche supprimera la réponse du rétroéclairage ou empêchera la deuxième ligne d'afficher les caractères de bloc.
Bort

Réponses:

3

Tout d'abord, il semble que ces fils ne soient pas correctement connectés:

entrez la description de l'image ici

Je n'ai jamais démonté de pull féminin auparavant, donc ce n'est peut-être pas le problème. Cependant, il semble probable que cela puisse être une cause.

En outre, vous devez régler le contraste en tournant ce potentiomètre (la chose bleue qui ressemble un peu à une vis). Les écrans LCD n'afficheront rien, une version délavée du texte ou des cases bleues si le contraste n'est pas réglé correctement. C'est probablement la cause.

Pingouin anonyme
la source
Les cavaliers ne sont comme ça que parce que j'ai déplacé la planche pour la photo. J'ai également déjà ajusté le trimmer et c'est soit des blocs pleins, soit rien du tout.
Bort
3

J'ai acheté le SainSmart 20x04 et j'ai également dû changer l'adresse pour 0x3F. Mon cavalier de rétro-éclairage manquait, cette petite tête à droite de la carte I2C fournit la puissance du rétro-éclairage. Un code que j'ai trouvé comprenait ceci:

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

J'ai le même problème et je le corrige simplement en changeant l'adresse de l'écran LCD 1602A, qui se trouve dans les didacticiels 0x27 mais dans mon appareil est 0x3F.

Bonne chance!

Ricardo Herrero
la source
Même dans mon cas, a travaillé lors du changement de cette ligne: LiquidCrystal_I2C lcd(0x3F,16,2);. Merci beaucoup!
Stefan
0

Autant que je sache, les résistances de pull-up devraient être intégrées à l'écran.

Avez-vous essayé différentes adresses? J'en ai un similaire, qui fonctionne sur l'adresse 0x3F. Peut-être que cela aide.

ingénieur
la source
La carte a été vendue comme "adresse 27", et 27 est la seule adresse qui répond du tout. Il est en fait personnalisable en soudant les broches A1 A2 et A3 juste au-dessus du pot de coupe vu sur la photo.
Bort
0

Modifiez ce code:

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

Pour ça:

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

(L'argument avant "POSITIF" est changé de 3 en 8)

oz1ayw
la source
1
Une explication pourquoi? Il n'y a pas de P8 sur le PCF8574.
tcurdt
-1

Je suis sûr que ce lien vous sera utile, j'ai le même écran LCD et je l'ai fait fonctionner avec I2C en suivant les étapes de ce lien http://forum.arduino.cc/index.php?topic=128635.0

omaima
la source
1
Comme dans votre autre réponse, postez un résumé du guide ici au cas où votre lien
deviendrait
-2
LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 6, 5, 7, 3, POSITIVE);  // Set the LCD

Le module I2C D6-> P5 est D5-> P6 (inversé).

Vlecsi
la source
1
Pouvez-vous expliquer plus?
Bort
2
Veuillez modifier votre message et formater le code à l'aide de la démarque de mise en forme du code (quatre espaces de tête). Pour obtenir de l'aide, consultez l' aide de Markdown . Vous devriez pouvoir le faire en sélectionnant le code et en appuyant sur Ctrl+Kpour que votre navigateur le fasse pour vous. Votre réponse serait plus utile si vous étiez plus en détail.
Nick Gammon