I2CLCD Library für HD44780 LCDs

OP #3667196
Lesenswert?

Hallo,

hier ist eine kleine Überarbeitung der schon bekannten Bibliothek.

- Code aufgräumt
- Funktionen gestrafft, Variablen vereinheitlicht
- kleinere Bugs korrigiert
- Funktion zur direkten Ausgabe von Flash-Strings ergänzt
- Unterstützung von bis zu 4x20 LCDs erweitert
- Pinzuordung ist nun vollkommen frei konfigurierbar
- F_CPU muss nur einmalig definiert werden

Mangels Hardware ist der Code nur auf einem ATmega8 mit 2x16 LCD sowie 
einem Billigadapter für I2C aus Fernost getestet (Arduino-kompatibel), 
man müsste es mit anderen LCDs und Pinzuordnungen am PCF8574 testen. Mit 
einem Steckbrett geht das flott. Einen Adapter gibt es auch bei Pollin, 
allerding muss man dann die Pins im Code anpassen.

http://www.pollin.de/shop/dt/NDU4OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_LCD_I_C_Modul.html

Der im Test verwendete Adapter kam aus China.

http://www.ebay.de/itm/IIC-I2C-TWI-SPI-Serial-Interface-Board-Module-Fur-Arduino-5V-1602-LCD-Display-hp-/141139190965?pt=Motoren_Getriebe&hash=item20dc8d24b5

Hinweis! Der Schaltausgang für die Hintergrundbeleuchtung hat KEINEN 
Vorwiderstand! Wenn also das LCD keinen eingebaut hat (wie die meisten 
dieses Typs!), muss man den nachrüsten. Z.B., indem man den an Stelle 
des Jumpers einlötet.

Was muss man anpassen?

Die CPU Taktfrequenz in der Datei main.h
1
#define F_CPU 8000000       // CPU clock in Hz

Die Parameter des LCDs Datei i2clcd.h.
1
#define LCD_I2C_DEVICE    0x4E      /**< Change this to the address of your expander */
2
#define LCD_LINES      2          /**< Enter the number of lines of your display here */
3
#define LCD_COLS      16          /**< Enter the number of columns of your display here */
4
#define LCD_LINE_MODE       LCD_2LINE   /**< Enter line mode your display here */
5

6
#define LCD_LINE1      0x00      /**< This should be 0x00 on all displays */
7
#define LCD_LINE2      0x40      /**< Change this to the address for line 2 on your display */
8
#define LCD_LINE3      0x40      /**< Change this to the address for line 3 on your display */
9
#define LCD_LINE4      0x60      /**< Change this to the address for line 4 on your display */

Die Pinzuordnung des I2C Adapters in der Datei i2clcd.h.
1
#define LCD_D4_PIN      4  /**< LCD-Pin D4 is connected to P4 on the PCF8574 */
2
#define LCD_D5_PIN      5  /**< LCD-Pin D5 is connected to P5 on the PCF8574 */
3
#define LCD_D6_PIN      6  /**< LCD-Pin D6 is connected to P6 on the PCF8574 */
4
#define LCD_D7_PIN      7  /**< LCD-Pin D7 is connected to P7 on the PCF8574 */
5
#define LCD_RS_PIN      0  /**< LCD-Pin RS is connected to P0 on the PCF8574 */
6
#define LCD_RW_PIN      1  /**< LCD-Pin RW is connected to P1 on the PCF8574 */
7
#define LCD_E_PIN        2  /**< LCD-Pin E is connected to P2 on the PCF8574 */
8
#define LCD_LIGHT_PIN    3  /**< LCD backlight is connected to P3 on the PCF8574, low active */


Viel Spaß dabei.
Angehängte Dateien:
#3667354
Lesenswert?

Hallo Falk
habe es getestet. Vorher habe ich die entsprechenden Teile angepasst. 
Dabei habe ich den Adapter von Poll.. verwendet. CPU auf 16 MHz, 2 
Zeilen 16 Zeichen und die Pins gesetzt. Abgespeichert und compiliert.
Dabei bekomme ich ca. 40 Fehlermeldungen:

Warning  34  implicit declaration of function 'i2c_init' 
[-Wimplicit-function-declaration]  E:\AAA 
Technik\Roboter\RN-Controll\RNC 
Programme\Bus_Display_101\Bus_Display_101\Bus_Display_101.c  17  2 
Bus_Display_101

Warning  35  implicit declaration of function 'lcd_wait_ms' 
[-Wimplicit-function-declaration]  E:\AAA 
Technik\Roboter\RN-Controll\RNC 
Programme\Bus_Display_101\Bus_Display_101\Bus_Display_101.c  18  2 
Bus_Display_101

Error  1  unknown type name 'uint8_t'  E:\AAA 
Technik\Roboter\RN-Controll\RNC 
Programme\Bus_Display_101\Bus_Display_101\i2clcd.h  281  20 
Bus_Display_101

Error  30  unknown type name 'uint8_t'  E:\AAA 
Technik\Roboter\RN-Controll\RNC 
Programme\Bus_Display_101\Bus_Display_101\i2clcd.h  427  16 
Bus_Display_101

habe ein paar reingestellt

achim
OP #3667389
Lesenswert?

@ Achim Seeger (achims)

>habe es getestet. Vorher habe ich die entsprechenden Teile angepasst.
>Dabei habe ich den Adapter von Poll.. verwendet. CPU auf 16 MHz, 2
>Zeilen 16 Zeichen und die Pins gesetzt. Abgespeichert und compiliert.
>Dabei bekomme ich ca. 40 Fehlermeldungen:

Wie schaffst du das immer wieder?

>Warning  34  implicit declaration of function 'i2c_init'
>[-Wimplicit-function-declaration]  E:\AAA
>Technik\Roboter\RN-Controll\RNC
>Programme\Bus_Display_101\Bus_Display_101\Bus_Display_101.c  17  2
>Bus_Display_101

Du hast doch auch AVR-Studio, oder? Man muss doch einfach nur das 
Projekt laden und neu compilieren. Nicht vergessen, in den 
Projekteinstellungen den neuen Controllertyp einzustellen.

Aber wie ich sehe hast du (mal wieder) die Dateien zerplückt. Warum 
nimmst du nicht einfach mal das Beispielprojekt so wie es ist?
#3667401
Lesenswert?

Mache es ganz einfach. Nehme mir das Schaltbil des Herstellers des 
Pollin Boards. Dort steht:

PCF8574    LCD  Angabe Display

P0-PIN4    11      DB4
P1-PIN5    12      DB5
P2-PIN6    13      DB6
P3-PIN7    14      DB7

P4-PIN9    4       RS
P5-PIN10   5       RW
P6-PIN11   6       E

#define LCD_D4_PIN      0  /**< 0 LCD-Pin D4 is connected to P0 on the 
PCF8574 */
#define LCD_D5_PIN      1  /**< 1 LCD-Pin D5 is connected to P1 on the 
PCF8574 */
#define LCD_D6_PIN      2  /**< 2 LCD-Pin D6 is connected to P2 on the 
PCF8574 */
#define LCD_D7_PIN      3  /**< 3 LCD-Pin D7 is connected to P3 on the 
PCF8574 */
#define LCD_RS_PIN      4  /**< 4 LCD-Pin RS is connected to P4 on the 
PCF8574 */
#define LCD_RW_PIN      5  /**< 5 LCD-Pin RW is connected to P5 on the 
PCF8574 */
#define LCD_LIGHT_PIN    7  /**< 7 this pin is not connected */
#define LCD_E_PIN      6  /**< 6 LCD-Pin D4 is connected to P7 on the 
PCF8574 */

Trage dies in das i2clcd.h ein speichere es ab, compiliere es und will 
es zum Atmega schicken. Dazwischen kommen die Fehler
Deien Datein habe ich nicht zerpflückt. Du hast selber geschrieben, das 
man es anpassen muss
achim
OP #3667403
Lesenswert?

@Achim Seeger (achims)

>Trage dies in das i2clcd.h ein speichere es ab,

Soweit so gut.

> compiliere es und will
>es zum Atmega schicken. Dazwischen kommen die Fehler
>Deien Datein habe ich nicht zerpflückt.

Und wie erklärst du mir dann das?

Warning  34  implicit declaration of function 'i2c_init'
[-Wimplicit-function-declaration]  E:\AAA
Technik\Roboter\RN-Controll\RNC
Programme\Bus_Display_101\Bus_Display_101\Bus_Display_101.c  17  2
Bus_Display_101

Die Datei Bus_Display_101.c gibt es in meinem Projekt gar nicht!

Also, was machst du da? Hast du AVR-Studio? Welche Version?
Hast du mein Projekt einfach entpackt, die Änderungen in den Dateien 
gemacht un compiliert? Poste mal einen Screenshot vom AVR-Studio, wo man 
die Dateien sehen kann, siehe Anhang.
Angehängte Dateien:
OP #3667424
Lesenswert?

@ Achim Seeger (achims)

>Ich verwende AVR Studio6. Arbeite mit dem ATmega 32 und 16MHz. Habe
>deine Datein entpackt.

Gut.

> Ein neues Projekt aufgemacht

Warum hast du das gemacht? Warum hast du nicht einfach das EXISTIERENDE 
Projekt genutzt. Soweit ich weiß kann AVR-Studio 6 auch die alten 
Projekte vom AVR Studio 4 lesen und nutzen, oder?

> und deine datein
>eingefügt.
> Anschliessend die änderungen durchgeführt.

Gut.

> Mein Prg habe ich
>so gelassen wie es ist.

Warum hast du nicht das Beispiel genutzt?

NUTZE ERST EINMAL DAS BEISPIEL UND NICHT DEIN FEHLERHAFTES PROGRAMM!

(Mein Gott, ist es denn WIRKLICH SO SCHWER?)

> Habe ein Bild angehängt. Es sind deine Datein.

Un wo ist meine main.h. und main.c?

Ich hab kein AVR-Studio 6, aber irgendwie sieht das bei dir komisch aus. 
Sollten die .c und .h Datein nicht sauber getrennt in verschiedenen 
Kategorien im der Projektanzeige auftauchen, so wie im alten AVR Studio 
4?
#3667454
Lesenswert?

So, habe alles mit deinen Datein gemacht. Deine main.h und.c. Habe die 
CPU geändert und die Pins angepasst. Ergebnis gleich, nur 1 und 3 Zeile 
werden die Punkte angezeigt, keine Schrift. Zeile 2 und 4 wird nichts 
angezeigt. Habe dir ein Bild anghängt. Du benutzt für die Zeile 2 und 3 
jeweils die Adresse 0x40?
achim
Angehängte Dateien:
OP #3667486
Lesenswert?

@ Achim Seeger (achims)

>So, habe alles mit deinen Datein gemacht. Deine main.h und.c. Habe die
>CPU geändert und die Pins angepasst. Ergebnis gleich, nur 1 und 3 Zeile
>werden die Punkte angezeigt, keine Schrift.

Achim, du hast immer noch dein altes Problem. Du kannst (oer willst) 
nicht gescheit kommunizieren! Das geht schief!

Zuerst solltest du mal festhalten, dass das Projekt jetzt fehlerfrei 
kompiliert. Das ist schon mal ein wichtiger Schritt, meinst du nicht?

Als 2. Schritt solltest du das Projekt mit dem 2x16 LCD, was bei dir 
schon geht, probieren.

Als 3. Schritt kann man dann dein 4x16 LCD probieren.

> Zeile 2 und 4 wird nichts
>angezeigt. Habe dir ein Bild anghängt. Du benutzt für die Zeile 2 und 3
>jeweils die Adresse 0x40?

Mal den Kommentar dahinter gelesen? Das sind die Einstellungen für mein 
2x16 LCD, da ist der Wert von Zeile 3 egal. Du musst dort deine 
Anfangsadressen deines LCD reinschreiben.

Aber wenn nur Kästchen angezeigt werden, hat die Initialisierung nicht 
funktioniert.

Mach erstmal den Punkt 2 von oben, Teste mit DEINEM 2x16 LCD.

Dann kann man ganz schnell testen, was mit einem langsameren CPU-Takt zu 
machen ist. Ohne das Programm zu ändern solltest du einfach mal die 
CLKDIV8 Fuse aktivieren, dann läuft dein Controller um Faktor 8 
langsamer. Das könnte dem 4x20 LCD gefallen. Probier mal.

Und du könntest mal einen Link auf das Datenblatt deines LCDs posten, 
oder das Datenblatt selber.
#3667507
Lesenswert?

Es lässt sich fehlerfrei kompilieren. Hast recht damit
Das einzigste was er nicht wollte war progmem
Mit dem Display 2x16 muss ich ein wenig warten. Habe scheinbar was 
verbogen beim rein oder rausziehen. Muss noch fehlersuche machen. Wenns 
nicht klappt muss ich schnell was anders zusammenbauen
#3667510
Lesenswert?

Sorry, was vergessen zu fragen. Wenn ich ein Display 4x20 ohne I2C an 
einem Port mit 4-Bit betreibe, dann muss ich 2 mal die Daten senden, mit 
nibble.
Ist das hier nicht genauso? Ich betreibe das Display mit 4 Bit über I2C. 
Bei 8 Bit muss ich doch die Daten auch 2 mal übertragen?
OP #3667525
Lesenswert?

Wenn das LCD sein eigenes Datenblatt kennt, ist mit dem Timing alles OK. 
Minimale Pulsbreite für E sind 240ns, minimale Periode 1200ns. Das wird 
problemlos eingehalten, denn durch den I2C ist das alles SEHR laangsam.
Die restlichen Befehlsausführungszeiten sind geringfügig kürzer als der 
originale HD44780. Pinbelegung ist auch identisch.

Also sollte man mal ein Auge auf den praktischen Aufbau richten. Wie 
sind die Verbindungen zwischen PCF und LCD? Steckbrett? Wackelkontakte? 
Kalte Lötstellen?
OP #3667527
Lesenswert?

@ Achim Seeger (achims)

>Das einzigste was er nicht wollte war progmem

Warum? Das include dazu ist in den Files drin.

#include <avr/pgmspace.h>

Es kann natürlich sein, dass mit dem neueren avr-gcc dort was anderes 
mittlerweile genutzt wird. Ich kann mir aber nicht so recht vorstellen, 
dass das alte PROGMEM gar nicht mehr gehen soll.

>Mit dem Display 2x16 muss ich ein wenig warten. Habe scheinbar was
>verbogen beim rein oder rausziehen. Muss noch fehlersuche machen. Wenns
>nicht klappt muss ich schnell was anders zusammenbauen

Oje.
#3667620
Lesenswert?

Zum Aufbau.
Es ist kein Steckbrett. Alle Teile sind auf Platinen und nur mit 
Busleitung verbunden. keine freie Verdrahtung, keine Wackelkontakte. Ori 
Platine von Pollin und Nachbau mit veränderter Grösse und Bauform.
An dem 2x16 scheint was oberfaul zu sein. Wahrscheinlich erst Ersatz 
beschaffen. Meine Ersatz LCd hat leider andere Bauform. Muss mir erst 
was passendes einfallen lassen.
Eine Möglichkeit haben wir noch garnicht betrachtet.
Was ist wenn das PC2004 defekt ist?
achim
#3670685
Lesenswert?

Hallo Falk
es geht mir nicht um die Kabel. Könnte ich sofort dran löten.
Habe weiter gesucht und gelesen. Das mit dem nicht ini stimmt, hattest 
du schon gesagt. Habe es auch gefunden, das eine übertragung bei einem 
Display mit 4x20 und 4 Bit 2 mal erfolgen muss. Umschaltung mit nibble. 
Die Info dazu im Netz ist aber extrem dünn. Habe mit goo.. ca 1000 
Stellen gefunden, mit gerade 3 Stellen , die ein bischen dazu sagen. 
Viele suchen eine Lösung. Ist das nichts für dich?
achim
OP #3670736
Lesenswert?

@ Achim Seeger (achims)

>Habe weiter gesucht und gelesen. Das mit dem nicht ini stimmt,

Wie bitte?

> hattest
>du schon gesagt. Habe es auch gefunden, das eine übertragung bei einem
>Display mit 4x20 und 4 Bit 2 mal erfolgen muss. Umschaltung mit nibble.

Und was ist daran so neu? ALLE Displays dieser Art funktionieren so, der 
Unterschied liegt im Wesentlichen nur in der Zuordnung der Adressen zu 
den Zeilen.
Die Ausnahme sind die 4x40 LCDs, die haben zwei Controller mit zwei 
getrennten E Signalen.

>Die Info dazu im Netz ist aber extrem dünn.

Ich glaub da ist eher was anderes dünn . . .

>Habe mit goo.. ca 1000
>Stellen gefunden, mit gerade 3 Stellen , die ein bischen dazu sagen.
>Viele suchen eine Lösung. Ist das nichts für dich?

Was denn? Das popelige 2x40 LCD zu laufen zu kriegen? Ach nö. Ist nicht 
wirklich spannend. iCh behaupte mal, das LCD läuft ganz normal, wenn man 
es richtig anschließt.
#3670795
Lesenswert?

Ein LCD an einem Port in 4 Bit geht ohne Probleme bei mir.
Neu ist die Sache dabei, es mit I2C zu machen. Wenn es so bekannt ist 
und viel Info im Netz stehen, warum finde ich so wenig dazu?
Die ganzen Tuts laufen alle an einem Port ohne I2C.
Fast alle Beispiele mit LCD am I2C laufen mit einem 2x16 Display. Das 
geht auch bei mir. (Wenn ich die defekten Teile getauscht habe). Bleibt 
noch das 4x20 Display am Bus.
Habe auch einige Artikel mit GLCD am Bus gesehen.
Ein richtiger Anschluss ist vorhanden. Die genaue Belegung steht in der 
Datei. Die Angabe dazu auf dem Display ist auch eindeutig. Auf jeden 
Fall hattest du ja schon gesagt, das ini fehlt. Werde weiter suchen.
OP #3671004
Lesenswert?

@ Achim Seeger (achims)

>Ein LCD an einem Port in 4 Bit geht ohne Probleme bei mir.
>Neu ist die Sache dabei, es mit I2C zu machen. Wenn es so bekannt ist
>und viel Info im Netz stehen, warum finde ich so wenig dazu?

Mein Gott, muss man denn ALLEs erstmal im Netz finden?

>Die ganzen Tuts laufen alle an einem Port ohne I2C.

So what. Hör auf zu jammern.

>Fast alle Beispiele mit LCD am I2C laufen mit einem 2x16 Display. Das
>geht auch bei mir.

Schön, dann geht auch 4x20, wenn es das Modul aus dem Datenblatt ist. 
Denn das hat einen voll kompatiblem controller.

>Ein richtiger Anschluss ist vorhanden.

Wie hast du das geprüft?

Prüfe es RICHTIG. Schreib ein kleines Testprogramm, dass per I2C jede 
Pin einzel und langsam wackeln lässt, so mit 1s oder so. Dann kann man 
das direkt am LCD mittels DMM nachmessen.

Einfach so
1
while(1) {
2
   lcd_write_i2c(0x01);
3
   _delay_ms(1000);
4
   lcd_write_i2c(0x00);
5
   _delay_ms(1000);
6
}

Dann kann man alle 8 Pins durchtesten.

> Die genaue Belegung steht in der
>Datei. Die Angabe dazu auf dem Display ist auch eindeutig. Auf jeden
>Fall hattest du ja schon gesagt, das ini fehlt. Werde weiter suchen.

Tja, es geht aber nicht, also ist was faul. Und das muss man 
systematisch suchen, siehe Fehlersuche. Der Test oben ist ein guter 
Anfang.
#3671261
Lesenswert?

Hallo,

ich habe jetzt auch versucht, diese Versionen zu verwenden, da ich mit 
meinen bisherigen Bemühungen gescheitert war.

Nach dem Anpassen der Konfiguration wollte ich im Atmel Studio 6.1 
compilieren und bekomme folgenden Fehler:
1
variable 'string_flash' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

Da ich doch recht unerfahren bin, weis ich nicht was hier das Problem 
ist. Habe versucht, im Netz was zu finden, aber ich komme nicht klar 
damit, bzw. es trifft nicht mein Problem (oder mein Englisch ist einfach 
zu schrott).

Wäre nett, wenn ich hier Hilfe bekomme, woran es liegt. Bis auf die 
Prozessor-Frequenz (16MHz) habe ich keine Einstellungen verändert. Die 
Pinbelegung stimmt mit dem Code überein, daher keine Veränderung.
#3671301
Lesenswert?

So, ich habe mal das mit dem Flash ausgeklammert, so das er eine 
Einfache Ausgabe geben sollte.

Aber ausser der ersten und dritten Zeile mit gefüllten Zeichen kommt 
nichts.
Wie in meinem bisherigen Threat 
(Beitrag "LCD an Arduino Nano via I2C") kann ich über die 
Audrino-IDE und einem passenden Programm das Display ansprechen.

Es liegt also nur an dem Code, aber ich weis nicht woran es happert. 
Habe auch wieder die Prozessorfrequenz auf 8MHz zurück gesetzt.
Gast #3671314
Lesenswert?

Hallo Falk
die einzelnen Pins eines PCF8574 habe ich getestet. Benutze dazu eine 
kleine Platine mit 8 Taster und eine zweite Platine mit 8 LED. An beiden 
kann ich die einzelnen Adressen einstellen. Mit einem kleinen Programm 
wird die Kommunikation im Bus getestet und jeder Ein und Ausgang. 
Gleichzeitig habe ich teilweise bis zu 5 Module unterschiedlicher Bauart 
am Bus und übertrage damit teilweise auf mehrere Adressen und 
Funktionen. Gehe da von aus, das der Bus geht. Wie sage ich dem Display 
das ich im 4 Bit Modus arbeite?

Hallo Dennis
habe leider mein LCD 2x16 geschossen. Vorher hatte ich an der Platine 
von Pol.. eine Anzeige auf dem Display. Wollte danach das Display mit 
4x20 aufstecken. Bei diesem Display wird in der 1 und 3 Zeile nur das 
Punktraster angezeigt (5x7). Kann machen was ich will, bekomme keine 
Schrift angezeigt. Da nur die Punkte angezeigt werden, ist 
wahrscheinlich keine init erfolgt. Das andere ist, wenn ich das Display 
an einem Port des Kontrollers im 4 Bit verwende (ohne I2C) muss ich mit 
nibble, oberste Bit und unterste Bit arbeiten - getennte übertragung. 
Warum muss ich das bei I2C nicht machen? Woher weiss das Display das ich 
im 4 Bit arbeite, wenn ich es vorher nicht sage? Da ich beim PCF die 
D4-D7 verwende ist es 4 Bit.

Hallo Sahra
klammere progmen aus. Dann müsste es ohne fehlermeldung gehen. Nach 
deiner Angabe siehst du auch nicht mehr als ich. Hatte bisher den 
Eindruck (bekommen), das es nur an meinem Aufbau liegt. Triffst aber die 
gleich feststellung wie ich

Es ist durchaus möglich das was kaputt geht. Ist zum Glück kein grosser 
Schaden. In ein  paar Tagen geht alles wieder
achim
OP #3671324
Lesenswert?

@ Sarah S. (magicsarah)

>variable 'string_flash' must be const in order to be put into read-only >section 
by means of '__attribute__((progmem))'

Da ist der neue avr-gcc scheinbar etwas pingelig. ALso so.
1
const char string_flash[] PROGMEM = "Hello Flash!";

>Wäre nett, wenn ich hier Hilfe bekomme, woran es liegt. Bis auf die
>Prozessor-Frequenz (16MHz) habe ich keine Einstellungen verändert. Die
>Pinbelegung stimmt mit dem Code überein, daher keine Veränderung.

Stimmt auch die Adresse überein?
OP #3671332
Lesenswert?

@ achimS (Gast)

>Funktionen. Gehe da von aus, das der Bus geht.

Schön, aber damit hast du nicht zwangsläufig getestet, ob die Daten für 
dein PCF auch an den IOs ankommen.

> Wie sage ich dem Display
>das ich im 4 Bit Modus arbeite?

Mit dem passenden Befehlen bei der Initialisierung.

>nibble, oberste Bit und unterste Bit arbeiten - getennte übertragung.
>Warum muss ich das bei I2C nicht machen?

Musst du du auch, aber das steckt in der Bibliothek drin.

>Woher weiss das Display das ich
>im 4 Bit arbeite, wenn ich es vorher nicht sage?

Du musst es halt vorher sagen ;-)
#3671339
Lesenswert?

Falk Brunner schrieb:
>
> Da ist der neue avr-gcc scheinbar etwas pingelig. ALso so.
>
>
1
> const char string_flash[] PROGMEM = "Hello Flash!";
2
>
>

Habe ich geändert und bekomme ein eigenartiges Verhäten beim 
Compilieren. Wenn ich das erste Mal compiliere bekomme ich folgende 
Meldungen:
1
passing argument 3 of 'lcd_printlc_P' discards 'const' qualifier from pointer target type [enabled by default]
2

3
expected 'char *' but argument is of type 'const char *'

Beim zweiten Durchlauf kommte keine Meldungen mehr.

Aber das Ergebniss bleibt.

>
> Stimmt auch die Adresse überein?
>

Wie auch in meinem Ursprünglichen Threat zu lesen, habe ich die Adresse 
0x27, welche über die Adruino-IDE verifiziert ist. Also daran kann es 
nicht liegen. Habe alternativ auch die übliche 0x20 ausprobiert, aber 
leider Fehlanzeige.

So wie ich verstanden habe, bedeutet die 1. und 3. Zeile Pixel, das die 
Initiallisierung des Displays nicht vorgenommen wurde. Aber wo liegt 
jetzt der Fehler.
#3671362
Lesenswert?

Falk Brunner schrieb:
> Wo hast du das LCD gekauft? Das hier?
>
> 
http://www.pollin.de/shop/dt/MjEzOTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_Modul_TC2004A_01T.html

Nein, ich habe das hier:
http://www.aliexpress.com/snapshot/6049640235.html

Wie geschrieben, wenn ich mit der Arduino-IDE und einem passenden Sketch 
arbeite, welches schon vorgefertigt ist, dann funktioniert es auch. Aber 
ich will nicht die Arduino-IDE mit dem Sketch nehmen, sondern selber den 
Code schreiben und vor allem auch verstehen (was aber sicher ein wenig 
dauern wird).
OP #3671370
Lesenswert?

@ Sarah S. (magicsarah)

>passing argument 3 of 'lcd_printlc_P' discards 'const' qualifier from >pointer 
target type [enabled by default]

>expected 'char *' but argument is of type 'const char *'

Jaja, kann man erstmal ignorieren.

>Wie auch in meinem Ursprünglichen Threat zu lesen, habe ich die Adresse
>0x27, welche über die Adruino-IDE verifiziert ist.

Was hast du denn WIE verifiert?

> Also daran kann es
>nicht liegen.

MÖÖÖP! Schon falsch! Siehe Fehlersuche!

> Habe alternativ auch die übliche 0x20 ausprobiert, aber
>leider Fehlanzeige.

Blinde Kuh spielen ist hier nicht zielführend. WIRKLICH messen ist 
angesagt! Denn weder 0x20 noch 0x27 ist bei dem Projekt eine gültige 
Adresse! Wurde in deinem Thread (nicht Threat!) ausführlich erklärt. Die 
Adressen gehen von 0x40-0x4E in 2er Schritten, weil das LSB immer 0 ist.

>So wie ich verstanden habe, bedeutet die 1. und 3. Zeile Pixel, das die
>Initiallisierung des Displays nicht vorgenommen wurde. Aber wo liegt
>jetzt der Fehler.

Tja, Fehlersuche heißt das Zauberwort. Geht ganz einfach. Erstmal 
muss man prüfen, ob man den IC ansprechen kann.
1
int main(void)
2
{
3
  char string1[] = "Hello World!";
4

5
  i2c_init();
6

7
        if(i2c_start(0x40)) {
8
            // ERROR, kein ACK auf dem Bus
9
            // Fehler-LED einschalten
10
        }
11

12
    while (1) {
13
    
14
    }
15
}

Damit kann man SEHR EINFACH UND SCHNELL herausfinden, auf welcher 
Adresse der PCF denn nun WIRKLICH angesprochen werden muss.
Gast #3671390
Lesenswert?

>Denn weder 0x20 noch 0x27 ist bei dem Projekt eine gültige
>Adresse! Wurde in deinem Thread (nicht Threat!) ausführlich erklärt. Die
>Adressen gehen von 0x40-0x4E in 2er Schritten, weil das LSB immer 0 ist.

Das Problem ist vermutlich mal wieder das der eine die I2C Adresse
als 7 Bit ohne RW betrachtet, und der andere (in diesem Fall Falk)
eben als 8 Bit inklusive RW (bevorzuge ich auch weils logischer ist).

0x27 x 2 = 0x4E
#3671993
Lesenswert?

Hallo
habe den Code so eingegeben wie er von Falk gekommen ist. Habe das 
PROGMEN auskommentiert und danach fehlerfrei Kompiliert. In den anderen 
Datein habe ich 4 Zeile und 20 Zeichen eingestellt, die Pins Nr noch mal 
mit den PINS des LCD verglichen. Die Adresse habe ich an de Platine und 
im Programm kontrolliert. Steht in der Datei auf 0x40 und auf der 
Platine auf 3xGND.
Es erscheint immer noch in der 1 und 3 Zeile das volle Punktraster. In 
der Zeile 2 und 4 wird nichts dargestellt. Leider komme ich nicht 
weiter. Weiss jemand Rat?
achim
OP #3672529
Lesenswert?

@ Achim Seeger (achims)

Mensch Achim. Und täglich grüßt das Murmeltier? Du drehst dich endlos im 
Kreis.

Warum hast du nicht das gemacht, was ich dir empfohlen haben? Nämlich 
erstmal das funktionierende 2x16 LCD anzusteuern. DANN kannst du das 
4x20 angehen.

Ein einfacher Test, ob der Zugriff auf den PCF wenigstens ansatzweise 
funktioniert ist, das Licht der Hintergrundbeleuchtung periodisch ein 
und aus zu schalten.
1
while(1) {
2
  lcd_light(true);
3
  _delay_ms(1000);
4
  lcd_light(false);
5
  _delay_ms(1000);
6
}

So, ich habe gestern bei Pollin diese LCD bestellt. Nächtste Woche ist 
es hier. Wenn ich es in weniger als 1 Stunde zum Laufen kriege, gibts 
ein's auf's Maul! (Rethorisch natürlich)
#3672568
Lesenswert?

Hallo Falk
mit dem Diplay 2x16 hatte ich zugriff auf den PCF und eine Ausgabe des 
Textes. Stecke ich das Diplay 4x20 auf den Adapter von Poll.. erscheint 
nur die erste und dritte Zeile mit den Kästechen. Auf beiden habe ich 
dei Adresse 40 eingestellt.
Ja ich drehe mich im Kreis, weil ich den Unterschied nicht begreiffe, 
wennich die 2 in 4 und die 16 in 20 im .. h geöndert habe könnte es 
damit gehen.
Wenn es klapp, darfst due es machen, natürlich retorisch gesehen.
achim
Gast #3672630
Lesenswert?

Hallo Achim,

hab mal aus Spass ein 4*16 Zeichen Display angehängt (via 
China-Adapter).
Musste nur die Adressen und Anzahl der Zeilen sowie die PROGMEM-Zeile 
und einen Delay (von 2 auf 5 ms) anpassen - dann hat es funktioniert ...

Ggf. bist Du einer Eigenart des Atmel Studio (zumindest bei mir ist das 
so) aufgesessen - das merkt sich scheinbar immer nur die letzte 
ausgewählte Datei im "Device Programming"-Dialog. Wenn Du zuletzt die 
.elf-Datei für das Eeprom ausgewählt hast und das Flashen wieder 
aufrufst hat das Atmel Studio (zumindest bei mir) auch für den 
Flash-Datei-Namen die .elf-Datei am Wickel - und dann siehst Du 
natürlich nur die normale Display-Initialisierung (Blöcke), da kein 
Programm auf den Mikrocontroller geflasht wurde sondern die 
Eeprom-Datei.

Sieht man nicht, wenn der Pfad etwas länger ist ...

Gerade erst gesehen, dass die Start-Adressen der Zeilen 3 und 4 noch 
nicht korrekt sind ... es muss noch jeweils 4 abgezogen werden, also:

#define LCD_LINE1      0x00      /**< This should be 0x00 on all 
displays */
#define LCD_LINE2      0x40      /**< Change this to the address for 
line 2 on your display */
#define LCD_LINE3      0x10      /**< Change this to the address for 
line 3 on your display */
#define LCD_LINE4      0x50      /**< Change this to the address for 
line 4 on your display */
Angehängte Dateien:
Gast #3672646
Lesenswert?

Hallo Falk,

bei den 2 ms wird das "H" der ersten Zeile "verschluckt. Scheinbar 
reagiert mein Display etwas träge auf LCD_CLEAR.

Ich habe mich nicht wirklich herangetastet und einfach mal 5 ms 
ausprobiert ... (es ist ein Optrex-Display, das hier noch "so rumlag" 
:-))
Gast #3672705
Lesenswert?

Hallo Falk,

habe mal nachgeschaut - es ist ein DMC 16433.

Lt. Hersteller "Execution time(max.) when fcp or fosc is 250 kHz 15.2 
ms" für ein "Clear Display". Keine Ahnung wie das Display getaktet ist 
aber 5 ms scheinen auszureichen.
#3672746
Lesenswert?

Hallo Dieter
habe dein Sache sofort getestet an zwei verschiedenen Adaptern. Da von 
ist der eine der von Polli.. Habe auch deine Sachen geändert (adressen). 
Das gleiche Ergeniss. Habe die ganzen Sachen von dir genommen.
Hast du die Belegung des Display so gelassen wie es in der Datei ist? 
Bei mir ist die anders. Das gleicher Ergeniss. 1 und 3 Zeile Kästechen 
sonsz nichts
achim
Gast #3672778
Lesenswert?

Hallo Achim,

hast Du den Bausatz von Pollin verwendet und selbst gelötet? Welches IC 
genau ist verbaut?

Kannst Du bitte Bilder von DEINEM Expander (so wie er aktuell aussieht) 
und DEINEM Anschluss an das LCD einstellen?

Bitte füge auch DEIN aktuelles Atmel-Studio-Projekt (gepackt) dazu.

Hast Du sicher die hex-Datei geflasht?

Ich habe - außer dem, was ich geschrieben habe - nichts angepasst (O.K. 
ich habe noch eine 3. und 4. Zeilen-Ausgabe hinzugefügt und Delays 
zwischen den Ausgaben verändert/angepasst - aber das spielt keine 
Rolle).
OP #3672828
Lesenswert?

Was bei dem Pollinadapter ein Problem sein kann, ist, dass die 
Datenleitngen D0-D3 auf GND liegen. Damit haben einige LCDs Probleme im 
4 Bit Modus. Normalerweise sollen die offen bleien, dorts sind meist 
interne Pull-Ups dran. Man sollte mal versuchen, D0-D3 nicht an den 
Adapter anzuschließen, sie werden so oder so nicht gebraucht.

Ein anders Problem könnte in der lcd_init() stecken. Dort wird nur 2ms 
auf das Ende vom LCD CLEAR Kommando gewartet. Das sollte man mal 
erhöhen, 100ms oder so.

MFG
Falk
#3672856
Lesenswert?

Hallo Dieter
ich verwende den PCF 8574P (nicht A). Die Adresse 0x40. Ist auf dem 
Pollin eingestellt. Du hast im Prg drin 0xE4. Habe beide getestet. Ohne 
Erfolg. Habe zum Anfang das Display 2x16 von pol.. verwendet. Damit 
wurde der Text korrekt dargestellt. Habe dann ein Display mit 4x20 
aufgesteckt. Es wurde nur Zeile 1 und 3 mit Punkten angezeigt. In der 
Zeile 2 und 4 war nichts zu sehen. Habe dann leider das andere Display 
falsch eingesteckt. Es zeigt nichts mehr an. Hast du die Belegung so 
genommen oder anders gemacht?
1
#define LCD_D4_PIN      4  /**< LCD-Pin D4 is connected to P4 on the PCF8574 */
2
#define LCD_D5_PIN      5  /**< LCD-Pin D5 is connected to P5 on the PCF8574 */
3
#define LCD_D6_PIN      6  /**< LCD-Pin D6 is connected to P6 on the PCF8574 */
4
#define LCD_D7_PIN      7  /**< LCD-Pin D7 is connected to P7 on the PCF8574 */
5
#define LCD_RS_PIN      0  /**< LCD-Pin RS is connected to P0 on the PCF8574 */
6
#define LCD_RW_PIN      1  /**< LCD-Pin RW is connected to P1 on the PCF8574 */
7
#define LCD_E_PIN      2  /**< LCD-Pin E is connected to P2 on the PCF8574 */
8
#define LCD_LIGHT_PIN    3  /**< LCD backlight is connected to P3 on the PCF8574, low active */

Hatte verschieden Sachen getestet. leider alles ohne Erfolg.
Wie muss den die Belegung richtig sein?
DB4 vom LCD -> ???
Sorry bin jetzt verwirrt
achim
Gast #3672876
Lesenswert?

Achim Seeger schrieb:
> Du hast im Prg drin 0xE4.

Hallo Achim,

nein - ich habe

#define LCD_I2C_DEVICE    0x4E      /**< Change this to the address of 
your expander */

drin - und habe den China-Adapter im Original-Zustand belassen. Das 
sollte auch für den 8574P passen, wenn Du nichts geändert hast.

Ich vermisse die Bilder un die Antworten auf meine Fragen ...
Gast #3672946
Lesenswert?

Hallo Achim,

in Deinem Programm steht "meine alte Einstellung":

#define LCD_I2C_DEVICE    0x4E      /**< Change this to the address of 
your expander */
#define LCD_LINES      4          /**< Enter the number of lines of your 
display here */
#define LCD_COLS      16          /**< Enter the number of columns of 
your display here */
#define LCD_LINE_MODE       LCD_2LINE   /**< Enter line mode your 
display here */

#define LCD_LINE1      0x00      /**< This should be 0x00 on all 
displays */
#define LCD_LINE2      0x40      /**< Change this to the address for 
line 2 on your display */
#define LCD_LINE3      0x14      /**< Change this to the address for 
line 3 on your display */
#define LCD_LINE4      0x54      /**< Change this to the address for 
line 4 on your display */
/*@}*/


LCD_COLS     muss bei Dir 20 sein
LCD_LINE3    muss bei Dir 10 sein
LCD_LINE4    muss bei Dir 50 sein

... und ich sehe immer noch keine Bilder und habe noch keine Antwort auf 
meine Fragen ...
#3673135
Lesenswert?

Hallo Dieter
Habe dein Programm geteste. Mit dem Display 2x16 erscheint erst Hello 
World mit I2CLCD V0.11
und dann Hello Flash und Zeile 4
Stecke ich das Display 4x20 drauf und starte dein Programm ohne etwas zu 
änder erscheint wieder in der 1 und 3 Zeile lauter Punkte in der 2 und 4 
Zeile nichts. Vorher hatte ich die Bus Adresse geändert. Mit einer 
anderen Adresse kann ich das Modul nicht ansprechen. Stelle ich die 
Adresse zurück geht alles wieder.
Sorry, weiss nicht weiter
achim
OP #3673162
Lesenswert?

@ Dieter Frohnapfel (jim_quakenbush)

>Das funktioniert natürlich nicht!! - Du musst dann ja wenigstens die
>Angabe Zeilen und Spalten anpassen!

Für eine vollständige Ansteuerung ja, um nur die Initialisierung zu 
testen und die zwei Reihen mit den Quadraten verschwinden zu lassen.
#3673170
Lesenswert?

Hallo Dieter
anbei die Fotos der neuen Hardware. Ich verwende dein Programm mit den 
Einstellungen wie auf dem Bild. Dein Programm bringt die Anzeige auf dem 
2x16 LCD wie geschrieben. Auf dem 4x20 nur Punkte. Habe nur die 
genannten änderungen an deinem Programm vorgenommen.
achim
Angehängte Dateien:
Gast #3673187
Lesenswert?

Achim Seeger schrieb:
> Dein Programm bringt die Anzeige auf dem
> 2x16 LCD wie geschrieben. Auf dem 4x20 nur Punkte.

Hallo Achim,

auf den Bildern sehe ich keine Punkte. Auch kenne ich Dein aktuelles 
Programm nicht.
Auf dem ersten Bild würde ich genau 4 Kabel erwarten:

GND
+5V
SCK
SCL

Da sind mehr Kabel zu sehen - wieso?

Links, z.B. BL_K3, scheinen Lötstellen nicht optimal zu sein ...

Ich kann es nicht erkennen - aber wenn Du JP1,2,3 gesetzt hast, dann ist 
natürlich auch die Adresse 0x47.
#3673205
Lesenswert?

Der Anschluss kommt von einen 10 polg. Flachkabel. Die Belegung erfolgt 
nach RN Standard. Die Beschriftung der Stecker ist dahinter und leider 
nicht zu sehen. Diese stimmt aber, da ich mit dem Display 2x16 die 
gewünschte Schrift bekomme. Auf dem Bild 1407 ist in der ersten Zeile 20 
Quadrate mit jeweils 5x7 Punkte, das gleich in der 3 Zeile. Die 3 Jumper 
gehen nach GND. Der Anschluss links ist nur für die Beleuchtung, dabei 
sind jeweils 3 Kontakte parallel geschaltet. Das Prg kennst du, es 
stammt von dir. Ich arbeite mit dem Studio 6 und verwende das Programm 
was du geschickt hast. Habe die Adresse 0x40 getestet, gebe ich einen 
andere an, kann ich den Adapter nicht ansprechen
Gast #3673233
Lesenswert?

Achim Seeger schrieb:
> Die Belegung erfolgt nach RN Standard

Kenne ich nicht, wie sieht der aus?

Achim Seeger schrieb:
> und verwende das Programm was du geschickt hast.

"Mein" Programm ist auf 16 Zeichen pro Zeile eingestellt.

Ich habe keine Ahnung, was bei Dir falsch läuft. Weder kenne ich die
aktuelle Schaltung (komplett) noch das aktuell von DIR eingesetzte 
Programm. Auch weiß ich nicht, ob der Pollin-Adapter (von Dir gelötet ?) 
korrekt funktioniert.

Ich weiß aber, dass mit einem Billig-China-Modul alles O.K. ist.

Also muss der Fehler im Pollin-Modul, dem Display oder Deinem Programm 
stecken.

Fehlersuche (nach meiner Art): Reihum austauschen und Testen ...
OP #3673264
Lesenswert?

@Achim Seeger (achims)

>da das Display 2x16 geht wird es doch iniiert. Ich verwende die datein
>von Peter. Hat er es vergessen?

Nein, wie sollte dan das 2x16 LCD laufen?

> Stelle ein paar Foto rein mit der
>Ansicht der Displays. Beide mit dem gleichen Prg. Daten stehen auf 4x
>20.

Und scheinbar auch 10ms Pause nach dem LCD_CLEAR. Merkwürdig. Wenn es 
keine Wackelkontakte oder kalte Lötstellen sind, würde ich fast 
behaupten, das LCD ist defekt.
OP #3673267
Lesenswert?

@ Dieter Frohnapfel (jim_quakenbush)

>> Die Belegung erfolgt nach RN Standard

>Kenne ich nicht, wie sieht der aus?

unwichtig, die vier Kabel zum Pollinadapter stimmen.

>"Mein" Programm ist auf 16 Zeichen pro Zeile eingestellt.

Ich auch egal. Der unterschied liegt nur in den Adressen. Die erste 
Zeile ist immer gleich.

>Programm. Auch weiß ich nicht, ob der Pollin-Adapter (von Dir gelötet ?)
>korrekt funktioniert.

tut er mit dem 2x16 LCD!

>Ich weiß aber, dass mit einem Billig-China-Modul alles O.K. ist.

Schön, löst aber das Problem nicht.

>Also muss der Fehler im Pollin-Modul, dem Display oder Deinem Programm
>stecken.

Ach ne?

>Fehlersuche (nach meiner Art): Reihum austauschen und Testen ...

Hat er schon gemacht, wie man dem Thread entnehmen kann.
#3673480
Lesenswert?

Wuensche einen recht schönen Morgen an alle,
Hallo Falk
Habe an den Pins des LCD die D0 bis D3 Masse abgeklemmt. Egal mit oder 
ohne ist immer das gleiche Ergebnis. Glaube auch langsam das das LCD 
defekt ist. Problem dabei ist, habe 2 verschiedene Typen mit 4x20 und 
bei beiden das gleiche?
Mit init könnte stimmen. Es ist aber drin. Könnte es sein das es an der 
falschen Stelle steht und nicht ausgeführt wird?
achim
OP #3673484
Lesenswert?

@ Achim Seeger (achims)

>Habe an den Pins des LCD die D0 bis D3 Masse abgeklemmt. Egal mit oder
>ohne ist immer das gleiche Ergebnis.

Mist.

> Glaube auch langsam das das LCD
>defekt ist. Problem dabei ist, habe 2 verschiedene Typen mit 4x20 und
>bei beiden das gleiche?

Möglich, glaub ich aber nicht so recht.

>Mit init könnte stimmen. Es ist aber drin. Könnte es sein das es an der
>falschen Stelle steht und nicht ausgeführt wird?

Bitte? Jetzt wird's aber echt albern! Schau mal in den Quelltext, dort 
ist lcd_init() die 2. Funktion in Main.
#3673485
Lesenswert?

Hallo Dieter
das mit dem China Adapter gibt mir ganz schön zu denken. Was soll der 
Unterschied sein? Eiegntlich ist die Schaltung doch ganz einfach. Einen 
PCF 8574, 3x Adresse, Regler zwischen 1 bis 3, auf 15 und 16 Anschluss 
LED mit Transistor vom Pin12 (P7) geschaltet. Dann noch die Belegung:

LCD  PCF
4    PIN 9   P4  RS
5    PIN 10  P5  RW
6    PIN 11  P6  E

11   PIN 4   P0  DB4
12   PIN 5   P1  DB5
13   PIN 6   P2  DB6
14   PIN 7   P3  DB7

Könntest du mal vergleichen?

achim
OP #3673512
Lesenswert?

@ Achim Seeger (achims)

>Sorry, du hattest doch selber gesagt, das erst mal init kommen muss,
>damit die Quadrate weg gehen.

Ja natürlich! Init wird vom Controller auch ausgeführt, hat aber, warum 
auch immer, bei dem LCD keine Wirkung. Beim 2x16 LCD wirkt es ja.
OP #3673619
Lesenswert?

@ Dieter Frohnapfel (jim_quakenbush)

>Liefert Dein I2C-Modul negative Kontrast-Spannung?

Die Standard-LCDs brauchen keine negative Kontrastspannung. Ausserdem 
SIEHT er ja die zwei Zeilen mit Kästchen, also ist das OK.

> Lt. Schaltplan sehr unwahrscheinlich ...

Sogar AUSGESCHLOSSEN!
Gast #3674992
Lesenswert?

Da keine Reaktion erfolg hier wenigstens der Grund für meine Bitte:

Achims Display ist "HD44870-kompatibel" - lt. Datenblatt werkelt da ein 
ST7066. Dieser braucht eine etwas andere Initialisierung, welche ich 
"eingebaut" habe.
Hätte mich schon interessiert, ob das des Rätsels Lösung ist ...
#3675032
Lesenswert?

Sorry Dieter
hatte heute ein "bischen" Stress. Komme heute leider nur immer kurz an 
den PC (Pikett Einsatz Kältetechnik ca 1,6 MW). Morgen früh hab ich mehr 
Zeit. Ich teste auf jeden Fall.
Post kommt am Montag, noch zwei andere Displays, 2x16 und 4x20, da muss 
doch was kommen.
OP #3679742
Lesenswert?

Kleiner Zwischenbericht. Heute ist mein LCD von Pollin (Bestellnummer 
120 687) angekommen. Buchsenleiste angelötet, China-Adapter angesteckt, 
geht!
Wenn man dann noch die richtgen Adressen für die Zeilen und 4x20 
einstellt, kann man alle vier Zeilen wunderbar beschreiben. Siehe 
Anhang.

Mal sehen was dann mit dem Pollinadapter los ist.
Angehängte Dateien:
OP #3679806
Lesenswert?

@ Dieter Frohnapfel (jim_quakenbush)

>prima - nur hat Achim ja (lt. Datenblatt) ein anderes Display - nämlich
>ein PC2004-c (PC2004LRU-CWA-HDHQ) und das wird etwas anders
>initialisiert, da ein anderer Controller verbaut ist.

Die Unterschiede sind marginal, das PC2004 ist sogar teilweise schneller 
als der originale HD44780.

Wir werden sehen. Der Achim hat mir sein LCD + Pollinadpater geschickt, 
ich werde versuchen, ihn zum Leben zu erwecken.
#3679831
Lesenswert?

Hallo Falk
schon mal danke für das Bild. Habe auch weitergemacht. Habe mir auch 2 
Displays bestellt. Ein 2x16 und ein 4x20 von Pol.. vom Typ TC1602/1604. 
Hab es eingesteckt und es ging sofort mit dem ersten Prg von Dieter. 
Auch ein älteres Prg von mir hat sofort einen Text gebracht, Es spielt 
auch keine Rolle was ich eingstellt hatte Zeiöe oder länge. Hat zwar 
dann nicht gestimmt, aber Text kam. Alles mit einem Pollin Adapter, 
verstehe es nicht
achim
OP #3697582
Lesenswert?

So, das Päckchen ist heute angekommen. Einstellungen in meinem Projekt 
auf die Pinbelegung und Adresse vom Pollinadapter geändert, 2x16 LCD 
läuft auf Anhieb. Aber das 4x20 zuckt nicht.

Pins vorsorglich nachgelötet
Alle Pins einzeln wackeln lassen, sind einwandfrei am LCD messbar
Delays zwischen den INIT-Befehlen eingefügt, bis 50ms, keine Reaktion.
D0-D3 weggebogen, damit die vom Adapter nicht auf GND gezogen werden

Hat alles nix geholfen, das LCD zuckt nicht. Es ist wohl defekt.

Anbei das überarbeitete Projekt. Ein paar kleine Fehlerkorrekturen sowie 
Verbesserungen sind jetzt drin.
Angehängte Dateien:
Gast #3703539
Lesenswert?

Mmh.
Hallo allerseits.

In meinem Datenblatt zum TC 1602a (16x2) stehen drei Referenzwerte
der Ausführungszeiten für die entsprechenden "Fosc" Frequenzen.

Wo wird denn dieser OSC-Takt eingestellt ?
Intern?
Äussere Beschaltung?
Steht irgendwo, welcher Takt nun bei meinem LCD gerade gilt ?

Eine Angabe, dass der LCD-Controller bei
270khz 1,52ms für ein "ClearDisplay" braucht, nützt nur insofern,
als dass man sich mit den Delay-Werten langsam herantasten muss.
Aber dass kann's doch nun wirkich nicht sein.
Wenn ich mich trotz Datenblatt herantasten muss, brauche ich weniger ein 
solches, sondern eher 'ne gehörige Prise Pioniersgeist.

Oder entspricht "Fosc." dem Takt von "E" ?
(...was ich etwas bezweifle...wär aber cool :)

Dem Datenblatt entnehme ich, dass "E" eine Art Übernahme-Clock ist.

Diese Fummelei mit LCD-Timings wird richtig spannend, wenn
kein Atmel,kein Pic, kein Raspberry, kein Arduino oä, sondern andere 
Elektronic die Ansteuerung übernehmen soll.
(...ja, es gibt noch andere Signalgenerierende Elektronic :)


Grüsse , Chris
OP #3704272
Lesenswert?

@ Chris (Gast)

>Wo wird denn dieser OSC-Takt eingestellt ?
>Intern?

intern auf dem LCD, ist alles schon richtig eingestellt.

>Steht irgendwo, welcher Takt nun bei meinem LCD gerade gilt ?

Eben der.

>als dass man sich mit den Delay-Werten langsam herantasten muss.

Nö, nimm die Zahlen aus dem Datenblatt und gut. Das haben vor dir 
Tausende von LCD-Ansteuerern gemacht.

>Wenn ich mich trotz Datenblatt herantasten muss, brauche ich weniger ein
>solches, sondern eher 'ne gehörige Prise Pioniersgeist.

Lass dir Kirche im Dorf und hör auf zu jammern.

>Oder entspricht "Fosc." dem Takt von "E" ?

Nein.

>Dem Datenblatt entnehme ich, dass "E" eine Art Übernahme-Clock ist.

Ist es. Enn gleich ich es eher als Takt bezeichnen würde.

>Diese Fummelei mit LCD-Timings wird richtig spannend, wenn
>kein Atmel,kein Pic, kein Raspberry, kein Arduino oä, sondern andere
>Elektronic die Ansteuerung übernehmen soll.
>(...ja, es gibt noch andere Signalgenerierende Elektronic :)

Sollen wir jetzt vor dir und deiner gigantischen Herausforderung 
niederknien? (Mein Gott ist das albern)
Gast #3704808
Lesenswert?

@ Falk

>Nö, nimm die Zahlen aus dem Datenblatt und gut. Das haben vor dir
>Tausende von LCD-Ansteuerern gemacht.

#kratz#

Das LCD kam alleine. Datenblatt bei Pollin getrennt heruntergeladen.

http://www.pollin.de/shop/dt/Nzc1OTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_Modul_TC1602A_09.html

http://www.pollin.de/shop/downloads/D120422D.PDF

----------

Diese Zahlen gelten aber nur fur eine bestimmte Fosc-Frequenz.
Und in meinem Datenblatt sind DREI angegeben.

Und da es nur EIN Datenblatt für ALLE TC-1602 gibt,
ist es NICHT ersichtlich, welche Fosc-Frequenz von denen DREIEN
nun für DAS LCD gilt, welches VOR MIR liegt.
Selbst wenn es im Netz noch Datenblatt-Derivate gibt (es gibt sie :),
so enthalten auch diese meist 3 Spalten mit Fosc.

Es steht auch nicht auf dem Display.
(So als winzipinzige Bemerkung like : "Fosc=190khz").
Nix.

Auszug aus dem Datenblatt (obiger PDF-Download auf Seite 10):
CLR-Display bei 190khz = 2,16ms
CLR-Display bei 270khz = 1,52ms
CLR-Display bei 350khz = 1,18ms

Und welcher der 3 Takte gilt bei meinem LCD ?

EntryModeSet bei 190khz = 53µs
EntryModeSet bei 270khz = 38µs
EntryModeSet bei 350khz = 29µs

Wär da wenigstens ein Punkt über irgendeiner Spalte der anzeigt,
das diese Spalte für MEIN LCD gilt...

Jetzt sag' bloss keiner, dass für dieses Problem die einzige Lösung
das BusyFlag ist...
(An welches man ja erst drankommt nach einer gewissen Init-Phase)
(Welche nicht abläuft bei obigem Timing-Problem)


Und um den Vogel abzuschiessen:
Diese 3 Werte gelten auch nur bei einer Temperatur von 25 Grad.

Am Ende steht noch der Hinweis, dass zwischen -25 und 70 Grad
die maximale ExecutionTime 100µs beträgt.(bzw. 4,1 ms für 2 Sonderlinge)
Als Grundlage diente wohl der langsamste Fosc sowie die ungünstigste
Temperatur...
----


>Ist es. Enn gleich ich es eher als Takt bezeichnen würde.

OkOk.
Ein Takt mit Übernahmefunktion.


>Sollen wir jetzt vor dir und deiner gigantischen Herausforderung
>niederknien? (Mein Gott ist das albern)

Quatsch.
Ich will so'n LCD ohne Prozessor ansteuern.
Und das issen Problem, wenn man wie ich vor obiger Hürde steht.



@Holger (Gast)

>Da ist eine RC Kombination am Display Controller.
>Per Software kannst du da nichts einstellen.

Auf manchen LCD-Typen sind das SMD Bauelemente... die man
durch (ab)löten bzw. (um)löten ändern kann...
Wenn diese allerdings dicht im/am Controller sind...Shit happens.
-------


Was ist eigentlich, wenn man "E" frequenzmässig langsamer taktet?
Laut Datenblatt (Seite7) gibt es nur für die fallende Flanke von "E"
eine MAXimal-Zeit von 25ns.
Aber dürften nicht die meisten jemals gebauten Rechner
diese Flankenzeit schaffen?
Alle anderen Pins haben dann wohl in Punkto Langsamkeit keine
Beschränkung ?

Ich frage deshalb, weil es doch möglich sein müsste, langsamere
Prozessoren bzw. Controller an dieses LCD anzuschliessen.
Wenn nicht, wär das eine ganz grosse Scheisse.

Da ist ja dann der (langsamere) serielle I²c - Bus was wunderbares.
Dort kann man quasi inner Schaltung mit 'nem Draht
Bit für Bit die Commandos bzw. Daten per Hand hineintakten.



Danke fürs Durchlesen , -
(vielleicht sehe ich ja auch vor lauter Wald...)

Greetz, Chris


PS:
Beitrag "Pollin LCD TC1602 funktioniert mit eigenem Code nicht"
OP #3704831
Lesenswert?

@ Chris (Gast)

>CLR-Display bei 190khz = 2,16ms
>CLR-Display bei 270khz = 1,52ms
>CLR-Display bei 350khz = 1,18ms

ja und? Nimm den langsamsten Takt an und fertig. Das LCD ist immer noch 
schnell genug, um eine handvoll Daten anzuzeigen. Wenn es MAXIMAL 
schnell sein soll, nimm ein gottverdammte Oszi oder Frequenzzähler und 
miss an DEINEM LCD. Fertig!

>Ich will so'n LCD ohne Prozessor ansteuern.
>Und das issen Problem, wenn man wie ich vor obiger Hürde steht.

Du bist und bleibst ein Jammerlappen.

>Ich frage deshalb, weil es doch möglich sein müsste, langsamere
>Prozessoren bzw. Controller an dieses LCD anzuschliessen.

ja, das geht.
Angehängte Dateien:
#3792696
Lesenswert?

Ich habe Falks Code mit meinem Display (4x20) ausprobiert. Es handelt 
sich um dieses: http://www.amazon.de/gp/product/B007XRHBKA (auch diverse 
ebay-Quellen). Die kleine Adapterplatine mit dem I2C-Umsetzer ist von 
der Firma "sainsmart". Als problematisch fiel mir auf:

1. Die Angabe "I2C Address: 0x27" muss man so deuten, dass in "i2clcd.h" 
für LCD_I2C_DEVICE der doppelte Wert anzugeben ist bzw. "(0x2F << 1)".

2. Obwohl bei meinem Display eindeutig die Chip-Bezeichnung  "PCF8574T" 
zu lesen ist, trifft "0x27" als Adresse nicht zu, sondern "0x3F", was 
eigentlich auf die Variante "PCF8574AT" hindeutet. Mein Eintrag in 
"i2clcd.h" lautet nun also "#define LCD_I2C_DEVICE (0x3F << 1)".

Ansonsten bin ich zufrieden.

...Rolf
#3793279
Lesenswert?

Ich hätte noch Vorschläge zu "i2clcd.h":

o Das Hauptprogramm muss, damit die Kompilation korrekt läuft, die 
Zeilen

#include <stdbool.h>
#include <avr/pgmspace.h>

enthalten. Besser wäre, wenn sie nach "i2clcd.h" kämen.

o Die display-spezifischen Definitionen wie

#define LCD_LINES 4

u.a. sollten besser so aussehen:

#ifndef LCD_LINES
#define LCD_LINES 4
#endif

Damit könnte die .h-Datei unabhängig vom konkreten Projekt unverändert 
bleiben und die spezifischen Definitionen woanders (z.B. in einem 
Makefile) gemacht werden.

...Rolf
#3829183
Lesenswert?

Hallo zusammen,

ich versuche gerade das Programm von Falk Brunner mit dem Pollin I2C-LCD 
Adapter ( Bestellnummer: 810 145 ) und dem LCD-Display ( LCD-Modul 
TC1602A-09; Bestellnummer: 120 422 ) bei mir zum laufen zu bekommen.

Folgendes Habe ich bisher gemacht:

- Ordner entpackt
- i2clcd unter AVR-Studio 4 geöffnet
- in der main.h die CPU Fequenz auf 16000000 geändert.  Es steht jetzt 
in der main.h nur
1
#define F_CPU 16000000

ist das richtig?

- i2clcd.h mit hilfe der Datenblätter des I2C - Adapter und des Displays 
die Pinbelegung geändert.
1
#define LCD_D4_PIN      4  /**< LCD-Pin D4 is connected to P4 on the PCF8574 */
2
#define LCD_D5_PIN      5  /**< LCD-Pin D5 is connected to P5 on the PCF8574 */
3
#define LCD_D6_PIN      6  /**< LCD-Pin D6 is connected to P6 on the PCF8574 */
4
#define LCD_D7_PIN      7  /**< LCD-Pin D7 is connected to P7 on the PCF8574 */
5
#define LCD_RS_PIN      9  /**< LCD-Pin RS is connected to P0 on the PCF8574 */
6
#define LCD_RW_PIN      10  /**< LCD-Pin RW is connected to P1 on the PCF8574 */
7
#define LCD_E_PIN      11  /**< LCD-Pin E is connected to P2 on the PCF8574 */
8
#define LCD_LIGHT_PIN    12  /**< LCD backlight is connected to P3 on the PCF8574, low active */

- Die Adresse wie im Programmcode ist mit der Eingestellten Adresse des 
i2C Adapters identisch 4E.

- main.c die Zeile char string_flash[] PROGMEM = "Hello Flash!"; in
1
char string_flash[] = "Hello Flash!";
geändert.

- kompilieren lassen

- die Datei i2clcd_clean.hex auf den ATMega32 geladen

Folge:

1. Zeile schwarze Blöcke
2. Zeile nichts

Hintergrundbeleuchtung "AUS!"

Was habe ich falsch gemacht? Ich versuche mit hilfe dieses Programm den 
I2C Bus zu verstehen und das Display anzusteuern.

Ich bedanke mich für eure Hilfe und verbleibe

mit freundlichen Grüßen

Balou Baer
Angehängte Dateien:
Gast #3829246
Lesenswert?

>#define LCD_RW_PIN      10  /**< LCD-Pin RW is connected to P1 on the >#define 
LCD_E_PIN      11  /**< LCD-Pin E is connected to P2 on the PCF8574 >#define 
LCD_LIGHT_PIN    12  /**< LCD backlight is connected to P3 on the

Du musst die Pinnummern vom PCF8574 angeben und NICHT die vom LCD.
Gast #3829249
Lesenswert?

>Du musst die Pinnummern vom PCF8574 angeben und NICHT die vom LCD.

Bevor du da jetzt auch wieder auf die Nase fällst:
Das war jetzt etwas missverständlich. Es muss die Portnummer sein.
Gib da jetzt bloss nicht die Nummer des Beinchens an.
#3829264
Lesenswert?

holger schrieb:

> Du musst die Pinnummern vom PCF8574 angeben und NICHT die vom LCD.


Dachte das Hätte ich gemacht. Denn:

RS ist Pin 4 vom Display und geht doch auf den P4, also Pin 9, des 
PCF8574?
R/W ist Pin 5 vom Display und geht doch auf den P5, also Pin 10, des 
PCF8574?
E ist Pin 6 vom Display und geht doch auf den P6, also Pin 11, des 
PCF8574?

Bitte verbessere mich wenn ich mich täusche aber so lese ich die 
Datenblätter / Zeichnungen.


Mit freundlichen Grüß

Balou Baer


Ok vom Tippen bis zum senden hast du ja noch was geschrieben ;)

also P0 bis P7 ?
#3829297
Lesenswert?

So habe ich es jetzt geändert:
1
#define LCD_D4_PIN      0  /**< LCD-Pin D4 is connected to P4 on the PCF8574 */
2
#define LCD_D5_PIN      1  /**< LCD-Pin D5 is connected to P5 on the PCF8574 */
3
#define LCD_D6_PIN      2  /**< LCD-Pin D6 is connected to P6 on the PCF8574 */
4
#define LCD_D7_PIN      3  /**< LCD-Pin D7 is connected to P7 on the PCF8574 */
5
#define LCD_RS_PIN      4  /**< LCD-Pin RS is connected to P0 on the PCF8574 */
6
#define LCD_RW_PIN      5  /**< LCD-Pin RW is connected to P1 on the PCF8574 */
7
#define LCD_E_PIN      6  /**< LCD-Pin E is connected to P2 on the PCF8574 */
8
#define LCD_LIGHT_PIN    7  /**< LCD backlight is connected to P3 on the PCF8574, low active */

Ergebnis:

Zeile 1 immernoch Balken
Zeile 2 nichts.

LED Hintergrundbeleuchtung aus
#3829563
Lesenswert?

Sorry ihr Lieben, aber ich muss noch einmal eine Frage los werden.

Nachdem ich nun die I2C Adresse des Displays herausgefunden hatte und 
ich etwas mit dem Display und dem uC spielen konnte, fiehl mir auf, dass 
der anzuzeigende Sting in der ersten Zeile um zwei Zeichen versetzt 
angezeigt wird. Soll heißen, dass wenn ich Hallo World anzeigen lassen 
will, sieht das so in Zeile 1 aus "llo World" in Zeile zwei alles kein 
Problem. Wo kann ich den aus dem Datenblatt entnehmen, welches bei 
meinem Display die Startadresse von der 1. Zeile ist?

Ich bedanke mich für euere Hilfe und verbleibe

mit freundlichen Grüßen

Balou Baer
Angehängte Dateien:
#3903789
Lesenswert?

Hallo :)

Ich habe mir auch mal ein LCD/I²C-Modul bei Pollin gekauft und heute 
(gestern) versucht es zum Laufen zubekommen mit einem 2x16 
Display(TC1602A-09) aber habe es nicht geschafft.
Es wird etwas nicht lesbares angezeigt wenn ich meinen Controller 
mehrmals resetet per Taster.

Ich habe es mit der oberenen Version der Lib versucht.
Mein ATmega32 läuft auch mit 16MHz. Fusebits stimmen auch ;)
Am I2C-Bus hängt nur noch ein pcf8583(RTC) dieser Funktionier auch.
Nur hab ich das gefühl das mein pcf8574 defekt ist.

Jetzt meine Frage: Wie kann ich am besten Feststellen das der pcf8574 
einen defekt hat ?

Meine 4 Displays sind auch nicht defekt habe es mit meinen alten ATmega8 
gegen geprüft.

Funktioniert es den bei jemanden mit dem LCD/I²C-Modul von Pollin und 
dem
Display(TC1602A-09) ?

Gute Nacht erstmal :D

LG Julz
#3903818
Lesenswert?

Hallo,

Bei der Verwendung des I2C-LCD Adapters (Bestellnummer:810 145)von 
Pollin gibt es einen kleinen Harken! Laut deiner Aussage verwendest du 
ein blaues Display, richtig? Bei Verwendung von blauen Displays muss ein 
Widerstand geändert werden, ich meine es wäre der R1. Steht leider nur 
klein auf der Platine und Bedienung-/Aufbauanleitung.

Auch ist darauf zu achten, ob du schon PULLUP Widerstände in deinem 
I2C-Bus nutzt. Wenn ja, dürfen die I2C Widerstände auf dem I2C-LCD 
Adapter nicht eingelötet werden!

Aufgrund des falschen Widerstandes bekam ich auch keine Anzeige auf 
meinem blauem Display. Selbst die Hintergrund Beleuchtung ließ sich mit 
dem falschen Widerstand auch nicht einschalten. Daher prüfe bitte ob du 
denn richtigen Widerstand verwendest.

Wenn du die oben genannten Sachen geprüft hast, prüfe ob du auch die 
richtige I2C - Adresse ansprichst.

Solltest du weitere Fragen haben, kannst du dich gerne noch einmal 
melden

Mit freundlichen Grüßen

Balou Baer
Angehängte Dateien:
OP #3904005
Lesenswert?

@Julius Faust (julz)

>Jetzt meine Frage: Wie kann ich am besten Feststellen das der pcf8574
>einen defekt hat ?

Mit einer systematischen Fehlersuche.

Dazu muss man erstmal prüfen, ob du deinen PCF8574 auf der richtigen 
Adresse ansprichst. Das geht leicht. Dann lässt man die Pins am PCF 
einzeln wackeln.
1
#include <stdbool.h>
2
#include <stdint.h> 
3
#include <stdlib.h>
4
#include <avr/pgmspace.h>
5
#include "main.h"
6
#include <util/delay.h>
7
#include "i2clcd.h"
8
#include "i2cmaster.h"
9

10
int main(void)
11
{
12
    char i2c_adr = 0x40;   // I2C Adresse für Test!
13

14
    // HIER DDRX für Fehler LED auf Ausgang stellen!!!
15

16
    i2c_init();
17
    lcd_init();
18

19
    if (i2c_start(i2c_adr)) {
20
       // ERROR, keine Antwort !!!
21

22
       // HIER eine Fehler-LED einschalten!
23

24
       while(1);  Nix geht mehr, STOP!
25
    }
26

27
    // einzelne Pins am PCF8674 wackeln lassen, Messung mit DMM
28

29
    while (1) {
30
      i2c_write(0x01);  // Testmuster EIN
31
      _delay_ms(1000);
32
      i2c_write(0x00);
33
      _delay_ms(1000);  // Testmuster AUS
34
    }
35
}

Die Fehler-LED im Programm ergänzen und testen.

MFG
Falk
#3906275
Lesenswert?

Danke schonmal für die Antworten.

@ Balou Baer (baloubaer)
Richtig ich verwende 2 Blaue Displays und 2 Grüne aber den Widerstand 
hab ich nicht geändert sonder den Transistor Q1. Zur Zeit verwendete ich 
die Pull-up von Board.

Die I2C-Adresse ist auch auf 0x40 eingestellt :)

@ Falk Brunner (falk)
Danke für den Link :) I2C-Adresse (siehe oben), die Jumper auf dem Board 
passen auch.

Irgendetwas stimmt mit der Initialiserung für das Display noch nicht 
richtig. Damit ich das Display richtig anfäng zu Laufen muss ich zur 
Zeit einmal den Controller reseten, dann kann man auch etwas lesen bei 
den 2 2x16
Display(TC1602A-09), die anderen 2 Display Zeigen mir nur müll an. Ich 
werde mir das im Laufe der Woche ansehen wie es mit dem Display Timing 
aussieht.

Leider habe ich kein Oszi oder Logic Analyzer. Also gehts nur durch 
überlegen und Versuchen.

Display_Blau_X.jpg Zeigen den Programmablauft mit der Bibliothek von 
oben.
Nur das Backlight würde Aktiviert

Display_Gruen1.jpg und Display_Gruen2.jpg Zeigen das Fehlverhalten. 
Denke die sind auch defekt. Kann ich leider zur Zeit nicht überprüfen 
-.-


LG Julz
Angehängte Dateien:
OP #3906627
Lesenswert?

@ Julius Faust (julz)

>Irgendetwas stimmt mit der Initialiserung für das Display noch nicht
>richtig. Damit ich das Display richtig anfäng zu Laufen muss ich zur
>Zeit einmal den Controller reseten, dann kann man auch etwas lesen bei
>den 2 2x16

Klingt nach zu schnellem Timing. Wahscheilich hast du F_CPU im Projekt 
nicht richtig eingestellt.
#3910284
Lesenswert?

Sooooo,

in der main.h steht nun:
1
#define F_CPU 1000000       // CPU clock in Hz

und die main.h steht vor der delay.h
siehe:
1
#include <stdbool.h>
2
#include <stdint.h>
3
#include <stdlib.h>
4
#include <avr/pgmspace.h>
5
#include "main.h"
6
#include <util/delay.h>
7
#include "i2clcd.h"
8
#include "i2cmaster.h"

Internen RC-oszillator aktiv siehe Fusebits:

Low Fuse  0xE1
High Fuse 0x99
Lockbits 0x3F

Int RC osc mit 1Mhz und Start-up 6 CK + 64ms und JTAG off.

Und trotzdem hab ich das gleiche Problem.

Ich denke es liegt an Spannungseinbrüchen.
Habe mit einen Multimeter gemessen und gesehen das das Pollin ATMEL 
Evaluations-Board V2.01 beim Kaltstart eine Längere Zeit benötigt den 5V 
Pegel stabiel zubekommen.

Ich denke das Pollin ATMEL Evaluations-Board V2.01 umbau wird nötig.
OP #3910506
Lesenswert?

@Julius Faust (julz)

>Und trotzdem hab ich das gleiche Problem.

Schlecht.

>Ich denke es liegt an Spannungseinbrüchen.
>Habe mit einen Multimeter gemessen und gesehen das das Pollin ATMEL
>Evaluations-Board V2.01 beim Kaltstart eine Längere Zeit benötigt den 5V
>Pegel stabiel zubekommen.

;-)
Mit einem DMM kannst du solche SPannungseinbrüche gar nicht messen.

>Ich denke das Pollin ATMEL Evaluations-Board V2.01 umbau wird nötig.

Dieses Problem mit den Kondensatoren an den Eingängen? Solange du keine 
Tasten drückst, gibt es auch keine Spannungseinbrüche. Umbauen solltest 
du dennoch.
#3910611
Lesenswert?

Auch ich nutze das das Board von Pollin, mit dem Displayboard und 
Relaiseboard. Ich habe keine Probleme mit der Spannungsversorgungen oder 
mit Spannungseinbrüchen.
Ich hatte nur ein Problem mit der I2C RTC, die nach dem Anlegen der 
Versorgungsspannung selber Ca. 3 Sekunden benötigt um klar zukommen. 
Habe dann direkt nach dem void Main (void){_delay_ms (5000);........} 
eine 5 Sekunden Wartezeit eingebaut und seit dem habe ich keine Probleme 
mehr mit der Initialisierung der i2c-Komponenten.
OP #3957467
Lesenswert?

@ Bülent C. (mirki)

>> Wenn ich mich recht erinnere, komme ich auf eine ähnliche Größe.
>> Hatte ich damals mal gemessen, aber nicht aufgeschrieben 8-0

>Wie kamst Du dazu? der PCF8574 kann doch nur eine I2C Taktung von max.
>100kHz?!

Hmm, stimmt. Hatte ich dennoch mal mit 400kHz betrieben, ging ;-)
Dennoch, wieviele Zugriffe braucht man denn für ein Zeichen? ich glaub 
max. 6 oder 7 Bytes, die über I2C verschickt werden müssen, der Rest an 
CPU-Last fällt kaum ins Gewicht. Macht bei 100 kHz und 9 Bit/Byte 
theoretisch 1500 Zeichen/s. Wenn es real nur 500 sind, ist das auch OK.
Gast #4015984
Lesenswert?

Hi ich benutze deine Library läuft auch astrein dein Programm auf meinem 
LCD aber egal was ich auch änder an meinem Programm, am Ende läuft immer 
nur das was du in der main.c stehen hast ab.

Ist bestimmt ne Newbie frage, aber wie änder ich das? Main löschen 
beziehungsweise überall in Kommentar setzen läuft nicht.

Wenn ich sie lösche dann meckert der Compiler setz ich alle #define 
main.h in Kommentarfunktion läuft trotzdem nur dein Programm ab.

Was kann ich da machen?
Gast #4016676
Lesenswert?

//#include <stdbool.h>
//#include <stdint.h>
#include <avr/pgmspace.h>
//#include <main.h>
#define F_CPU 20000000
#include <util/delay.h>
#include <i2clcd.h>
#include <i2cmaster.h>

//char string_flash[] PROGMEM = "Hello Flash!";

void setup()
{
  char string1[] = "Hello World!";

  i2c_init();
  lcd_init();

        lcd_light(true);
  lcd_print(string1);
  lcd_nextline();
        lcd_print("I2CLCD V0.11");

    // always set all three parameters  (OM/OFF) when using this command
  lcd_command(LCD_DISPLAYON | LCD_CURSORON | LCD_BLINKINGON);
    _delay_ms(1000);

    lcd_command(LCD_CLEAR);
    _delay_ms(2);
  //  lcd_print_P(string_flash);
  //  lcd_printlc_P(2, 2, string_flash);

    //-  Endless loop


}
void loop()
{}



Hier der Code aber leider läuft nicht der ab sondern immer der Inalt der 
main.c.

Hab alle lib Dateien im Arduino Ordner Library/i2clcd entpackt und mein 
Projekt mit eigenem Ordner im Arduino Hauptordner.

Nehme ich die main.h bzw. main.c weg, dann kommt folgende Fehlermeldung 
vom Compiler:


Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
i2cNuerVersuch.cpp.o: In function `setup':
C:\Program Files (x86)\Arduino/i2cNuerVersuch.ino:16: undefined 
reference to `i2c_init()'
C:\Program Files (x86)\Arduino/i2cNuerVersuch.ino:17: undefined 
reference to `lcd_init()'
C:\Program Files (x86)\Arduino/i2cNuerVersuch.ino:19: undefined 
reference to `lcd_light(bool)'
C:\Program Files (x86)\Arduino/i2cNuerVersuch.ino:20: undefined 
reference to `lcd_print(char*)'
C:\Program Files (x86)\Arduino/i2cNuerVersuch.ino:21: undefined 
reference to `lcd_nextline()'
C:\Program Files (x86)\Arduino/i2cNuerVersuch.ino:22: undefined 
reference to `lcd_print(char*)'
C:\Program Files (x86)\Arduino/i2cNuerVersuch.ino:25: undefined 
reference to `lcd_command(unsigned char)'
C:\Program Files (x86)\Arduino/i2cNuerVersuch.ino:28: undefined 
reference to `lcd_command(unsigned char)'
OP #4016703
Lesenswert?

@ icke (Gast)

Mein lieber Arduino-Freund. Ist dir WIRKLICH klar, wie das bei Arduino 
funktioniert?

Die Funktion setup() wird EINMAL beim Start aufgerufen. Danach läuft 
alles in der Funktion loop() immer und immer wieder ab. Und dort steht 
bei dir GAR NICHTS drin. Da muss man sich nicht wundern, wenn 
irgendwelche anderen Dinge nicht ausgeführt werden.

>Nehme ich die main.h bzw. main.c weg, dann kommt folgende Fehlermeldung
>vom Compiler:

>Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
>i2cNuerVersuch.cpp.o: In function `setup':
>C:\Program Files (x86)\Arduino/i2cNuerVersuch.ino:16: undefined
>reference to `i2c_init()'

Da fehlt wohl ein #include "lcd.h", damit der Compiler weiß, wo er 
i2c_init() und alle anderen Funktionen finden kann.

Mit Arduino kenn ich mich im Detail nicht aus. Wenn dir jemand helfen 
soll, musst du das gesamte Projekt als Zip-Archiv hier bereitstellen.
Gast #4016775
Lesenswert?

Ich weiß das die Setup nur einmal läuft reicht mir zum Test ja auch.

Die Funktionen i2c_init etc. sind doch alle in der i2cmaster.h und 
i2clcd.h drin, das sollte doch reichen?

Für mich stellt sich nur die Frage WARUM läuft immer die main.c ab??? 
und die auch noch fehlerfrei, da ist doch auch keine lcd.h eingebunden.
Gast #4017192
Lesenswert?

Boah das hat gedauert.

Fehler gefunden.

Arduino Compiler verlangt statt .c .cpp und aus der twimaster.c und 
i2clcd.c musste ich deine main.h includes löschen.

Danke für die tolle library jetzt läuft alles wie es soll.
#5015723
Lesenswert?

Hi

ich habe mir das Projekt auf den PC geladen und via avrdude auf einen 
AtMega8 geladen ...
Hab die Adresse des I2C angepasst und es läuft.
Hatte zwar etwas Probleme einen Zahlenwert auszugeben, da das Programm 
die Zahlen immer als Buchstaben darstellen will (zumindest meiner 
Erfahrung nach)
Bin jetzt über den Umweg gegangen den Zahlenwert in einen String zu 
wandeln und dann ausgeben zulassen .... funktioniert ebenfalls.

Das Problem was ich mit dem Programm habe, ist dass der Prozessor sich 
irgendwie Aufhängt.

Er zeigt folgendes Verhalten:
- Eine Kontroll LED zeigt mir an ob ein Timerinterrupt ausgelöst wird 
oder nicht ... die LED blinkt weiterhin also nehme ich an dass die 
Interrupts weiter bearbeitet werden und sich der Controller in einer 
Schleife aufhängt
- Das aktuelle Bild auf dem LCD "friert" ein, nur der Coursor blinkt 
noch.


Kann mir jemand helfen?
Gast #5015737
Lesenswert?

Matt S. schrieb:
> - Das aktuelle Bild auf dem LCD "friert" ein, nur der Coursor blinkt
> noch.

Wie kann ein Bild einfrieren? Ein Bild ist doch bereits
per Definition eingefroren. Wenn nicht, wie konnte es
sich vorher bewegen?
Ein Bild auf einem LCD 2x16 Zeilen? Wie kann das sein?

Wie sollen wir uns ein Bild von deinem Problem machen wenn
du uns an Bildern nichts zeigst?

Ein Aufbau und Schaltbild wäre - auch wenn du es nicht
glaubst - sehr nützlich um Probleme hier zu lösen.
Gast #5016372
Lesenswert?

@Mat ze:

Bitte lese dir das Datenblatt des Displays durch. Manche Displays können 
nur mit 100 Hz des I2C Busses angesteuert werden.

Ich vermute Du versuchst es mit einer höheren Frequenz, wodurch das 
Display, bzw der I2C Controller des Display abstürzt. Auch kann ein 
Delay nach dem Senden der Informationen helfen, wenn das Display in 
einer Schleife schnellen Schleife Daten empfangen soll.

Ich hoffe ich komme dir helfen.

Mit freundlichen Grüßen

Patrick Eydt

@ Rat lose Helfer, er sich immer du bist:

Durch so schnippisch und ironische Antworten, wird das Forum auch nicht 
besser. Es gibt nunmal Anfänger und Profis und dein Beitrag zeigt eher 
etwas von einem Anfänger.


Zudem kann auch mit I2CLEd Lob ein 4 Zeilen Display angesteuert werden, 
wenn ich mich recht erinnere. Aber ich will mich jetzt nicht im die Lib 
einlesen.

Also bitte etwas freundlicher und vor allem sachlicher.
#5016409
Lesenswert?

@ Rat Loser Helfer

Damit dass das Bild "einfriert" meinte ich dass die Messwerte auf dem 
LCD nicht mehr aktualisiert werden.
Der cursor und das blinken was in diesem Programm ohne etwas zu ändern 
immer aktiviert ist, funktionieren aber weiterhin.

Das "einfrieren" nicht das korrekte deutsche wort dafür ist ist mir auch 
klar, ich dachte man kann meiner schilderung folgen.

Zum Aufbau:
Controller (AtMega8) auf einer Lochrasterplatine angelötet mit ein paar 
LEDs und einem KTY 81/210 dieser ist linearisiert mit einem 6k1R 
Widerstand. (um irgendwelchen weiteren Kommentaren vorzubeugen der 
Widerstand ist zusammengesetzt aus 2 Widerständen)
Der Display ist mit dem I2C IO-Expander fest verlötet und wurde so bei 
Eba* gekauft. Angeschlossen mit Steckverbindern. Mit einem Multimeter 
konnte ich den Aufbau der von "falk" eingestellt wurde verifizieren. 
lediglich die Adresse musste ich anpassen.
Aber wie ich bereits schrieb die Kommunikation funktioniert prinzipiell 
schon.

Ich muss wohl gestehen, dass ich mich in Deutsch nicht sehr gut 
ausdrücken kann. Allerdings denke ich wenn man will kann man mich 
verstehen, wenn man nicht will kann man sich solche Antworten auch 
sparen.
Ich fand es nicht notwendig Bilder von dem Aufbau zu posten, da ich 
diesen als Trivial empfinde / empfand.



@ Patrick Eydt

Danke für deine Hilfe das Datenblatt zu finden könnte sich als etwas 
schwierig erweisen, da über Eba* gekauft und der Verkäufer das 
Datenblatt selbst suchen müsste.
Allerdings hab ich den vermeindlichen Fehler gefunden, es lag wohl an 
den Einstellungen des ADC.
Dieser war eingestellt auf endlose Messung via Interrupt (jedes mal wenn 
eine Messung fertig ist wird ein Interrupt ausgelöst)
Habe den ADC nun so eingestellt, dass er nur noch eine Messung 
durchführt wenn sie benötigt wird.
Mit dieser Einstellung lief das Programm die ganze Nacht.

Jedoch vielen Dank nochmal für deine Hilfe.
(Firma: privat) #5482507
Lesenswert?

Hallo,
liest hier noch jemand mit?
Habe ein 2x16 LCD wie in Beitrag 1 angeschlossen- Alles OK.
Jetzt ein 4x20 Display. Sunstar 2004A. Der Eintrag in LCD_LINE_MODE 
(LCD_2_LINE oder LCD_4LINE) wird völlig ignoriert. Was mache ich falsch?
Das Display zeigt aber alle 4 Zeilen an! Adressen 0x00; 0x40, 0x14, 0x54
Gruß
Reinhard
OP #5482589
Lesenswert?

@ Reinhard O. (Firma: privat) (flug52)

>Jetzt ein 4x20 Display. Sunstar 2004A. Der Eintrag in LCD_LINE_MODE
>(LCD_2_LINE oder LCD_4LINE) wird völlig ignoriert. Was mache ich falsch?

Gar nichts, denn der hat nicht bei allen LCDs eine Wirkung.

>Das Display zeigt aber alle 4 Zeilen an! Adressen 0x00; 0x40, 0x14, 0x54

Und wo liegt dann das Problem?
OP #8004273
Lesenswert?

Wie doch die Zeit vergeht. Hier mal ein kleines Update. Man kann jetzt dynamisch bis zu 8 LCDs gleichzeitig ansprechen. Dazu müssen erst die I2C Adressen der LCDs mittels lcd_set_i2c_addr() eingetellt werden (7 Bit Adresse, wie bei Arduino!) und dann mittels lcd_select_display() das LCDs vor den weiteren Befehlen ausgewählt werden. Das war's eigentlich schon. Siehe main.c

Angehängte Dateien:
(Firma: 1984now) #8004320
Lesenswert?

Falk B. schrieb:

Wie doch die Zeit vergeht. Hier mal ein kleines Update. Man kann jetzt dynamisch bis zu 8 LCDs gleichzeitig ansprechen.

Wer braucht schon 8 Text-LCDs? Wenn man die zu brauchen meint, wäre es wohl wirklich dringend an der Zeit, die ganz Sache mal auf einem richtigen Grafik-Display zusammenzuführen...

Was ist das Maximum, was man mit 8x HD44780 erreichen kann? Irgendwas bei 16 Zeilen á 40 Zeichen. Grafikdisplays, mit denen das ebenfalls erreichbar ist, kosten heutzutage nur noch 'n Appel und 'n Ei und sind an jeder Ecke des Internet problemlos erhältlich.

#8004325
Lesenswert?

Ich hab die Tage erst ein solches Display aus einem alten Gerät geschlachtet.

Warum wegwerfen wenn's funktioniert und nix kostet?

Das man immer alles schlechtreden muss nur weil's gut abgehangen ist versteh ich nicht.

Ich sag jedenfalls einfach mal Danke für das Update, ich nutze zwar keinen AVR und kann das so nicht direkt benutzen, lesen und was daraus lernen kann ich davon aber bestimmt.

(Firma: 1984now) #8004352
Lesenswert?

Kilo S. schrieb:

Ich hab die Tage erst ein solches Display aus einem alten Gerät geschlachtet.

Warum wegwerfen wenn's funktioniert und nix kostet?

Das fordert ja niemand. Natürlich gibt es Anwendungen, für die ein oder vielleicht auch noch zwei solcher Displays völlig ausreichend und deswegen auch sinnvoll sind.

Aber acht? Die Anwendung in der das sinnvoll ist (und sich nicht durch ein Vollgrafik-Display ersetzen ließe), die musst du mal zeigen...

#8004371
Lesenswert?

Ob S. schrieb:

Aber acht? Die Anwendung in der das sinnvoll ist (und sich nicht durch ein Vollgrafik-Display ersetzen ließe), die musst du mal zeigen...

Schalttafel/Signaltafeln/Verkaufsautomaten und möglicherweise sogar fachsysteme.

Gewächshäuser, insbesondere mit Hydrokulturen.

Wie bei Industrieanlagen von früher (Schalttafel/Signaltafel) eine Abbildung der Wegstrecke + "Signal". (früher Lampe heute dann LCD, könnte dann bei zb. einer Pipeline Details zeigen, Temperatu, Druck usw.) Gibt's doch bestimmt auch schon so, bin sicher nicht der erste mit der Idee

Verkaufsautomaten könnten pro Fach mit einem solchen LCD Preis oder Infos zeigen.

Fachsysteme, personengebundene bzw. sachbezogene Fächer mit häufigen Inhaltswechseln usw.. Automatisierte Inhaltsanzeige.

Hydrokulturanlagen sind aktuell Recht beliebt. (Urban Gardening mit Hydro Towern in der Wohnung oder größerem Maßstab auf dem Balkon, CSC's, Salatbauern...) Solche pflanzreihen könnte man der Länge nach mit Temperatur/EC/PH Sensoren versehen und an der gleichen Position das Display darüber hängen. Das ist so ne Macke der "Hydrokultur" Leute, inklusive mir, parallel zum Sensorwert will man da einfach die Pflanzen auch optisch auf Mängel überprüfen. Bei langen Reihen (>10m) willst du keine 100x8,99€ Grafik LCD finanzieren, da willst du 100x1,99€ (Inklusive PCF!) Text LCD die möglichst gut lesbar sind, vor allem bei allen Gewächsen die mehr Licht möchte als ein Kopfsalat. Und da tut's nicht so weh bei Ausfall.

Da muss man dann schauen, I2C ist da nicht so optimal für die Länge der Strecke, aber Ideen wie man acht Displays verbaut bekommen könnte hab ich tatsächlich.

Gibt's bestimmt auch noch mehr Gründe und auch bessere.

#8004533
Lesenswert?

Kilo S. schrieb:

Gibt's bestimmt auch noch mehr Gründe und auch bessere.

Ich glaube, der Punkt war: Da werden häufig nicht mehrere Displays an einem Controller benötigt, und wenn, dann kann man die vermutlich häufig durch ein „moderneres“ Display ersetzen. Und weit hergeholt ist’s ja auch nicht, wenn man mal ehrlich ist.

Kilo S. schrieb:

ei langen Reihen (>10m) willst du keine 100x8,99€ Grafik LCD finanzieren, da willst du 100x1,99€ (Inklusive PCF!) Text LCD die möglichst gut lesbar sind, vor allem bei allen Gewächsen die mehr Licht möchte als ein Kopfsalat. Und da tut's nicht so weh bei Ausfall.

An jeder Pflanze ein eigenes Display wirkt ja nun auch etwas konstruiert; meist würde man diese Schnittstelle an einem zentralen Punkt vorsehen. Heute würde ich gar eher die Sensordaten via Funkstrecke an eine zentrale Stelle schicken, und von dort aus via WLAN hübsche Diagramme an etwa ein Android-Endgerät ausliefern – das hätte noch viel mehr Stil, als ein 1602-Display pro Pflanze. Da könnte man beispielsweise auch einen Rückkanal vorsehen, für Anmerkungen und Notizen, etc. …

Nichtsdestrotz würde ich der Lib nun ihren Daseinszweck keinesfalls absprechen. „Weil ich das so mag!“ ist zumindest im Hobbybereich ein valides Argument, und das negieren zu wollen, wäre schon auch ein wenig anmaßend.

Insofern von meiner Seite Dank an Falk.

OP #8004579
Lesenswert?

Ob S. schrieb:

Falk B. schrieb:

Wie doch die Zeit vergeht. Hier mal ein kleines Update. Man kann jetzt dynamisch bis zu 8 LCDs gleichzeitig ansprechen.

Wer braucht schon 8 Text-LCDs?

Ein Nutzer des Forums.

Wenn man die zu brauchen meint, wäre es wohl wirklich dringend an der Zeit, die ganz Sache mal auf einem richtigen Grafik-Display zusammenzuführen...

Kann sein, muss nicht. Erlaubt ist was gefällt, vor allem im Hobbybereich.

Man kann sogar 16 LCDs gleichzeitig ansteuern, wenn man den PCF8574 sowie PCF8574A benutzt.

#8004580
Lesenswert?

Jack V. schrieb:

An jeder Pflanze ein eigenes Display wirkt ja nun auch etwas konstruiert;

Nein, leider!

Tatsächlich ist es so das sehr sehr viele Homegrower/CSC ziemliche "Übermütter" bezüglich ihrer Pflanzen sind. Kleine Einsicht in die "Growerszene". Ich kenne da leider viel zu viele die viel zu "Hochtechnologisiert" an die Sache ran gehen. Das geht so weit das die 24/7 Kameraüberwachung im Schrank installieren, inklusive UV Suchscheinwerfer für "nachts". Geht noch "krasser", Sensoren zur Messung der Feuchtigkeit IM Wurzelballen, sowas wird gesucht! Und von Nährstoffinfusionen in den Stamm der Pflanze fangen wir mal besser nicht an. ;-) ( Reale Sache, ich steh bei dem Gedanken auch irgendwie nur staunend da!) https://www.royalqueenseeds.de/blog-psis-technik-fuer-hoehere-cannabis-ertraege-n1780

Da komme ich mir mit vier GPIO für meine komplette Steuerung (Licht, Luft, Wasser, zwei pumpen) und einer simplen RTC manchmal echt primitiv vor. So ganz ohne WLAN und Kram! Ein Kollege steht jedes Mal kopfschüttelnd vor meiner Aeroponic Anlage und kommt aus dem Staunen nicht Raus, er mit unzähligen Sensoren und haste nicht gesehen, schafft auf doppelter Fläche den Bruchteil meiner Ernten. Bei höheren Stromkosten! (Ich zahle so ca. 45-50€ pro Durchgang mit 90-100 Tagen bis zur Ernte, er liegt bei 180€!) Mir war es wichtiger das ein Stromausfall nix groß anhaben kann, pumpen sind mit einem USV Netzteil einer alten Aufzugsteuerung verbunden. 5V&12V sind immer sicher! 20Ah Akku reichen für die Intervall geschalteten pumpen für Tage.

Im Vergleich was heute aufgefahren wird, sind meine Ideen ja noch harmlose Spinnereien was man mit billigen Displays halt so machen könnte.

Klar, ein Salatbauer wird das eher weniger nötig haben, dem reicht die Zentrale Steuerung.

Aber in einem CSC zb. Sind häufig Leute die da Bock drauf haben könnten.

#8004648
Lesenswert?

Kilo S. schrieb:

Tatsächlich ist es so das sehr sehr viele Homegrower/CSC ziemliche "Übermütter" bezüglich ihrer Pflanzen sind. Kleine Einsicht in die "Growerszene".

Nix für ungut, aber was du beschreibst, ist einerseits nur ein kleiner Teil der Leute, und von denen wird auch nur ein noch kleinerer Teil bis runter zur Größe Null einzelne Pflanzen mit ’nem 1602-Display versehen wollen – da wird sich dann eher das Mars-Hydro-Komplettpaket mit Controller (mit BT und App und so), Sensorik, Licht, Luft, CO₂, etc. gekauft. Die haben auch „nur“ ein zentrales Display oder werden eben direkt über die App bedient.

CSC weiß ich nicht – was ich da aber so mitbekomme, ist das auch eher nicht hochtechnologisiert; stattdessen haben die derzeit andere Probleme. Und gerade beim Hanf ist’s nicht mal notwendig. Im größeren Maßstab wird da eh zu Hydroponik gegriffen, dort sind die relevanten Werte pH, EC und Temperatur – nix, was dezentral an jeder Pflanze gelöst werden müsste.

Aber lass uns mal diesen Thread nicht damit entführen – es sei denn, du hast ein Bild von einem Farmer (egal, was der anbaut) mit einem 1602-Display pro Pflanze; dann wär’s wieder On-Topic ;)

#8004682
Lesenswert?

Jack V. schrieb:

In den relevanten einschlägigen (Hanf)-Foren bin ich vertreten.

Nehmen wir einfach mal beispielhaft .ch (Dort wird zb. ein Sensor für wurzelfeuchte gesucht)

Schau dich da mal im Technikbereich um, ich find da sind schon viele vertreten die deutlich mehr Technik als nötig benutzen. Ich meine jetzt nicht sowas wie abgestimmte Anlagen mit CO2 (Fridgegrow zb.) sondern eher die Fraktion die selbst mit ESP's was baut.

Jeder wie er mag, stört ja nicht. Ist halt trotzdem oft für mich nicht verständlich.

Aber genug jetzt, ich hab jetzt das 16x2 an meinem PCF gehabt, glaub aber der hat ne Macke, vermutlich toter Pin weil der schon so oft umgelötet wurde das die Kontakte der Stiftleiste hin sind. Erst mal flicken.

#8004726
Lesenswert?

Kilo S. schrieb:

Nehmen wir einfach mal beispielhaft .ch (Dort wird zb. ein Sensor für wurzelfeuchte gesucht)

Ich meinte nun nicht beispielhaft – dass es Leute gibt, die in dem Gebiet basteln, wurde nicht infrage gestellt – mache ich ja selbst.

Ich bezog mich schon konkret auf die Darstellung, dass Leute ihren Pflanzen einzeln ein Display verpassen würden, und das habe ich auch in diesem Schweizer Forum, wo sich Mods bei Bedarf Regeln aus’m Hintern ziehen und auf der Basis bannen, wobei sie streng drauf achten, dass es nach außen nicht offensichtlich wird (also grower.ch) noch nicht gesehen.

Ich hab mir so Displays immer abgegriffen, wenn sie irgendwo günstig zu haben waren, und daher nun ’nen ganzen Stapel verschiedener Varianten davon rumliegen – aber die nun auf Biegen und Brechen überall dranbauen zu wollen, wäre auch nicht meins.

#8004811
Lesenswert?

Du weißt selbst das die wegen direkter Verlinkungen meistens abkotzen.

Ich muss gucken ob der Beitrag vor oder nach dem Crash war, meine aber vorher, denn in grauer Erinnerung habe ich das es zu der Zeit noch nicht so gut um Arduino bestellt war wie heute.

Wenn hinterher war, müsste der aber eigentlich so bekannt wie der mit den Fliegenflügeln sein!

#8004863
Lesenswert?

Fassen wir zusammen:

  • die I2CLCD-Library wurde um die Möglichkeit erweitert, bis zu acht separate Displays anzusteuern

  • hier im Forum sind einige Zeitgeister unterwegs, die sich auch mit Mühe keinen Anwendungsfall dafür vorstellen können und das lang und breit kundtun müssen

  • Aber: Hier im Forum sind auch andere unterwegs, die die Arbeit von Falk zu schätzen wissen

Ich nutze diese Library zwar (bislang) nicht, ordne mich aber in dieser letzten Kategorie ein.

(Firma: 1984now) #8005304
Lesenswert?

Harald K. schrieb:

  • hier im Forum sind einige Zeitgeister unterwegs, die sich auch mit Mühe keinen Anwendungsfall dafür vorstellen können und das lang und breit kundtun müssen

Lang und breit? Realitäts-Check: Satte drei Zeilen.

Die restlichen vier behandeln bereits die logische Lösung. Denn: für die als effektiv einziges halbwegs glaubwürdiges Gegenargument angebrachten "verteilten" Displays ist wiederum die verwendete I2C-Ansteuerung nur eher schlecht geeignet, denn die zuverlässig mögliche Leitungslänge schränkt die Möglichkeiten zur Verteilung doch schon sehr deutlich ein.

#8005378
Lesenswert?

Anders als an anderer Stelle ist das kein Kalenderereignis hier.

Muss ich sachlich auf Deinen überhaupt nicht hilfreichen Hinweis auf Graphikdisplays reagieren?

Mehrere Textdisplays sind wegen der geringen zu übertragenden Datenmenge problemlos via I2C ansteuerbar, bei mehreren Graphikdisplays wird das ziemlich sinnlos, weil die Updaterate ins Bodenlose sinkt.

Die theoretisch andere Idee, /ein/ Graphikdisplay anstelle mehrerer Textdisplays zu verwenden, scheidet zu oft aus, als daß man sie ernsthaft als Alternative betrachten könnte.

Das wäre nur der Fall, wenn die Textdisplays alle brav mehr oder weniger direkt nebeneinandergeklatscht werden sollen.

So eine Lösung wäre --außer als Demonstrator für die Library-- aber so ... abstrus, daß ich nicht wüsste, wieso man darauf kommen sollte.

(Um noch mal auf den Kalender zurückzukommen: Was den Links-ins-Forum-Rotz-Troll angeht, liegst Du hingegen goldrichtig)

: Bearbeitet durch User
OP #8005573
Lesenswert?

Rainer W. schrieb:

(7 Bit Adresse, wie bei Arduino!)

Was hat das speziell mit Arduino zu tun.

Die Tatsache, daß es dort ebenso gehandhabt wird.

"7 Bit Adresse" hört sich nach originaler I2C-Spezifikation an.

Stimmt, was aber keinen incl. mir davon angehalten hat, auch mit 8 Bit Adressen zu arbeiten und das Thema immer wieder Verwirrung verursacht.

I2C Adresse 0x20 wird zu 0x40 beim Schreiben und 0x41 beim Lesen. Hmm. Was ist denn nun die "echte" Adresse? Die reinen Adressbits oder das erste Byte beim I2C Zugriff nach START?

#8005597
Lesenswert?

Falk B. schrieb:

Was ist denn nun die "echte" Adresse? Die reinen Adressbits oder das erste Byte beim I2C Zugriff nach START?

Tja, das ist die Wurzel der Verwirrung; wenn Leute konsequent die Kombination aus Adresse und Art des Zugriffs als Adresse bezeichnen, dann kommt sowas halt dabei raus.

Man könnte sich an dem orientieren, was der Erfinder des ganzen festgelegt hat - das war Philips vor bald einem halben Jahrhundert.

Natürlich haben die wenigsten, die mit I2C basteln, und das auch jahre- und jahrzehntelang, tatsächlich mal in die von Philips veröffentlichte Spezifikation gesehen, sondern sich an Zweit- und Drittquellen orientiert.

Manchmal schmerzt es, das gewohnte als nicht richtig zu akzeptieren.

Gast #8005603
Lesenswert?

Harald K. schrieb:

Falk B. schrieb:

Was ist denn nun die "echte" Adresse? Die reinen Adressbits oder das erste Byte beim I2C Zugriff nach START?

Tja, das ist die Wurzel der Verwirrung; wenn Leute konsequent die Kombination aus Adresse und Art des Zugriffs als Adresse bezeichnen, dann kommt sowas halt dabei raus.

Und wenn dann noch 10-Bit Adressen ins Spiel kommen...

(Firma: 1984now) #8006239
Lesenswert?

Harald K. schrieb:

Mehrere Textdisplays sind wegen der geringen zu übertragenden Datenmenge problemlos via I2C ansteuerbar, bei mehreren Graphikdisplays wird das ziemlich sinnlos, weil die Updaterate ins Bodenlose sinkt.

Hmmm... Erstens gibt es natürlich auch Grafikdisplays mit I2C-Ansteuerung und zweitens braucht man natürlich nicht bei jeder Änderung an irgendeiner Stelle das komplette Display-RAM neu schreiben.

Und außerdem: Wie oft muss ein menschenlesbares (und rein optisch sowieso recht träges) Display überhaupt aktualisiert wurden? Sinnvoll erscheint mir irgendwas zwischen 1 bis max. 2Hz.

#8006304
Lesenswert?

Ob S. schrieb:

Erstens gibt es natürlich auch Grafikdisplays mit I2C-Ansteuerung und zweitens braucht man natürlich nicht bei jeder Änderung an irgendeiner Stelle das komplette Display-RAM neu schreiben.

Sofern das Graphikdisplay nicht über einen integrierten Zeichengenerator verfügt, ist die zu übertragende Datenmenge, auch um nur etwas à la "12.34 µF" zu übertragen, dennoch erheblich größer als die bei einem Textdisplay benötigten 8 Nutzzeichen + Positionierungsinformation im Display-RAM des HD44780.

Selbst bei einem nur bescheiden lesbaren 8x8-Font sind das 64 Byte nur für die Bitmapdaten.

(Firma: 1984now) #8006990
Lesenswert?

Rene K. schrieb:

Ob S. schrieb:

Wer braucht schon 8 Text-LCDs?

Hier! Acht nicht unbedingt aber 5 Text-LCDs an einem Controller brauche ich. Grund: Flightsim cockpit einer F-16 Viper für das ICP/DED.

Da fliege ich doch lieber die echte F16. Da gibt es nicht ein Display, was nach HD44780-Display aussieht. Wäre für die Piloten auch kaum zumutbar. Viel zu schlecht lesbarer Font, viel zu geringer Kontrast.

(Firma: 1984now) #8006999
Lesenswert?

Jack V. schrieb:

Ob S. schrieb:

Da gibt es nicht ein Display, was nach HD44780-Display aussieht. Wäre für die Piloten auch kaum zumutbar. Viel zu schlecht lesbarer Font, viel zu geringer Kontrast.

Verwechselst du da Controller mit tatsächlichem Display?

Nicht wirklich. Streng genommen hat der Controller natürlich mit dem eigentlichen Display wenig zu tun. Aber die normative Kraft des Faktischen sorgt dann doch dafür, dass HD44780 praktisch immer in Kombination mit unsägliche langsamen und kontrastarmen STN-Displays anzutreffen sind.

(Firma: 1984now) #8007010
Lesenswert?

Ob S. schrieb:

Jack V. schrieb:

Ob S. schrieb:

Da gibt es nicht ein Display, was nach HD44780-Display aussieht. Wäre für die Piloten auch kaum zumutbar. Viel zu schlecht lesbarer Font, viel zu geringer Kontrast.

Verwechselst du da Controller mit tatsächlichem Display?

Nicht wirklich. Streng genommen hat der Controller natürlich mit dem eigentlichen Display wenig zu tun. Aber die normative Kraft des Faktischen sorgt dann doch dafür, dass HD44780 praktisch immer in Kombination mit unsägliche langsamen und kontrastarmen STN-Displays anzutreffen sind.

Ergänzend: Und natürlich ist der Font beim HD44780 von Natur aus ziemlich Scheiße. Das hat nichts mit dem konkret verwendeten Display zu schaffen. Das kann so gut sein, wie es will, dadurch wird der Font nicht besser lesbar.

#8007065
Lesenswert?

Rene K. schrieb:

Hier! Acht nicht unbedingt aber 5 Text-LCDs an einem Controller brauche ich. Grund: Flightsim cockpit einer F-16 Viper für das ICP/DED.

Hmm.

https://www.lockheedmartin.com/content/dam/lockheed-martin/aero/photo/f16/F16Block70Cockpit-1920.jpg

https://hispapanels.com/tienda/en/20-f-16-fighting-falcon?id_category=20&n=67

Aber ich kenn' mich damit auch nicht aus.

#8007175
Lesenswert?

Ob S. schrieb:

Da fliege ich doch lieber die echte F16.

Irgendwie fliegst du vielmehr am realen Leben vorbei, oder?! 😅

Harald K. schrieb:

Hmm. https://www.lockheedmartin.com/content/dam/lockheed-martin/aero/photo/f16/F16Block70Cockpit-1920.jpg

Das ist das Cockpit einer Block 70/72 oder F-16V - davon gibt es nur fünf Maschinen welche nach Bahrain ausgeliefert wurden. Eher (mir ist keine bekannt, welche überhaupt diesen Typ anbietet) nicht so die Maschinen welche in Flightsims geflogen werden.

Harald K. schrieb:

https://hispapanels.com/tienda/en/20-f-16-fighting-falcon?id_category=20&n=67 Aber ich kenn' mich damit auch nicht aus

Ja... Was möchtest du mir damit sagen?!?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren