www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD-Dispaly ansteuern


Autor: Wolfgang Bertram (apfelwolle)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sprut.de

Autor: K. J. (theborg0815) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: portozahlender Entwickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfgang Bertram (apfelwolle)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Diensthabender Troll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
für diesen zweck reicht auch ein schön bedrucktes blatt papier. <:-)

wenn es statt des PICs auch ein AVR sein darf, dann schau mal hier:
http://www.mikrocontroller.net/articles/AVR

Autor: K. J. (theborg0815) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja bei einen 4x20 sind das 80 Zeichen x 4 Seiten alsoo 320 Zeichen des 
bekomste locker in fast jeden PIC

Autor: Wolfgang Bertram (apfelwolle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ich glaube der AVR ist genau das was ich für mein Projekt brauche.
Mal sehen ob ich das so hin bekomme. Es hat zufällig nicht schon einmal 
wer so was gebaut? Wenn es recht ist berichte ich von meinem Projekt so 
jetzt ist lesen und googeln angesagt.

Autor: Tim S. (Firma: Germany) (timex09)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
www.myAVR.de

damit hab ich angefangen ist ganz easy erklärt usw....

Autor: Diensthabender Troll (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfgang Bertram (apfelwolle)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfgang Bertram (apfelwolle)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
mein_text:
.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:
menuend:
 printt menutab,mp          ;Menütext ausgeben

menutab:
.dw mt0,mt1,mt2,mt3,mt4,mt5,mt6
menuend1:
 clr tfl                    ;Tastenflags löschen
 ret                        ;fertig
Weiter unten im Programmtext stehen dann die Daten:
mt0:    .db 4,0
mt1:    .db 4,"Max. Temperatur",13,5,39,"C",0,0
mt2:    .db 4,"Hysterese",13,5,39,"C",0,0
mt3:    .db 4,"Ausschalt-Zeit",13,6," mmm:ss",0,0
mt4:    .db 4,"Alarmton-Start",13,5,0
mt5:    .db 4,"Alarmton-Sweep",13,5,0
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.

...

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, das Beispiel ist ein bisschen durcheinandergeraten. So sollte es 
richtig sein:

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

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

Erklärung siehe oben...

...

Autor: Wolfgang Bertram (apfelwolle)
Datum:

Bewertung
0 lesenswert
nicht 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
.include "m8def.inc"


.def temp1 = r16
.def temp2 = r17
.def temp3 = r18
 
 
           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(text1*2)         ; Adresse des Strings in den
           ldi ZH, HIGH(text1*2)        ; Z-Pointer laden

           rcall lcd_flash_string      ; Unterprogramm gibt String aus der
                                       ; 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

Autor: Wolfgang Bertram (apfelwolle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schrott was ich da gedacht habe NOP ist viel zu kurz!

Kann ich wenigstens so die Texte in den Speicher schreiben?

Dann funktioniert bei mir der Zeilenumbruch noch nicht. Wenn ich eine 10 
ans Ende stelle schreibt er nur ein seltsames Zeichen

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Dann funktioniert bei mir der Zeilenumbruch noch nicht. Wenn ich eine 10
>ans Ende stelle schreibt er nur ein seltsames Zeichen

Das LCD kennt keinen Zeilenumbruch.

MfG Spess

Autor: Wolfgang Bertram (apfelwolle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie komme ich dann in Zeile 2?

Autor: Thomas O. (kosmos)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfgang Bertram (apfelwolle)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Wolfgang Bertram (apfelwolle)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

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.