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
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.
>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.
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.
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.
> 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.
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.
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
> 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:
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.
...
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
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
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
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
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.
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...
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.