Problemi con LCD 1602A ed ID2 con mjkdz

Buongiorno!
mi scuso in anticipo per l'argomento intrapreso poichè ho già letto articoli che riportassero lo stesso problema; ma purtroppo, nonostante siano presenti queste informazioni non mi sono bastate per risolvere l'inghippo che mi si è presentato nel mio caso specifico...

come scritto nel titolo del post possiedo un comunissimo monitor LCD 1602A; e per interfacciarlo all'I2C ho comprato un modulo mjkdz consono al mio tipo di LCD...

Il problema è che non funzia.

Ho seguito in dettaglio i procedimenti e le raccomandazioni descritte qui:
http://forum.arduino.cc/index.php?PHPSESSID=ugvsn02sf9ccak4nntp8sng5d6&topic=157817.0

Ho la certezza che LCD venga riconosciuto dal mio Arduino UNO poichè sono riuscito a fare la scansione per ricavare l'indirizzo, che è risultato essere (0x27).

ho caricato lo sketch:

/* YourDuino.com Example Software Sketch
 16 character 2 line I2C Display
 NEW TYPE Marked "Arduino-IIC-LCD GY-LCD-V1"
 terry@yourduino.com */
/*-----( Import needed libraries )-----*/ 
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>  // F Malpartida's NewLiquidCrystal library

/*-----( Declare Constants )-----*/
#define I2C_ADDR    0x27  // Define I2C Address for the PCF8574A 
//---(Following are the PCF8574 pin assignments to LCD connections )----
// This are different than earlier/different I2C LCD displays
#define BACKLIGHT_PIN  15
#define En_pin  6
#define Rw_pin  5
#define Rs_pin  4
#define D4_pin  11
#define D5_pin  12
#define D6_pin  13
#define D7_pin  14

#define  LED_OFF  0
#define  LED_ON  1

/*-----( Declare objects )-----*/  
LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  lcd.begin (16,2);  // initialize the lcd 
// Switch on the backlight
  lcd.setBacklightPin(BACKLIGHT_PIN,NEGATIVE);
  lcd.setBacklight(LED_ON);
}// END Setup

void loop()   /*----( LOOP: RUNS OVER AND OVER AGAIN )----*/
{

// Reset the display  
  lcd.clear();
  delay(1000);
  lcd.home();
  
// Print our characters on the LCD
  lcd.backlight();  //Backlight ON if under program control
  lcd.setCursor(0,0); //Start at character 0 on line 0
  lcd.print("Hello, world!");
  delay(1000);
  lcd.setCursor(0,1); //Start at character 0 on line 1
  lcd.print("16 by 2 Display");
  delay(8000);
} // END Loop

Adattato ai PIN del mio LCD... Ma niente; non si accende nemmeno la retroilluminazione.
di quale problema potrebbe trattarsi?

Vi ringrazio moltissimo per la pazienza, per l'attenzione e la disponibilità.
Buona serata a tutti

Hai regolati il contrasto?
Ciao Uwe

//---(Following are the PCF8574 pin assignments to LCD connections )----
// This are different than earlier/different I2C LCD displays
#define BACKLIGHT_PIN  15
#define En_pin  6
#define Rw_pin  5
#define Rs_pin  4
#define D4_pin  11
#define D5_pin  12
#define D6_pin  13
#define D7_pin  14

qui devi assegnare i pin del PCF8574 ( a cui sono collegati i rispettivi segnali del display) , non la piedinatura dell'LCD

Vi ringrazio molto per le risposte;
Ciao Uwe;
anche io inizialmente speravo che il problema fosse il contrasto, ma invece è impostato correttamente.

Ciao Brunello,
effettivamente avevo impostato lo sketch con i pin del monitor...
Ho tuttavia riprovato ora con i valori originali del programma (i quali non so tuttavia se risultino effettivamente corretti, ma lo spero dato che sono impiegati con risultati soddisfacenti su moduli come il mio)

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>  // F Malpartida's NewLiquidCrystal library

/*-----( Declare Constants )-----*/
#define I2C_ADDR    0x27  // Define I2C Address for the PCF8574A 
//---(Following are the PCF8574 pin assignments to LCD connections )----
// This are different than earlier/different I2C LCD displays
#define BACKLIGHT_PIN  7
#define En_pin  4
#define Rw_pin  5
#define Rs_pin  6
#define D4_pin  0
#define D5_pin  1
#define D6_pin  2
#define D7_pin  3

#define  LED_OFF  0
#define  LED_ON  1

/*-----( Declare objects )-----*/  
LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  lcd.begin (16,2);  // initialize the lcd 
// Switch on the backlight
  lcd.setBacklightPin(BACKLIGHT_PIN,NEGATIVE);
  lcd.setBacklight(LED_ON);
}// END Setup

void loop()   /*----( LOOP: RUNS OVER AND OVER AGAIN )----*/
{

// Reset the display  
  lcd.clear();
  delay(1000);
  lcd.home();
  
// Print our characters on the LCD
  lcd.backlight();  //Backlight ON if under program control
  lcd.setCursor(0,0); //Start at character 0 on line 0
  lcd.print("Hello, world!");
  delay(1000);
  lcd.setCursor(0,1); //Start at character 0 on line 1
  lcd.print("16 by 2 Display");
  delay(8000);
} // END Loop

Ma non funziona ancora =(
l'unico riscontro è che il led di retroilluminazione si accende.

Sapreste dove posso trovare eventualmente i pin effettivi o un riscontro per l'effettiva numerazione?

Vi ringrazio moltissimo!
buona giornata

Stai usando questa libreria?
--> https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

Ciao PaoloP;
si, proprio quella; version 1.2.1

Questo e' quello che dichiarano per quella libreria

mjkdz

Courtesy of PeterSek

//this is for mjkdz i2c LCD board
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x20, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE); // Set the LCD I2C address

Pin configuration

Mjkdz
I2C address 0x20
RS P6
RW P5
E P4
D4 P0
D5 P1
D6 P2
D7 P3
Backlight P7
Bl Polarity NEGATIVE

ma visto che lo hai provato, forse e' meglio se ti ricavi la piedinatura dell'adattatore

Grazie ancora per il vostro aiuto;
non ho compreso come utilizzare la piedinatura dell'adattatore Brunello; dovrei seguire le piste sul circuito stampato?

Comunque ho alcune novità...
ho caricato il seguente sketch:

/* YourDuino.com Example Software Sketch
 16 character 2 line I2C Display
 Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
 terry@yourduino.com */

/*-----( Import needed libraries )-----*/
#include <Wire.h>  // Comes with Arduino IDE
// Get the LCD I2C Library here: 
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
// Move any other LCD libraries to another folder or delete them
// See Library "Docs" folder for possible commands etc.
#include <LiquidCrystal_I2C.h>

/*-----( Declare Constants )-----*/
/*-----( Declare objects )-----*/
// 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, 4, 5, 6, 0, 1, 2, 3, 7, POSITIVE);  // Set the LCD I2C address

/*-----( Declare Variables )-----*/
//NONE

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("FUNZIONI");
  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 )-- */


/* ( THE END ) */

1- quando parte il programma il monitor lampeggia 4 volte (il pin del led retroilluminazione è corretto?)
2- però dopo aver lampeggiato, anzichè rimanere acceso si spegne.
3- compaiono dei "simboli" sul monitor in particolare: un simbolo che sembra una E ma senza linea verticale e con 4 linee orizzontali :roll_eyes:) seguita da: "!,,/ 3/2, !" per circa 9 secondi (potrebbe rappresentare la scritta "Hello world... etc"?)
4- Successivamente compaiono dei simboli "3! !2!!, E/." (la E è sempre i 4 trattini orizzontali di cui ho scritto sopra)... :smiley :roll_eyes: :sweat_smile: :fearful: :disappointed_relieved: =(

Cosa potrebbe significare? Mi affido a voi...
Grazie mille ancora =(

Buona sera!
Questa sera mi sono rimesso a cercare di capire il problema su questa malefica comunicazione I2C... Ed ho caricato il seguente programma ottenendo qualcosa... :astonished:

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>  // F Malpartida's NewLiquidCrystal library
 
/*-----( Declare Constants )-----*/
#define I2C_ADDR    0x27  // Direccion I2C para PCF8574A que es el que lleva nuestra placa diseñada por MJKDZ
//definimos las constantes para esta placa
 
#define  LED_OFF  0
#define  LED_ON  1
 
//mjkdz i2c LCD board
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(I2C_ADDR, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE);
 
void setup()  
{
  lcd.begin (16,2);  // inicializar lcd 
// Activamos la retroiluminacion
  lcd.setBacklight(LED_ON);
}
 
void loop()
{
 
// Reset the display  
  lcd.clear();
  lcd.setBacklight(LED_OFF);//Backlight OFF 
  delay(500); 
 
  lcd.backlight(); //Backlight ON 
  lcd.setCursor(0,0);
  lcd.print("   12345678910  "); 
  lcd.setCursor(0,1); 
  lcd.print  ("   01234 56789  "); 
  delay(2000); 
}

ciò che ho osservato sono 2 cose principali:

  • Il monitor risponde in qualche modo, se pur in un modo non conforme alle aspettative
  • Anzichè mostrarmi sul primo rigo:" 12345678910 " e sul secondo :" 01234 56789 " mi compare, Solo Sul Primo Rigo, la sequenza: " 12301230110 "

Questa è bella! Voi come lo interpretereste? Io sono parecchio confuso :~
Vi ringrazio molto

Ah, altro punto non indifferente...
-Impostando come scritta dei numeri... se pur diversi in qualche modo mi rimanda dei numeri...
-Impostando invece come testo delle parole... Null'altro che simboli strani :sweat_smile: :sweat_smile: :sweat_smile:

Sempre e soltanto sul primo rigo =(

Riesci a collegare il display direttamente all'Arduino bypassando il modulo ed usando la liquidcrystal normale?

Si, impiegando il monitor nel modo consueto non mi da alcun tipo di problema; funziona ottimamente.
Penso si possa quindi supporre che il problema sia dell' mjkdz; ed in particolare, correggetemi se sto errando, ma potrebbe essere un problema di decodifica... (se si considera errata la supposizione che traduca istantaneamente ciò che viene scritto con alfabeto occidentale in aramaico-cinese-cirillico) :roll_eyes:

Inoltre mi sono messo a seguire le piste sul modulo e sono riuscito ad acquisire la certezza di alcuni PINs del malefico PCF8574 (La cui sigla è stata tuttavia raschiata via in modo da rendere impossibile l'effettiva identificazione dello stesso):

  • P7 corrisponde al polo positivo del led di retroilluminazione.
  • P4 = Enable
  • P6 = RS

Purtroppo degli altri non ne ho la totale certezza perchè le piste si trovano sotto al CIP; ma penso di poter affermare con un buon 90% di probabilità che anche gli altri Pin corrispondano alle dichiarazioni del modulo.

Help =(