Gestire display LCD SainSmart compatibile Arduino

Attenzione !I messaggi sul forum potrebbero essere modificati dal nostro staff. La data e l'ora dei messaggi potrebbe non essere quella di invio ma quella di moderazione da parte dello staff. Grazie per l'attenzione.

Home Forum Controllori SlimLine e Netsyst (LogicLab) Gestire display LCD SainSmart compatibile Arduino

Stai visualizzando 9 post - dal 1 a 9 (di 9 totali)
  • Autore
    Post
  • #35518
    Sergio Bertana
    Amministratore del forum

    A 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.

    #38120
    Sergio Bertana
    Amministratore del forum

    Ricevo 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).

    #39683
    Andrea
    Partecipante

    Buona 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 ?

    #39684
    Sergio Bertana
    Amministratore del forum

    La 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.

    #39685
    Andrea
    Partecipante

    Risolto 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.

    #58189
    Fabio Romani
    Partecipante

    Stò 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?

     

     

     

     

    #58194
    Sergio Bertana
    Amministratore del forum

    Scusa 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.

    #58197
    Fabio Romani
    Partecipante

    Volevo 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.

    #58199
    Sergio Bertana
    Amministratore del forum

    Gli 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.

Stai visualizzando 9 post - dal 1 a 9 (di 9 totali)
  • Devi essere connesso per rispondere a questo topic.