Hallo,
ich versuche momentan die aktuelle Temperatur in meinem Zimmer auf einem LCD anzeigen zu lassen.
Der Temperatur Sensor funktioniert auch, das Problem ist jetzt aber, dass ich von dem Raspberry Pi nichts auf das LCD ( http://goo.gl/HUrRjS ) schreiben kann.
Ich habe an dem LCD das Backlight, die i2c Pins und die Stromversorgung verbunden. Es wird auch an dem Raspberry Pi erkannt, dass jedoch nur wackelig,
also es wird manchmal erkannt und kurz danach wird es wieder nicht erkannt und kurz danach verbindet es sich wieder.
Aber wenn ich jetzt mit einem Programm, wenn das LCD erkannt wird, versuche Text auf das LCD zu schreiben, gibt das Programm keinen Fehler aus,
allerdings erscheint auch nichts auf dem LCD. Ich habe auch schon versucht die Kabel mehrmals wieder rauszuziehen und danach wieder reinzustecken,
es hat aber auch nichts gebracht. I2C ist auf dem Raspberry Pi auch aktiviert. Es handelt sich hierbei um einen Raspberry Pi 3 Modell B.
Hat jemand eine Lösung für das Problem?
Raspberry Pi schreibt nicht auf LCD mit I2C Anschluss
-
aspirat2110 -
28. Juni 2016 um 16:44 -
Erledigt
-
-
Raspberry Pi schreibt nicht auf LCD mit I2C Anschluss? Schau mal ob du hier fündig wirst!
-
Hast du den Kontrast mit einem Poti eingestellt?
Zieht das Display zu viel Strom vom Pi?
Verwende ein anderes NetzteilPS: ich habe mir 2 von den Dingern für insgesamt 1,60€ aus China bestellt. Lassen aber noch auf sich warten.
-
Hast Du die Adresse des seriell/parallel-Wandlers richtig eingegeben?
Hast Du es mal mit einer anderen Adresse probiert?
Was ist mit den Abschlusswiderständen?
Hast Du externe verwendet oder sind interne Pullup aktiviert?
Hast Du es mal mit einem anderen I²C Slave probiert?
Oder aber, wie von Berlin_pi schon gefragt, ist es der Klassiker: Kontrast -
Hast du den Kontrast mit einem Poti eingestellt?
Zieht das Display zu viel Strom vom Pi?
Verwende ein anderes NetzteilPS: ich habe mir 2 von den Dingern für insgesamt 1,60€ aus China bestellt. Lassen aber noch auf sich warten.
Nein, ich habe den Kontrast nicht mit einem Poti eingestellt, sondern lasse alles direkt über den Pi laufen.
Zu viel Strom sollte es auch nicht ziehen, da das Hintergrundlicht über einen anderen Pi läuft. -
Moin,
ich habe ein paar Fragen, um dein Problem besser zu verstehen.Du schreibst
CodeEs wird auch an dem Raspberry Pi erkannt, dass jedoch nur wackelig, also es wird manchmal erkannt und kurz danach wird es wieder nicht erkannt und kurz danach verbindet es sich wieder.
Wer erkennt das denn??
Benutzt du ein bestimmtes Programm?? Wenn ja welches und wie rufst du es auf??Dann schreibst du noch
CodeAber wenn ich jetzt mit einem Programm, wenn das LCD erkannt wird, versuche Text auf das LCD zu schreiben, gibt das Programm keinen Fehler aus, allerdings erscheint auch nichts auf dem LCD.
Mit welchem Programm versuchst du es?? Bitte nenne das Programm und beschreibe was du machst.Warum ich das alles wissen will??
Weil das ein stinknormales Display mit einem intregierten I2C-Controller ist.
Es muss aber wie ein normales Display behandelt werden.Aber nachdem du meine Fragen beantwortest hast, sehen wir weiter.
Gruss Bernd
-
Moin,
ich habe ein paar Fragen, um dein Problem besser zu verstehen.Du schreibst
CodeEs wird auch an dem Raspberry Pi erkannt, dass jedoch nur wackelig, also es wird manchmal erkannt und kurz danach wird es wieder nicht erkannt und kurz danach verbindet es sich wieder.
Wer erkennt das denn??
Benutzt du ein bestimmtes Programm?? Wenn ja welches und wie rufst du es auf??Dann schreibst du noch
CodeAber wenn ich jetzt mit einem Programm, wenn das LCD erkannt wird, versuche Text auf das LCD zu schreiben, gibt das Programm keinen Fehler aus, allerdings erscheint auch nichts auf dem LCD.
Mit welchem Programm versuchst du es?? Bitte nenne das Programm und beschreibe was du machst.Warum ich das alles wissen will??
Weil das ein stinknormales Display mit einem intregierten I2C-Controller ist.
Es muss aber wie ein normales Display behandelt werden.Aber nachdem du meine Fragen beantwortest hast, sehen wir weiter.
Gruss Bernd
Hallo,
um das LCD zu erkennen, verwende ichDort erscheint manchmal, wenn ich den Befehl ausführe die Adresse "3e".
Wenn ich den Befehl aber öfters ausführe, wird dort wieder "--" statt "3e" angezeigt und das wechselt sich halt immer wieder ab.Zu dem Programm: Ich weiß nicht, was ich gemacht habe, aber jetzt gibt es doch einen Fehler aus:
Code
Alles anzeigenTraceback (most recent call last): File "<stdin>", line 1, in <module> File "lcddriver.py", line 57, in __init__ self.lcd_write(0x03) File "lcddriver.py", line 82, in lcd_write self.lcd_write_four_bits(mode | ((cmd << 4) & 0xF0)) File "lcddriver.py", line 76, in lcd_write_four_bits self.lcd_device.write_cmd(data | LCD_BACKLIGHT) File "i2c_lib.py", line 11, in write_cmd self.bus.write_byte(self.addr, cmd) IOError: [Errno 5] Input/output error
Der Code der den Fehler auswirft:Python
Alles anzeigenimport i2c_lib from time import sleep # LCD Address ADDRESS = 0x3e # 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) 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, offset): if line == 1: #0x80 | 0x00 = 0x80 #self.lcd_write(0x80 + offset) self.lcd_write((LCD_SETDDRAMADDR | 0x00) + offset) if line == 2: #0x80 | 0x40 = 0xC0 #self.lcd_write(0xC0 + offset) self.lcd_write((LCD_SETDDRAMADDR | 0x40) + offset) if line == 3: #0x80 | 0x14 = 0x94 #self.lcd_write(0x94 + offset) self.lcd_write((LCD_SETDDRAMADDR | 0x14) + offset) if line == 4: #0x80 | 0x54 = D4 #self.lcd_write(0xD4 + offset) self.lcd_write((LCD_SETDDRAMADDR | 0x54) + offset) 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)
Der Versuch auf das Display zu schreiben:
Codeimport lcddriver import sys lcd = lcddriver.lcd() try : lcd.lcd_display_string(str(sys.argv[1]), int(sys.argv[2]), int(sys.argv[3])) except: print("Usage: \"Output-String\" \"Line in decimal\" \"Offset in decimal\" ") print("Example: \"Hello World!\" 1 0")
Allerdings komme ich grademal bis zu "lcd = lcddriver.lcd()". Dann kommt der Fehler.
-
Hi,
solange Du keine stabile Verbindung zum LCD hast brauchst Du mit der Software gar nicht weiter rumhampeln ...Such lieber den Wackelkontakt oder was auch immer da in Deiner Schalte falsch ist.
cu,
-ds- -
Moin,
danke für deine Ausführungen. Ich denke das dreamshader recht hat und du den Wackelkontakt weg bekommen musst.An welcher Spannung hast du das Display angeschlossen?? Bei einem 3,3V Anschluss musst du, laut Datenblatt 2 Kondensatoren einbauen.
Gruss Bernd
-
Moin,
danke für deine Ausführungen. Ich denke das dreamshader recht hat und du den Wackelkontakt weg bekommen musst.An welcher Spannung hast du das Display angeschlossen?? Bei einem 3,3V Anschluss musst du, laut Datenblatt 2 Kondensatoren einbauen.
Gruss Bernd
Ich habe das Display an 5V angeschlossen.
Die Kontakte sitzen jetzt auch fest und berühren sich auch, der Wackelkontakt ist aber immernoch da. -
Moin,
es gibt noch eine Möglichkeit den I2C-Bus zu scannen.Es kommt noch eine Frage, die du mit "y" beantworten musst.
In den Manpages von i2cdetect steht, das manchmal das das angesprochenene Gerät es einem übel nimmt.
Wenn es bei meinem Vorschlag auch zu diesen Aussetzern kommt, wprde ich mein Programm in Ordnung bringen.
Und dann, ohne Test, sofort das Programm einsetzen.
Gruss Bernd
-
Hallo aspirat2110,
sorry, dass ich noch mal auf Deine Ausgangsfrage zurückkommen muss.
Du schriebst:
Ich habe an dem LCD das Backlight, die i2c Pins und die Stromversorgung verbunden.WIE hast Du es verbunden? Ich frage deswegen, weil wir hier vor etwa 2 Jahren - Dreamshader wird sich noch daran erinnern - so einen Ekschpärdde gehabt hatten, der die absiolierten Leitungen in die Platinen-Bohrungen gesteckt hatte. Der hatte komischerweise auch so irre Verbindungsprobleme.
Das kam aber erst heraus, als er ein Photo seiner Schalte gepostet hatte.
Die richtigen Strippen in die richtigen Löcher gesteckt und mit heißem Lötkolben unterstützt Lötzinn zum Schmelzen gebracht, hatte damals mächtig Wirkung gezeigt.
Deswegen: Verbinden, Steckbrett stecken, Löten ist was anderes als Strippen in Platinenbohrungen legen.
Beste GrüßeAndreas
-
Moin,
/OT
Moin Andreas,
oha, sowas gab es schon.....Gruss Bernd
-
Moin,
es gibt noch eine Möglichkeit den I2C-Bus zu scannen.Es kommt noch eine Frage, die du mit "y" beantworten musst.
In den Manpages von i2cdetect steht, das manchmal das das angesprochenene Gerät es einem übel nimmt.
Wenn es bei meinem Vorschlag auch zu diesen Aussetzern kommt, wprde ich mein Programm in Ordnung bringen.
Und dann, ohne Test, sofort das Programm einsetzen.
Gruss Bernd
Ich habe jetzt mit
den I2C-Bus gescannt. Es erscheint auch dort nur wackelig, also manchmal da, manchmal nicht.
Wenn ich versuche das Programm zu starten kommt immernoch der selbe Fehler.
Automatisch zusammengefügt:
Hallo aspirat2110,sorry, dass ich noch mal auf Deine Ausgangsfrage zurückkommen muss.
Du schriebst:
WIE hast Du es verbunden? Ich frage deswegen, weil wir hier vor etwa 2 Jahren - Dreamshader wird sich noch daran erinnern - so einen Ekschpärdde gehabt hatten, der die absiolierten Leitungen in die Platinen-Bohrungen gesteckt hatte. Der hatte komischerweise auch so irre Verbindungsprobleme.
Das kam aber erst heraus, als er ein Photo seiner Schalte gepostet hatte.
Die richtigen Strippen in die richtigen Löcher gesteckt und mit heißem Lötkolben unterstützt Lötzinn zum Schmelzen gebracht, hatte damals mächtig Wirkung gezeigt.
Deswegen: Verbinden, Steckbrett stecken, Löten ist was anderes als Strippen in Platinenbohrungen legen.
Beste GrüßeAndreas
Das eingesetzte Display hat direkt Pins, also habe ich mit female-female Jumper Kabeln die I2C-Pins und den VCC- und den GND- Pin mit den entsprechenden Pins auf dem Pi verbunden.
-
Hi,
1. Mach doch bitte einfach mal eine -> Skizze Deiner Schalte <- ...
2. Nimm mal ein Messgerät, klemm es an die Kontakte des Displays und stell sicher, dass die Kabel auch 100% fest sitzen und nicht in den Buchsen herumwackeln ...cu
-ds- -
Hi,
1. Mach doch bitte einfach mal eine -> Skizze Deiner Schalte <- ...
2. Nimm mal ein Messgerät, klemm es an die Kontakte des Displays und stell sicher, dass die Kabel auch 100% fest sitzen und nicht in den Buchsen herumwackeln ...cu
-ds-1.
Als Attachment hinzugefügt
Also halt ein anderes LCD, das aber auch einen I2C Anschluss hat.2. Die Kabel sitzen fest, und die Verbindung von den Kabeln ist auch stabil, nur halt am Rasperry Pi nicht.
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!