LCD-Textausgabe vereinfachen

Gast #29826
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
Gast #29827
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
Gast #29829
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
Admin Persönliche Seite #29830
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren