Wissensdatenbank
Buehl, Kevin
13 Januar 2016
3.129

Wissensdatenbank

Rasperry Pi LCD Display

Vorwort


Ich habe einen
Dieser Link wurde entfernt. Links sind nur für Mitglieder sichtbar. Bitte melden Sie sich mit Ihrem Benutzernamen und Ihrem Passwort an und versuchen Sie es erneut.
welcher leider noch nicht so funktioniert wie er soll. Aus diesem Grund möchte ich für die Fehlererkennung ein LCD Display an diesen anschliessen.

System vorbereiten


Folgende Schritte sind vor dieser Anleitung durchzuführen:
-
Dieser Link wurde entfernt. Links sind nur für Mitglieder sichtbar. Bitte melden Sie sich mit Ihrem Benutzernamen und Ihrem Passwort an und versuchen Sie es erneut.


Software installieren

apt install python-smbus


I2C Lib

nano i2c_lib.py
import smbus
from time import *

class i2c_device:
def __init__(self, addr, port=1):
self.addr = addr
self.bus = smbus.SMBus(port)

# Write a single command
def write_cmd(self, cmd):
self.bus.write_byte(self.addr, cmd)
sleep(0.0001)

# Write a command and argument
def write_cmd_arg(self, cmd, data):
self.bus.write_byte_data(self.addr, cmd, data)
sleep(0.0001)

# Write a block of data
def write_block_data(self, cmd, data):
self.bus.write_block_data(self.addr, cmd, data)
sleep(0.0001)

# Read a single byte
def read(self):
return self.bus.read_byte(self.addr)

# Read
def read_data(self, cmd):
return self.bus.read_byte_data(self.addr, cmd)

# Read a block of data
def read_block_data(self, cmd):
return self.bus.read_block_data(self.addr, cmd)

LCD Treiber


Wichtig, passen Sie die Zahl in folgender Zeile an:
self.lcd_device = i2c_lib.i2c_device(ADDRESS,1)
Diese muss mit der Zahl des Befehls i2cdetect -y 1 übereinstimmen.

nano lcddriver.py
import i2c_lib
from time import *

# LCD Address
ADDRESS = 0x27

# commands
LCD_CLEARDISPLAY = 0x01
LCD_RETURNHOME = 0x02
LCD_ENTRYMODESET = 0x04
LCD_DISPLAYCONTROL = 0x08
LCD_CURSORSHIFT = 0x10
LCD_FUNCTIONSET = 0x20
LCD_SETCGRAMADDR = 0x40
LCD_SETDDRAMADDR = 0x80

# flags for display entry mode
LCD_ENTRYRIGHT = 0x00
LCD_ENTRYLEFT = 0x02
LCD_ENTRYSHIFTINCREMENT = 0x01
LCD_ENTRYSHIFTDECREMENT = 0x00

# flags for display on/off control
LCD_DISPLAYON = 0x04
LCD_DISPLAYOFF = 0x00
LCD_CURSORON = 0x02
LCD_CURSOROFF = 0x00
LCD_BLINKON = 0x01
LCD_BLINKOFF = 0x00

# flags for display/cursor shift
LCD_DISPLAYMOVE = 0x08
LCD_CURSORMOVE = 0x00
LCD_MOVERIGHT = 0x04
LCD_MOVELEFT = 0x00

# flags for function set
LCD_8BITMODE = 0x10
LCD_4BITMODE = 0x00
LCD_2LINE = 0x08
LCD_1LINE = 0x00
LCD_5x10DOTS = 0x04
LCD_5x8DOTS = 0x00

# flags for backlight control
LCD_BACKLIGHT = 0x08
LCD_NOBACKLIGHT = 0x00

En = 0b00000100 # Enable bit
Rw = 0b00000010 # Read/Write bit
Rs = 0b00000001 # Register select bit

class lcd:
#initializes objects and lcd
def __init__(self):
self.lcd_device = i2c_lib.i2c_device(ADDRESS,1)

self.lcd_write(0x03)
self.lcd_write(0x03)
self.lcd_write(0x03)
self.lcd_write(0x02)

self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)
self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON)
self.lcd_write(LCD_CLEARDISPLAY)
self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT)
sleep(0.2)

# clocks EN to latch command
def lcd_strobe(self, data):
self.lcd_device.write_cmd(data | En | LCD_BACKLIGHT)
sleep(.0005)
self.lcd_device.write_cmd(((data & ~En) | LCD_BACKLIGHT))
sleep(.0001)

def lcd_write_four_bits(self, data):
self.lcd_device.write_cmd(data | LCD_BACKLIGHT)
self.lcd_strobe(data)

# write a command to lcd
def lcd_write(self, cmd, mode=0):
self.lcd_write_four_bits(mode | (cmd & 0xF0))
self.lcd_write_four_bits(mode | ((cmd << 4) & 0xF0))

# put string function
def lcd_display_string(self, string, line):
if line == 1:
self.lcd_write(0x80)
if line == 2:
self.lcd_write(0xC0)
if line == 3:
self.lcd_write(0x94)
if line == 4:
self.lcd_write(0xD4)

for char in string:
self.lcd_write(ord(char), Rs)

# clear lcd and set to home
def lcd_clear(self):
self.lcd_write(LCD_CLEARDISPLAY)
self.lcd_write(LCD_RETURNHOME)


LCD Disply verwenden


Erstellen Sie nun ein neues Pythonskript
nano 4b42.py

Sie können folgenden Beispielcode verwenden:
#!/usr/bin/python
#-----------------------------------------------------------------------#
# Copyright 2006-2016 by Kevin Buehl <kevin@buehl.biz> #
#-----------------------------------------------------------------------#
# __ __ _____________ __ __ ______________ #
# | | 2006 | | | _______ \ | | | | |___________ | #
# | | 2016 | | | | \ | | | | | | | #
# | |___ ____| | | |_______/ / | |___ ____| | ___________| | #
# |______ ____ | | _______ | |______ ____ | | ___________| #
# by | | | | \ \ Content | | | | #
# Kevin | | | |_______/ | Management | | | |___________ #
# Buehl |__| |_____________/ System |__| |______________| #
# #
# No part of this website or any of its contents may be reproduced, #
# copied, modified or adapted, without the prior written consent of #
# the author, unless otherwise indicated for stand-alone materials. #
# For more Information visit www.4b42.com. #
# This notice must be untouched at all times. #
#-----------------------------------------------------------------------#

#-----------------------------------------------------------------------#
# 2014-10-01 Kevin Buehl created
# 2014-10-10 Kevin Buehl add lcd debug
#-----------------------------------------------------------------------#
import lcddriver

lcd = lcddriver.lcd()

lcd.lcd_display_string("Text in Zeile 1",1)
lcd.lcd_display_string("Text in Zeile 2",2)
lcd.lcd_display_string("Text in Zeile 3",3)
lcd.lcd_display_string("Text in Zeile 4",4)

Passen Sie die Berechtigungen an:
chmod +x 4b42.py

Nun können Sie das Skript ausführen und die Anzeige auf Ihrem LCD Display sollte sich ändern:
./4b42.py