ultimo aggiornamento il
12 novembre 2016


 

Il modulo permette la gestione di un comune modulo LCD del tipo HD44780 compatibile, interfacciato con il metodo a 4-bit.
Esso permetterà di mostrare eventuali messaggi di avviso, oppure mostrare dati o ancora riportare la temperatura rilevata da un sensore.

E' possibile utilizzare due diversi modelli di display che differiscono dalla diversa disposizione dei PIN :

Per questo sono disponibili due diversi circuiti stampati

homotix

Descrizione
Il display a cristalli liquidi o LCD (dall'inglese Liquid Crystal Display) utilizzato in questo modulo è dotato di 2 linee di 16 caratteri ciascuna. I display LCD più comuni reperibili in commercio, hanno un'interfaccia ideata da Hitachi che, nel tempo, è diventata uno standard industriale utilizzato anche da altre case produttrici.

Funzione dei vari pin del display

PIN

Nome

Funzione

1

GND

Ground – Pin che deve essere collegato al negativo d’alimentazione.

2

VDD

Power Supply – Pin da collegare a +5V d’alimentazione.

3

Vo

A questo Pin si deve applicare una tensione variabile da 0 a +5V tramite un trimmer per regolare il contrasto del display.

4

RS

Register Select – Questo pin è una linea di controllo con cui si comunica al display se si sta inviando sul bus dati (linee da DB0 a DB7) un comando (RS=0) oppure un dato (RS=1).

5

R/W

Read, Write – Questo pin è un’altra linea di controllo con cui si comunica al display se s’intende inviare un dato al display (R/W=0) oppure leggere un dato dal display (R/W=1).

6

E

Enable – Questo pin è una linea di controllo con cui si può abilitare il display ed accettare dati ed istruzioni dal bus dati (E=1).

7

DB0

Data Bus line 0 – Le linee su cui transitano i dati tra processore e display.

8

DB1

Data Bus line 1

9

DB2

Data Bus line 2

10

DB3

Data Bus line 3

11

DB4

Data Bus line 4

12

DB5

Data Bus line 5

13

DB6

Data Bus line 6

14

DB7

Data Bus line 7

15

A

Pin per il collegamento della retroilluminazione se presente.

16

K

Pin per il collegamento della retroilluminazione se presente.

Dei 16 pin presenti se ne utilizzano però solamente 7
RS   Register select signal
E     Enable signal
R/W read/wrwite selection
DB4 Data bit 4
DB5 Data bit 5
DB6 Data bit 6
DB7 Data bit 7

Le linee dati, RS ed E, sono dotati di una resistenza pull-down per forzare a massa la linea quando non utilizzate. Il trimmer R6 connesso al pin Vo permette di regolare il contrasto del LCD.

 

Questo modulo è descritto sul numero 277-278 in edicola nel mese di Luglio 2008 della rivista Fare Elettronica nella sezione ROBOT ZONE nell'articolo dal titolo Moduli input/output per la scheda robotica che descrive la costruzione di ben 11 moduli da collegare alla scheda basata sul processore BS2 SX di PARALLAX.

Elenco componenti

R1,

4,7 KΏ 1/4W 5%

R2,R3,R4,R5

10 KΏ 1/4W 5%

R6

Trimmer orizzontale 100 KΏ

LCD

LCD 16 caratteri tipo C216L01YBW00 oppure Displaytech 162B + pin strip femmina 1x16

SV1

Pin-strip femmina 1x9

componenti_modulo_lcd.jpg

Circuito stampato e disposizione componenti per display C216L01YBW00

Circuito stampato e disposizione componenti per display Displaytech 162B

 

LCD 16x2 tipo C216L01YBW00
Piedinatura Datasheet display C216L01YBW00 Foto

LCD 16x2 tipo Displaytech 162B
Piedinatura Datasheet display GDM1602H Foto

Montaggio e collaudo

Dopo aver realizzato il circuito stampato e aver saldato i componenti si potrà inserire l’integrato il modulo LCD avendo avuto la cura di saldare in precedenza un pin strip maschio 1x16 in corrispondenza delle piste di uscita.
Si collegherà il connettore SV1 con il connettore X4, mediante appositi cavi seguendo le indicazioni di figura 40 e 41.
L’unica operazione di taratura sarà la regolazione del trimmer R6 che regola il contrasto del display.
Una volta caricato il programma sarà mostrato il messaggio inserito nel programma

collaudo-lcd.jpg
Schema collegamento microinterruttori al modulo.

' {$STAMP BS2sx}
' {$PBASIC 2.5}
'*************************************
'Programma:test_modulo_lcd.bsx
'Versione: 1.0
'Collaudo modulo LCD
'*************************************
' -----[ definizione dei pin ]-----
E PIN 0 ' Enable Pin For LCD
RW PIN 2 ' R/W Pin For LCD
RS PIN 3 ' LCD Register Select
' 0 = Instruction, 1 = Text
' -----[ Variables ]-----------
char VAR Byte ' Character To Send To LCD
inst VAR char ' Induction To Send To LCD
index VAR Word ' Character Pointer
temp VAR Byte ' Temp Variable
' -----[ EEPROM Data ]-------
DATA "PROVA LCD Adriano Gandolfo" ' Messaggio da inviare al LCD
' -----[ Initialization ]----
Initialize:
LOW RW ' Set LCD To Write Mode
OUTS = %0000000000000000 ' Set All Output Low
DIRS = %0000000011111111 ' Set I/O Direction
GOSUB Init_Lcd ' Initialize The LCD Display
' -----[ Programma ]----
Main:
FOR temp = 0 TO 32 ' 32 Caratteri
IF temp = 15 THEN ' Ricerca fine linea
GOSUB Next_Line ' Salta alla nuova linea
ENDIF
READ temp, char ' Lelle il prossimo carattere dalla EEPROM
GOSUB Send_Text ' Invia il carattere al display LCD
NEXT
END
' -----[ Subroutines ]-----
Init_Lcd:
PAUSE 200
OUTS = %00110000 ' Reset The LCD
PULSOUT E,1 ' Send Command Three Times
PAUSE 10
PULSOUT E,1
PAUSE 10
PULSOUT E,1
PAUSE 10
OUTS = %00100000 ' Set To 4-bit Operation
PULSOUT E,1
Inst = %00101000 ' Function Set (2-Line Mode)
GOSUB Send_Inst
Inst = %00001110 ' Turn On Cursor
GOSUB Send_Inst
Inst = %00000110 ' Set Auto-Increment
GOSUB Send_Inst
Inst = %00000001 ' Clears LCD
GOSUB Send_Inst
Inst = 14 ' Set Cursor To Underline
GOSUB Send_Inst
RETURN
Send_Inst:
LOW RS ' Set Instruction Mode
OUTB = Inst.HIGHNIB ' Send High Nibble
PULSOUT E,1
OUTB = Inst.LOWNIB ' Send Low Nibble
PULSOUT E,1
HIGH RS ' Set LCD Back To Text Mode
RETURN
Send_Text:
OUTB = Char.HIGHNIB ' Send High Nibble
PULSOUT E,1
OUTB = char.LOWNIB ' Send Low Nibble
PULSOUT E,1
PAUSE 100
RETURN
Next_Line:
Inst = 128+64 ' Move Cursor To Line 2
GOSUB Send_Inst
RETURN


Programma TEST_MODULO_LCD.BSX

Un altra prova prevede la lettura della temperatura rilevata tramite una resistenza NTC il cui valore viene mostrata sul display LCD, per la costruzione del circuito sono necessari

parallax-Super_Carrier_Board_frontale.JPG
La scheda Super Carrier Board permette il montaggio del modulo Parallax Basic Stamp 1 oppure del Basic Stamp 2 Modulo temperatura con resistenza NTC che è una resistenza che cambia il suo valore con il variare della temperatura. Il modulo permette la gestione di un comune modulo LCD 16x2 del tipo HD44780 compatibile, interfacciato con il metodo a 4-bit.

 

Lettura temperatura su display LCD. Sensore utilizzato NTC. Scheda di controllo Basic Stamp 2 montata su Basic Stamp Super Carrier. #basicstamp2 #basicstamp #sensortemperature #lcd16x2 #sensorntc #lcd1602

Un video pubblicato da Adriano Gandolfo (@adrirobot) in data:

Pin BS2 Pin LCD Pin sensore
P0   OUT
P1 EN  
P2 R/W  
P3 RS  
P4 DB4  
P5 DB5  
P6 DB6  
P7 DB7  
P8    
P9    
P10    
P11    
P12    
P13    
P14    
P15    
Vdd (+5V) Vdd Vdd
Vss (GND) Vss, DB0, DB1, DB2, DB3 Vss

Una volta collegate le varie parti utilizzando secondo la tabella occorre caricare il programma all'interno del modulo Basic Stamp 2


Programma termometro_ntr.bs2

' {$STAMP BS2}
' {$PBASIC 2.5}
'*************************************
' Programma:termometro_ntc
' Versione: 1.0 data 6/11/2016
' Termometro che utilizza come
' sensore una reistenza NTC
' il valore è mostrato su LCD parallelo
'
' Applicazione realizzata da Adriano Gandolfo
' Sito https://www.adrirobot.it
' Blog http://it.emcelettronica.com/author/adrirobot
' Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955
' Istagram https://www.instagram.com/adrirobot/
' This example code is in the public domain.
'*************************************
' -----[ definizione dei pin ]-----
E PIN 1 ' Enable Pin For LCD
RW PIN 2 ' R/W Pin For LCD
RS PIN 3 ' LCD Register Select
LcdBusOut VAR OUTB
LcdBusIn VAR INB
sen PIN 0 ' Pin a cui è collegato il sensore

' -----[ Costanti ]----------------------------------

LcdCls CON $01 ' clear the LCD
LcdHome CON $02 ' move cursor home
LcdCrsrL CON $10 ' move cursor left
LcdCrsrR CON $14 ' move cursor right
LcdDispL CON $18 ' shift chars left
LcdDispR CON $1C ' shift chars right
LcdDDRam CON $80 ' Display Data RAM control
LcdCGRam CON $40 ' Character Generator RAM
LcdLine1 CON $80 ' DDRAM address of line 1
LcdLine2 CON $C0 ' DDRAM address of line 2

' -----[ Variabili ]-----------
char VAR Byte ' Character To Send To LCD
inst VAR char ' Induction To Send To LCD
addr VAR Byte ' address in EE and display
index VAR Word ' Character Pointer
idx VAR Byte ' Loop counter
value VAR Byte ' Increment Decr. valu
temp VAR Byte ' Temp Variable
gradi VAR Word
cent VAR Word
decimale VAR Word

' -----[ EEPROM Data ]-------
Smiley DATA $00, $0A, $0A, $00, $11, $0E, $06, $00 ' 0 smiley
celsius DATA $00, $07, $05, $07, $00, $00, $00, $00 ' 1 grado
EndCG DATA $00

msg1 DATA "Termometro LCD ", 0 ' Primo messaggio
msg2 DATA "www.adrirobot.it", 0 ' Secondo messaggio
msg3 DATA "Temperatura:",0 ' Terzo messaggio
msg4 DATA ".",0
msg5 DATA 1, "C",0

' -----[ Initializazione LCD ]----
LOW RW ' Set LCD To Write Mode
OUTS = %0000000000000000 ' Set All Output Low
DIRS = %0000000011111111 ' Set I/O Direction
PAUSE 200
OUTS = %00110000 ' Reset The LCD
PULSOUT E,1 ' Send Command Three Times
PAUSE 10
PULSOUT E,1
PAUSE 10
PULSOUT E,1
PAUSE 10
OUTS = %00100000 ' Set To 4-bit Operation
PULSOUT E,1
Inst = %00101000 ' Function Set (2-Line Mode)
GOSUB Send_Inst
Inst = %00001110 ' Turn On Cursor
GOSUB Send_Inst
Inst = %00000110 ' Set Auto-Increment
GOSUB Send_Inst
Inst = %00000001 ' Clears LCD
GOSUB Send_Inst
Inst = 14 ' Set Cursor To Underline
GOSUB Send_Inst

Download_Chars: ' download custom chars
char = LcdCGRam ' point to CG RAM
GOSUB Send_Inst ' prepare to write CG data
FOR idx = Smiley TO EndCG-1 ' build custom chars
READ idx, char ' get byte from EEPROM
GOSUB Write_LCD_Char ' put into LCD CG RAM
NEXT

' -----[ Programma ]----
char = LcdCls ' Cancella LCD
GOSUB Send_Inst
' Messaggio iniziale
char = LcdLine1 + 0 ' Porta il cursore alla 1 linea posizione 0
GOSUB Send_Inst
idx = Msg1 ' Scrive Termometro LCD
GOSUB Write_Message
char = 0 ' Scrive carattere SMILE
GOSUB Send_Text
char = LcdLine2 + 0 ' Porta il cursore alla 2 linea posizione 0
GOSUB Send_Inst
idx = Msg2 ' Scrive www.adrirobot.it
GOSUB Write_Message
PAUSE 1000
char = LcdCls ' Cancella LCD
GOSUB Send_Inst
char = LcdLine1 + 0
GOSUB Send_Inst
idx = Msg3 ' Scrive Temperatura:
GOSUB Write_Message
char = LcdLine2 + 4
GOSUB Send_Inst
idx = msg5
GOSUB Write_Message ' Scrive C

' -----[ Lettura temperatiura ]----
Lettura_temperatura:
HIGH sen
PAUSE 3
RCTIME sen,1,gradi
cent = (5720- gradi + 50) / 110
decimale = (((5900- gradi + 50) // 110) * 10)/110
'DEBUG HOME, DEC cent,",", DEC decimale,"°C",CR
char = LcdLine2 + 0
GOSUB Send_Inst
value= cent
GOSUB C_ASCII
idx = msg4
GOSUB Write_Message
char = decimale + 48 ' Convert to ASCII
GOSUB Send_Text ' Write value
GOTO lettura_temperatura
END

' -----[ Subroutines ]-----
'Questa subroutine posiziona il cursore, convertiti
'Un numero a 3 cifre per l'ASCII, e scrive il
'Codice ASCII per il display LCD.

C_ASCII: ' convert to ASCII value
'char = (value / 100) ' Get 100s position
'value = (value //100) ' Get Mod
'char = char + 48 ' Convert to ASCII
'GOSUB Send_Text ' Write value
char = (value / 10) ' Get 10s position
value = (value // 10) ' Get Mod
char = char + 48 ' Convert to ASCII
GOSUB Send_Text ' Write value
char = value + 48 ' Convert to ASCII
GOSUB Send_Text ' Write value
RETURN

Write_LCD_Char: ' HIGH RS = Write a character
HIGH RS ' to the LCD display
LcdBusOut = char.HIGHNIB
PULSOUT E, 3
LcdBusOut = char.LOWNIB
PULSOUT E, 3

Write_Message:
DO
READ idx, char ' Legge i caratterie dall EE
IF (char = 0) THEN EXIT ' se 0 il messaggio è completo
GOSUB Send_Text ' scrive il carattere
idx = idx + 1 ' punta al prossimo carattere
LOOP
RETURN

Send_Inst:
LOW RS ' Set Instruction Mode
OUTB = Inst.HIGHNIB ' Send High Nibble
PULSOUT E,1
OUTB = Inst.LOWNIB ' Send Low Nibble
PULSOUT E,1
HIGH RS ' Set LCD Back To Text Mode
RETURN

Send_Text:
OUTB = Char.HIGHNIB ' Send High Nibble
PULSOUT E,1
OUTB = char.LOWNIB ' Send Low Nibble
PULSOUT E,1
PAUSE 100
RETURN

 

Elenco revisioni:
12/11/2016 Inserito programma per lettura temperatura rilevata da NTC
08/09/2008 Emissione preliminare
Private Policy Cookie Policy