Forum: Mikrocontroller und Digitale Elektronik welches LCD passt zum LCD Tutorial


von Einsteiger (Gast)


Lesenswert?

Hallo Leute! Ich grüsse Euch!

Hat Jemand vieleicht Erfahrungen mit diesem interessanten Tutorial???
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#LCD-Ansteuerung

Ich möchte für mein kleines Projekt ein LCD ansteuern. Es soll aber 
nicht mehr Arbeit machen als bis her.

LCD (Zeilen x Zeichen 4x20). Controller (ATmega32)

Kann mir da Jemand was empfehlen was garantiert zu diesem Tutorial 
passt?
Ohne die Initialisierungszeiten etc. zu ändern. Es soll einfach laufen!
Auf welches LCD ist dieses Tutorial zugeschnitten??? (Reichelt / Pollin)

Ich habe Beiträge gelesen, in denen doch die Kompatibilität zwischen dem 
HD44780 und KS0066 in Frage gestellt wird.

Bitte nicht falsch verstehen. Ich bin nicht faul, habe aber genug Ärger 
mit dem Rest des Projektes...

Wäre für einpaar Tips sehr dankbar.

Vielen Dank

von Vorname N. (logout-name)


Lesenswert?

Also wenn du nach Tutorial vorgehst, dann führt das sicher zum Erfolg.
Ich würde ein LCD mit HD44780-Controller nehmen, damit funktionierts 
ganz sicher!
Viel Erfolg

von Einsteiger (Gast)


Lesenswert?

Könntest Du mit vielleicht ein Modell nennen (mit Bestellnummer) mit dem
es totsicher funktioniert?
Hat es bei dir auch funktioniert?
Wäre sehr dankbar für diese Hilfe.

Danke

von Vorname N. (logout-name)


Lesenswert?

Ja, es hat bei mir auch funktioniert.
Wenn du mir noch sagst wo du normalerweise bestellst, kann ich mal 
schauen ob ich eines finde, welches ich schon erfolgreich getestet habe. 
Ich kann dir aber versprechen (aber keine Geld zurück Garantie) wenn du 
es so machst wie im Tutorial beschrieben und das LCD o.g. Controller 
hat, dass es funktioniert. Bei mir hats auf jeden Fall immer geklappt.

von Einsteiger (Gast)


Lesenswert?

Es ist mir egal wo ich das LCD bestelle.( Conrad, Pollin, Reichelt)
Hauptsache das LCD funktioniert mit dem Tutorial ohne dass ich am Code 
was verändern muss.

Was für ein Display hast du? Wo hast du das gekauft?

Danke für Deine Antworten.

von Niels H. (monarch35)


Lesenswert?

Einsteiger wrote:

> Ich habe Beiträge gelesen, in denen doch die Kompatibilität zwischen dem
> HD44780 und KS0066 in Frage gestellt wird.

Ja, KS0066 und HD44780 funktionieren nicht identisch. Für das Tutorial 
sollte die kompatibilität aber locker langen. Jedenfalls sind die 
meisten Fehler, die hier gemacht werden, Verkabelungsfehler oder 
timingprobleme durch falsche Taktung.

von Einsteiger (Gast)


Lesenswert?

Danke Niels.

Hast DU schon mal ein 4x20 LCD zum laufen gebracht?
Ich weiss nicht was für ein Display ich kaufen soll?

Gruss

von Einsteiger (Gast)


Lesenswert?

P.S.

Ist das Tutorial nicht für ein 2 Zeiliges LCD geschrieben?

lg

von Niels H. (monarch35)


Lesenswert?

Einsteiger wrote:

> Hast DU schon mal ein 4x20 LCD zum laufen gebracht?
> Ich weiss nicht was für ein Display ich kaufen soll?

Ja, habe ich.
Aber im Prinzip ist es für die Ansteuerung ziemlich belanglos, ob du ein 
zwei- oder ein vier zeiliges Display hast. Bei Reichelt sollte unter der 
Artikelnummer "LCD-MODUL 16X4" etwas passendes auftauchen.

Für den Anfang empfehle ich vieleicht doch, ein kleineres Display zu 
nehmen, da diese günstiger sind, falls du dich mal verlöten solltest. 
Das kommt bei den ersten Experimenten schonmal vor. "LCD 162C" ist z.B. 
mit knapp 7€ super günstig.

Wie ich bereits sagte, für die prinzipielle Ansteuerrung ist es 
unerheblich, ob das Display 4 oder 2 Zeilen hat. Später kannst du 
einfach das Display austauschen und mit wenigen Handgriffen die Code 
ganz leicht anpassen.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Einsteiger wrote:
> Könntest Du mit vielleicht ein Modell nennen (mit Bestellnummer) mit dem
> es totsicher funktioniert?

Huhu ;)
Schau mal hier:

http://www.reichelt.de/?;ACTION=2;LA=2;GROUP=A523;GROUPID=3009;START=0;OFFSET=16;SHOW=1

von Einsteiger (Gast)


Lesenswert?

Danke Michael.
Ich melde mich heute abend noch mal. Bis dahin schasue ich mir das ding 
an..

DANKE

von Einsteiger (Gast)


Lesenswert?

Nochmal kurz!

Welches LCD von den vielen???

Kann mir jemand eine ganaue Bestellnummer nennen???

Grüsse

von Niels H. (monarch35)


Lesenswert?

Einsteiger wrote:
> Kann mir jemand eine ganaue Bestellnummer nennen???

Mach mal die Augen auf. In meinem Posting hatte ich zwei bestellnummern 
genannt.

von Einsteiger (Gast)


Lesenswert?

OK Leute.

Ich habe mir nun folgendes LCD gekauft:

- DEM 20485 SYH-LY
- LCD Controller LSI KS0066
- 4x20

Datenblatt : 
http://www.soselectronic.ro/a_info/resource/d/dem/dem20485syh-ly.pdf

Ich werde mich gleich morgen an die Arbeit machen und das LCD nach 
diesem
Tutorial anschliessen :

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#LCD-Ansteuerung

Ich hoffe Ihr werdet mich einbißchen unterstützen!

Bis dahin danke ich Euch für Eure Hilfe!
(Ich werde es schön dokumentieren und Online stellen damit Anfänger wie 
ich
Euch in Zukunft nicht mit solchen Fragen belästigen)

P.S. Habe ich überhaupt das Richtige LCD gekauft???


Liebe Grüsse

von xXx (Gast)


Lesenswert?

Hi,
der ganze Krempel den es bei Reichelt gibt an Displays (2*16 usw.) geht 
da, ist sowas wie "Industriestandard".

von Einsteiger (Gast)


Angehängte Dateien:

Lesenswert?

Hallo ich bin´s wieder!

Wie versprochen habe ich jetzt alles laut diesem Tutorial verdrahtet:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#LCD-Ansteuerung

Es tut sich überhaupt nichts :o(  NATÜRTLICH NICHT...
Klar habe ich mir gedanken gemacht und kam zu dem Ergebnis, dass
dieses Tutorial für den HD44780-Controller erstellt worden ist.

Im Klartext: Die Initialisierung des LCD´s kommt erst garnicht zustande.

Mein LCD benötigt folgende Initialisierung (sehe Anhang)

Leider bin ich (noch) nicht fähig ohne Hilfe diese Initialisierung auf
mein LCD umzuschreiben.


Original aus dem Tutorial :

...
void lcd_init(void)
{
   LCD_DDR = LCD_DDR | 0x0F | (1<<LCD_RS) | (1<<LCD_EN);   // Port auf 
Ausgang schalten

   // muss 3mal hintereinander gesendet werden zur Initialisierung

   _delay_ms(15);
   LCD_PORT &= 0xF0;
   LCD_PORT |= 0x03;
   LCD_PORT &= ~(1<<LCD_RS);      // RS auf 0
   lcd_enable();

   _delay_ms(5);
   lcd_enable();

   _delay_ms(1);
   lcd_enable();
   _delay_ms(1);

   // 4 Bit Modus aktivieren
   LCD_PORT &= 0xF0;
   LCD_PORT |= 0x02;
   lcd_enable();
   _delay_ms(1);

   // 4Bit  2 Zeilen  5x7
   lcd_command(0x28);

   // Display ein  Cursor aus  kein Blinken
   lcd_command(0x0C);

   // inkrement / kein Scrollen
   lcd_command(0x06);

   lcd_clear();
}
...

Kann bitte mir jemand helfen ??? Wie kann ich die lcd_init Funktion auf
mein LCD unter Einhaltung der richtigen Reihenfolge und Zeiten 
umschreiben???

Für kleine und große Hilfe danke ich Euch vielmals.

Liebe Grüsse

von Niels H. (monarch35)


Lesenswert?

Einsteiger wrote:

> Für kleine und große Hilfe danke ich Euch vielmals.

Zu wenig relevante informationen.
Bitte erstelle einen Vollständigen verdrahtungsplan und hänge den 
kompletten Code an. Welchen Microcontroller auf welchen Board verwendest 
du?

Du Beschreibst, daß sich garnichts tut. Das kann eigentlich nicht sein. 
Nach dem Einschalten des Displays sollten zumindest zwei schwarze Balken 
in Reihe eins und drei sichtbar sein.

von Einsteiger (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Niels.
Du hast Recht.


Meine Hardware :
-----------------------------------------
- Atmel Evaluationsboard Version 2.0.1
- ATMega32 Controller
- DEM 20485 SYH-LY

Meine Software :
-----------------------------------------
- AVR Studio
- PonyProg

(Es sollte alles in C programmiert werden)

Meine Kenntnisse :
-----------------------------------------
- Anfänger


Verdrahtung :
-----------------------------------------


ATMEGA32 :
----------

1  Vss  GND
2  Vcc  5V
3  Vee  GND
4  RS  PD4
5  RW  GND
6  E  PD5
7  DB0  offen
8  DB1  offen
9  DB2  offen
10  DB3  offen
11  DB4  PD0
12  DB5  PD1
13  DB6  PD2
14  DB7  PD3


Code :
-------------------------------------------

aus diesem Tutorial...
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#LCD-Ansteuerung

Funktion :
-------------------------------------------

Beim Einschalten zeigen sich in der 1. und 3. Zeile waagerechte Balken
s. Anhang

von Einsteiger (Gast)


Lesenswert?

Kann mir Jemand vielleicht die lcd_init Funktion erläutern?
Wie funktioniert das?

Mit dem Tutorial komme ich nicht wirklich zurecht...

Danke im voraus.

von Niels H. (monarch35)


Lesenswert?

Einsteiger wrote:

> Mit dem Tutorial komme ich nicht wirklich zurecht...

Wie gut kannst du C? Schon irgendwelche Vorerfahrungen?
Hast du einen Testcode mal ausprobiert, ob der Controller generell 
überhaupt Code ausführt? (zb. in dem man eine LED blinken lässt)

von Einsteiger (Gast)


Lesenswert?

@ Niels.

Ja klar. So ein Anfänger bin ich auch noch nicht.
Controller funktioniert auf jeden fall.
Am Port_C ist eine Lichtschranke angeschlossen. (Die Funktion ist da)
Zustand der Lichtschranke derzeit durch eine LED signalsiert.

Soweit alles ok.

Ich möchte einfach nur bezwecken dass mein LCD eine Meldung ausgibt,
wenn die Lichtschranke verdeckt ist...
Einfach ist gut...

Ich komme mit der Initialisierung des LCD´s nicht zu recht.

Gruss

von Niels H. (monarch35)


Lesenswert?

Das häufiste Problem beim Ansteuern eines LCDisplays ist ein falsches 
Timing. Hast du F_CPU korrekt gesetzt?

von Einsteiger (Gast)


Lesenswert?

Na ja 8 MHz wie im Tutorial.

Die Fuses habe ich wie folgt gesetz.(s. Anhang)

Aber das ist nicht das Problem (denke ich)

Die Initialisierung bei dem KS0066-Controller unterscheidet sich von dem 
KS0070 aus dem Tutorial.
( 
http://www.mikrocontroller.net/attachment/37946/4-bit_interface_mode.PNG 
)

Und das bekomme ich nicht hin. Die Erfahrung fehlt mir leider.

Kannst Du sowas programmieren???

Gruss

von Niels H. (monarch35)


Lesenswert?

eine 1:1 umsetzung dieser inits wäre wohl:
1
lcd_init()
2
{
3
  LCD_DDR = LCD_DDR | 0x0F | (1<<LCD_RS) | (1<<LCD_EN);   
4
 
5
   
6
   _delay_ms(40);
7
   LCD_PORT &= 0xF0;
8
   LCD_PORT &= ~(1<<LCD_RS);      // RS auf 0
9
   LCD_PORT |= 2;
10
   lcd_enable();
11
   lcd_enable();
12
   LCD_PORT &= 0xF0;
13
   LCD_PORT |= 0x0C;  // N und F auf "1"
14
   lcd_enable();
15
   _delay_ms(1);
16
   LCD_PORT &= 0xf0;
17
   lcd_enable();
18
   LCD_PORT |= 0x0F;   // D,C und B auf "1"
19
   lcd_enable();
20
   _delay_ms(1);
21
   LCD_PORT &= 0xF0;
22
   lcd_enable();
23
   LCD_PORT |= 0x01;    // display-Clear
24
   lcd_enable ();   
25
   _delay_ms(5);        // 5ms warten bis display ok
26
   LCD_PORT &= 0xF0;
27
   lcd_enable();
28
   LCD_PORT |= 0x06;    // I/D="1"  SH="0"
29
   lcd_enable();   
30
}

falls das nicht funzt, verlänger mal die delays in der function 
lcd_enable().... grössere Wartenzeiten können nie schade...

von Einsteiger (Gast)


Lesenswert?

Ich werde es gleich ausprobieren.


Bin echt gespannt. Wenn das klappt dann bist du echt gut.

Bis gleich!!!!!!!!!!!!!!!!!!!

von Niels H. (monarch35)


Lesenswert?

Ich will dir ja nicht die Hoffnung nehmen, aber ich rechne nicht damit, 
daß es daran liegt. Eigentlich tun die Display-Controller sich alle 
nichts.

Ich würde an deiner Stelle eher nochmal die Verkabelung checken und 
sicherstellen, daß der Mega32 tatsächlich auch mit 8Mhz läuft.

von Einsteiger (Gast)


Lesenswert?

Also.
Es funktioniert nicht.

ABER. Bevor ich eine falsche Diagnose stelle, werde ich erstmal 
ausgiebig
eine fehlersuche durchführen...

Ferner werde ich etwas mit den Zeiten herumspielen...

Ich melde mich sobald ich alles durch habe.

Vielen, vielen Dank erstmal !

Liebe Grüsse

von Niels H. (monarch35)


Lesenswert?

Vieleicht läufts ja damit:

Beitrag "LCD Ansteuerung im 4bit-Modus"

von Einsteiger (Gast)


Lesenswert?

Sorry Niels.
Wir müssen das ganze auf die nächsten Tage verschieben.

Habe den Atmega32 dank ponyprog (und meines Unwissens) gesperrt.

Muss erstmal einen neuen bestellen.

Aber ich komme wieder. GANZ BESTIMMT.

Ich mache mich bemerkbar. Denke spätestens am mittwoch

Danke erstmal

und vielen dank

von Einsteiger (Gast)


Lesenswert?

Hallo Niels!

Wollte nur Bescheid geben, daß mich Deine Hilfe zum Erfolg geführt hat!

Super vielen Dank!

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