Hallo Forumgemeinde,
ich wolte den nächsten schritt machen um zu meinen Ziel zu kommen.
Der schritt währe ein 16x2 in Betrieb zu bekommen.
Jetzt habe ich einen Extender der mich etwas einschrängt bei den GPIO. Ich brauche aber auch I2C um die anderen Funktionen fahren zu können. Zum testen des LCD habe ich mir ein Script runtergeladen:
[code=php]
#!/usr/bin/python
import time
import RPi.GPIO as GPIO
# Zuordnung der GPIO Pins (ggf. anpassen)
LCD_RS = 2
LCD_E = 3
LCD_DATA4 = 4
LCD_DATA5 = 5
LCD_DATA6 = 6
LCD_DATA7 = 7
LCD_WIDTH = 16 # Zeichen je Zeile
LCD_LINE_1 = 0x80 # Adresse der ersten Display Zeile
LCD_LINE_2 = 0xC0 # Adresse der zweiten Display Zeile
LCD_CHR = GPIO.HIGH
LCD_CMD = GPIO.LOW
E_PULSE = 0.0005
E_DELAY = 0.0005
def lcd_send_byte(bits, mode):
# Pins auf LOW setzen
GPIO.output(LCD_RS, mode)
GPIO.output(LCD_DATA4, GPIO.LOW)
GPIO.output(LCD_DATA5, GPIO.LOW)
GPIO.output(LCD_DATA6, GPIO.LOW)
GPIO.output(LCD_DATA7, GPIO.LOW)
if bits & 0x10 == 0x10:
GPIO.output(LCD_DATA4, GPIO.HIGH)
if bits & 0x20 == 0x20:
GPIO.output(LCD_DATA5, GPIO.HIGH)
if bits & 0x40 == 0x40:
GPIO.output(LCD_DATA6, GPIO.HIGH)
if bits & 0x80 == 0x80:
GPIO.output(LCD_DATA7, GPIO.HIGH)
time.sleep(E_DELAY)
GPIO.output(LCD_E, GPIO.HIGH)
time.sleep(E_PULSE)
GPIO.output(LCD_E, GPIO.LOW)
time.sleep(E_DELAY)
GPIO.output(LCD_DATA4, GPIO.LOW)
GPIO.output(LCD_DATA5, GPIO.LOW)
GPIO.output(LCD_DATA6, GPIO.LOW)
GPIO.output(LCD_DATA7, GPIO.LOW)
if bits&0x01==0x01:
GPIO.output(LCD_DATA4, GPIO.HIGH)
if bits&0x02==0x02:
GPIO.output(LCD_DATA5, GPIO.HIGH)
if bits&0x04==0x04:
GPIO.output(LCD_DATA6, GPIO.HIGH)
if bits&0x08==0x08:
GPIO.output(LCD_DATA7, GPIO.HIGH)
time.sleep(E_DELAY)
GPIO.output(LCD_E, GPIO.HIGH)
time.sleep(E_PULSE)
GPIO.output(LCD_E, GPIO.LOW)
time.sleep(E_DELAY)
def display_init():
lcd_send_byte(0x33, LCD_CMD)
lcd_send_byte(0x32, LCD_CMD)
lcd_send_byte(0x28, LCD_CMD)
lcd_send_byte(0x0C, LCD_CMD)
lcd_send_byte(0x06, LCD_CMD)
lcd_send_byte(0x01, LCD_CMD)
def lcd_message(message):
message = message.ljust(LCD_WIDTH," ")
for i in range(LCD_WIDTH):
lcd_send_byte(ord(message[i]),LCD_CHR)
if __name__ == '__main__':
# initialisieren
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(LCD_E, GPIO.OUT)
GPIO.setup(LCD_RS, GPIO.OUT)
GPIO.setup(LCD_DATA4, GPIO.OUT)
GPIO.setup(LCD_DATA5, GPIO.OUT)
GPIO.setup(LCD_DATA6, GPIO.OUT)
GPIO.setup(LCD_DATA7, GPIO.OUT)
display_init()
lcd_send_byte(LCD_LINE_1, LCD_CMD)
lcd_message("Es scheint zu")
lcd_send_byte(LCD_LINE_2, LCD_CMD)
lcd_message("funktionieren :)")
time.sleep(4)
msg1 = "Dies ist ein"
msg2 = "kleiner Test"
for i in range(len(msg1)):
lcd_send_byte(LCD_LINE_1, LCD_CMD)
lcd_message(msg1[:i+1])
lcd_send_byte(LCD_LINE_2, LCD_CMD)
lcd_message("")
time.sleep(0.1)
for i in range(len(msg2)):
lcd_send_byte(LCD_LINE_1, LCD_CMD)
lcd_message(msg1)
lcd_send_byte(LCD_LINE_2, LCD_CMD)
lcd_message(msg2[:i+1])
time.sleep(0.1)
time.sleep(4)
GPIO.cleanup()
[/php]
Das problem bei der Sache ist das wenn ich es so einrichte einen Fehler bekomme :
test_LCD.py:76: RuntimeWarning: A physical pull up resistor is fitted on this channel!
GPIO.setup(LCD_E, GPIO.OUT)
test_LCD.py:77: RuntimeWarning: A physical pull up resistor is fitted on this channel!
GPIO.setup(LCD_RS, GPIO.OUT)
in einen anderen Beitrag habe ich gelesen das es nicht mit gleichzeitigen aktiven i2C bus geht.
was kann ich da machen?
der Bus selber ist auf anderen Pins SCL und SDA, aus diesem Grunde verstehe ich die Meldung nicht.
bedanke mich