Forum: Mikrocontroller und Digitale Elektronik LCD - eigene Zeichen definieren


von Stefan N. (karakazul)


Angehängte Dateien:

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

von holger (Gast)


Lesenswert?

Du veränderst temp1 in lcd_data.

Das wird also nix:

       ldi temp1, 0b00011111
       rcall lcd_data
       rcall lcd_data

von Stefan N. (karakazul)


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?

von holger (Gast)


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?

von Stefan N. (karakazul)


Lesenswert?

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

von Stefan N. (karakazul)


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

von Martin (Gast)


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

von holger (Gast)


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.

von Martin (Gast)


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

von holger (Gast)


Lesenswert?

>waren die Pins RS und
>E vertausch

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

von Andreas (Gast)


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?

von spess53 (Gast)


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

von Michael U. (amiga)


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

von Andreas (Gast)


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

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.