mikrocontroller.net

Forum: Projekte & Code I2CLCD Library für HD44780 LCDs


Autor: Falk Brunner (falk)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht 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-/Bausaetz...

Der im Test verwendete Adapter kam aus China.

Ebay-Artikel Nr. 141139190965

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
#define F_CPU 8000000       // CPU clock in Hz

Die Parameter des LCDs Datei i2clcd.h.
#define LCD_I2C_DEVICE    0x4E      /**< Change this to the address of your expander */
#define LCD_LINES      2          /**< 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      0x40      /**< Change this to the address for line 3 on your display */
#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.
#define LCD_D4_PIN      4  /**< LCD-Pin D4 is connected to P4 on the PCF8574 */
#define LCD_D5_PIN      5  /**< LCD-Pin D5 is connected to P5 on the PCF8574 */
#define LCD_D6_PIN      6  /**< LCD-Pin D6 is connected to P6 on the PCF8574 */
#define LCD_D7_PIN      7  /**< LCD-Pin D7 is connected to P7 on the PCF8574 */
#define LCD_RS_PIN      0  /**< LCD-Pin RS is connected to P0 on the PCF8574 */
#define LCD_RW_PIN      1  /**< LCD-Pin RW is connected to P1 on the PCF8574 */
#define LCD_E_PIN        2  /**< LCD-Pin E is connected to P2 on the PCF8574 */
#define LCD_LIGHT_PIN    3  /**< LCD backlight is connected to P3 on the PCF8574, low active */


Viel Spaß dabei.

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
1 lesenswert
nicht 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?

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Achim Seeger (achims)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende AVR Studio6. Arbeite mit dem ATmega 32 und 16MHz. Habe 
deine Datein entpackt. Ein neues Projekt aufgemacht und deine datein 
eingefügt. Anschliessend die änderungen durchgeführt. Mein Prg habe ich 
so gelassen wie es ist. Habe ein Bild angehängt. Es sind deine Datein.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Achim Seeger (achims)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Achim Seeger (achims)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Datenblatt PC2004-c kommt sofort

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dennis K. (scarfaceno1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> 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?

Benutze auch das 6er Studio.
Sieht bei mir auch so aus.
Steht alles zusammen im Solution Explorer.

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du ein LCD oder sogar Anzeige?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andere Leute hätten einfach 10 kleine Kabel angelötet und fertig.

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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
while(1) {
   lcd_write_i2c(0x01);
   _delay_ms(1000);
   lcd_write_i2c(0x00);
   _delay_ms(1000);
}

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.

Autor: Dennis K. (scarfaceno1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Achim:

Hast Du denn auch ein 2x16 Zeichen LCD? Läuft das mit der Lib von Falk?

Normalerweise sollte auch das 4x20 Zeichen Display mit der Routine 
laufen.
Da werden dann die 1. und 3. Zeile beschrieben...

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Dennis Kaufmann (scarfaceno1)

>Hast Du denn auch ein 2x16 Zeichen LCD?

Ja.

> Läuft das mit der Lib von Falk?

Er hat's kaputt gemacht.

Beitrag "Re: I2CLCD Library für HD44780 LCDs"

Autor: Sarah S. (magicsarah)
Datum:

Bewertung
0 lesenswert
nicht 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:
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.

Autor: Sarah S. (magicsarah)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: achimS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.
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?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Sarah S. (magicsarah)
Datum:

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

Habe ich geändert und bekomme ein eigenartiges Verhäten beim 
Compilieren. Wenn ich das erste Mal compiliere bekomme ich folgende 
Meldungen:
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 *'

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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo hast du das LCD gekauft? Das hier?

http://www.pollin.de/shop/dt/MjEzOTc4OTk-/Baueleme...

Autor: Sarah S. (magicsarah)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Wo hast du das LCD gekauft? Das hier?
>
> 
http://www.pollin.de/shop/dt/MjEzOTc4OTk-/Baueleme...

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).

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.
int main(void)
{
  char string1[] = "Hello World!";

  i2c_init();

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

    while (1) {
    
    }
}

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

: Bearbeitet durch User
Autor: dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: dummy (Gast)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Philips schafft es sogar beide Möglichkeiten in einem
Datenblatt auf einer Seite nebeneinander zu benutzen;)

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.
while(1) {
  lcd_light(true);
  _delay_ms(1000);
  lcd_light(false);
  _delay_ms(1000);
}

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)

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter F. (jim_quakenbush)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 */

: Bearbeitet durch User
Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Achim Seeger (achims)

>mit dem Diplay 2x16 hatte ich zugriff auf den PCF und eine Ausgabe des
>Textes.

Mit meinem Projekt?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Dieter Frohnapfel (jim_quakenbush)

>und einen Delay (von 2 auf 5 ms) anpassen - dann hat es funktioniert ...

Warum 5ms nach einem Clear? 2ms sollten laut Datenbaltt reichen? Was 
passiert bei dir bei 2ms?

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht 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" 
:-))

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe noch ein anderes Display 4x20 vom Typ DML D01 94V0 rangehängt.
Gleiche Ergebnis 1 und 3 Zeile Kästchen, sonst nichts

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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?
#define LCD_D4_PIN      4  /**< LCD-Pin D4 is connected to P4 on the PCF8574 */
#define LCD_D5_PIN      5  /**< LCD-Pin D5 is connected to P5 on the PCF8574 */
#define LCD_D6_PIN      6  /**< LCD-Pin D6 is connected to P6 on the PCF8574 */
#define LCD_D7_PIN      7  /**< LCD-Pin D7 is connected to P7 on the PCF8574 */
#define LCD_RS_PIN      0  /**< LCD-Pin RS is connected to P0 on the PCF8574 */
#define LCD_RW_PIN      1  /**< LCD-Pin RW is connected to P1 on the PCF8574 */
#define LCD_E_PIN      2  /**< LCD-Pin E is connected to P2 on the PCF8574 */
#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

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Achim Seeger (achims)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das Bild kommt sofort

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine änderungen bzw dein Zustand ist auch drin

Autor: Dieter F. (jim_quakenbush)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Achim,

DEIN Programm,DEINE Bilder ...

Der Programm-Ausschnitt bezieht sich auf ein 16 Zeichen-Display - Du 
hast 20 Zeichen - oder?

Autor: Achim Seeger (achims)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Meine Programme kommen. War leider nicht so schnell
Der Fehler .. keine Ahnung wieso, kontroliiere es sofort

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe es geändert, das gleich wie vorher
In der zeile darunter steht 2Line. Hat das ein Einfluss?

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Achim Seeger (achims)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mist, ich alter Trottel, habe die falsche Datei genommen, jetzt kommen 
meine
sorry

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achim Seeger schrieb:
> In der zeile darunter steht 2Line. Hat das ein Einfluss?

Ja, vielleicht solltest Du mal auf ...4line umstellen - ich habe es 
nicht gemacht und es hat auch funktioniert :\


... und das stimmt immer noch nicht:

LCD_LINE4    muss bei Dir 50 sein

Bilder???

: Bearbeitet durch User
Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Achim Seeger (achims)

>Mist, ich alter Trottel, habe die falsche Datei genommen, jetzt kommen
>meine
>sorry

Naja, wenn du immer so arbeitest, wundert mich gar nichts mehr . . .

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Teste es sofort

Falk, wen wir alle perfekt wären, würde alles auf Anhieb funktionieren. 
dann gäbe es keinen Hunder usw., Den Rest kennst du ja. Der letzte 
perfekte Mensch ist heut vor ca 2000 Jahren augfahren, welch ein Zufall 
..

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat keinen Einfluss

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe jetzt komplette neue Hardware verwendet. Also neuer Adapter, neuer 
IC, neues Display mit 2x16. Es wird die Schrift angezeigt. Stecke ich 
ein Display mit 4x20 drauf erscheint nur in der 1 und 3 Zeile die 
Punkte, Zeile 2 und 4 ist nichts.

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Achim,

nochmal:

Bilder DEINES Aufbaus
DEIN aktuell eingesetztes Programm

Beantworte bitte meine Fragen ...

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achim Seeger schrieb:
> ohne etwas zu ändern

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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Für eine vollständige Ansteuerung ja, um nur die Initialisierung zu
> testen und die zwei Reihen mit den Quadraten verschwinden zu lassen.

Was soll mir das sagen?

Autor: Achim Seeger (achims)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Dieter Frohnapfel (jim_quakenbush)

>Was soll mir das sagen?

Der erste Schritt ist die Initialisierung, dann verschwinden die zwei 
Zeilen mit den Quadraten. Da nicht mal das bisher funktioniert, muss man 
hier erstmal den Fehler suchen. Hab ich schon geschrieben, gemacht wurde 
es leider noch nicht.

Beitrag "Re: I2CLCD Library für HD44780 LCDs"

Autor: Achim Seeger (achims)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Falk
da das Display 2x16 geht wird es doch iniiert. Ich verwende die datein 
von Peter. Hat er es vergessen? Stelle ein paar Foto rein mit der 
Ansicht der Displays. Beide mit dem gleichen Prg. Daten stehen auf 4x 
20.

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Ich würde nochmal die Pins D0-D3 am LCD abklemmen!

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, du hattest doch selber gesagt, das erst mal init kommen muss, 
damit die Quadrate weg gehen.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Achim,

hast Du mal das Datenblatt Deines Displays Seite 9 unten betrachtet?

Liefert Dein I2C-Modul negative Kontrast-Spannung? Lt. Schaltplan sehr 
unwahrscheinlich ...

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Dieter F. (jim_quakenbush)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Achim,

probiere bitte mal beiliegende Version aus.

Autor: Dieter F. (jim_quakenbush)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Uups - hatte Deine Pollin-I2C-Anpassungen nicht berücksichtigt - also 
bitte DIESE Version ...

: Bearbeitet durch User
Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achim Seeger schrieb:
> Komme heute leider nur immer kurz an
> den PC

Ach ja?

Beitrag "Blick in Sicherungskasten"

Ich bin damit raus ...

Autor: Falk Brunner (falk)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Heute ist mein LCD von Pollin

Hallo Falk,

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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Achim Seeger (achims)

>dann nicht gestimmt, aber Text kam. Alles mit einem Pollin Adapter,
>verstehe es nicht

Möglicherweise hast du auf dem anderen Adapter einen Lötfehler oder du 
hast beim Experimenieren das LCD gekillt. Sowas kommt vor.

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
grrrr...
mist

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Der Achim hat mir sein LCD + Pollinadpater geschickt,
> ich werde versuchen, ihn zum Leben zu erwecken

Hallo Falk,

was macht der Versuch? Gibt es Ergebnisse zu berichten?

Gruß
Dieter

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuuuuch macht kluuch ;-)

Das Paket ist noch unterwegs. Bisher hab ich nur die Lib noch ein wenig 
überarbeitet und getestet. Läuft jetzt ziemlich gut und auch solide.

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist Zeit das das Paket kommt. Vielleicht glaubt der Zoll nicht das es 
gebrauchte Teile sind. Unklar ...

Autor: L.A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht solltest du dir auch gleich noch einen Logikanalysator mit 
Dekoder für I²C und HD44780 Protokoll bestellen.
Beitrag "10 Euro Logikanalyzer"

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Der Achim hat mir sein LCD + Pollinadpater geschickt,
> ich werde versuchen, ihn zum Leben zu erwecken.

Hallo Falk,

ist inzwischen etwas angekommen?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nope, der Alpenexpress läßt auf sich warten. Vielleicht eingeschneit? 
;-)

Autor: wasdenn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Nope, der Alpenexpress läßt auf sich warten. Vielleicht eingeschneit?
> ;-)

schnee im Juni... lol..)

Autor: Falk Brunner (falk)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Achim Seeger (achims)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Falk
danke für deine Arbeit. Da habe ich wohl zuoft gesteckt. Sonst habe ich 
auch keine Erklärung. Wichtig dabei ist, bin nicht zu doof dazu.
Dank noch mal
achim

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wo wird denn dieser OSC-Takt eingestellt ?

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

Autor: Falk Brunner (falk)
Datum:

Bewertung
1 lesenswert
nicht 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)

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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-/Baueleme...

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"

Autor: Falk Brunner (falk)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Niepraschk (rolfn)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Niepraschk (rolfn)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Balou Baer (baloubaer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
#define F_CPU 16000000

ist das richtig?

- i2clcd.h mit hilfe der Datenblätter des I2C - Adapter und des Displays 
die Pinbelegung geändert.
#define LCD_D4_PIN      4  /**< LCD-Pin D4 is connected to P4 on the PCF8574 */
#define LCD_D5_PIN      5  /**< LCD-Pin D5 is connected to P5 on the PCF8574 */
#define LCD_D6_PIN      6  /**< LCD-Pin D6 is connected to P6 on the PCF8574 */
#define LCD_D7_PIN      7  /**< LCD-Pin D7 is connected to P7 on the PCF8574 */
#define LCD_RS_PIN      9  /**< LCD-Pin RS is connected to P0 on the PCF8574 */
#define LCD_RW_PIN      10  /**< LCD-Pin RW is connected to P1 on the PCF8574 */
#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 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
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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Gib da jetzt bloss nicht die Nummer des Beinchens an.

Du hast die Nummer des Beinchens angegeben! Buhahaha.

Autor: Balou Baer (baloubaer)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

: Bearbeitet durch User
Autor: Balou Baer (baloubaer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So habe ich es jetzt geändert:
#define LCD_D4_PIN      0  /**< LCD-Pin D4 is connected to P4 on the PCF8574 */
#define LCD_D5_PIN      1  /**< LCD-Pin D5 is connected to P5 on the PCF8574 */
#define LCD_D6_PIN      2  /**< LCD-Pin D6 is connected to P6 on the PCF8574 */
#define LCD_D7_PIN      3  /**< LCD-Pin D7 is connected to P7 on the PCF8574 */
#define LCD_RS_PIN      4  /**< LCD-Pin RS is connected to P0 on the PCF8574 */
#define LCD_RW_PIN      5  /**< LCD-Pin RW is connected to P1 on the PCF8574 */
#define LCD_E_PIN      6  /**< LCD-Pin E is connected to P2 on the PCF8574 */
#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

Autor: Balou Baer (baloubaer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HÄÄÄÄ   wir sprech hier über den PCF8574 oder?

auf dem Pollin i2c Adapter ist ein PCF8571P verbaut. vielleicht liegt da 
die Krux

Autor: Balou Baer (baloubaer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sooooo,

adressen sind falsch auf der Platine.
Display lechtet
Display zeigt 1 Sekunde lang das richtige an und dann Chinesische 
zeichen ^^

aber immer hin ^^

Autor: Balou Baer (baloubaer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht im Datenblatt nicht drin, aber Zeile 1 fängt fast immer bei 0x00 
an.

Autor: Julius Faust (julz)
Datum:

Bewertung
0 lesenswert
nicht 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

: Bearbeitet durch User
Autor: Balou Baer (baloubaer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.
#include <stdbool.h>
#include <stdint.h> 
#include <stdlib.h>
#include <avr/pgmspace.h>
#include "main.h"
#include <util/delay.h>
#include "i2clcd.h"
#include "i2cmaster.h"

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

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

    i2c_init();
    lcd_init();

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

       // HIER eine Fehler-LED einschalten!

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

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

    while (1) {
      i2c_write(0x01);  // Testmuster EIN
      _delay_ms(1000);
      i2c_write(0x00);
      _delay_ms(1000);  // Testmuster AUS
    }
}

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

MFG
Falk

Autor: Julius Faust (julz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Julius Faust (julz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Edit:

Bei dem Display_Gruen1.jpg handelt es sich um ein LCD-Modul TC1602E-01 
(120420 bei pollin)

LG Julz

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Balou Baer (baloubaer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder die delay.h vor der CPU Geschwindigkeit eingefügt

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einfach mal den CPU Takt auf 1MHz internen RC-oszillator umstellen und 
testen. Wenn es dann sicher geht, weiß man warum.

Autor: Julius Faust (julz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sooooo,

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

und die main.h steht vor der delay.h
siehe:
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include "main.h"
#include <util/delay.h>
#include "i2clcd.h"
#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.

: Bearbeitet durch User
Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Balou Baer (baloubaer)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was müsste man anpassen, wenn man anstelle dem PCF8574 einen mcp23008 
als PORT Expander verwendet?

Autor: Bülent C. (mirki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Lib von Falk ist für den PCF8574 ausgelegt. Die einzige 
Gemeinsamkeit mit dem MCP23008 ist, das beides I2C Port Expander sind.
Beim MCP23008 muss man erst die Registeradresse dann den Wert schreiben, 
was beim PCF8574 anscheinend nicht notwendig ist.
Ich habe die Lib von Falk auf den MCP23008 angepasst. Wenn Du die haben 
willst, dann schick mir einfach ne PN.

Autor: Bülent C. (mirki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mich würde mal interessieren auf wieviele usec/zeichen ihr mit dem 
PCF8574 kommt.
Mit dem MCP23008 komme ich bei 400kHz I2C Taktung auf 337 usec/Zeichen.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Bülent C. (mirki)

>mich würde mal interessieren auf wieviele usec/zeichen ihr mit dem
>PCF8574 kommt.

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

Autor: Bülent C. (mirki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> 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?!

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleine Anmerkung lass das alles über nen Arduino Uno laufen.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste Code als Anhang, siehe Netiquette.

Autor: icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)'

Autor: icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe als Test natürlich mal statt Hello World was anderes 
reingeschrieben.

Autor: Falk Brunner (falk)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matt Se (matze_93)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rat Loser Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick Eydt (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Matt Se (matze_93)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.