Usare un LCD compatibile HD44780

Apro un nuovo topic per trattare un argomento che potrebbe interessare anche altri.
Ossia: come si usa un LCD compatibile Hitachi HD44780?
Non mi prendete per scemo, la domanda ha una sua giustificazione XD
Se collego l'LCD come si deve (quindi tralasciamo errori di connessione, funziona tutto) e spedisco del testo questo si vede e viene visualizzato anche nella posizione che dico io. Ma se voglio spedire del testo in un secondo tempo, come fare?

Tutte le volte che spedisco un testo, lo vedo, ma se spedisco 2 testi, non vedo nulla, sembra quasi che l'LCD faccia un clear :astonished:

Mi date per favore la sequenza che usate voi per, diciamo, aggiungere del testo ad un'immagine già visualizzata?
Ad esempio, la prima volta spedisco "CIAO" in posizione 0,0; se poi volessi spedire "PREMI IL TASTO 1" su 0,1 (quindi sulla 2a riga)?
Io farei:

lcd.clear();
lcd.setCursor(0,0);
lcd.print("CIAO");
(.....)
lcd.setCursor(0,1);
lcd.print("PREMI IL TASTO 1");

lcd.begin(X,Y) lo eseguo solo 1 volta, all'interno di setup().
giusto?

Io pulisco la riga, riscrivo la 1a parte e aggiungo la seconda senza tanti sbattimenti :slight_smile:

Ti spiace se amplio la domanda? :astonished:
Immaginiamo di voler anche scrivere "contemporaneamente" su entrambe le righe del display, ma come se fossero divise ognuna in tre settori, tipo:

1a riga: sx-----valore-----dx
2a riga: s2-----val_2_-----dx

Non voglio "rubare" il Topic a Leo :blush:, se qualcuno che ne sa tanto ha risposta anche per me mi farebbe piacere, altrimenti ignorate questo post e date risposta solo a Leo. A me basterebbe anche che mi diciate che CERTAMENTE non si può fare e cambio direzione di idea.

ratto93:
Io pulisco la riga, riscrivo la 1a parte e aggiungo la seconda senza tanti sbattimenti :slight_smile:

Quindi in pratica dovrei rimandare anche tutto il testo già scritto?

Si... lo so che occupa di più ma fai molto prima...
credo sia intrinseco della libreria che quando vai a riscrivere in una posizione della riga cancelli il resto che già è presente...

ratto93:
credo sia intrinseco della libreria che quando vai a riscrivere in una posizione della riga cancelli il resto che già è presente...

Attendo altre conferme poi, se è così, stasera provvedo a modificare lo sketch per gestire l'LCD in questa maniera.

Ma come piloti il display ? (4 o 8 bit?)
hai provato a mettere un piccolo delay fra la scrittura di una riga e l'altra?

4 bit
C'è un delay da 50 ms più altri calcoli vari.

Io riposiziono il puntatore, e li scrivo.
http://arduino.cc/en/Reference/LiquidCrystalSetCursor
Setti il cursore, mandi la scritta e si aggiunge a quello che c’e’ gia’ scritto sullo schermo.
F

Ma anch'io riposiziono il cursore... solo che sparisce tutto...
boh... riguarderò un po'... cmq mi confermate che il codice che ho postato è giusto, vero?

non sarà un pò pochino?...
io ho appena provato (su un 4313 però) e con un delay di 100ms funziona.

Riproverò. Cmq considera che i tempi ci sono: i comandi li spedisco dal 328 via I2C, li leggo dal tiny84 e poi li eseguo, quindi quei 50 ms sono di "proforma". Proverò a mettere 100ms.
Uso il micro a 1 MHz, potrebbe dipendere anche da una risposta "lenta" del micro? Tu a quanto hai il Tiny?

a 8Mhz, a meno di 8 non ho mai provato
edit:
ma stai comandando il display dall’84?

Sì, il Tiny fa le veci della GPU :wink:
In questo modo salvo pin preziosi dell’Atmega e posso permettermi il lusso di metterlo in standby fisso quando non mi serve. :smiley:

Proverò anche a metterlo a 8 MHz, l’avevo lasciato ad 1 per risparmiare corrente.

Leo Leo....dove hai preso il tuo display? forse è uguale al mio, anche io sto avendo qualche problemino! vediamo se possiamo risolvere!

è un compatibile, e mi sfarfalla ad ogni lcd.clear() anche se metto una delay(200).

per la precisione se lo guardo dall'esatto frontale, non si nota, ma non appena angolo un po la visuale si vede moolto sfarfallante!

per me è un problema di timing della libreria, può essere?

uso una cosa del genere:

void loop() {

lcd.clear();
lcd.setCursor(0, 0);
lcd.print(valorex);
lcd.setCursor(0, 1);
lcd.print(valorey);

delay(100);
}

ci avrei scommesso che parlavi dell'84 e non del 328 :wink: ho chiesto per sicurezza.
se non ne vieni fuori, dai un occhiata anche alla libreria di Peter Fleury per gli LCD, (ottima come tutte le altre).
http://homepage.hispeed.ch/peterfleury/avr-software.html

E' questo.
Cmq sul fatto che sfarfalli non ci ho fatto caso. A me pare che i pixel siano belli stabili.

ma forse, visualizzi soltanto e cancelli una volta ogni tanto o quando cambia il valore?

io cancello ciclicamente perche ho la visualizzazione dei RPM!

No, cancello solo quando devo svuotare il video.

Ricordo vagamente che c'era una libreria apposita per i 20x4 a 4 bit....