Go Down

Topic: (spero) piccolo problema con LCD (Read 3 times) previous topic - next topic

leo72

Vediamo se ho capito il problema.

Il display è I2C (non seriale) per cui viene inizializzato lato Arduino, che sul bus I2C funge da master aprendo la comunicazione verso il micro che funge da slave I2C sul retro del display.
Se è così, scollegando l'alimentazione al display e poi rendendogliela, l'Arduino non riesce più a comunicare con esso: perché hai sganciato il display dal bus I2C. Il reset riavvia lo sketch, quindi riavvia anche la parte che riapre la connessione verso il display.

Ipotizzo questo senza vedere lo sketch.

Sul fatto che il display tenga i caratteri in memoria, mi suona strano ma forse è il suo modo di operare?

Subia75

esatto il mio display è I2C.

penso che sia un problema di tempi di inizializzazione, quando faccio upload e avvio lo sketch la prima volta perchè se dopo resetto arduino scrive correttamente.

devo ancora provare a ritardare l'inizializzazione questa sera devo trovare il tempo di fare la modifica.

plrmntonio


eventualmente tornerò  ]:D  :D


eccomi tornato... il problema si è ridotto saldando il tutto ma al primo avvio mi da sempre lo stesso problema...

1. Avvio Arduino
2. Inizializzo il display
3. Sullo schermo non compare niente
4. Reset Arduino
5. Tutto funziona alla perfezione(quasi)


Il discorso è che io non voglio dover resettare la board... cosa può essere?

Michele Menniti

Hai ragione a non volerlo fare, forse dovresti provare ad inserire un ritardo all'inizializzazione del display LCD, oppure inserire un ritardo tra l'inizializzazione e l'invio dei dati, secondo me si blocca proprio perché legge qualcosa mentre si sta ancora impostando.
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

plrmntonio


Subia75

confermo il ritardo del LCD mi ha risolto i problemi
ho fatto così poi ho aggiunto anche una scritta per 3 secondi:

   lcd.init();
   Serial.begin(9600); // vedere se serve attivare il serial monitor
   lcd.clear(); // pulisco il display LCD
   lcd.setCursor(0, 0);
   lcd.print("v 1.0 2012"); // versione programma
   delay(3000); //provo a dare un tempo di setting
   lcd.clear(); // ri-pulisco il display LCD e inizio il loop

Michele Menniti

e il ritardo quale sarebbe nel tuo caso? quei 3 secondi hanno la sola funzione di far vedere per quel tempo la scritta della versione software, non credo siano loro ad averti risolto il problema. Mi sarei aspettato un ritardo, anche di un solo secondo prima del print, però se ti funziona....
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

plrmntonio

probabilmente al suo display basta il ritardo dovuto alla funzione Serial.Begin()

Michele Menniti


probabilmente al suo display basta il ritardo dovuto alla funzione Serial.Begin()

Vero, non c'avevo pensato, del resto l'ha pure scritto che i tre secondi erano per la scritta, ma questo era chiaro, solo che io ho pensato si riferisse a quelli; magari ci darà lui un chiarimento definitivo, sono curioso... :D
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

Subia75

Sono daccordo però visto che non creandomi problemi ho messo un delay dopo quella scritta invece di uno prima e uno subito dopo.

A me succedeva quando mancava il delay e partiva il loop sul display e mi dava simboli strani se non resettavo la scheda.
se non ricordo male forse non avevo messo neanche un lcd.clear(); nel setup :smiley-roll:


Michele Menniti


Sono daccordo però visto che non creandomi problemi ho messo un delay dopo quella scritta invece di uno prima e uno subito dopo.

A me succedeva quando mancava il delay e partiva il loop sul display e mi dava simboli strani se non resettavo la scheda.
se non ricordo male forse non avevo messo neanche un lcd.clear(); nel setup :smiley-roll:



Beh, alla fine l'importante è che funzioni, mica devi tenere una conferenza per spiegarne le ragioni tecniche :)
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

Subia75

Non volevo spiegare la storia della mia vita con arduino.

volevo solo mettere qualche indicazione in più sui passaggi che ho fatto, magari poteva venire fuori qualche dimenticanza che posso aver fatto nella mia breve esperienza di programmazione con arduino e che mi può aiutare la comprensione di altri errori.

tutto qui.

plrmntonio

permettimi un paio di domande....

che board stai usando?
che versione del Compilatore?
a quali pin stai collegando il display?

plrmntonio

ah un'altra domanda mi potresti passare la libreria?

Subia75

Arduino uno R3
LCD 20x4 in I2C con i classici pin di comunicazione
compilata con la 0.23

ti allego la libreria che ho usato.

fammi sapere se ti funge.

Go Up