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...
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
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?
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 ) 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 =(
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...
#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
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)
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.