Forum: Mikrocontroller und Digitale Elektronik Initialisierung KS0073 / HD44780


von Pascal S. (pascal-schmidt)


Lesenswert?

Hallo, ich betreibe an einem Atmega16 ein DIP204-4 (4x20 von Reichelt) 
Display mit mit dieser lcd_init. Das DIP204-4 funktioniert auch hiermit. 
Nun will ich aber das EA T204B-BNLW (4x20 von reichelt) beide sind 
HD44780 kompatibel. Aber das EA T204B-BNLW bekomme ich nicht zum laufen. 
Was ist hier an der Initialisierung falsch?

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

   lcd_command(0x24);
   lcd_command(0x09);
   lcd_command(0x20);
   lcd_command(0x0C);
   lcd_command(0x01);
   lcd_command(0x06);

   lcd_clear();
}

von holger (Gast)


Lesenswert?

>Aber das EA T204B-BNLW bekomme ich nicht zum laufen.

Was geht denn nicht? Siehst du überhaupt irgendwas?

von Anja (Gast)


Lesenswert?

hallo,

vielleicht solltest Du nach dem LCD-Löschen "lcd_command(0x01);"
einfach ein bischen Wartezeit spendieren.

Ansonsten ist es bis auf 8/4-Bit mode wie im Beispiel von EA:

http://www.lcd-module.de/deu/disk/development%20service/DIP204%20KS0073/Init_DIP204_SPI.txt

http://www.lcd-module.de/download.html

von holger (Gast)


Lesenswert?

Könnte es sein das das Teil eine negative Kontrastspannung
braucht? Ich hatte da gerade was gelesen zu den Typen
mit einem W im Namen. W = Wide Temperature.

von Pascal S. (pascal-schmidt)


Lesenswert?

Also im Moment sehe ich nur die Zeile 2 und 4.
Ich sende einen Text an das LCD. Es erscheinen aber nur wahrlos zeichen 
und der couser blinkt.

von holger (Gast)


Lesenswert?

>Es erscheinen aber nur wahrlos zeichen
>und der couser blinkt.

Dann würde ich an deiner Stelle die Verdrahtung noch so
10-20 mal kontrollieren.

von Anja (Gast)


Lesenswert?

Frage:
wie ist denn der Port-Pin an die ENABLE-Leitung des LCD initialisiert.
(vor dem ersten Init-Kommando???)

von Pascal S. (pascal-schmidt)


Angehängte Dateien:

Lesenswert?

Hier der Quelltext. Den teil habe ich schon für das andere LCD 
angepasst.

// setzt den Cursor in Zeile y (1..4) Spalte x (0..15)

void set_cursor(uint8_t x, uint8_t y)
{
  uint8_t tmp;

  switch (y) {
    case 1: tmp=0x80+0x00+x; break;    // 1. Zeile
    case 2: tmp=0x80+0x40+x; break;    // 2. Zeile
    case 3: tmp=0x80+0x14+x; break;    // 3. Zeile
    case 4: tmp=0x80+0x54+x; break;    // 4. Zeile
    default: return;                   // für den Fall einer falschen 
Zeile
  }
  lcd_command(tmp);
}

von holger (Gast)


Lesenswert?

>Hier der Quelltext. Den teil habe ich schon für das andere LCD
>angepasst.

Wen interessiert das? Bekommst du irgendwo auf dem
Display irgendwie zusammenhängende Texte oder nur Schrott?

Komm endlich mal zur Sache.

von Pascal S. (pascal-schmidt)


Lesenswert?

Habe ich doch schon oben geschrieben!

"Also im Moment sehe ich nur die Zeile 2 und 4.
Ich sende einen Text an das LCD. Es erscheinen aber nur wahrlos zeichen
und der couser blinkt."

von holger (Gast)


Lesenswert?

>Habe ich doch schon oben geschrieben!

>"Also im Moment sehe ich nur die Zeile 2 und 4.
>Ich sende einen Text an das LCD. Es erscheinen aber nur wahrlos zeichen
>und der couser blinkt."

Und warum denkst du das das an der Routine
zur Positionierung des Cursors liegt?
DA liegt das Problem mit Sicherheit nicht.

Gute Nacht.

von Pascal S. (pascal-schmidt)


Lesenswert?

Das ist mir auch klar. Aber das LCD was vorher dran war (DIP204-4), 
hatte halt andere Adressen.

von holger (Gast)


Lesenswert?

>Das ist mir auch klar. Aber das LCD was vorher dran war (DIP204-4),
>hatte halt andere Adressen.

Oh Mann! Gib drei Buchstaben auf dem Display aus:

ABC

Was siehst du?

von Pascal S. (pascal-schmidt)


Lesenswert?

Ich mache nichts anderes und ich sehe nur schrott!!!!!

von holger (Gast)


Lesenswert?

>Ich mache nichts anderes und ich sehe nur schrott!!!!!

Tja, und wir alle hier sehen nicht was du siehst.
Könntest du vieleicht die Güte haben zu erzählen
was du siehst? Ist es dir irgendwie möglich
eine Beschreibung des Inhaltes des Displays zu
liefern? Falls nicht, frage doch mal dir bekannte
Personen ob sie für dich vieleicht mal eine
Beschreibung der Dinge die sich da auf dem
Display tun machen könnten.


1,2,3,4 ich dreh gleich durch!

von Pascal S. (pascal-schmidt)


Lesenswert?

wenn es denn hilfreich ist.....

Zeile 1: steht nix
Zeile 2: L=Ö?/%§///)))===%TGB
Zeile 3: steht nix
Zeile 4: '*_:;;)YSEV?`*===R_-

...ich glaube nicht... wie ich schon sagte nur schrott.

von Stephan H. (stephan-)


Lesenswert?

Du sagtest Du siehst nur was auf Zeile 2 und 4.
Das sieht irgendwie nach Initialisierung aus. Als 2 zeilges 
inititalisieren.
Ist das Diplay als 2 zeiliges initialisiert ?
Schau ins Datenblatt wo die Adressen der Zeilen sind.
Die unterscheiden sich !!
Kann auch ein Problem mit der Zeilenumschaltung sein !!
Wenn das alles stimmt kommt nur noch eine Datenleitung in Frage.

www.sprut.de hilft ungemein beim Verständnis von LCD Displays.

von holger (Gast)


Lesenswert?

>wenn es denn hilfreich ist.....

>Zeile 1: steht nix
>Zeile 2: L=Ö?/%§///)))===%TGB
>Zeile 3: steht nix
>Zeile 4: '*_:;;)YSEV?`*===R_-

Das siehst du wenn du nur ABC ausgiebst?
Ich denke wir reden hier nicht von derselben Sache.
Mach was du willst und nerv hier nicht weiter rum.

von Pascal S. (pascal-schmidt)


Lesenswert?

holger schrieb:
>>wenn es denn hilfreich ist.....
>
>>Zeile 1: steht nix
>>Zeile 2: L=Ö?/%§///)))===%TGB
>>Zeile 3: steht nix
>>Zeile 4: '*_:;;)YSEV?`*===R_-
>
> Das siehst du wenn du nur ABC ausgiebst?
> Ich denke wir reden hier nicht von derselben Sache.
> Mach was du willst und nerv hier nicht weiter rum.

@holger
wenn es dich nervt, dann antworte hier doch nicht. Bei deinen Antworten 
kommt eh nix bei rum. Falls du es nicht wissen solltes, dies hier ist 
ein Forum, wo Meinungen untereinander ausgetauscht werden können, Fragen 
gestellt und beantwortet werden können. Deine schon fast beleidigenden 
Antworten sind hier wohl nicht angebracht.

von Bernd (Gast)


Lesenswert?

Pascal, die Idee ist du gibst ABC aus und es steht z.B. %&$ dort, daraus 
läßt sich unter Umständen etwas ableiten.

Hier will man dir helfen, wo ist das Problem mal ABC auszugeben und zu 
posten was du siehst ?

von Pascal S. (pascal-schmidt)


Lesenswert?

Wenn du den gesamten Beitrag gelesen hättes, wäre es die bestimmt 
aufgefallen, das es dem LCD egal ist was ich schicke. ABC habe ich auch 
gemacht. Es sieht immer so aus, oder ähnlich. Selbst wenn ich die 
Spannung wegnehme, wieder einschalte und auch erneut ABC sende steht 
wieder was anderes im LCD. Das Durcheinader aus Zeichen und Buchstaben 
ist also eher zufällig.


>>Zeile 1: steht nix
>>Zeile 2: L=Ö?/%§///)))===%TGB
>>Zeile 3: steht nix
>>Zeile 4: '*_:;;)YSEV?`*===R_-

von holger (Gast)


Lesenswert?

>Wenn du den gesamten Beitrag gelesen hättes, wäre es die bestimmt
>aufgefallen, das es dem LCD egal ist was ich schicke. ABC habe ich auch
>gemacht. Es sieht immer so aus, oder ähnlich. Selbst wenn ich die
>Spannung wegnehme, wieder einschalte und auch erneut ABC sende steht
>wieder was anderes im LCD. Das Durcheinader aus Zeichen und Buchstaben
>ist also eher zufällig.

Das wäre doch z.B. mal eine wichtige Information gewesen.
Warum hast du das nicht gleich gesagt?
Irgendwas stimmt da doch mit deinem Anschluss nicht.
Floatet der Enable Pin vieleicht?

Oder das Teil ist bereits defekt.

von Bernd (Gast)


Lesenswert?

Möglicherweise habe ich noch mehr überlesen, ich habe den Beispielcode 
gesehen und ein wenig von dir aber nicht das Ganze originale Program. 
Wenn du nur ABC ausgibst dann kann nicht mehr erscheinen... nicht mehr 
als 3 Zeichen.

Was kommt nach deiner Ausgabe ? ich hoffe nen endless loop, poste mal 
was du hast.

von Pascal S. (pascal-schmidt)


Lesenswert?

#include <avr/io.h>
#include "lcd-routines.h"

int main(void)
{
    lcd_init();

    set_cursor(0,2);

    lcd_string("Test");

    while(1)
    {
    }

    return 0;
}

Mehr mache ich nicht. Ob das LCD defekt ist, schließe ich mal aus, da es 
neu ist. Hat ja auch alles mit dem DIP204-4 (KS0073) funktioniert. Habe 
ja nur das LCD getauscht (KS0076 laut Reichelt Katalog). Im Datenblatt 
steht was von HD44780. Und beide LCDs sind ja HD44780 kompatibel.

von Bernd (Gast)


Lesenswert?

Und wenn du nir ein LCD_clear machst ?
1
int main(void)
2
{
3
    lcd_init();
4
    lcd_clear ();
5
6
    while (1);
7
8
    set_cursor(0,2);
9
10
    lcd_string("Test");
11
12
    while(1)
13
    {
14
    }
15
16
    return 0;
17
}

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.