Vous êtes sur la page 1sur 14

16 2 del mdulo de control LCD Usando Python

Publicado el 27 de julio 2012 por Matt

Una vez que has jugado con leds, interruptores y motores paso a paso el siguiente
paso natural es mdulos LCD alfanumrico de 16 2. Estos mdulos son baratos
(menos de $ 10) y fcil de interactuar con el Raspberry Pi. Tienen 16 conexiones,
pero slo necesitan utilizar pines GPIO 6 en su Pi.
La mayora de los mdulos disponibles 16 2 son compatibles con el controlador
LCD Hitachi HD44780. Esto le permite comprar casi cualquier dispositivo y estar
seguro de que va a funcionar de la misma manera que cualquier otro. Hay mucho
donde elegir en eBay con diferentes luces de fondo de colores. El que yo compr
tena una luz de fondo azul.

Mdulo LCD Hardware

El pinout del mdulo es:


1.
2.
3.
4.
5.
6.
7.
8.
9.

Suelo
VCC (Por lo general, +5 V)
Ajuste de contraste (VO)
Registrar Select (RS).
RS = 0: Comando, RS = 1: Datos
Lectura / escritura (R / W).
R / W = 0: Escribir, R / W = 1: Leer
Permitir
Bit 0 (No se requiere en la operacin de 4 bits)
Bit 1 (No se requiere en la operacin de 4 bits)
Bit 2 (No se requiere en la operacin de 4 bits)

10. Bit 3 (No se requiere en la operacin de 4 bits)


11. Bit 4
12. Bit 5
13. Bit 6
14. Bit 7
15. LED de luz de fondo del nodo (+)
16. LED de luz de fondo del ctodo (-)
Por lo general, el dispositivo requiere 8 lneas de datos para proporcionar datos a
Bits 0-7.Sin embargo, el dispositivo puede ser ajustado en un modo "de 4 bits", que
le permite enviar datos en dos trozos (o algo para picar) de 4 bits. Esto es muy
bueno, ya que reduce el nmero de conexiones GPIO que se requieren, al
conectarse con su pi.
Aqu es como me conect a mi LCD:
LCD Pin

Funcin

Funcin Pi

Pi Pin

01

GND

GND

P1-06

02

+ 5V

+ 5V

P1-02

03

Contrastar

GND

P1-06

04

RS

GPIO7

P1-26

05

RW

GND

P1-06

06

GPIO8

P1-24

07

Datos 0

08

Datos 1

09

Datos 2

10

Datos 3

11

Datos 4

GPIO25

P1-22

12

Datos 5

GPIO24

P1-18

13

Datos 6

GPIO23

P1-16

14

Datos 7

GPIO18

P1-12

15

+ 5V a travs de 560ohm

16

GND

P1-06

NOTA: El pasador RW permite que el dispositivo se puede poner en modo de


lectura o escritura. Quera enviar datos al dispositivo, pero no quera que enve
datos a la Pi as que at este pin a tierra. El Pi no puede tolerar entradas 5V en su
cabecera GPIO. Atar RW a tierra hace que el dispositivo no intenta tirar de las
lneas de datos a 5V que daaran el Pi.
Con el fin de controlar el contraste se puede ajustar la tensin presentada al pin 3.
Este debe estar entre 0 y 5V. At este pin a tierra.
Pin 15 proporciona 5V a la luz de fondo LED. No estaba claro en mi dispositivo si
esto podra ser conectado directamente a 5V por lo jugu seguro y se coloca una
resistencia de 560ohm en lnea con este perno.

Los cheques de cableado


Aqu estn algunas comprobaciones de sanidad antes de encender su circuito por
primera vez:
Pin 1 (GND), 3 (Contraste), 5 (RW) y 16 (LED -) (deben estar vinculados a la
tierra.
El pin 2 debe estar vinculada a 5V. Pin 15 debe tener una lnea de resistencia a
5V para proteger la luz de fondo.

Pin 7-10 estn desconectados


Pin 11-14 estn conectados a los pines GPIO del Pi

Pitn

Usted puede controlar una pantalla estilo HD44780 utilizando cualquier entorno
programmming te gusta, pero mi arma preferida es Python. Yo uso la biblioteca
RPi.GPIOpara proporcionar acceso a la GPIO.
Aqu est mi cdigo:
#!/usr/bin/python
#
# HD44780 LCD Test Script for
# Raspberry Pi
#
# Author : Matt Hawkins
# Site

: http://www.raspberrypi-spy.co.uk

#
# Date

: 26/07/2012

# The wiring for the LCD is as follows:


# 1 : GND
# 2 : 5V
# 3 : Contrast (0-5V)*

# 4 : RS (Register Select)
# 5 : R/W (Read Write)

- GROUND THIS PIN

# 6 : Enable or Strobe
# 7 : Data Bit 0

- NOT USED

# 8 : Data Bit 1

- NOT USED

# 9 : Data Bit 2

- NOT USED

# 10: Data Bit 3

- NOT USED

# 11: Data Bit 4


# 12: Data Bit 5
# 13: Data Bit 6
# 14: Data Bit 7
# 15: LCD Backlight +5V**
# 16: LCD Backlight GND

#import
import RPi.GPIO as GPIO
import time

# Define GPIO to LCD mapping

LCD_RS = 7
LCD_E

= 8

LCD_D4 = 25
LCD_D5 = 24
LCD_D6 = 23
LCD_D7 = 18

# Define some device constants


LCD_WIDTH = 16

# Maximum characters per line

LCD_CHR = True
LCD_CMD = False

LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line


LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line

# Timing constants
E_PULSE = 0.00005
E_DELAY = 0.00005

def main():
# Main program block

GPIO.setmode(GPIO.BCM)

# Use BCM GPIO numbers

GPIO.setup(LCD_E, GPIO.OUT)

# E

GPIO.setup(LCD_RS, GPIO.OUT) # RS
GPIO.setup(LCD_D4, GPIO.OUT) # DB4
GPIO.setup(LCD_D5, GPIO.OUT) # DB5
GPIO.setup(LCD_D6, GPIO.OUT) # DB6
GPIO.setup(LCD_D7, GPIO.OUT) # DB7

# Initialise display
lcd_init()

# Send some test


lcd_byte(LCD_LINE_1, LCD_CMD)
lcd_string("Rasbperry Pi")
lcd_byte(LCD_LINE_2, LCD_CMD)
lcd_string("Model B")

time.sleep(3) # 3 second delay

# Send some text


lcd_byte(LCD_LINE_1, LCD_CMD)
lcd_string("Raspberrypi-spy")
lcd_byte(LCD_LINE_2, LCD_CMD)
lcd_string(".co.uk")

time.sleep(20)

def lcd_init():
# Initialise display
lcd_byte(0x33,LCD_CMD)
lcd_byte(0x32,LCD_CMD)
lcd_byte(0x28,LCD_CMD)
lcd_byte(0x0C,LCD_CMD)
lcd_byte(0x06,LCD_CMD)
lcd_byte(0x01,LCD_CMD)

def lcd_string(message):
# Send string to display

message = message.ljust(LCD_WIDTH," ")

for i in range(LCD_WIDTH):
lcd_byte(ord(message[i]),LCD_CHR)

def lcd_byte(bits, mode):


# Send byte to data pins
# bits = data
# mode = True
#

for character

False for command

GPIO.output(LCD_RS, mode) # RS

# High bits
GPIO.output(LCD_D4, False)

GPIO.output(LCD_D5, False)
GPIO.output(LCD_D6, False)
GPIO.output(LCD_D7, False)
if bits&0x10==0x10:
GPIO.output(LCD_D4, True)
if bits&0x20==0x20:
GPIO.output(LCD_D5, True)
if bits&0x40==0x40:
GPIO.output(LCD_D6, True)
if bits&0x80==0x80:
GPIO.output(LCD_D7, True)

# Toggle 'Enable' pin


time.sleep(E_DELAY)
GPIO.output(LCD_E, True)
time.sleep(E_PULSE)
GPIO.output(LCD_E, False)
time.sleep(E_DELAY)

# Low bits
GPIO.output(LCD_D4, False)
GPIO.output(LCD_D5, False)
GPIO.output(LCD_D6, False)
GPIO.output(LCD_D7, False)
if bits&0x01==0x01:
GPIO.output(LCD_D4, True)
if bits&0x02==0x02:
GPIO.output(LCD_D5, True)
if bits&0x04==0x04:
GPIO.output(LCD_D6, True)
if bits&0x08==0x08:
GPIO.output(LCD_D7, True)

# Toggle 'Enable' pin


time.sleep(E_DELAY)
GPIO.output(LCD_E, True)
time.sleep(E_PULSE)
GPIO.output(LCD_E, False)

time.sleep(E_DELAY)

if __name__ == '__main__':
main()

Si utiliza este cdigo lo nico que tendr que cambiar es el mapeo de pines GPIO
dependiendo de lo pines que utiliza en su encabezado Pi GPIO. Aqu hay algunas
fotos:

Notas adicionales: RS es baja cuando se enva un comando a la pantalla LCD y


alta cuando se enva un carcter. RW es siempre baja para garantizar que los datos
slo alguna vez entrada en el mdulo. 8 bytes de bits se envan 4 bits a la vez. Top 4
bits primeros y los ltimos 4 bits segundos. Los retrasos se aaden entre ciertas
medidas para asegurar el mdulo puede reaccionar a la seal antes de que cambie.
El cdigo anterior se inspir en el cdigo presentado por 'texy' en el foro
RaspberryPi.org .He cambiado la forma en que los bytes se dividen en pedazos, ya
que esto aumenta significativamente el tiempo de respuesta de la pantalla.

Vous aimerez peut-être aussi