Forum: Mikrocontroller und Digitale Elektronik LCD-Textausgabe vereinfachen


von Andreas (Gast)


Lesenswert?

Hallo,

ich habe an meinem 4433 ein 20x4 Zeilen LCD und momentan steuere ich das 
LCD mit dem Programm an, das im AVR-Tutorial beschrieben wird.
Nun meine Frage: Gibt es nicht eine einfachere Möglichkeit Texte 
auszugeben? Die im Tutorial beschriebene Möglichkeit ist ziehmlich 
aufwendig, da ich immer nur ein Zeichen sende!

Thx

Andreas

von Jan (Gast)


Lesenswert?

Also immer nur ein Zeichen an das LCD zu schicken, das wird bleiben, da 
die meisten LCD's nur max. 8 Bit auf einmal empfangen können. Du kannst 
aber deinen Code vereinfachen. Falls du grundsätzlich immer eine 
Eingangsmaske hast oder ähnliches. Das legst du dann im Eprom ab und 
greifst darauf zu. Ich glaube in der Codesammlung war so ein Programm. 
Aber besser wäre es zu wissen ob du BASIC, C oder assembler nutzt??

Sven

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

http://www.mikrocontroller.net/tutorial/memory.htm (noch nicht fertig, 
aber das was du suchst ist drin)

von A. Arndt (Gast)


Lesenswert?

Hallo,

ich nutze FASTAVR, einen Basic-Compiler, da gibt es nur 3 Zeilen:

1. Display-Ports festlegen, wo Daten und Befehle
2. Startposition, Zeile, Spalte (Zeichenposition)
3. den zu schreibenden Text

in echt dann so:

$Lcd = PORTD.1, rs = PORTB.2, en =PORTD.0, 20,4     ' Anschlüsse des LCD 
zuweisen

Locate 1,5            'Start Position festlegen, hier 1. Zeile, 5. 
Segment
LCD "Hallo"          ' Schreibe Hallo


Fertig, und die Tools zum Grafikdisplay sind noch mehr unterstützt, 
eigene Fonts, Rechtecke, invertiert uvm.

Ich finds echt klasse und sehr einfach...

Gruss
A. Arndt

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Mit den entsprechenden Makros geht das in Assembler genauso einfach.

; LCD-Cursor an bestimmte Position setzen
; Beispiel: locate 1, 5
.MACRO locate ;(Zeile,Spalte)
        push temp1
        ldi temp1, 0b10000000|(((@0)-1)<<6)|((@1)-1)
        rcall lcd_command
        pop temp1
.ENDMACRO

; String aus dem Flash-ROM auf dem LCD anzeigen
; Beispiel: print t_hallo
.MACRO print ;(String-Adresse)
        push ZL
        push ZH
        ldi ZL, LOW(@0)
        ldi ZH, HIGH(@0)
        rcall printstring
        pop ZH
        pop ZL
.ENDMACRO

Man kann das Ganze auch so machen dass man direkt einen String als 
Argument übergibt:

; String aus dem Flash-ROM auf dem LCD anzeigen
; Beispiel: print "hallo"
.MACRO print ;(String)
        push ZL
        push ZH
        rjmp skip
text:   .db @0, 0
skip:   ldi ZL, LOW(text)
        ldi ZH, HIGH(text)
        rcall printstring
        pop ZH
        pop ZL
.ENDMACROX

Bin mir aber nicht ganz sicher ob das auch im (primitiven) 
Original-Assembler von Atmel funktioniert, da dieser wahrscheinlich 
"duplicate label" oder etwas ähnliches ausspuckt wenn man das Makro 2mal 
in einem Programm verwendet.

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.