mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD - eigene Zeichen definieren


Autor: Stefan N. (karakazul)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ersteinmal möchte ich loswerden, dass ich blutiger Anfänger in Sachen
Programmierung und µC bin.
Ist auch mein erster Post hier im Forum.

Nunja dann wollen wir mal.

Ich habe ein 4x20 LCD bei Reichelt erworben und nun gibt es ja die
Möglichkeit 8 eigene Zeichen im CGRAM zu speichern.

Dazu nutze ich die lcd_bigdigits funktion, welche ihr im Anhang findet.
Der restliche Code ist der aus dem Assembler Tutorial.

Das eigentliche Problem, zu dem ich hier im Forum nichts leider nichts
finden konnte, ist, dass die übertragenen 8 Zeichen allesamt falsch
dargestellt werden. (siehe Bild).

http://img178.imageshack.us/img178/2636/dsc00466yr1.jpg

Irgendwas scheint also nicht richtig zu funktionieren oder der Code den
ich geschrieben habe ist schlichtweg fehlerhaft.

Es wäre nett wenn jemand von euch mal schnell einen Blick drüber werfen
könnte.

Im Hauptprogramm lasse ich die Zeichen hinternander ausgeben:

ldi temp1, $0
rcall lcd_data
ldi temp1, $1
rcall lcd_data
.... usw ...

Danke schonmal für eure Hilfe

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du veränderst temp1 in lcd_data.

Das wird also nix:

       ldi temp1, 0b00011111
       rcall lcd_data
       rcall lcd_data

Autor: Stefan N. (karakazul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt sieht es schon besser aus, allerdings sind die Zeichen irgendwie 
um 2 Zeilen verschoben

http://img230.imageshack.us/img230/7742/dsc00467ey1.jpg

Könnt ihr da was finden?

Muss ich nach jeder Zeichendefinition den Character RAM Zeiger auf die 
Startadresse des nächsten Zeichens setzen, oder springt dieser von 
alleine weiter?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Muss ich nach jeder Zeichendefinition den Character RAM Zeiger auf die
>Startadresse des nächsten Zeichens setzen, oder springt dieser von
>alleine weiter?

Der springt von alleine weiter. Aber kannst es ja mal ausprobieren.
Irgendwie hat nach dem setzen der CG-RAM Adresse scheinbar der
Zähler schon von alleine 2 Schritte weitergezählt. Wenn das mal
nicht an deinem Aufbau liegt. Gibt es bei Texten auch solche
Merkwürdigkeiten?

Autor: Stefan N. (karakazul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nope, Text wird ganz normal ausgegeben. Nur meine eigenen Zeichen 
funktionieren nicht.

Autor: Stefan N. (karakazul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay jetzt funktionierts.

Bin eben nochmal ins Tutorial eingestiegen und bin zufällig auf 
folgendes gestoßen:

; erzeugt den Enable-Puls
;
; Bei höherem Takt (>= 8 MHz) kann es notwendig sein,
; vor dem Enable High 1-2 Wartetakte (nop) einzufügen.
; Siehe dazu Beitrag "Re: Bitte helft mir. Schon wieder AtMega16"
lcd_enable:
           sbi PORTD, 5                 ; Enable high
           nop                          ; 3 Taktzyklen warten
           nop
           nop
           cbi PORTD, 5                 ; Enable wieder low
           ret                          ; Und wieder zurück

Da ich meinen Mega8 mit 8MHz betreibe war also ein zusätzliches nop vor 
dem enable high notwendig.

Trotzdem Danke

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bitte um Hilfe

versuche ein Paar Buchstaben auf ein LCD auszugeben aber funktioniert 
leider nicht ! habe hier viel gelesen und ausprobiert aber klappt 
einfach nicht :-) .

bin nach dem Tutorial bzw. mit dem Code von Tutorial (Asembler)und 
nichts, habe jetzt mit dem Code von : 
Beitrag "LCD Ansteuerung im 4bit-Modus"
in C und auch nichts!

LCD Barton 4x20 mit HD44780 (habe mit adere LCD und auch nichts) 
Atmega16, an LCD sehe ich nur die 4x20 Schwarze Kasten !

vielen Dank für die Hilfe
Gruß
Martin

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>LCD Barton 4x20 mit HD44780 (habe mit adere LCD und auch nichts)
>Atmega16, an LCD sehe ich nur die 4x20 Schwarze Kasten !

Dreh mal am Kontrastregler.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Holger,

danke für die schnelle Anwort!
mit dem Kontrastregler habe ich schon mal probiert aber auch nichts, 
habe gerade 2 Fehler gefunden in der "C Code" (.h) waren die Pins RS und 
E vertausch, dort steht auch das die Pins (von LCD) Datenbits 0-3 
sollten auf GND sein, jetzt sehe ich am LCD nur 2x20 Kasten aber von 
"Hallo Word" immer noch nichts :-(

Martin

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>waren die Pins RS und
>E vertausch

Wenn du die Datenleitungen auch noch mal
kontrollierst und richtig anschliesst wirds schon klappen.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hätte mal eine weitere Frage.... ich habe jetzt die 8 eigenen 
Zeichen erfolgreich hinbekommen.... nur bräuchte ich mehr...

Ist es möglich während dem Programmablauf weitere zu programmieren,, und 
damit andere überschreiben? Ich hätte gerne Zahlen über 3 Zeilen... Aber 
die 7 sieht scheiße aus, deshalb die Frage ob ich für die sieben dann 
nicht einfach neue Zeichen programmieren kann, die dann in den RAM vom 
LCD legen und abrufen, und bei der nächsten Zahl wieder neue generieren?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Ist es möglich während dem Programmablauf weitere zu programmieren

Ja. Aber du kannst nur die darstellen, die sich im CG-RAM befinden.

MfG Spess

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die Zeichen werden genauso wie aus dem Char-ROM des Displays vom 
Displaycontroller zyklisch zur Anzeige ausgelesen. Wenn Du umdefinierst 
erscheint das neue Symbol an allen Stellen im Displaystatt des alten 
Zeichens.

Warum nimmst Du für sowas kein Grafikdisplay?

Gruß aus Berlin
Michael

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich finde kein passendes Grafikdisplay von den Maßen her. Ich habe ein 
4x20 von EA.

Kennt ihr ein von der Größe her vergleichbares Grafikdisplay? Sollte 
mindestens 70mm breit und 30 hoch sein, jedoch nicht über 100mm und 
45mm.

Wäre super wenn mir einer weiterhelfen könnte ;) Habe schon 100 mal den 
Reichelt Katalog durchgeblättert.

Gruß
Andreas

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.