LCD-Dispaly ansteuern

OP #1378438
Lesenswert?

Hallo,
ich hab zwar vor ewigen Zeiten Elektroniker gelernt aber mit PICs hatte 
ich bis heute nichts zu tun. Aber man möchte ja weiter kommen...

Ich möchte ein zwei bis drei Zeiliges LCD-Display ansteuern um dort 
einen Text abspielen zu lassen.

So nun zu meinen Fragen:

- Gibt es einen Schaltpalan mit erklärung für so was?
- welchen PIC nehme ich am besten?
- wieviel Text kann gespeichert werden?

Vielen Dank für Eure Antworten

Wolfgang
Gast #1378467
Lesenswert?

Wolfgang Bertram schrieb:
>
> - Gibt es einen Schaltpalan mit erklärung für so was?

Sprut.de

> - welchen PIC nehme ich am besten?

Denke mal das da noch andere Sachen dran sollen und nicht nur das 
Display vileicht nen 18f2550 oder 18f4550?

> - wieviel Text kann gespeichert werden?

Wen du es geschickt machst ne ganze mänge notfalls haste ja noch nen 
eeprom oder du dengelst nen externes an.
Gast #1378471
Lesenswert?

>drei Zeiliges LCD-Display

Sehr ungewöhnlich, vielleicht reicht auch ein 2- oder 4-zeiliges aus?

>wieviel Text kann gespeichert werden?

Genau 1 alphanumerisches Zeichen pro Byte Speicher. Sobald du einen PIC 
ausgesucht und die LCD-Routinen fertig hast, kannst du das also leicht 
selbst 'ausrechnen'.

> - welchen PIC nehme ich am besten?

Such dir einen aus. Die parametrische Suche auf microchip.com kann hier 
weiterhelfen.
OP #1378502
Lesenswert?

Danke für die schnellen Antworten.

Vielleicht hilft es wohl wenn ich Euch schreibe was ich bauen möchte.

Das Display soll in eine Art Diorama eingebaut werden welches einen 
Festen Text ausgibt. Der Text soll auf etwa fünf Seiten bei einem 
Display mit vier Zeilen angezeigt werden. Das ganze soll von selbst nach 
dem Einschalten starten und endlos bis zum Ausschalten laufen.
Gast #1380888
Lesenswert?

> Es hat zufällig nicht schon einmal wer so was gebaut?

Aber sicher doch. Nur mit zusätzlichen Features wie Tasten, Sensoren und 
weiterer Peripherie. Beim stupiden Ausgeben eines festen Textes 
langweilt sich so ein AVR doch zu Tode. So ein kleiner Kerl kann doch 
noch allerhand mehr.
OP #1380903
Lesenswert?

Das Projekt braucht halt nicht mehr. Aber heute so beim Werkeln an Haus 
und Hof sind mir da schon zwei Sachen aufgefallen die ich mit einer 
guten Steuerung verbessern könnte.

Im Moment schaue ich nach einer Entwicklungsumgebung mit Brenner weil 
ich nur mit Macs arbeite ist es nicht so einfach. Freitag geht es zu 
C.... zum Material kaufen.
OP #1389364
Lesenswert?

So, ich habe mir ein Board (myavr) zugelegt einen Windowsrechner zum 
laufen gebracht und habe jetz auf meinem Display das Wort Test stehen!

Jetzt bekomme ich es nicht hin in Assembler einen konstanten Text in den 
Flash oder den Eprom zu schreiben.

Dann noch die Frage wie kann ich dann die Seiten wechseln.

Es soll dann so aussehen

Hallo

15 sek. Pause

Bla

15 sek. Pause

Bla

15 sek. Pause

wieder Hallo

Alles also in einer Endlosschleife
Gast #1389672
Lesenswert?

> Jetzt bekomme ich es nicht hin in Assembler einen konstanten Text in den
> Flash oder den Eprom zu schreiben.

Da könnte Dir die .db-Anweisung helfen.

Irgendwo hinter oder zwischen den Programmroutinen ein Label (als Alias 
für die Adresse) und dahinter die Daten bzw. den Text:
1
mein_text:
2
.db "bla zum Ersten...",0
Aus dem Label "mein_text" kann der Assembler die Adresse berechnen.
Die Daten können in verschiedenen Formaten angegeben werden, dezimal, 
oktal, hexadezimal, binär oder ASCII. Auch Terme sind möglich. Im obigen 
Beispiel sind die Daten in ASCII angegeben. Die 0 amm Ende dient der 
Kennzeichnung des Stringendes für die Ausgaberoutine. Dafür gibt es zwar 
auch Platzhalter (aus der C-Syntax), ich bevorzuge aber die 0. Achte 
darauf, dass die Anzahl der Bytes um Flash immer geradzahlig sein muss, 
denn der Flash ist nicht in Bytes, sindern in Words (2 Bytes) 
organisiert.

Einzelheiten findet man in der Hilfe zum AVR-Assembler2, die Bestandteil 
der Hilfe des AVR-Studio4 ist.

Solltest Du Daten im EEPROM ablegen wollen, dann musst Du zuvor mit 
.eseg dem Assembler mitteilen, dass Du das EEP meinst.

> Dann noch die Frage wie kann ich dann die Seiten wechseln.

Indem Du einen anderen String an das LCD sendest.

Im Anhang ist der Teil meiner LCD-Routinensammlung, der zur Ausgabe von 
Texten dient, die im Flash liegen. Da ist auch eine Routine zum Ausgeben 
indizierter Texte dabei.

Hier noch ein Aufrufbeispiel dazu:
1
menuend:
2
 printt menutab,mp          ;Menütext ausgeben
3

4
menutab:
5
.dw mt0,mt1,mt2,mt3,mt4,mt5,mt6
6
menuend1:
7
 clr tfl                    ;Tastenflags löschen
8
 ret                        ;fertig
Weiter unten im Programmtext stehen dann die Daten:
1
mt0:    .db 4,0
2
mt1:    .db 4,"Max. Temperatur",13,5,39,"C",0,0
3
mt2:    .db 4,"Hysterese",13,5,39,"C",0,0
4
mt3:    .db 4,"Ausschalt-Zeit",13,6," mmm:ss",0,0
5
mt4:    .db 4,"Alarmton-Start",13,5,0
6
mt5:    .db 4,"Alarmton-Sweep",13,5,0
7
mt6:    .db 4," (c) 03/2007 by",13,"www.hanneslux.de",0
Hierbei ist "menutab" die Liste der Adressen der Menütexte. Sie wird 
nicht in numerischen Adressen angegeben, sondern in den Labels der 
Menütexte (mt0 bis mt6), die ja deren Adresse verkörpern. .dw dient zum 
Auflisten von Words (16-Bit-Zahlen), so wie .db zum Auflisten von Bytes 
dient.

...
Angehängte Dateien:
Gast #1389679
Lesenswert?

Sorry, das Beispiel ist ein bisschen durcheinandergeraten. So sollte es 
richtig sein:

Hier noch ein Aufrufbeispiel dazu:
1
menuend:
2
 printt menutab,mp          ;Menütext ausgeben
3
menuend1:
4
 clr tfl                    ;Tastenflags löschen
5
 ret                        ;fertig
Weiter unten im Programmtext stehen dann die Daten:
1
menutab:
2
.dw mt0,mt1,mt2,mt3,mt4,mt5,mt6
3

4
mt0:    .db 4,0
5
mt1:    .db 4,"Max. Temperatur",13,5,39,"C",0,0
6
mt2:    .db 4,"Hysterese",13,5,39,"C",0,0
7
mt3:    .db 4,"Ausschalt-Zeit",13,6," mmm:ss",0,0
8
mt4:    .db 4,"Alarmton-Start",13,5,0
9
mt5:    .db 4,"Alarmton-Sweep",13,5,0
10
mt6:    .db 4," (c) 03/2007 by",13,"www.hanneslux.de",0

Erklärung siehe oben...

...
OP #1390069
Lesenswert?

So gut der Code ist für Euch sicher etwas gebastelt aber ich möchte ja 
lernen! Schlimmer noch er geht nicht!

Ich dachte mir ich lass den ersten Text anzeigen.
Mache eine Pause und es kommt der nächste Text
1
.include "m8def.inc"
2

3

4
.def temp1 = r16
5
.def temp2 = r17
6
.def temp3 = r18
7
 
8
 
9
           ldi temp1, LOW(RAMEND)      ; LOW-Byte der obersten RAM-Adresse
10
           out SPL, temp1
11
           ldi temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten RAM-Adresse
12
           out SPH, temp1
13
 
14
           rcall lcd_init              ; Display initialisieren
15
           rcall lcd_clear             ; Display löschen
16
 
17
           ldi ZL, LOW(text1*2)         ; Adresse des Strings in den
18
           ldi ZH, HIGH(text1*2)        ; Z-Pointer laden
19

20
           rcall lcd_flash_string      ; Unterprogramm gibt String aus der
21
                                       ; durch den Z-Pointer adressiert wird

RCALL Delay10

ldi temp1, LOW(RAMEND)      ; LOW-Byte der obersten RAM-Adresse
           out SPL, temp1
           ldi temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten 
RAM-Adresse
           out SPH, temp1

           rcall lcd_init              ; Display initialisieren
           rcall lcd_clear             ; Display löschen

           ldi ZL, LOW(text2*2)         ; Adresse des Strings in den
           ldi ZH, HIGH(text2*2)        ; Z-Pointer laden

           rcall lcd_flash_string      ; Unterprogramm gibt String aus 
der
                                       ; durch den Z-Pointer adressiert 
wird

loop:
           rjmp loop


text1:
           .db "Test 1",0   ; Stringkonstante, durch eine 0

text2:
           .db "Test 2",0   ; Stringkonstante, durch eine 0



.include "lcd-routines.asm"            ; LCD Funktionen

 ; Einen konstanten Text aus dem Flash Speicher
 ; ausgeben. Der Text wird mit einer 0 beendet
lcd_flash_string:
           push  temp1
           push  ZH
           push  ZL

lcd_flash_string_1:
           lpm   temp1, Z+
           cpi   temp1, 0
           breq  lcd_flash_string_2
           rcall  lcd_data
           rjmp  lcd_flash_string_1

lcd_flash_string_2:
           pop   ZL
           pop   ZH
           pop   temp1
           ret

Delay10:
    NOP
    NOP
    NOP
  NOP
    NOP
    NOP
  NOP
    RET
#1390837
Lesenswert?

wenn es sich um diesen Controller handelt 
http://www.mikrocontroller.net/articles/HD44780 dann musst du einfach an 
die entsprechende DDRAM Adresse dein Zeichen schreiben

bei meinem 2x20 Display hat geht die erste Zeile bis 80hex und die 
zweite geht bei 81hex los. Kommt aber immer aufs Display drauf an 
ansonsten probier mal die Adressen wie im Anhang also bis 40hex und ab 
41hex oder du läßt das Display schieben damit du siehst wo deine Daten 
landen.
Angehängte Dateien:
OP #1395448
Lesenswert?

GESCHAFFT!! Ich hatte erst Riesen Frust weil nichts geklappt hat aber 
dann habe ich mir Bascom heruntergeladen und alles in Basic 
programmiert: Basic kann ich noch etwas von früher somit waren alle 
meine Problem recht schnell gelöst. Das Gerät läuft nun und ist 
eingebaut. Derzeit is alles beim Grafiker zum  Bekleben der Frontplatte. 
Wenn alles fertig ist mache ich Bilder und stelle sie hier rein. Im 
Moment überlege ich, ob ich dem ganzen noch ein Thermometer spendiere. 
Ressourcen sind ja noch zu genüge auf dem Baustein frei. Mal sehen ob 
die Zeit noch reicht...
OP #1412996
Lesenswert?

So, Dank diesem klasse Forum mit klasse Leuten ist mein erstes Projekt 
fast fertig. Fast weil das Diorama noch eine Funkuhr bekommt ich aber 
keine Zeit mehr für den Einbau hatte. Kein zweifel nach Jahren der 
Abstinenz bin ich wieder zurück am Elektronik basteln und die nächsten 
Projekte sind schon in Planung. Dazu aber später mehr. Danke an alle. Im 
Anhang noch Bilder vom fertigen Diorama.
Angehängte Dateien:

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