Gestire display LCD SainSmart compatibile Arduino
Home › Forum › Controllori SlimLine e Netsyst (LogicLab) › Gestire display LCD SainSmart compatibile Arduino
- Questo topic ha 10 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 2 anni, 11 mesi fa da
Sergio Bertana.
-
AutorePost
-
Febbraio 18, 2014 alle 1:14 pm #35518
Sergio Bertana
Amministratore del forumA seguito dall’interesse sollevato da questo topic, vista la disponibilità di display compatibili Arduino ho pensato di realizzare un progetto per la gestione di un LCD 4*20 IIC/I2C/TWI 1602 Serial LCD Module Display For Arduino UNO MEGA R3 della SainSmart.
In questi moduli al posto di un display LCD con interfaccia I2C nativa viene utilizzato un PCF8574 “Remote 8-bit I/O expander for I2C-bus per gestire i segnali di controllo di un display con interfaccia parallela QC2004A Systronix basato sul controller HD44780U della Hitachi (Datasheet). Non ho trovato uno schema elettrico, ma vista l’estrema semplicità del modulo ho ricavato le connessioni tra il chip di I/O ed il display.
P0 -> Rs, P1 -> R/W, P2 -> En, P3 -> Backlight, P4 -> D4, P5 -> D5, P6 -> D6, P7 -> D7.
Come si vede tutti i segnali di controllo del display sono simulati con dei pin di I/O dell’I/O expander ed il display viene gestito con un interfacciamento a 4 bit. Nel progetto come si vede dalla stampa, la funzione ArduinoLCD provvede alla inizializzazione ed alla visualizzazione dei dati sul display. Alla accensione il controller Hitachi si predispone per interfaccia a 4 bit ed i comandi a 8 bit devono essere inviati come sequenza di due comandi a 4 bit consecutivi. Per poter inviare i comandi a 8 bit in modo semplice ho realizzato la funzione LCDOut8Bit.
Per la definizione dei messaggi viene utilizzata la gestione HMI integrata in LogicLab che permette di configurare il tipo di LCD utilizzato e definire oltre ai testi anche le variabili da visualizzare (Screenshot). Ecco come si presenta il display connesso ad un modulo CPU Compact (Vedi foto), allego download programma.
Marzo 11, 2014 alle 11:30 am #38120Sergio Bertana
Amministratore del forumRicevo da un cliente un display compatibile Arduino della YwRobot (Vedi foto), il cliente me lo invia da testare in quanto con il programma di esempio del post precedente il display continua a non visualizzare nulla.
Connesso all modulo CPU SlimLine in effetti verifico che il display non viene gestito.Visto che guardando le caratteristiche del “PCF8574 Remote 8-bit I/O expander for I2C-bus” trovo indicazioni molteplici sul suo range di indirizzi, controllo se effettivamente il chip ha indirizzo 16#3F oppure no.
Con un semplice programma ST eseguo la chiamata alla funzione SysI2CWrRd provando a passare indirizzi I2C da 16#20 a salire e controllo il ritorno della funzione. Così scopro che il display ha indirizzo 16#27.
Per poter gestire questo display occorre modificare l’indirizzo I2C del display nel programma di esempio, in testa a LCDMessages:LCD.I2CAddress:=16#27; (* LCD I2C address *)Attenzione, essendo l’indirizzo del display compreso nel range di indirizzamento dei moduli di estensione del sistema, la funzione SysI2CWrRd ne bloccava l’accesso.
Abbiamo rilasciato una nuova versione del firmware CPU ARM7 codice SFW184A860 che permette di accedere anche a questi indirizzi, pertanto occorre eseguire l’upgrade del sistema operativo (Vedi nota).
Agosto 19, 2016 alle 5:05 pm #39683Andrea
PartecipanteBuona sera, ho un display simile basato sul PCF8574AT solo che è un 16X02, ho provato a collegarlo e non visualizza niente, come posso modificare il programma per il 16X02 ?
Agosto 22, 2016 alle 6:08 am #39684Sergio Bertana
Amministratore del forumLa prima verifica da fare è come già sugerito nel post precedente, con un semplice programma ST con la funzione SysI2CWrRd scoprire l’indirizzo I2C del modulo e se diverso da 16#3F modificarlo nel programma.
Questi moduli display utilizzano un remote 8-bit I/O expander come ad esempio il PCF8574 per pilotare il bus del modulo LCD. In pratica utilizzano gli 8 bits di uscita del bus expander per gestire il bus a 4 bit ed i comandi di scrittura del display. Naturalmente ogni costruttore adotta un suo schema di collegamento tra il bus expander ed il display quindi occorre verificare è se il collegamento è lo stesso che ho indicato nel FB ArduinoLCD del programma.
Il programma ha tutti i sorgenti proprio per mettere in grado chiunque di modificarlo a suo piacere, quindi verificato i punti precedenti puoi agire sul FB per adattarlo al tuo display. Negli ultimi posts di questo topic ci sono altre informazioni utili.
Agosto 23, 2016 alle 11:36 am #39685Andrea
PartecipanteRisolto era un problema di connessione al bus I2C ricontrollando lo schema elettrico e rifacendo le connessioni funziona tutto con l’indirizzo 16#3F. Grazie di tutto.
Novembre 9, 2020 alle 5:30 pm #58189Fabio Romani
PartecipanteStò cercando di utilizzare un vostro programma Arduino LCD ed LCDMessages, con un display a 4 righe e controller PCF8574T in bus I2C, funziona benissimo senza problemi ma non riesco ad importare delle librerie standard per permettermi di acquisire un sensore analogico.
Cerco di caricare la libreria da progetto e procedo ad istanziare l’oggetto, completo il programma in FBD e quando vado a compilarlo mi dà errore oggetto non trovato dove sbaglio? Potete aiutarmi?
Novembre 9, 2020 alle 5:34 pm #58194Sergio Bertana
Amministratore del forumScusa ma non ho ben capito cosa non ti funziona… La parte difficile era fare funzionare il display LCD per l’acquisizione analogica è tuto molto semplice devi utilizzare il FB SysGetAnInp definendo l’indirizzo del modulo, il canale di acquisizione sul modulo ed il modo di acquisizione.
Il FB SysGetAnInp è un FB embedded non devi utilizzare nessuna libreria. Ma siccome mi parli di libreria da caricare mi viene il dubbio che stia facendo qualcosa di diverso da quello che io immagino.
Novembre 11, 2020 alle 10:21 am #58197Fabio Romani
PartecipanteVolevo acquisire una lettura analogica da un sensore di temperatura e visualizzarla nel display utilizzando sia la FB SysGetAnInp che la FB ValueScale e Lramp ma queste si trovano nella libreria che una volta caricata in LogicLab non riesco a importare le FB nel progetto, ovvero creo il programma in FBD ma quando vado a compilare mi dà errore oggetto non trovato.
Novembre 11, 2020 alle 10:29 am #58199Sergio Bertana
Amministratore del forumGli oggetti come la SysGetAnInp sono embedded quindi vanno solo istanziati, mentre per gli altri oggetti li devi importare dalla relativa libreria. A quanto dici tu hai inserito nel progetto l’intera libreria eLLabUtyLib, come soluzione può essere utilizzata ma per le librerie come la eLLabUtyLib è preferibile solo importare gli oggetti che ti servono per non appesantire il programma sorgente con oggetti inutili (Vedi articolo).
Se la libreria è stata importata correttamente come dici non capisco il problema, per usare le FB occorre istanziarle, cioè creare una variabile di tipo del FB da utilizzare e poi inserire nel programma la variabile creata.
Aprile 24, 2022 alle 8:46 pm #65058Andrea
PartecipanteHo già collegato i display arduino con adattatore I2C pcf8574at, ho trovato un display 40×04 mdls40466.
Unico problema il display visualizza solo la prima riga, non so come modificare la function block “ArduinoLCD” per fare in maniera che funzioni.
Maggio 6, 2022 alle 3:46 pm #65223Sergio Bertana
Amministratore del forumOgni display ha le sue impostazioni, intanto devi controllare come impostare i parametri nel comando “Function set” nell’esempio è settato DL, N, F”, 8 bits, 2 lines, 5*7 dots devi vedere come vuole le impostazioni il controller del tuo display.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.