Pages: [1] 2   Go Down
Author Topic: [RISOLTO] Lcd i2c non vuole funzionare  (Read 2346 times)
0 Members and 1 Guest are viewing this topic.
Rovereto
Offline Offline
Full Member
***
Karma: 5
Posts: 172
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Miei cari compagni d'Arduino in questa difficile serata chiedo umilmente il vostro aiuto!
Sto provando e riprovando ad interfacciare uno schermo lcd 16x02 ad Arduino via i2c con una apposita board, (china style)
Premetto che ho testato lo schermo lcd con i collegamenti qua proposti http://arduino.cc/en/Tutorial/LiquidCrystal
e funziona perfettamente ma quando provo a collegarlo tramite i2c le cose collassano:
utilizzando la libreria LiquidCrystal_i2c e il seguente codice

Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>



#define BACKLIGHT_PIN     13

LiquidCrystal_I2C lcd(0x20);  // Set the LCD I2C address

//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE);  // Set the LCD I2C address


// Creat a set of new characters
const uint8_t charBitmap[][8] = {
   { 0xc, 0x12, 0x12, 0xc, 0, 0, 0, 0 },
   { 0x6, 0x9, 0x9, 0x6, 0, 0, 0, 0 },
   { 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0, 0x0 },
   { 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0, 0x0 },
   { 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0x0 },
   { 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0x0 },
   { 0x0, 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0x0 },
   { 0x0, 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0x0 }
  
};

void setup()
{
   int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0]));

  // Switch on the backlight
  pinMode ( BACKLIGHT_PIN, OUTPUT );
  digitalWrite ( BACKLIGHT_PIN, HIGH );
  
  lcd.begin(16,2);               // initialize the lcd

   for ( int i = 0; i < charBitmapSize; i++ )
   {
      lcd.createChar ( i, (uint8_t *)charBitmap[i] );
   }

  lcd.home ();                   // go home
  lcd.print("Hello, ARDUINO ");  
  lcd.setCursor ( 0, 1 );        // go to the next line
  lcd.print (" FORUM - fm   ");
  delay ( 1000 );
}

void loop()
{
   lcd.home ();
   // Do a little animation by writing to the same location
   for ( int i = 0; i < 2; i++ )
   {
      for ( int j = 0; j < 16; j++ )
      {
         lcd.print (char(random(7)));
      }
      lcd.setCursor ( 0, 1 );
   }
   delay (200);
}

Non sccede altro che lo schemrino si illumina a gonfie vele e poi nisba.. nessun carattere, pure ruotando il potenzometro del controller i2c non succede assolutamente nulla.

In cosa posso sbagliare??
l'lcd è questo, comandato da un HD44780:
http://www.ebay.it/itm/1pcs-1602-LCD-Verdant-Characters-Yellow-Backlight-HD44780-New-/281051859848?pt=LH_DefaultDomain_0&hash=item416fff0b88#ht_3686wt_1508

mentre l'interfaccia i2c è questa:
http://www.ebay.it/itm/170926744803?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649#ht_4108wt_1344

ovviamente collego ai 5v e gnd di arduino con null'altro collegato, e ovviamente l'SDA e SCL!

Unica modifica che ho fatto è che quando ho controllato l'interfaccia seriale aveva a mio avviso due pin male saldati che facevano contatto tra loro: quelli che corrispondono al D6 e D7 dell'lcd (ho proceduto subito a togliere il contatto).

-Curiosità: sul sito dicono che l'addres è 0x27 ma quando uso l'i2c scanner mi dice che è collegato un dispositivo all'indirizzo 0x20 (che è poi quello che utilizzo io)

Vi chiedo gentilmente di aiutarmi! non so più dove sbattere la testa!
Sarà il codice sbagliato o è l'interfaccia i2c che può essere difettata?

Grazie!
« Last Edit: January 24, 2013, 06:08:50 am by leouz » Logged

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai provato facendo semplicemente uno degli esempi?
Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x20,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()
{
}
come vedi in questo codice la libreria è inizializzata non come lcd.begin() ma come lcd.init()
Logged

Rovereto
Offline Offline
Full Member
***
Karma: 5
Posts: 172
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mi sa che è una vecchia versione perchè mi da errore di compilazione...
Logged

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma che ide stai usando,sulla 1.0.1 carica e funziona.....
Logged

Rovereto
Offline Offline
Full Member
***
Karma: 5
Posts: 172
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

l'1.0.3

ma la libreria è questa giusto? https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 77
Posts: 2110
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Codesta schedina usa un PCF8574 per gestire l'I2C.
Non so' perche', ma con la libreria che hai scaricato tu, non funziona ( l'ho solo installata per provarla senza neanche cercaredi capire perche' ), mentre una libreria che funziona e' a questa pagina http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C/  e lo sketch che ha allegato Tonid si riferisce proprio a questa
Logged

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Esatto,è come dice brunello e va bene anche con l'ide 1.0.3
Logged

Rovereto
Offline Offline
Full Member
***
Karma: 5
Posts: 172
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok ho caricato la libreria, ho cancellato la liquidcristal normale perche boh dava problemi e ora il problema è lo stesso compila ma non si vedde niente!
non so dire se il micro è chip è quello perche è stato grattato via il codice! O.o
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 77
Posts: 2110
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ma quale sketch hai usato ?

e poi hai messo l'indirizzo giusto ... LiquidCrystal_I2C lcd(0x20,16,2);

il trimmer del contrasto e' regolato ?
Logged

Rovereto
Offline Offline
Full Member
***
Karma: 5
Posts: 172
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il codice questo:
Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x20,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()
{
}

il potenziometro è da tre ore che giro e rigiro in tutti i sensi ma non si vede un cavolo, che sia quello mal messo? che poi il fatto che non abbia fine corsa non aiuta.
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 77
Posts: 2110
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se l'ICscanner ti diceva che era a 0X20 codesto sketch deve funzionare alla prima

il trimmer va' regolato fino a quando non vedi apparire dei quadratini scuri, poi torni leggermente indietro


non dovrebbe essere neanche un problema della vecchia libreria, perche' se ben ricordo quello sketch non si compila con la libreria che usavi all'inizio.

SDA e SCL sono collegati giusti ?
SDA = A4
SCL = A5

Logged

Rovereto
Offline Offline
Full Member
***
Karma: 5
Posts: 172
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

l'indirizzo è giusto, infatti al reset di arduino, lo schermo si spegne e poi si riaccende (retroilluminazione)

I collegamenti sono giusti, controllati 1000 volte  smiley-wink

alla rotazione del trimmer lo schermo non reagisce (ho fatto svariati giri sia in un senso che in un altro), non vedo quadratini neri tantomeno la tanta sospirata scritta "Hello, World!   smiley-cry
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 77
Posts: 2110
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non fosse che mi mandi a quel paese... ti direi di provare a ricollegarlo senza schedina....
tanto per capire se puo' essere il trimmer che gira gira se n'e' andato all'altro mondo
Logged

Rovereto
Offline Offline
Full Member
***
Karma: 5
Posts: 172
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

momento...
io il pcf8547 ce l'ho anche "sfuso" posso provare a ricreare il circuito su breadboard e vedere se funge...
anche perchè il trimmer non lo posso togliere a meno che lo dissaldo..
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 77
Posts: 2110
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se vai nella cartella che hai scaricato ( LiquidCrystal_I2C ) e che hai copiato nella libreria, c'e' una sotto-cartella ( info ) e dentro lo schema di collegamento di un PCF8574 a un LCD
Logged

Pages: [1] 2   Go Up
Jump to: