Forum: Mikrocontroller und Digitale Elektronik 2x16 LCD-Display funkt einfach nicht


von Stefanie (Gast)


Angehängte Dateien:

Lesenswert?

Hi,
bin mittlerweile schon ziemlich verzweifelt, weil ich den ganzen Tag
versuche dieses be... LCD-Display zum Laufen zu bewegen!

Also, an sich benutze ich das Ethernutbetriebssystem (www.ethernut.de)
und dort ist schon ein LCD-Display integriert, auf dem mein Code
aufbaut. Kurz und gut, der Code funktioniert einfach nicht! Naja,
genauer gesagt ist es so, wenn ich dass LCD-Display anschieße ist die
erste Zeile ein schwarzer Balken normal, sobald ich den Code drauf
spiele ist das ganze Display normal und wenn ich lange auf RESET drücke
kommt in der ersten Zeile der schwarze Balken wieder (weiß nicht, ob
dass weiter hilft).

Ich weiß auch nicht auf was ich LCD_DATA_BITS setzen soll (0x0F oder
0xF0) hab alle Infos mal angehängt und wäre sehr, sehr dankbar, wenn
sich wer erbarmen würde und mal einen Blick über den Code werfen!! Ach
ja, bin noch absoluter Anfänger, kann also auch ein total doofer Fehler
sein!)

Ich hab auch schon den von Peter Fleury probiert, aber da passiert
genau so wenig.

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Ich schließe jetzt einfach mal einen Hardware-Fehler aus, ich denke mal,
dass die richtigen Pins Deines µC mit den richtigen Pins des Displays
verdrahtet sind?

Um ein LCD im 4Bit Modus zu betreiben, muss dieses auch so
initialisiert werden.

Ganz bestimmte Bits werden auf der Datenleitung gesetzt und gewisse
Wartezeiten sind einzuhalten.

Schau mal bitte in dieses Datenblatt unter "SET FUNCTION" und
vergleiche, ob Du Dein Diplay genauso initialisiert hast?

Sonst kannst Du lange suchen, wenn Dein Diplay im 8-Bit Modus
herumdümpelt ;)


Erst dann können anzuzeigende Zeichen an das Display gesendet werden.

von Cristian Grigoruta (Gast)


Lesenswert?

Welche Programmiersprache verwendest du eigentlich??

von Stefanie (Gast)


Lesenswert?

@Christian
Was soll das den heißen, ich dachte das ist C, oder?

@Bernhard
In dem Datenblatt von dem Display, dass ich verwende steht doch nicht
von Initialisierung für den 4-Bit-Modus (wenn ich nicht übersehen
habe). Soll ich versuchen, einfach mal die Daten für dein Display raus
zu schicken??

DANKE

von Cristian Grigoruta (Gast)


Lesenswert?

Sorry sorry :)
Habe dein attachment net angesehen.

Habe ne kleine routine für ein 2 * 16 LCD für den 8051 geschrieben!!
Wenn du willst schick ich sie dir bzw. stell ich sie hier rein!

von Cristian Grigoruta (Gast)


Lesenswert?

Achso,ist jedoch im 8 Bit Mode....kannst mal versuchen ob du es mit 8Bit
hinbekommst!!!!
Das ummodeln ist dann net so schwer!!!

von Stefanie (Gast)


Lesenswert?

Kann leider an der Hardware nichts mehr ändern! Hab's ja auch total
doof, da die Datenleitungen auf verschiedenen Ports liegen.

von Markus_8051 (Gast)


Lesenswert?

Hallo Stefanie,

also ich habe bisher noch kein LC-Display gehabt, daß im 4-Bit-Modus
nicht funktioniert, und ich habe schon einige verbaut.

Mal so ´ne ganz dumme Frage: Hast Du mal am Poti für den Kontrast
gedreht?

Hast Du ein Oszi oder Datenlogger, um die Pegel und das Timing am
LCD-Port mal nachzumessen?

Gruß,
Markus_8051

von Stefanie (Gast)


Lesenswert?

@Markus: Ein Oszi hab ich leider nicht. Das mit dem Kontrast glaub ich
nicht, da ich doch am Anfang diese schwarzen Balken sehen kann.

Kannst du mir nicht mal einen Code von dir schicken, da ich mir nicht
sicher bin, ob der Code passt?

von Bernhard S. (bernhard)


Lesenswert?

@Stefanie

>In dem Datenblatt von dem Display, dass ich verwende steht doch nicht
>von Initialisierung für den 4-Bit-Modus (wenn ich nicht übersehen
>habe)

Und genau das wunderte mich auch,
denn hardwaremäßig betreibst Du Dein LCD im 4-Bit-Modus.

Mein Tipp:

Schreibe Dir bitte eine LCD-Initialisierungs-Routine exakt für den
4-Bit Modus.

In Assembler könnte es so aussehen:

           ldi temp, 0b00000011     ;muss 3mal hintereinander gesendet
           out PORTB, temp          ;werden zur Initialisierung
           rcall lcd_enable             ;1
           rcall wait5ms
           rcall lcd_enable             ;2
           rcall wait5ms
           rcall lcd_enable             ;und 3!
           rcall wait5ms
           ldi temp, 0b00000010        ;4bit-Modus einstellen
           out PORTB, temp
           rcall lcd_enable
           rcall wait5ms



Bernhard

von Markus_8051 (Gast)


Lesenswert?

@Steffi: Ich habe leider nur Code für die Initialisierung in Assembler
auf dem 8051, fürchte, damit tust Du nicht viel. Aber ich schau zu
Hause nochmal nach!

Der Tipp von Bernhard ist auch gut: Das Kommando zum Initialisieren im
4bit-Mode muß dreimal gesendet werden und zwischendurch unbedingt
warten!!!

Markus_8051

von Cristian Grigoruta (Gast)


Angehängte Dateien:

Lesenswert?

Hier ein 4Bit Routine!!!!
Die lcd.h hänge ich im nächsten Beitrag an!!!!

In Hauptprogram kannst du es z.B so progn:
#include <reg517.h>
#include <stdio.h>
#include "lcd.h"

/* globale Variablen */
unsigned char i;

void main(void)
{
                         /* Initialisierung */
        init_lcd();
        blank_lcd();

        /* Ausgabe eines Strings auf der LCD*/
        print_lcd(1,1,"Hallo Du");  // hier gibst du deinen Text ein
        print_lcd(1,10,"SoSo");

        while(1);

}

von Cristian Grigoruta (Gast)


Angehängte Dateien:

Lesenswert?

Ok!!!hier ist die Header Datei!!!!
Du kannst sie auch mi #include <lcd.h> einfügen (statt "lcd.h")
"lcd.h" nur nehmen wenn die H.Datei im Projekt dabei ist!

Viel Erfolg!!!

mfg Cri

von Stefanie (Gast)


Lesenswert?

Hi Cri,
hab ganz, ganz herzlichen Dank für dein Programm!! Leider kann ich so
wie ich es sehe, nicht sonderlich viel damit anfangen. Ich habe ja
einen ATmega128 und kann die Pins nicht so einfach umprogrammieren.

Musst du nichts mit DDR, Port und Pin machen?
Das sieht alles so einfach bei dir aus?

Deswegen hab ich gedacht, dass ich lieber noch bei meinem Programm den
Fehler suche. Aber trotzdem danke für deine Mühe!!

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.