Go Down

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

Michele Menniti

#15
Jan 21, 2013, 11:08 pm Last Edit: Jan 21, 2013, 11:19 pm by Michele Menniti Reason: 1
essendo un multigiri è normale che ruoti tanto, ma il suo lavoro lo sta facendo? anche se non vedi caratteri, riesci a vedere che aumenta il contrasto dello sfondo o proprio non succede nulla? Puoi misurare sui laterali del trimmer e sul centrale che tensione c'è?

EDIT: sul sito c'è scritto "the backlight and contrast is adjusted by potentiometer" e questo non è possibile, visto che i pin di backlight e di contrast sono differenti sul display e NON possono essere contemporaneamente pilotati da un SOLO trimmer
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

tonid

Come dice Michele potrebbe essere che il trimmer sia un multigiri e,se così fosse,è normale che fa molti giri.
La cosa che mi sembra strana è che non serve un trimmer multigiri in questo caso  :smiley-roll:
In ogni caso ti conviene fare delle misure tra il pin 3 dell'lcd (contrasto) e gnd e,ruotando il trimmer,controlla che il valore di tensione letto cambi.
Se,come ti ha detto brunello,con l'i2c scanner hai come indirizzo 0x20 il display deve funzionare per forza con lo scketch che hai caricato,potresti anche provare a mettere due resistenze di pull-up sulle linee SDA ed SCL da 2,2K (mi pare che non ci sono sulla schedina).

cyberhs

L'indirizzo è 0x27 e non 0x20!

Michele Menniti

e come si spiega la risposta dello scanner? :smiley-roll-sweat:
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leouz

sono qua con il multimetro, allora ai lati del trimmer misuro 5 , mentre centrale 3.5 (effettivamente ruotando in quella centrale cambia)
ho anche controllato che sui pin dello schermo ci siano gli stessi valori, e corrispondono.

non so più dove sbattere la testa.

non si modifica assolutamente il contrasto, non vedo ne quadrattini neri, tantomeno caratteri, solo lo schermo illuminato in tutto il suo splendore.

superzaffo

Ho letto un po' il topic..
Prova un po' a seguire quello che c'è scritto in questo link. Eventualmente prova anche con un ide vecchio.
http://garagelab.com/profiles/blogs/tutorial-lcd-using-only-2-arduino-pins-with-pcf8574-and-i2c

In effetti il sito ebay indica l' indirizzo 0x27 ma il default del chip è 0x20. probabile che non abbiano fatto il set dell' indirizzo nella schedina.
Come dice tonid, che se non vedi cambiamenti nel display girando il trimmer, molto probabilmente sono da controllare la piedinature lcd e schedina. (quei trimmer per variare di molto i valori, devi fare parecchi giri alla vite)
Con il link che ti ho girato lo puoi fare.

L' unico dubbio che ho è: Siamo sicuri del tipo di chip che monta la schedina ? io non ho trovato specifiche nel sito, ma mi sono basato quanto detto sul topic.

leouz

Alla fine girando e rigirando è comparsa...  :smiley-roll-blue:

non so... magari ho girato poco io... mi sa strano.
Comunque tutto è bene ciò che finisce bene =)
Che figuraccia!

superzaffo

ok quindi bastava girare di più la vite ...
Bene siamo contenti che tu abbia risolto.  ;)

Adesso però, se vuoi collegarlo correttamente via I2C, segui quello che ti ha detto Tonid: metti delle resistenza di pull-up da 2.2K o da 1K.

ciao

PaoloP

#23
Jan 22, 2013, 10:29 pm Last Edit: Jan 22, 2013, 10:35 pm by PaoloP Reason: 1

metti delle resistenza di pull-up da 2.2K o da 1K

Ricorda di disattivare quelle interne dopo l'inizializzazione della Wire.

Ma secondo voi non sarebbe meglio se nella libreria aggiungessero un parametro in modo da poter fare
Code: [Select]
wire.begin(PULLUP_OFF)
oppure
Code: [Select]
wire.begin(address, PULLUP_OFF)

leo72



metti delle resistenza di pull-up da 2.2K o da 1K

Ricorda di disattivare quelle interne dopo l'inizializzazione della Wire.

Ma secondo voi non sarebbe meglio se nella libreria aggiungessero un parametro in modo da poter fare
Code: [Select]
wire.begin(PULLUP_OFF)?

Tempo fa avevo fatto un mod per il mio core in cui avevo messo proprio questo comando  :smiley-yell:
Poi l'ho perso perché aggiornando da versione a versione mi sono dimenticato di reinserirla  :smiley-sweat:

Brunello

Quote
Alla fine girando e rigirando è comparsa...

non so... magari ho girato poco io... mi sa strano.
Comunque tutto è bene ciò che finisce bene =)
Che figuraccia!


Quando ero bambino.... un " po' " di tempo fa'...  per la precisione in Belgio ( non so' se si usava cosi' anche in italia), ... mi mandavano dietro la lavagna

leouz

ma scusatemi, per usare la new-liquidcrystal (quella per usare la libreria menù MENWIZ) come devo agire?
Perche così non funzica..
Sulla documentazione dicono che i collegamenti vanno fatti così..
https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/i2c_lcd_schematic.jpg
Soltanto che non capisco cosa dovrei cambiare con il mio circuito attuale...  :(

superzaffo

Che tipo di problemi hai esattamente ?
Magari metti il codice che ti da il problema... o altro materiale che ci possa essere d' aiuto.

leouz

#28
Jan 22, 2013, 11:49 pm Last Edit: Jan 23, 2013, 12:09 am by leouz Reason: 1
praticamente con quella libreria la compila e carica direttamente ma non si vede nulla sul display, o meglio.. a volte si vede una sola riga di quadratini neri, a volte una qadratino lampeggiante che gira per lo schermo e dopo un pò svanisce.. tutti errori di visualizzazione un pò casuali, mai che vedo caratteri.

EDIT:
Sono riuscito a farlo funzionare tutto stava nel dichiarare
Code: [Select]
LiquidCrystal_I2C lcd(0x20, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE);

Code: [Select]
#include <Wire.h>
#include <LiquidCrystal_I2C.h>



// create an lcd instance with correct constructor for how the lcd is wired to the I2C chip
LiquidCrystal_I2C lcd(0x20, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE); // addr, EN, RW, RS, D4, D5, D6, D7, Backlight, POLARITY

// 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]));

 lcd.begin(16,2);  // initialize the lcd as 20x4 (16,2 for 16x2)
 
 lcd.setBacklight(1); // switch on the backlight

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

 lcd.home ();  // go home to character 0 on line 0 (1st line)
 lcd.print("Hello, ARDUINO ");  
 lcd.setCursor(0,1);  // character 0 on line 1 (2nd line)
 lcd.print (" FORUM - fm   ");

 delay(1000);
}

void loop()
{
  lcd.clear();
  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);
}


Grazie a tutti di tutto!

PaoloP

Ciao Leous,
potresti cambiare il titolo del primo topic e inserire una cosa del genere: "[Risolto] Lcd i2c PCF8574".

Potrebbe essere di aiuto ad altri in futuro
Grazie.  :smiley-mr-green:

Go Up