Forum: Mikrocontroller und Digitale Elektronik Probleme mit meinem LCD-Display


von Grevak D. (xorda)


Lesenswert?

Hallo,

Ich habe einen LCD-Display mit LCM1602 IIC V1 und PCF8574AT. Ich habe es 
richtig angesteckt am Atmega (über einen Arduino)

Die verwendete Bibliothek ist i2clcd.h und i2cmaster.h

Aber ich finde einfach nicht die richtige Adresse weder 0x4E oder sonst 
was, was ich fand scheint zu funktionieren

Weiß jemand weiter?

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

Hi Grevak,

hast Du dir die Basis 7Bit I2C Adresse ausgelesen und auch nachgesehen, 
welche der dann möglichen 8 I2C Adressen Du gesetzt hast ?

von pegel (Gast)


Lesenswert?

Man kann lustiges Adressraten spielen, oder in Tabelle 5 nachsehen:

http://www.nxp.com/documents/data_sheet/PCF8574_PCF8574A.pdf

von sdfghjkil (Gast)


Lesenswert?

Grevak D. schrieb:
> Aber ich finde einfach nicht die richtige Adresse weder 0x4E oder sonst
> was,

Was steht denn im Datenblatt, was hast Du denn schon probiert?

sdfghjkil

von Karl M. (Gast)


Lesenswert?

Nachtrag:
Im Datenblatt des PCF8574A findet man diese unter 8.3.2
Interface Definition.

von Grevak D. (xorda)


Lesenswert?

Ich bin mir nicht sicher, aber ich habe in einem Datenblatt nachgeschaut 
vom PCF8574A (ich weiß nicht ob das dasselbe ist wie der PCF8574AT) und 
habe da gesehen, dass die Basis so aussieht:

0111 0000 - 0111 1110

Also

0x70, 0x72, 0x74, 0x76, 0x78, 0x7A, 0x7C, 0x7E

Hab alle durchprobiert, nichts passiert

von pegel (Gast)


Lesenswert?

Es kommt auch darauf an, ob dein Ardu*dingens 7bit oder 8bit Adressen 
haben möchte.
Siehe Tabelle 5.

von Georg G. (df2au)


Lesenswert?

Manchmal werden die I2C Adressen 1 Bit geschoben angegeben. Ich habe 
wenig Lust, deine Bibliotheken zu suchen und zu forschen. Am einfachsten 
ist es, wenn du einfach mal mit 0x38, 0x39 usw probierst.

von Karl M. (Gast)


Lesenswert?

Hi Grevak,

warum probieren ?

Welchen Pegel haben nun A2 bis A0?

Dann setzt man diese Werte hier ein und legt los:
0b0111|A2|A1|A0

von Grevak D. (xorda)


Lesenswert?

Weder 0x38, 0x39 ... funktioniert noch das aus Tabelle 5

von Grevak D. (xorda)


Lesenswert?

0b0111|A1|A2|A3 funktioniert auch nicht

von Karl M. (Gast)


Lesenswert?

Karl M. schrieb:
> 0b0111|A2|A1|A0

Grevak D. schrieb:
> 0b0111|A1|A2|A3 funktioniert auch nicht

Was soll das sein?

Anstatt A2,A1 oder A0 ist eine 0 oder 1 zu schreiben, "|" dient nur als 
optischer Trenner.

Diese Werte sind direkt abhängig von der beschaltet des Chips!
Das weiss doch keiner von uns.

0b0111|A2|A1|A0

von Grevak D. (xorda)


Lesenswert?

Karl M. schrieb:
> Karl M. schrieb:
>> 0b0111|A2|A1|A0
>
> Grevak D. schrieb:
>> 0b0111|A1|A2|A3 funktioniert auch nicht
>
> Was soll das sein?
>
> Anstatt A2,A1 oder A0 ist eine 0 oder 1 zu schreiben, "|" dient nur als
> optischer Trenner.
>
> Diese Werte sind direkt abhängig von der beschaltet des Chips!
> Das weiss doch keiner von uns.
>
> 0b0111|A2|A1|A0

Ja, ich habe die natürlich mit 0 und 1 ersetzt und ich habe auch A2 A1 
und A0 und nicht 1 2 3 gemeint

von pegel (Gast)


Lesenswert?

https://forum.arduino.cc/index.php?topic=320188.0

Möglicherweise findet sich dort die Lösung.
Entweder im letzten Beitrag, oder in den links im vorletzten.

von Grevak D. (xorda)


Lesenswert?

Im letzten Link arbeiten die mit Sketches. Ich arbeite aber mit C

von Frank L. (Firma: Flk Consulting UG) (flk)


Lesenswert?

Hallo,
Vielleicht zeigst Du mal ein wenig Code und ein Bild von Deinem Aufbau.
Kann manchmal helfen ?
Gruß
Frank

von Grevak D. (xorda)


Angehängte Dateien:

Lesenswert?

Das ist mein Code
1
#include <stdbool.h>
2
#include <avr/pgmspace.h>
3
#include "i2clcd.h"
4
#include "i2cmaster.h"
5
6
int main() {
7
    i2c_init();
8
    lcd_init();
9
10
    lcd_command(LCD_DISPLAYON | LCD_CURSORON | LCD_BLINKINGON);
11
    lcd_light(true);
12
13
    lcd_printlc_P(1, 1, PSTR("Hello World"));
14
}

Die Lib ist angehängt

Ein I2C Scanner sagt, es ist 0x3F, aber es funktioniert nicht
Durch die Verschiebung um 1 Bit vermute ich mal 0x7E, aber das 
funktioniert auch nicht

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

Hallo Grevak,

stimmt denn die Pinnbelegung PCF8574A zu LCD ?

von Grevak D. (xorda)


Lesenswert?

Karl M. schrieb:
> Hallo Grevak,
>
> stimmt denn die Pinnbelegung PCF8574A zu LCD ?

Das habe ich jetzt auch überlegt, denn unter einem Sketch geht 0x3F also 
0x7E
Also muss die Pinbelegung falsch sein. Wie finde ich das heraus?

von Karl M. (Gast)


Lesenswert?

Ins Datenblatt schauen und ausmessen ?

Grevak D. schrieb:
> Also muss die Pinbelegung falsch sein. Wie finde ich das heraus?

Dann bitte die lcd.h überprüfen.

von Grevak D. (xorda)


Lesenswert?

Wie messe ich das aus? Tut mir Leid, ich bin Anfänger
Also ich habe das versucht und habe folgendes getan:

P0 = 4 // RS
P1 = 5 // RW
P2 = 6 // EN
P3 = 7 // BL
P4 = 9 // D4
P5 = 10 // D5
P6 = 11 // D6
P7 = 12 // D7

Und es klappt nicht

: Bearbeitet durch User
von Frank L. (Firma: Flk Consulting UG) (flk)


Lesenswert?

Leute wir reden über I2C da muss gar nichts an den Verbindungen zwischen 
pic und lcd gemessen werden.

Das einzige was hier noch falsch sein kann, ist der Anschluss des I2C an 
den uC.

Deshalb mal ein Bild vom Schaltungsaufbau und die Pinbelegung. Also wo 
der I2C vom Pic an den uC geht.
Gruß
Frank

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

Grevak D. schrieb:
> Wie messe ich das aus? Tut mir Leid, ich bin Anfänger

Schreibe Dir erst einmal die Pinbelegung des LCD und des PCF8574A auf 
ein Papier gegenüber.

Von LCD benötigst Du auch noch diverse Angaben, wie die Zeilen- und 
Zeichenanzahl.
So ein LCD hat eine Anschlussleiste, diese kann 14,16 Pins haben.

Siehe: www.sprut.de/electronic/lcd/
unter "zweireihiger 14- oder 16-poliger Steckverbinder" nach.

Dann schreibe die Zeilen auf ein Papier:

RS  -- PCF8574A Pin ?
R/W -- PCF8574A Pin ?
E   -- PCF8574A Pin ?

D0  -- nicht belegt
D1  -- nicht belegt
D2  -- nicht belegt
D3  -- nicht belegt

D4  -- PCF8574A Pin ?
D5  -- PCF8574A Pin ?
D6  -- PCF8574A Pin ?
D7  -- PCF8574A Pin ?

Dann nimm ein Ohmmeter im 0-200Ohm Bereich und ergänze die PCF8574A 
Pin-Bezeichnungen.

Dies trage bitte in die lcd4.h ein.

von Karl M. (Gast)


Lesenswert?

Frank L. schrieb:
> Leute wir reden über I2C da muss gar nichts an den Verbindungen zwischen
> pic und lcd gemessen werden.
>
> Das einzige was hier noch falsch sein kann, ist der Anschluss des I2C an
> den uC.
>
> Deshalb mal ein Bild vom Schaltungsaufbau und die Pinbelegung. Also wo
> der I2C vom Pic an den uC geht.
> Gruß
> Frank

Ich darf mal lachen, hast Du schon mal eine I2C PCF8574A LCD Adapter 
aufgebaut? Natürlich ist die Pinzuordnung für die anschließende LCD 
Initialisierung unabdingbar.

Des weiteren ist ein ein Atmel AVR µC.

von Grevak D. (xorda)


Lesenswert?

Ich habe das jetzt mit den Pins gerafft. Sie sind richtig angeschlossen 
und ich habe sie auch richtig in die Header eingetragen und dennoch 
klappt es nicht

P0 = 4 // RS
P1 = 5 // RW
P2 = 6 // EN
P3 = 7 // BL
P4 = 9 // D4
P5 = 10 // D5
P6 = 11 // D6
P7 = 12 // D7

Das stimmt mit dem Datenblatt überein und auch mit der Belegung auf dem 
I2C

Woran könnte es noch liegen?

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

I2C Welche I2C Pullup sind installiert und wie hoch ist der I2C 
Mastertakt?

Ich nutze meine eigenes LCD4 zu I2C Interface, damit könnte ich ein 
Testprogramm für einen bekannten Atmel µC mit bekannter Taktrate 
schreiben.

Was ist das für ein LCD?
Hast Du eine genaue Bezeichnung?

Anzahl der Zeilen und Zeichen?

Hast Du ein Datenblatt?

Bitte mach mal sehr gute Bilder im PNG Format vom Aufbau.

von pegel (Gast)


Lesenswert?

Sollte es das sein?
https://www.elektroda.pl/rtvforum/topic2960838.html

Pullups vorhanden? 100kHz I2C Takt?
Dann würde ich erst einmal versuchen das Backlight an P3 zu schalten und 
den Rest ignorieren.

von Grevak D. (xorda)


Angehängte Dateien:

Lesenswert?

Hier sind die Bilder. Leider habe ich diese Informationen nicht, da es 
sich um ein ganzes Set gehandelt hat (Chinaware) und wir das von unserer 
Schule bekommen haben

Das Backlight ist an P3

Beim Sketch, welcher funktionierte (bei dem C Header funktioniert das 
nicht)

waren die Pins so:

en rw rs d4 d5 d6 d7 bl
2, 1, 0, 4, 5, 6, 7, 3

Laut Datenblatt müssten die aber so:

P0 = 4 // RS
P1 = 5 // RW
P2 = 6 // EN
P3 = 7 // BL
P4 = 9 // D4
P5 = 10 // D5
P6 = 11 // D6
P7 = 12 // D7

Was auch nicht funktioniert
Das ist seltsam...

Bei meinem Lehrer, welcher einen PCF8574 und nicht die A Version hat 
funktioniert die Bibliothek schon von sich aus

: Bearbeitet durch User
von Manfred (Gast)


Angehängte Dateien:

Lesenswert?

Grevak D. schrieb:
> Bei meinem Lehrer, welcher einen PCF8574 und nicht die A Version hat
> funktioniert die Bibliothek schon von sich aus

PCF8574 und PCF8574A haben unterschiedliche Basisdressen. Standard sind 
0x27 und 0x3F.

Wenn Du einen Arduino hast, setze den I2C-Scanner ein und gut.

von Grevak D. (xorda)


Lesenswert?

Habe ich und die Adresse habe ich geändert. Jedoch klappt es denoch 
nicht

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wie ist Deine Platine an den µC angeschlossen?

Der Frage, ob Du Pullup-Widerstände für den I2C-Bus einsetzt, bist Du 
bislang geschickt ausgewichen.

Ohne die funktioniert aber der I2C-Bus nicht.

von Karl K. (leluno)


Lesenswert?

erstmal i2c überprüfen; abwechselnd 0xff 0x00 mit 1000ms-delay senden 
und gucken, ob die pins schalten. Dann gehts weiter.

von Manfred (Gast)


Lesenswert?

Grevak D. schrieb:
> Habe ich und die Adresse habe ich geändert. Jedoch klappt es
> denoch nicht

Auf der selben Hardware?

von Grevak D. (xorda)


Lesenswert?

Ich habe die internen Pullup Widerstände an SDA und SCL aktiviert. Es 
klappt nicht

von pegel (Gast)


Lesenswert?

Teste das schalten der Hintergrundbeleuchtung!

von Ingo L. (corrtexx)


Lesenswert?

Grevak D. schrieb:
> Ich habe die internen Pullup Widerstände an SDA und SCL aktiviert. Es
> klappt nicht
Das könnte schon nicht reichen, wie sehen die Pegel auf dem Bus aus? 
Normalerweise verwendet man dort 4,7k. Mit den internen Pull-ups 
bezweifel ich das du damit die Eingänge tatsächlich hochzeihen kannst.

von Grevak D. (xorda)


Lesenswert?

ES KLAPPT!!! Danke!

Ich habe die falschen Pullup Widerstände aktiviert^^

von Ingo L. (corrtexx)


Lesenswert?

Grevak D. schrieb:
> Ich habe die falschen Pullup Widerstände aktiviert^^
Und jetzt klappt es mit den Internen? Damit wird es aber bei höheren 
Geschwindigkeiten Probleme geben, nimm externe Niederohmigere.

von Ralph S. (jjflash)


Lesenswert?

... auf die Idee, PullUp- Widerstände für I2C mittels internen 
Widerständen zu realisieten bin ich nie gekommen, da viel zu hoxhohmig. 
PullUp Woderstände=2,2k.... und alles ist grün.

von Karl M. (Gast)


Lesenswert?

Hallo

Grevak D. schrieb:
> Ich habe die falschen Pullup Widerstände aktiviert^^

Hilf uns bitte auch, welche
> falschen Pullup Widerstände aktiviert
wurden aktiviert?
Und was sind die Richtigen - wie wurden die aktiviert?

Die Mitleser, so wie ich, möchten es immer ganz genau wissen.

von Ingo L. (corrtexx)


Lesenswert?

Karl M. schrieb:
> Und was sind die Richtigen - wie wurden die aktiviert?
Wahrscheinlich die, die zum richtigen Pin gehören.

von Karl M. (Gast)


Lesenswert?

Ingo L. schrieb:
> Karl M. schrieb:
>> Und was sind die Richtigen - wie wurden die aktiviert?
> Wahrscheinlich die, die zum richtigen Pin gehören.

Wie ist das gemeint?

von Grevak Denak (Gast)


Lesenswert?

Ich werde dann niederohmige nehmen.

Mann muss im DDRC Register, also SDA und SCL (AD4 und AD5) , die Pins 
auf 0 Stellen also Eingang und dann mittels PORTC auf 1.

Dann sind die Pullups aktiviert

von Grevak D. (xorda)


Lesenswert?

Grevak Denak schrieb:
> Ich werde dann niederohmige nehmen.
>
> Mann muss im DDRC Register, also SDA und SCL (AD4 und AD5) , die Pins
> auf 0 Stellen also Eingang und dann mittels PORTC auf 1.
>
> Dann sind die Pullups aktiviert

UPDATE:

Wenn man sich dazu entschließt die internen Pullups zu verwenden ist es 
wichtig zuerst diese zu aktivieren, bevor man den LCD initialisiert, 
ansonsten funktioniert es nicht

von Falk B. (falk)


Lesenswert?

@ Grevak Denak (xorda)

>Wenn man sich dazu entschließt die internen Pullups zu verwenden ist es
>wichtig zuerst diese zu aktivieren, bevor man den LCD initialisiert,
>ansonsten funktioniert es nicht

Wer hätte DAS gedacht?
Ist trotzdem Murks, der nur an guten Tagen bei Vollmond funktioniert. 
Externe Pull-Ups mit 2-10k Ohm und gut. Die muss man auch nicht 
einschalten, "nur" richtig anlöten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.