Salve ragazzi.
Dopo anni che usavo i display LCD con ingresso parallelo, mi sono deciso di passare all'ingresso seriale I2C.
Non lo avessi mai fatto, mi sono trovato in un mare di difficoltà (naturalmente per mia ignoranza).
Quando vado a caricare il programma su un Arduino Nano, mi da errore di caricamento.
Il programma, per essere sicuro, l'ho copiato dalla rete.
Come si può capire dalle mie difficoltà, non sono un esperto di Arduino.
Grazie a chi mi può aiutare.
Saverio.
Ecco il programma.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 20 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 20, 2);
void setup()
{
// initialize the LCD
lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
lcd.setCursor(2, 0);
lcd.print("Ciao Ragazzi");
delay(3000):
}
void loop()
{
lcd.print("12345");
delay(3000);
}
>saverio13: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).
In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag:
[code] _il _tuo_ codice_ [/code]
così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non avrai sistemato il codice come richiesto, nessuno ti potrà rispondere, quindi ti consiglio di farlo al più presto.
saverio13:
Quando vado a caricare il programma su un Arduino Nano, mi da errore di caricamento.
Devi darci due dati: quale errore di caricamento esattamente ti dà, ed esattamente quale libreria LiquidCrystal_I2C e versione stai usando (ce ne sono varie con lo stesso nome, purtroppo...).
>saverio13: Attento, per Arduino Nano (ATmega328P) hai DUE possibile scelte, Arduino Nano e Arduino Nano (old bootloaderd) ...
... se la tua è una vecchia scheda (o una scheda NON originale), probabilmente devi utilizzare la seconda!
Grazie per l'aiuto.
Sono andato sulle librerie e ho cliccato su LiquidCrystal_I2C di Frank de Brabander vers. 1.1.2.
Spero che sia stata caricata correttamente.
Il tipo di Arduino Nano è di concorrenza e non originale.
Lo stesso Nano funziona correttamente con un display LCD con dati paralleli.
Nella compilazione non mi da errore, ma nel caricamento nel micro, mi da errore durante il caricamento.
Errori:
avrdude: stk500_getsync() 9 of 10: not in sync: resp=0x30
avrdude: stk500_getsync() 10 of 10: not in sync: resp=0x20
Come faccio a capire se il mio Nano è Arduino Nano (old bootloaderd)?
Stacca tutto e prova a caricare il blink nella flash. Se carica con successo, il bootloader lavora correttamente.
Se termina con lo stesso errore allora potrebbero esserci due motivi:
il precedente skecth caricato scrive su seriale nel setup senza attendere un secondo
Il bootloader non c'è o la board è rotta.
Per aggirare il punto 1 puoi provare quanto scritto qui
Ho caricato sul Nano il programma Blink e funziona. Ho riprogrammato un vecchio programma con stampante termica seriale TTL e funziona.
Non ho grande esperienza, ma mi sembra di capire che l'inghippo stia nel mio programma, oppure sui settaggi di programmazione, oppure sulla libreria del display I2C.
Non ho grande esperienza, ma mi sembra di capire che l'inghippo stia nel mio programma, oppure sui settaggi di programmazione, oppure sulla libreria del display I2C.
Oppure un errore di collegamento hadrware, tipo impegni i pin TX ed RX, oppure corto o un reset fisso.
Controllo quindi i collegamenti e se pare tutto ok, copia l'errore paro paro e incollalo qui (abilita il modo verbose nell'IDE).
Hai un Arduino Nano, non originale, va comunque bene, a meno che non sia guasto.
Ma dato che con altro sketch (Blink) carica correttamente, l'Arduino Nano non è guasto, e quindi anche il bootloader è ok.
Non è un problema di driver USB-Serial perché il Blink lo carichi.
Tu in quello sketch carichi la libreria giusta (è la stessa che uso pure io, la "de Brabander") quindi non è un problema di libreria, che comunque darebbe eventualmente problemi di funzionamento, non di caricamento.
Per cui, le uniche cose che mi sembrano strane sono:
non conosco LCD da 20 caratteri per 2 righe, in genere sono 20x4 o 16x2: quale display esattamente hai?
quale interfaccia I2C hai? L'hai saldata tu? Puoi farci qualche foto e allegarle qui?
Ciao docdoc.
Grazie per il preciso riassunto.
Sono circa 2 anni che non usavo Arduino e ho superato abbondantemente i 75 anni. Di colpi ne perdo parecchi, abbiate pazienza.
Hai ragione, il display è un 20x4 oppure un 16x2.
Durante la programmazione del Nano, (lo chiamo così perchè sono imbufalito con lui), ad esso è collegato solo la sua alimentazione attraverso l'USB e niente altro.
Come già detto, il micro programma lo compila senza errori. Quando passa al caricamento nel Nano, mi esce l'avviso di errore nel caricamento dello sketch.
Ho un dubbio.
Nel programmino che ho copiato dalla rete, manca la definizione del pin di uscita dei dati seriali verso il display.
In uno stesso Nano che uso da più di un anno e che controlla una stampantina termica seriale TTl, nel suo programma dichiaro:
Come mai nel programma presentato, non c'e nessun riferimento per l'uscita seriale verso il display?
Può essere che manchi questi particolari? (naturalmente dovrò inserire questi dati).
Probabilmente questa mancanza non dovrebbe influire nel caricamento del programma.
Questa sera farò delle nuove prove, vediamo se avrò più fortuna. Vi terrò informati.
saverio13:
Errori:
avrdude: stk500_getsync() 9 of 10: not in sync: resp=0x30
avrdude: stk500_getsync() 10 of 10: not in sync: resp=0x20
QUESTI ERRORI nulla hanno a che vedere con il programma ... il caricamento e del tutto indipendente da cosa si carica, salvo che ... per le dimensioni del programma.
Se con piccoli programmi il caricamento va a buon fine e con un programma più grande il caricamento fallisce è molto probabilmente un problema hardware (... infatti, del contenuto del codice, la fase di caricamento se ne infischia altamente) ...
... magari è la flash che è danneggiata e in certi indirizzi da errore, magari è la seriale che ha qualche problema, magari il clock, magari alcuni piedini in uso, ecc. ecc. , ma di sicuro, NON il programma che si carica (ripeto, salvo che per le dimensioni).
saverio13:
Sono circa 2 anni che non usavo Arduino e ho superato abbondantemente i 75 anni. Di colpi ne perdo parecchi, abbiate pazienza.
Vabbè, hai solo 15 anni più di me (comunque complimenti! ).
Hai ragione, il display è un 20x4 oppure un 16x2.
Ok, quindi quale dei due hai? Devi modificare di conseguenza il costruttore. ad esempio:
LiquidCrystal_I2C lcd(0x27, 20, 4);
Nel programmino che ho copiato dalla rete, manca la definizione del pin di uscita dei dati seriali verso il display.
Ecco, appunto. Per questo ti chiedevo "come hai collegato il bus I2C?"
L'I2C, ossia SDA e SCL è implementato su dei pin fissi che corrispondono rispettivamente ai pin A4 e A5 per cui devi collegarli lì e non, come temo, sui pin seriali D0 e D1!
Poi una volta fatto questo, prova e facci sapere. Se dovesse funzionare quindi il caricamento ma non la visualizzazione sul display, è possibile o che l'interfaccia I2C abbia un indirizzo diverso da 0x27 (se ci fai una foto dell'interfaccina possiamo dirti meglio...) oppure che la libreria abbia qualcosa di diverso (ad esempio non si inizializza con begin() ma con init(), qui ti conviene vedere gli esempi forniti insieme alla libreria)...
Rieccomi.
Dopo aver fatto un centinaio di prove e cambiamenti sui settaggi del programmatore, senza alcun risultato positivo, mi è venuto il mente di provare con un IDE precedente all'attuale.
Meraviglia, la programmazione del micro funziona perfettamente.
L'unica cosa che ho cambiato (su suggerimento di docdoc) è stata la funzione "lcd.begin();" con "lcd.init();.
Dopo aver perso sicuramente una decina di ore nelle prove, non ci ho capito niente di cosa è cambiato, ma questo è dovuto alla mia scarsa preparazione. Comunque questo ostacolo mi sembra superato.
Per carità, non lasciatemi solo a completare tutte le funzioni che deve ancora svolgere il "Nano".
Infatti ora completo il programma con la parte di controllo di una stampantina seriale TTL (che ho già provato a parte), e la lettura dei dati in uscita per una stampante parallela (già funzionante su altra scheda).
Solo dopo tutto questo vi darò tregua.
In conclusione questo mio "coso", deve leggere dei dati da un connettore di una stampante, e inviarli sul display seriale e sulla stampantina seriale TTL.
saverio13:
Dopo aver fatto un centinaio di prove e cambiamenti sui settaggi del programmatore, senza alcun risultato positivo, mi è venuto il mente di provare con un IDE precedente all'attuale.
Meraviglia, la programmazione del micro funziona perfettamente.
Se hai risolto, bene, ma per curiosità visto che non capisco in che modo c'entri l'IDE, quali sono le versioni di IDE che hai provato, ossia quello "nuovo" che non ti funziona e quello "vecchio" che invece va?
L'unica cosa che ho cambiato (su suggerimento di docdoc) è stata la funzione "lcd.begin();" con "lcd.init();.
Ok questo lo immaginavo vista la versione di libreria che hai detto di usare...
la parte di controllo di una stampantina seriale TTL (che ho già provato a parte), e la lettura dei dati in uscita per una stampante parallela (già funzionante su altra scheda).
Ah, ecco, ma quindi la seriale della stampantina a quali pin li hai collegati? Perché io continuo a sospettare che non sia il discorso dell'IDE ma che tu avessi mantenuto collegata la stampantina al Nano sui pin 0 ed 1, e che sia questo ad influire con la programmazione (perché quei pin vengono "virtualizzati" su USB per cui quando usi la USB quei pin sono impegnati nella comunicazione col PC che vanno lasciati scollegati!).
Se così fosse, il problema non è l'IDE ma dovresti semplicemente usare una SoftwareSerial su due altri pin liberi (e diversi da 0 ed 1 quindi) e collegare la stampantina a quelli.
Facci sapere.
Tutte le prove di caricamento sono state fatte con solo collegamento del connettore USB sulla schedina Nano.
La versione vecchia del programmatore era "Arduino 1.0.1". (con questa sono riuscito a programmare il micro)
La versione nuova scaricata con aggiornamento fatta circa 10 giorni fa è "Arduino-Nightly" (con questa versione non mi funziona).
Oggi, dopo che il display funziona, collegherò la stampantina termica che non usa i pin 0 ed 1 e che già funziona in un altro circuito di prova.
A parte tutto questo, ho gia ordinato altri 3 Arduino Nano. Ho sempre il sospetto che quello che sto usando possa essere "fuori di testa".
Vi terrò informati dopo il montaggio della stampantina.