Newsgroup: it.hobby.elettronica.digitale
Titolo: Lcd un aiutino

Salve sto iniziando con i Pic e la configurazione delgi Lcd Alfanumerici,
non riesco a capire come sono mappati gli indirizzi dei digit , ad esempio 
ho un lcd 20x2 se volessi  portarmi sulla seconda riga al penultimo digit 
quale indirizzo esadecimale dovrei caricagli?
in poche parole come faccio a sapere la mappatura per potermelo gestire a 
piacere?
grazie
fab 

Fabio wrote:

Domanda molto generica (ad esempio non specifichi in che linguaggio stai 
programmando e che tipo di controller monta il tuo display).
La mia risposta sarà quindi altrettanto generica: sul datasheet del 
display sono senz'altro riportati i comandi necessari e le informazioni 
sugli indirizzi di memoria che ti servono.
Ciao!
Marco / iw2nzm

 ha scritto nel messaggio 
news:ZH9Uh.7223$R_5.2...@twister1.libero.it...


 digit poi stessa cosa non vado oltre, sono un po in palla.
Cioè se indirizzi la prima riga da 0x00 a 0x13 e la seconda da 0x40 a 
0x53, cosa succede?
Marco / iw2nzm

 ha scritto nel messaggio 
news:L5aUh.7584$uJ5.1...@twister2.libero.it...


 Scusa ma sono proprio alle prime armi con PIC e LCD e faccio un po fatica
L'indirizzamento è corretto, ma se guardi attentamente il listato, vedi che 
la funzione
LcdLocate specifica che
;**********************************************************************
; Locate cursor on LCD
; W = D7-D4 row, D3-D0 col
;**********************************************************************
Se hai 4 bit (D0..D3) per le colonne, hai a disposizione un totale di 16 
caratteri.
Devi quindi apportare le opportune modifiche al listato.
In genere l'indirizzamento in memoria del primo carattere delle righe di lcd 
a 20colonne è
riga1 0x80
riga3 0x94
riga2 0xC0
riga4 0xD4

L'lcd è configurato per funzionare a 4 bit, ma il resto non l'ho proprio 
capito potresti farmi per cortesia un esempio piu chiaro?
"Roberto P." <roberto...@LEVAMIrobertopedrazzoli.it> ha scritto nel 
messaggio news:evrg4k$h1n$1...@tdi.cu.mi.it...


 capito potresti farmi per cortesia un esempio piu chiaro?
vediamo...
per il posizionamento del cursore, si utilizza la funzione
;**********************************************************************
; Locate cursor on LCD
; W = D7-D4 row, D3-D0 col
;**********************************************************************
LcdLocate
                movwf   tmpLcdRegister+0            //salva il contenuto di 
W
                movlw   0x80
                movwf   tmpLcdRegister+1            //inizializza l'offset 
al primo carattere della prima riga
                movf    tmpLcdRegister+0,W         //riprende il valore 
salvato
                andlw   0x0F                                 //tiene solo i 
4 bit meno significativi (4bit=valori 0..15)
                iorwf   tmpLcdRegister+1,F           //li somma all'offset
                btfsc   tmpLcdRegister+0,4           //se la riga non è la 
prima,
                bsf     tmpLcdRegister+1,6             //somma all'offset 
0x40, ottenendo quindi 0xCx (che è apppunto l'offset della seconda riga)
                movf    tmpLcdRegister+1,W         //mette l'offset in W
                call    LcdSendCommand               //e lo manda al display
                return
con questa routine, pui quindi solo utilizzare al max lcd da 16 colonne per 
2 righe.
Una modifica potrebbe essere (da provare):
;**********************************************************************
; Locate cursor on LCD
; W = D7-D6 row, D5-D0 col
;car0,riga0 W=0x00
;car0,riga1 W=0x40
;**********************************************************************
LcdLocateExt
                movwf   tmpLcdRegister+0            //salva il contenuto di 
W
                movlw   0x80
                movwf   tmpLcdRegister+1            //inizializza l'offset 
al primo carattere della prima riga
                movf    tmpLcdRegister+0,W         //riprende il valore 
salvato
                andlw   0x3F                                 //tiene solo i 
6 bit meno significativi (6bit=valori 0..63 colonne)
                iorwf   tmpLcdRegister+1,F           //li somma all'offset
                btfsc   tmpLcdRegister+0,6            //se la riga non è la 
prima,
                bsf     tmpLcdRegister+1,6             //somma all'offset 
0x40, ottenendo quindi 0xCx (che è apppunto l'offset della seconda riga)
                movf    tmpLcdRegister+1,W         //mette l'offset in W
                call    LcdSendCommand               //e lo manda al display
                return

Ho provato la tua routine modificata e devo dire che funziona, ora devo 
studiarmela per beninio per poter capire bene il funzionamento,
quindi se un domani voglio usare un per esempio LCD 40x4 devo aggiungere 
altre righe nello stesso modo con indirizzi appropriati?
comunque ora mi rivedo per benino la routine e faccio qualche prova.
Per il momento Grazie
"Roberto P." <roberto...@LEVAMIrobertopedrazzoli.it> ha scritto nel 
messaggio news:evsu9v$6f1$1...@tdi.cu.mi.it...
