Go Down

Topic: [RISOLTO] Lcd i2c non vuole funzionare (Read 2 times) previous topic - next topic

leouz

Jan 21, 2013, 09:12 pm Last Edit: Jan 24, 2013, 12:08 pm by leouz Reason: 1
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: [Select]
#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!

tonid

Hai provato facendo semplicemente uno degli esempi?
Code: [Select]

#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()

leouz

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

tonid

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

leouz


Go Up