R3N3PDE
Posts: 19
Joined: Sat Mar 09, 2013 11:37 am

HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 5:48 pm

Ich will ein neues Zeichen in mein 2x16 (Char 5 x 8) HD44780 Display erstellen, aber wie?

Ich habe nur diesen Code:

Code: Select all

#!/usr/bin/python  
  
import RPi.GPIO as GPIO  
from time import sleep
import datetime
class HD44780:  
  
    def __init__(self, pin_rs=7, pin_e=8, pins_db=[25, 24, 23, 18]):  
  
        self.pin_rs=pin_rs  
        self.pin_e=pin_e  
        self.pins_db=pins_db  
  
        GPIO.setmode(GPIO.BCM)  
        GPIO.setup(self.pin_e, GPIO.OUT)  
        GPIO.setup(self.pin_rs, GPIO.OUT)  
        for pin in self.pins_db:  
            GPIO.setup(pin, GPIO.OUT)
        sleep(1)
        self.clear()
        sleep(0.001)
  
    def clear(self):  
        """ Blank / Reset LCD """
        self.cmd(0x33) # $33 8-bit mode  
        self.cmd(0x32) # $32 8-bit mode  
        self.cmd(0x28) # $28 8-bit mode  
        self.cmd(0x0C) # $0C 8-bit mode  
        self.cmd(0x06) # $06 8-bit mode  
        self.cmd(0x01) # $01 8-bit mode  
  
    def cmd(self, bits, char_mode=False):  
        """ Send command to LCD """  
        print bits
        sleep(0.001)  
        bits=bin(bits)[2:].zfill(8)  
  
        GPIO.output(self.pin_rs, char_mode)  
  
        for pin in self.pins_db:  
            GPIO.output(pin, False)  
  
        for i in range(4):  
            if bits[i] == "1":  
                GPIO.output(self.pins_db[::-1][i], True)  
  
        GPIO.output(self.pin_e, True)  
        GPIO.output(self.pin_e, False)  
  
        for pin in self.pins_db:  
            GPIO.output(pin, False)  
  
        for i in range(4,8):  
            if bits[i] == "1":  
                GPIO.output(self.pins_db[::-1][i-4], True)  
  
  
        GPIO.output(self.pin_e, True)  
        GPIO.output(self.pin_e, False)  
  
    def message(self, text):  
        """ Send string to LCD. Newline wraps to second line"""
        self.clear()
        sleep(0.001)
        for char in text:  
            if char == '\n':  
                self.cmd(0xC0) # next line  
            else:  
                self.cmd(ord(char),True)  
  
if __name__ == '__main__':  
  
    lcd = HD44780()
    lcd.message("Test :D")
    GPIO.cleanup()
Vielleicht weis ja jemand einen Bedienfreundlichen code oder weis vielleicht wie ich ein char mit diesen code erstelle

PS1981
Posts: 445
Joined: Wed Dec 12, 2012 4:11 pm

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 5:53 pm

Willst du wirklich einen eigenen charakter machen oder reicht dir etwas aus die Tabelle?
LCD_Characters.png
LCD_Characters.png (56.33 KiB) Viewed 4589 times

R3N3PDE
Posts: 19
Joined: Sat Mar 09, 2013 11:37 am

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 6:21 pm

Ja ich will Zeichen aus der Tabelle laden können und welche erstellen, z.B. eine Batterie :D

PS1981
Posts: 445
Joined: Wed Dec 12, 2012 4:11 pm

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 6:27 pm

Also ich glaube um einen aus der Tabelle zu nutzen musstest du sowas wie

Code: Select all

lcd.message(00100100) # Print a $ sign to LCD
oder vielleicht

Code: Select all

lcd.message(0b0100100) # Print a $ sign to LCD
machen. Echte eigenen Charakteren sind etwas komplexer, damit habe ich mich selbst auch noch nicht so viel beschäftigt aber es gibt Beispiele im Internet zu finden.

User avatar
mahjongg
Forum Moderator
Forum Moderator
Posts: 13100
Joined: Sun Mar 11, 2012 12:19 am
Location: South Holland, The Netherlands

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 6:32 pm

sehe http://en.wikipedia.org/wiki/Hitachi_HD ... controller tabelle "HD44780U based instruction set". Mach ein "Set CGRAM address befehl schreib action" nach dem start des CGRAM (schreibe 0x0100000 im befehls modus, mit RS="0") mit

Code: Select all

self.cmd(0x40)
, und dan mehrere daten schreib actionen (mit RS="1").
Viel gluck.

R3N3PDE
Posts: 19
Joined: Sat Mar 09, 2013 11:37 am

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 6:35 pm

kann ich ein codebeispiel bekommen? ich bin in python und dem HD44780 LCD noch ein N00B :)

PS1981
Posts: 445
Joined: Wed Dec 12, 2012 4:11 pm

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 6:36 pm

Ist das einen 4-bit Schnittstelle, 8-bit oder I2C?

R3N3PDE
Posts: 19
Joined: Sat Mar 09, 2013 11:37 am

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 6:38 pm

ich gucke...


PS1981
Posts: 445
Joined: Wed Dec 12, 2012 4:11 pm

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 6:42 pm

Also das ist 4-bit schnittstelle. Hier ist (auf Englisch allerdings) einen Anleitung von Adafruit welches ziemlich ausführlich das ganze erklärt.
http://learn.adafruit.com/downloads/pdf ... rry-pi.pdf
Sonnst, eigentlich hast du schon selber einen code beispiel da oder? Läuft das gar nicht?

R3N3PDE
Posts: 19
Joined: Sat Mar 09, 2013 11:37 am

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 6:47 pm

als das lcd display funktioniert mit dem script den ich am anfang gepostet habe

PS1981
Posts: 445
Joined: Wed Dec 12, 2012 4:11 pm

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 6:50 pm

Also glaube ich das den Satz

Code: Select all

lcd.message("Test :D")
eigentlich den Text an deinen Display schickt, das wegen hätte ich gesagt hier musstest du es mit der Sonderzeichen probieren und den entsprechende Binärzahl in den Klammern ohne Gänzefüße einsetzen. Probiere es nur, da geht nichts kaputt.

R3N3PDE
Posts: 19
Joined: Sat Mar 09, 2013 11:37 am

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 6:56 pm

Traceback (most recent call last):
File "char.py", line 77, in <module>
lcd.message(00100100) # Print a $ sign to LCD
File "char.py", line 65, in message
for char in text:
TypeError: 'int' object is not iterable
root@raspberrypi:~#

Code: Select all

....
    GPIO.cleanup()
    sleep(.1)
    lcd = HD44780()
    lcd.message("Test Start")
    sleep(1)
    lcd.message(00100100) # Print a $ sign to LCD
    sleep(1)
    lcd.message(0b0100100) # Print a $ sign to LCD
    sleep(1)
    lcd.message("Test Ende")
bis lcd.message("Test Start")
sleep(1) geht alles danach kommt ein error

User avatar
mahjongg
Forum Moderator
Forum Moderator
Posts: 13100
Joined: Sun Mar 11, 2012 12:19 am
Location: South Holland, The Netherlands

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 7:01 pm

mach einmal

Code: Select all

self.cmd(0x40)
und dann so viele

Code: Select all

self.cmd(daten), true


wie notig, wobei "daten" die pixel daten fur das CGRAM sind
Danach must du villeicht noch ein

Code: Select all

self.cmd(0x80)
machen um zuruck zum "character mode" zu gehen, aber vielleicht geht es ohne das auch gut.

R3N3PDE
Posts: 19
Joined: Sat Mar 09, 2013 11:37 am

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 7:11 pm

Ich bin verwirrt :O
Mein Code

Code: Select all

#!/usr/bin/python  
  
import RPi.GPIO as GPIO  
from time import sleep
import datetime
import os
class HD44780:  
  
    def __init__(self, pin_rs=7, pin_e=8, pins_db=[25, 24, 23, 18]):  
  
        self.pin_rs=pin_rs  
        self.pin_e=pin_e  
        self.pins_db=pins_db  
  
        GPIO.setmode(GPIO.BCM)  
        GPIO.setup(self.pin_e, GPIO.OUT)  
        GPIO.setup(self.pin_rs, GPIO.OUT)  
        for pin in self.pins_db:  
            GPIO.setup(pin, GPIO.OUT)
        sleep(1)
        self.clear()
        sleep(0.001)
  
    def clear(self):  
        """ Blank / Reset LCD """
        self.cmd(0x33) # $33 8-bit mode  
        self.cmd(0x32) # $32 8-bit mode  
        self.cmd(0x28) # $28 8-bit mode  
        #self.cmd(0x0C) # $0C 8-bit mode  
        self.cmd(0x06) # $06 8-bit mode  
        self.cmd(0x01) # $01 8-bit mode
    def cmd(self, bits, char_mode=False):  
        """ Send command to LCD """
        sleep(0.001)  
        bits=bin(bits)[2:].zfill(8)  
  
        GPIO.output(self.pin_rs, char_mode)  
  
        for pin in self.pins_db:  
            GPIO.output(pin, False)  
  
        for i in range(4):  
            if bits[i] == "1":  
                GPIO.output(self.pins_db[::-1][i], True)  
  
        GPIO.output(self.pin_e, True)  
        GPIO.output(self.pin_e, False)  
  
        for pin in self.pins_db:  
            GPIO.output(pin, False)  
  
        for i in range(4,8):  
            if bits[i] == "1":  
                GPIO.output(self.pins_db[::-1][i-4], True)  
  
  
        GPIO.output(self.pin_e, True)  
        GPIO.output(self.pin_e, False)  
  
    def message(self, text):  
        """ Send string to LCD. Newline wraps to second line"""
        self.clear()
        sleep(0.001)
        for char in text:  
            if char == '\n':  
                self.cmd(0xC0) # next line  
            else:  
                self.cmd(ord(char),True)  
  
if __name__ == '__main__':  
    GPIO.cleanup()
    sleep(.1)
    lcd = HD44780()
    sleep(1)
    lcd.cmd(0x40)
    lcd.cmd(0xe, True)
    lcd.cmd(0x1b, True)
    lcd.cmd(0x11, True)
    lcd.cmd(0x11, True)
    lcd.cmd(0x11, True)
    lcd.cmd(0x11, True)
    lcd.cmd(0x11, True)
    lcd.cmd(0x1f, True)
    lcd.cmd(0x80)
    sleep(1)
    lcd.message("Test Ende")
Mein Symbol: Image

Ich bekomme das symbol nicht auf dem lcd

PS1981
Posts: 445
Joined: Wed Dec 12, 2012 4:11 pm

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 7:16 pm

Und wenn dun unten in dein Code nicht lcd.cmd sondern self.cmd schreibts?

R3N3PDE
Posts: 19
Joined: Sat Mar 09, 2013 11:37 am

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 7:17 pm

Traceback (most recent call last):
File "char.py", line 75, in <module>
self.cmd(0x40)
NameError: name 'self' is not defined

PS1981
Posts: 445
Joined: Wed Dec 12, 2012 4:11 pm

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 7:28 pm

Leider glaube ich dich nicht helfen zu können. Ich werde weiterhin diesen Post beobachten und bei Gelegenheit werde ich das selbst ausprobieren. Gerade bin ich nicht am pi . Viel Glück erstmals!

R3N3PDE
Posts: 19
Joined: Sat Mar 09, 2013 11:37 am

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 7:43 pm

PS1981 wrote:Also das ist 4-bit schnittstelle. Hier ist (auf Englisch allerdings) einen Anleitung von Adafruit welches ziemlich ausführlich das ganze erklärt.
http://learn.adafruit.com/downloads/pdf ... rry-pi.pdf
Sonnst, eigentlich hast du schon selber einen code beispiel da oder? Läuft das gar nicht?
http://learn.adafruit.com/downloads/pdf ... rry-pi.pdf
Ich habe jetzt diesen Script genommen, dort gibt es laut google createChar().

Ich habe jetzt nur die Clock und die IP auf mein lcd :D

PS1981
Posts: 445
Joined: Wed Dec 12, 2012 4:11 pm

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 7:49 pm

Gut gemacht. Nimm dir den zeit der Code richtig zu verstehen, da kann man viel Lernen. Viel Spaß noch!

R3N3PDE
Posts: 19
Joined: Sat Mar 09, 2013 11:37 am

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 8:20 pm

JAAAAAAAAAAAAAAAAAAA, Ich habe es Geschaft ich habe ein Script gefunden :D Sogar sehr einfach :D http://www.raspberrypi.org/phpBB3/viewt ... 50#p245630 Man sollte mal das Forum durchlesen :D

NetSecond
Posts: 106
Joined: Wed Mar 13, 2013 12:14 am
Location: Germany

Re: HD44780 LCD | Wie erstelle ich ein Char?

Fri Mar 22, 2013 9:59 pm

Sorry, wenn ich dazwischen funke aber mich interessiert, wie Ihr das Display angeschlossen habt.

Hab noch eins "rumliegen" (Damals am PC Parallel Port angeschlossen) und würde das gerne wieder reaktivieren.
Gruß / Regards
NetSecond

PS1981
Posts: 445
Joined: Wed Dec 12, 2012 4:11 pm

Re: HD44780 LCD | Wie erstelle ich ein Char?

Sat Mar 23, 2013 5:17 am

NetSecond wrote:Sorry, wenn ich dazwischen funke aber mich interessiert, wie Ihr das Display angeschlossen habt.

Hab noch eins "rumliegen" (Damals am PC Parallel Port angeschlossen) und würde das gerne wieder reaktivieren.
Schau nach den pdf ein paar beitraege nach oben. Darin nur eine beispiel, es gibt viele, wie man ihn anschliesst.

User avatar
mahjongg
Forum Moderator
Forum Moderator
Posts: 13100
Joined: Sun Mar 11, 2012 12:19 am
Location: South Holland, The Netherlands

Re: HD44780 LCD | Wie erstelle ich ein Char?

Sat Mar 23, 2013 2:07 pm

um 4 GPIO zu sparen sind die meisten im "nibble modus" angeschlossen. Die Python Treiber geht davon aus.

Return to “Deutsch”