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
#1378445
Sprut.de
Gast
#1378467
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
>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.
Gast
#1378508
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
Gast
#1378512
naja bei einen 4x20 sind das 80 Zeichen x 4 Seiten alsoo 320 Zeichen des bekomste locker in fast jeden PIC
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.
www.myAVR.de damit hab ich angefangen ist ganz easy erklärt usw....
Gast
#1380888
> 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
Gast
#1389672
> 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 | |
2 | |
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Weiter unten im Programmtext stehen dann die Daten:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
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. ...
Gast
#1389679
Sorry, das Beispiel ist ein bisschen durcheinandergeraten. So sollte es richtig sein: Hier noch ein Aufrufbeispiel dazu:
1 | |
2 | |
3 | |
4 | |
5 | |
Weiter unten im Programmtext stehen dann die Daten:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
Erklärung siehe oben... ...
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
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
Gast
#1390608
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
Und wie komme ich dann in Zeile 2?
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.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
