Vai al contenuto

Gestire un display alfanumerico con un modulo SlimLine

Home Forum Controllori SlimLine e Netsyst (LogicLab) Gestire un display alfanumerico con un modulo SlimLine

Stai visualizzando 15 post - dal 16 a 30 (di 31 totali)
  • Autore
    Post
  • #37924
    Sergio Bertana
    Amministratore del forum

    Con la nuova versione di LogicLab 2.2.0 è stato aggiunto un editor di messaggi per display alfanumerici, ora è possibile definire i messaggi da visualizzare sui display connessi al bus di espansione dei sistemi SlimLine direttamente da LogicLab (Topic).

    #37937
    Michele
    Partecipante

    Ho acquistato e connesso questo display al controller SlimLine: SainSmart IIC/I2C/TWI Serial 2004 20×4 LCD Module Shield For Arduino UNO MEGA R3, ho usato la libreria postata qualche post fa ma non ne vuole sapere di andare. Non c’è proprio modo di far andare il dispaly, ho provato sia con l’indirizzo 0x3F che con il 0x27 (che però ho visto che non è nel range degli indirizzi usabili sul bus I2C). Ho provato di tutto e di più ma proprio non va !

    #37938
    Sergio Bertana
    Amministratore del forum

    Per utilizzare un display connesso al bus di espansione dello SlimLine hai due diverse possibilità, utilizzi la mia libreria che è testata con il display suggerito (Che è da 2 linee da 16 caratteri) oppure ti sviluppi tu il driver di gestione display. Ogni display ha delle piccole differenze nella sequenza di inizializzazione e quello da te utilizzato ha addirittura 4 linee. Ho cercato su Internet il datasheet del display da te utilizzato ma non sono riuscito a reperirlo. Se anziché la libreria utilizzi il programma presente nel primo post di questo topic puoi modificarlo per adattare la sequenza di inizializzazione al tuo display. In modo particolare al CASE 3 dovrai modificare la riga.

    DWrBuffer[1]:=16#38; (* 8 bits, 2 lines, 5*7 dots *)

    Come vedi configura un display a 2 righe mentre il tuo è a 4, e poi dovrai anche modificare gli indirizzi di DDRAM a cui scrivere. Inoltre sono scritti 32 bytes di dato mentre il display ha 4 righe da 20 caratteri quindi 80 bytes. In pratica usando il linguaggio ST puoi gestire qualsiasi display ma bisogna conoscere le caratteristiche dell’hardware da gestire. Attenzione non puoi utilizzare display che hanno indirizzi I2C compresi tra 16#20 e 16#2F.

    #37940
    Michele
    Partecipante

    Stò attualmente usando la tua libreria ed ho fatto varie prove con i vari processi di inizializzazione del display, ma ovviamente non ne vengo a capo. Non riesco a trovare neppure io un datasheet del display. Un dubbio però mi viene: il display potrebbe non supportare la modalità 8bit, ma supporta solo la 4bit ? Leggevo che su LogicLab v2.2.0 c’è un tool che può gestire direttamente i display ?

    #37941
    Sergio Bertana
    Amministratore del forum

    La modalità 4/8 bit si riferisce alla connessione in parallelo, il controller del display può gestire sia la connessione I2C che la connessione su bus, il bus può essere a 4 o 8 bit. Ma quando si utilizza la connessione su I2C il dato è sempre a 8 bit.

    Il tool a cui ti riferisci è la possibilità di gestire il display dei sistemi Netlog III da LogicLab, in questo topic ho realizzato una FB apposita per gestire il display su bus I2C potendo definire i messaggi dall’editor di LogicLab. Ma utilizzo sempre un display da 2 righe per 16 caratteri.

    Naturalmente puoi modificare il FB per adattarla al tuo display. Ma venendo alle tue prove ho estrapolato un pezzo di codice della FB.

    DWrBuffer[0]:=16#80; (* Co:=TRUE, A0:=FALSE *)DWrBuffer[1]:=16#30; (* Default function set *)

    Result:=SysI2CWrRd(16#3F,02, ADR(DWrBuffer), 0, 0);S

    e lo esegui in un tuo program (Certo devi definire le variabili) puoi verificare il valore di Result, come vedi dal manuale la funzione SysI2CWrRd torna FALSE se errore, in questo modo almeno sappiamo se la connessione I2C e se l’indirizzo 16#3F del display sono corretti. Cosi si inizia a fare un po’ di troubleshooting sul problema.

    #37945
    Michele
    Partecipante

    Grazie per il supporto. Allora la funzione così come l’hai indicata tu torna sicuramente TRUE perchè mettendomi in stato l’array CaseNr vedo che il suo valore (dopo il ciclo di inizializzazione) assume 100 e ogni secondo cambia (tipo 110 … 111) quindi presumo che la funzione SysI2CWrRd torni TRUE.

    Ho provato a modificare l’indirizzo, tipo a portarlo a 16#3E o altro valore nel range degli indirizzi validi e la funzione torna sempre TRUE…

    #37946
    Sergio Bertana
    Amministratore del forum

    Il fatto che la funzione SysI2CWrRd tornasse sempre TRUE con qualsiasi indirizzo mi è parso indice di un bug, in effetti ho controllato il sistema operativo dello SlimLine ed ho trovato un errore nel ritorno della funzione. Ho provveduto a correggere l’errore nel nuovo sistema operativo SFW184A850. Puoi eseguirne il download dal sito da questa KB dove è spiegato come eseguirne l’upgrade.

    #37947
    Sergio Bertana
    Amministratore del forum

    Navigando su Internet ho trovato una spiegazione su come è realizzato il tuo display (Vedi forum Arduino). In pratica è un dispaly con interfaccia parallela 4/8 bit a cui è stato aggiunto un circuito stampato su cui è montato un I/O expander I2C (Vedi schema elettrico). Non ha nulla a che vedere con il display trattato nel forum in cui è il controller del display ad avere integrata l’interfaccia I2C.

    Per gestire questo display devi utilizzare i comandi I2C di gestione dell’I/O expander (Di cui è possibile reperire il datasheet). 4 degli 8 bit di uscita dell’I/O expander sono stati utilizzati per i dati del bus del display (Deve essere configurata una interfaccia a 4 bit), altri 3 bit gestiscono i segnali En, R/W, Rs del display. L’ultimo bit è utilizzato per il comando del LED di retroilluminazione. Il controller utilizato sul modulo display probabilmente è il classico HD44780 o equivalente di cui è facilissimo trovare documentazione. Ora hai le informazioni per sviluppare una tua FB di gestione, un ottimo banco di prova per apprendere la programmazione IEC61131 in linguaggio ST.

    #37949
    Michele
    Partecipante

    Grazie per le indicazioni preziosissime. Mi guardo un pò la documentazione e vedo cosa riesco a fare. In tutti i casi (positivo o negativo) posto qui il mio risultato in modo da condividerlo con altri, nel caso dovesse servire.

    #37952
    Michele
    Partecipante

    Rieccomi qui, nulla da fare. Ho provato a scrivere il mio FB per la gestione del lcd così come da documentazione (datasheet del Hitachi HD44780 LCD controller e del I/O Expander). Ma nulla, il display non reagisce. Consultando la documentazione del I/O Expander ho potuto constatare che il controller è un PCF8574T con pin A0, A1, A2 tutti a +Vcc, quindi indirizzo I2C=0x3F. Non riesco, ho dedicato l’intera giornata a questo problema ma senza venirne a capo… non so più che pesci pigliare… Aiuto!!!

    #37953
    Sergio Bertana
    Amministratore del forum

    Bene ora sai che indirizzo I2C utilizzare anche se ho delle riserve in quanto dal datasheet si deduce che il modello PCF8574 ha indirizzi da 16#20 a 16#27 mentre è il modello con il suffisso (A) PCF8574A che ha indirizzi da 16#30 a 16#3F (Topic).

    Ora occorre capire se ti è chiara la strada che devi percorrere. Tramite l’I/O expander devi simulare il bus che và verso il display quindi i comandi I2C devono essere impartiti all’I/O expander per fare in modo che sui suoi piedini escano i dati che il display ha bisogno. Per fare questo ti consiglio di realizzare una funzione di scrittura dati display a cui passare il dato (Deve essere su 4 bits). Ora tramite questa funzione potrai inviare i comandi al display seguendo la documentazione del driver HD44780 (Devi settare interfaccia a 4 bit quindi i comandi che sono tutti a 8 bit andranno suddivisi in due comandi da 4 bits).

    #37955
    Michele
    Partecipante

    Grazie ancora per il prezioso aiuto, quello che mi suggerisci in arte l’ho realizzato ma mi sfugge ancora qualcosa. In tutti i casi riscriverò un nuovo programma e riproverò. In caso lo posto qui così da poter ragionare direttamente sul codice.

    #37956
    Sergio Bertana
    Amministratore del forum

    Non ho il display e quindi non posso fare prove ma ecco la stampa della funzione IOExpToLCD che dovrebbe scrivere il dato sul display (Download libreria). Come vedi sono inviati sul bus I2C 4 bytes di dati, i due bytes pari contengono i 4 bits del dato a 8 bits ed attivano il segnale di strobe En, i due bytes dispari azzerano il segnale di strobe En. Per inizializzare il display devi seguire le informazioni riportate nella documentazione del controller HD44780.

    L’unico dubbio mi viene sulla prima scrittura della Function set, quando setti interfaccia a 4 bit che il manuale dice che termina con una sola scrittura e non due come tutte le altre.

    Function set Sets to 4-bit operation.
    In this case, operation is handled as 8 bits by initialization, and only this instruction completes with one write.

    Devi fare delle prove, intanto verifica se la chiamata IOExpToLCD(16#00, FALSE, TRUE) attiva il backlight del display.

    #38080
    Sergio Bertana
    Amministratore del forum

    In questo topic viene presentato un progetto per la gestione del display LCD compatibile Arduino della SainSmart. Credo sia esattamente il display che è in tue mani prova a dare una occhiata.

    #53590
    Rosario
    Partecipante

    Ho un plc SlimLine e un display QAPASS 1602A vorrei realizzare un programma che attraverso un contatore conti dei pezzi e li visualizza sul display.

    Quindi per provare il display ho utilizzato lo schema elettrico ed il programma del 3 settembre 2013 #37751, ma non funziona, ho provato a cambiare gli indirizzi SA0 e SA1 con risultati negativi.

    Comunque a parte questo non riesco a capire come posso interfacciare il programma che visualizza un messaggio di testo con un contatore.

Stai visualizzando 15 post - dal 16 a 30 (di 31 totali)
  • Devi essere connesso per rispondere a questo topic.