16 x 2 LCD voor Rpi Pico

Liquid Christal Display (LCD), een klein schermpje voor weergave van tekst en cijfers op 2 tekstregels van 16 karakters.
Aansluiting van 4 datalijnen (D4, D5, D6, D7) en 2 control-lijnen (EN en RS).
Aansluiting van voedingspanning +5 V (Vdd) en massa (Vss).
R/W lijn is verbonden met massa (0 = write mode, enkel karakters schrijven naar display)
Beeldcontrastlijn (Vo) verbonden met massa (ofwel via instelpotentiometer)
Achtergrondbelichting (A) verbonden met weerstand van 220 E met + 5V en (K) met massa.

2 x 16 karakter LCD verbonden met Rpi Pico

verbinding met Rpi Pico

pinnaamomschrijvingnaampin
1Vssmassa (GND)GND38
2VddVoedingsspanning + 5 VVBUS40
3Vobeeldcontrast regeling (verbonden met massa of via potentiometer)
4RSRegister Select (0 = command mode, 1 = datamodeGP12
5R/WRead/write (0 = schrijven naar LCD, 1 = lezen van LCD) verbonden met massa
6ENEnable (overgang van 1 naar 0 = schrijf actie)GP01
11D4datalijn 1GP24
12D5datalijn 2GP35
13D6datalijn 4GP46
14D7datalijn 8GP57
15Aanode van belichtingsled (verbonden met weerstand van 220 E naar + 5V voeding)
16Kkathode van belichtingsled (verbonden met massa)

display driver programma : LCD.py

Download dit programma naar de Rpi Pico

# LCD.py
#
# 4 databits LCD  16 x 2 char
# ---------------------------

from machine import Pin
import utime

EN = Pin(0, Pin.OUT)
RS = Pin(1, Pin.OUT)
D4 = Pin(2, Pin.OUT)
D5 = Pin(3, Pin.OUT)
D6 = Pin(4, Pin.OUT)
D7 = Pin(5, Pin.OUT)

PORT = [2, 3, 4, 5]
L = [0, 0, 0, 0]

def configure():
    for i in range(4):
        L[i] = Pin(PORT[i], Pin.OUT)

def lcd_strobe():
    EN.value(1)
    utime.sleep_ms(1)
    EN.value(0)
    utime.sleep_ms(1)
 
def lcd_write(c, mode):
    if mode == 0:
        d = c
    else:
        d = ord(c)
    d = d >> 4
    for i in range(4):
        b = d & 1
        L[i].value(b)
        d = d >> 1
    RS.value(mode)
    lcd_strobe()
    
    if mode == 0:
        d = c
    else:
        d = ord(c)  
    for i in range(4):
        b = d & 1
        L[i].value(b)
        d = d >> 1
    RS.value(mode)
    lcd_strobe()
    utime.sleep_ms(1)
    RS.value(1)

def lcd_puts(s):
    l = len(s)
    for i in range(l):
        lcd_putch(s[i])

def lcd_putch(c):
    lcd_write(c,1)

def lcd_init():
    configure()
    utime.sleep_ms(120)
    
    for i in range(4):
        L[i].value(0)
    utime.sleep_ms(50)
    
    L[0].value(1)
    L[1].value(1)
    lcd_strobe()
    utime.sleep_ms(10)
    lcd_strobe()
    utime.sleep_ms(10)
    lcd_strobe()
    utime.sleep_ms(10)
    
    L[0].value(0)
    lcd_strobe()
    utime.sleep_ms(5)
    
    lcd_write(0x28, 0)
    utime.sleep_ms(1)
    
    lcd_write(0x08, 0)
    utime.sleep_ms(1)

    lcd_write(0x01, 0)
    utime.sleep_ms(10)

    lcd_write(0x06, 0)
    utime.sleep_ms(5)

    lcd_write(0x0C, 0)
    utime.sleep_ms(10)

# end of LCD functions

testprogramma : hello.py

Dit programma zet een tekst op het scherm

import LCD

LCD.lcd_init()
LCD.lcd_puts('Hello from PICO')

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *