Initialisierung KS0073 / HD44780

OP #1465611
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();
}
Gast #1465664
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.
OP #1465696
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);
}
Angehängte Dateien:
Gast #1465709
>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.
Gast #1465721
>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.
Gast #1465730
>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?
Gast #1465756
>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!
#1465783
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.
Gast #1465792
>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.
OP #1466167
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.
Gast #1466174
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 ?
OP #1466200
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_-
Gast #1466211
>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.
Gast #1466218
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.
OP #1466266
#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.
Gast #1466284
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
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.