mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik In 2. Zeile von LCD springen


Autor: Kike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Bevor ihr mich abschiesst: Ja, ich habe das tutorial un zig andere posts 
zu diesem Thema gelesen. Aber ich schaff's trotzdem nicht.
Ich habe das LCD161A (Reichelt) welches ein 16x1 LCD ist.
Die ersten 8 Charaktere krieg ich hin, danach kommt nichts mehr.

Code:

           ldi temp1, 'a'     ; Zeichen anzeigen
           rcall lcd_data

           ldi temp1, 'b'     ; Zeichen anzeigen
           rcall lcd_data

           .
           .
           .

     ldi temp1, 'h'     ; Zeichen anzeigen
           rcall lcd_data

     ldi temp1, 0b11000000    ; in zeile 2 springen (position 1)
           rcall lcd_command

           ldi temp1, 'i'     ; Zeichen anzeigen
           rcall lcd_data

     ldi temp1, 'j'     ; Zeichen anzeigen
           rcall lcd_data

           .
           .
           .

Das 'h' wird noch angezeigt, danach nichts mehr. Ich kapiers einfach 
nicht.
Kann mir bitte jemand helfen?

Autor: Frank aus Köln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Kike,

lt. datenblatt hast Du recht und musst als Adresse 0xC0 senden, was 
Deinem bin wert entspricht. Aber hast du mal versucht einfach weiter zu 
schreiben ? Evtl. könnte auch das "lcd_command" timing nicht stimmen.(zu 
schnell ?)
Ich habe leider so ein Display nicht zum testen hier, aber ich brech mir 
auch immer einen ab mit den Adressen. In diesem fall schreibe ich 
einfach weiter und schaue ab wann sich wieder was auf dem Display tut.

Gruß aus Köln

Frank

Autor: Christian R. (mrrotzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kike wrote:
> Ich habe das LCD161A (Reichelt) welches ein 16x1 LCD ist.

wie willst du bei einem 16x1 LCD in die 2. Zeile schreiben?

Autor: Jack Braun (jackbraun)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt zwei Möglichkeiten:

Wenn Dein LCD 2x8 organisiert ist, muß es 2-zeilig initialisiert werden.
Hast Du das gemacht?

Falls es aber ein echtes 1x16 LCD ist, springst Du mit C0Hex(Position 1)
in den nicht sichtbaren Bereich.

Autor: Frank aus Köln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian R.

laut Datenblatt muss er nach dem 8.ten zeichen die Adresse ändern,
was bei einem 2 oder 4 Zeiligen Display die 2.te zeile wäre.

Gruß aus Köln

Frank

Autor: nobody (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Frank aus Köln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@nobody

schöne Seite, kannte ich noch nicht.

Gruß aus Köln

Frank

Autor: Kike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten!
Klappen tut es noch nicht:(
Ich hab' im Datenblatt gesehen dass das LCD eine interne initialisation 
macht und hab' mir gedacht dass meinen init vielleicht nicht ganz funzt 
und die "default init" bleibt. Dann hab' ich gesehen das diese "default 
init" ein 1-zeiligas LCD einstellt und hab' gedacht: 'Bingo, das wird's 
sein!' Jedoch wird auch 'Display Off' eingestellt aber ich sehe ja die 
erste Zeile, was ja bedeutet das meine init geklapt hat und 'display on' 
geschaltet wurde, und somit auch 2-zeilig....
Hier meine init:

lcd_init:
           ldi  temp3,50
powerupwait:
           rcall  delay5ms
           dec  temp3
           brne powerupwait
           ldi temp1, 0b00000011        ; muss 3mal hintereinander 
gesendet
           out PORTA, temp1             ; werden zur Initialisierung
           rcall lcd_enable             ; 1
           rcall delay5ms
           rcall lcd_enable             ; 2
           rcall delay5ms
           rcall lcd_enable             ; und 3!
           rcall delay5ms
           rcall lcd_enable
           rcall delay5ms
           ldi temp1, 0b00101000        ; 4Bit  2 Zeilen  5x8
           rcall lcd_command
           ldi temp1, 0b00001100       ;Display ein/Cursor aus/kein 
Blinken
           rcall lcd_command
           ldi temp1, 0b00000100        ; inkrement / kein Scrollen
           rcall lcd_command
           ret

Ich weiss nicht mehr wo ich den Fehler suchen soll...

Autor: Kike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab' jetzt das gemacht was Frank weiter oben meinte: einfach weiter 
schreiben. Was rauskommt ist das in den ersten 8 feldern Zeichen sind, 
die im Program fast am Ende sind. Doch die zweiten 8 Felder sind immer 
noch leer....
Kann mir bitte jemand helfen?

Autor: Der Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Solange Du nicht erklärst, wie Du bei einem einzeiligen Display in die 
2.  (nichtvorhandene) Zeile schreiben willst, wird da wohl keiner helfen 
können ....

Autor: fnah (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Solange Du nicht erklärst, wie Du bei einem einzeiligen Display in die
>2.  (nichtvorhandene) Zeile schreiben willst, wird da wohl keiner helfen
>können ....
ist doch schon laengst geklaert, es ist intern als 2x8 organisiert.
wer lesen kann ist klar im vorteil.

Autor: Frank aus Köln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du das Display anschliesst, also ohne Initialisierung, siehst Du 
dann den obligatorischen "schwarzen Balken" ?
Ist der dann durchgehend, also alle 16 Segmente an ?
Nicht das das Display defekt ist.

Gruß

Frank

Autor: Der Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, das hast Du nicht ....

Du hast zwar was von 2zeilig geschriebn aber nicht, daß es eigentlich 
ein 2x8 Display ist.

Und ich kann immer noch nicht erkennen, wo hier Deine 2. Zeile sein soll 
....

http://www.reichelt.de/bilder/web/bauelemente/A500...

Entweder handelt es sich bei Deinem Teil nicht um ein 16x1 von Reichelt 
oder die haben da noch was im Programm, was bei mir trotzdem immer 16x1 
anzeigt, obwohl es 8x2 sein sollte ....

Autor: Der Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich gestehe ....

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Hubert wrote:
> Solange Du nicht erklärst, wie Du bei einem einzeiligen Display in die
> 2.  (nichtvorhandene) Zeile schreiben willst, wird da wohl keiner helfen
> können ....

Das stimmt so nicht...
Die meisten 1x16-LCDs sind als 2x8-LCDs organisiert. Meist stimmt das 
Timing nicht, da der Benutzer versucht, den AVR möglichst schnell zu 
takten (das bringt ja Power, wie beim PC, meiner iss besser als 
Deiner...), aber nicht in der Lage ist, das LCD-Timing anzupassen. 
Andererseits soll es auch LCDs geben, die es etwas gemütlicher brauchen.

Da ich exakt dieses LCD nicht habe und vermutlich auch nicht kaufen 
werde, kann ich Dir keinen wirklich funktionierenden Treiber 
schreiben...

...

Autor: Der Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Dingen sind 2 Displays je 8 Zeichen hintereinander ....

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

2 Sachen fallen mir auf: Du sendest nicht 3x sondern 4x die 0x03 im 
Init.

Die 4. schaltet das Display eigentlich schon in den 8Bit/1Zeile-Mode.

Danach sendest Du dann im 4Bit Mode 4Bit/2Zeilen.
Die unteren 4Bit dürfte das Display ignorieren, weil es bei diesem 
Befehl noch im 8Bit-Mode ist.

Ändere das mal wie folgt:


           ldi temp1, 0b00000011        ; muss 3mal hintereinander
gesendet
           out PORTA, temp1             ; werden zur Initialisierung
           rcall lcd_enable             ; 1
           rcall delay5ms
           rcall lcd_enable             ; 2
           rcall delay5ms
           rcall lcd_enable             ; und 3!
           rcall delay5ms

-->        ldi temp1, 0b00000010        ; 4-Bit-Mode einschalten
-->        out PORTA, temp1

           rcall lcd_enable
           rcall delay5ms

           ldi temp1, 0b00101000        ; 4Bit  2 Zeilen  5x8
           rcall lcd_command
           ldi temp1, 0b00001100       ;Display ein/Cursor aus/kein
Blinken
           rcall lcd_command
           ldi temp1, 0b00000100        ; inkrement / kein Scrollen
           rcall lcd_command
           ret


Sollte so klappen.

Gruß aus Berlin
Michael


Autor: Frank aus Köln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also irgendwo im Bereich ab 0x80 bis 0xff oder b10000000 bis b11111111 
muss
das Display irgenwas anzeigen, vorrausgesetzt die Timings stimmen.

Gruß

Frank

Autor: Kike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich Vss, Vcc und Vee anschliesse, und sonst nichts, kommt ein 8 
Feld langer Balken, also genau die 8 Felder, die später den Text zeigen. 
Aber im Datenblatt steht dass bei Spannungsanschluss intern resetet 
wird, und bei diesem reset wird auf ein einzeiliges display gestellt, 
womit es doch Sinn macht dass nur 8 Felder beim Spannungsanschluss 
gesehen werden, oder?

Ich hab' jezt auch probiert mal den Text auf blinkend zu setzen, funzt 
nicht. Deshalb nehme ich mal an dass es irgendetwas mit LCD_COMMAND 
zutun hat. Der code ist vom tutorial von dieser Seite. Ich habe auch 
gelesen dass die verschiedenen LCD Kontroller nicht immer 100% 
kompatibel sind. Nur weiss ich jetzt nicht mehr was ich tun kann bzw. 
muss....

Autor: Frank aus Köln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann versuch doch mal das timing auf gaaaanz langsam runterzusetzen.
Vieleicht bist Du nur zu schnell.

Gruß

Frank

Autor: Andreas K. (oldcoolman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
kann man nicht durch Kontrastaufdrehen sehen,ob die 2. Zeile
(also die 2. 8Zeichen)richtig initialisiert sind?

Gruß
Andi

ups..hab wohl zu lange gelesen und ned aktualisiert...

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>ist doch schon laengst geklaert, es ist intern als 2x8 organisiert.
>wer lesen kann ist klar im vorteil.

In der Tabelle im Datenblatt steht aber nur 'First Line'

Wer lesen kann ...!!!

MfG Spess

Autor: Kike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Michael U.

Danke Michael!!! Das war die Stelle!! (Man kommt sich immer so blöd vor 
wenn der Fehler erst mal gefunden ist...Ich kann nicht mehr bis 3 
zählen...)

Und danke auch an alle anderen für eure Hilfe!!

Autor: Thomas Strauß (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Kike,

ich hab das selbe Display LCD161A. Das hat einen KS0066 unter schwarzem 
Epoxy und läuft als 2-Zeilen-Display. Die 1.Zeile wird von 0-7 
addressiert. Die zweite von 40h bis 47h.

Wenn man von 0-15 (0-0fh) adressiert, bleiben die letzten 8 Zeichen auf 
der Strecke.

Gruß Thomas
Anhang - Datenblatt

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.