Indem du die Position des Platzes angibst wo du etwas hinschreiben willst oder alles nacheinander mit den entsprechenden Trennzeichen. Wenn du es allerdings in Bascom machst kann ich dir nicht sagen.
Hallo,
ich experimentiere gerade mit einem LCD-Display. Die Ansteuerung des Displays funktioniert. Normalen festen Text ausgeben, welchen ich mit .db "Standardtext" hinterlege, funktioniert und Zahlen bis 65536 ist auch kein Problem.
Wie aber stelle ich z.B. eine Uhrzeit dar? Die Stunden und Minuten der Uhrzeit wären in Registern hinterlegt.
Kann mir da mal jemand auf die Sprünge helfen?
Ciao Lothar
Indem du die Position des Platzes angibst wo du etwas hinschreiben willst oder alles nacheinander mit den entsprechenden Trennzeichen. Wenn du es allerdings in Bascom machst kann ich dir nicht sagen.
ich würde einfach einen String aus "Stunden", ":" und "Minuten" zusammenbasteln und dann ab aufs display!
Hi,
na ja, das würde ich auch - wenn ich nur wüßte wie genau ich das machen muss.
Gruß Lothar
Welcher Kontroller, welches Display, welche Sprache ?
Ähm, der Controller ist ein AtTiny2323 (oder meinst Du den Controller des Displays?). Die Sprache ist Assembler und das Display? Hm - keine Ahnung - ich verwende ein einzeiliges 16stelliges Displaj. Das wird s wie alle anderen üblichen angesteuert. Hab ich mal bei Reichelt gekauft. Es sollte ein 161A sein.
MfG Lothar
Hallo,
da Du oben irgendwas von Registern gesagt hast, gehe ich davon aus, daß es sich
un Assembler handelt ?
Sowas ist denkbar einfach, wenn man mit BCD oder besser gepackte BCD arbeitet.
Angenommen es ist 12:34:45 um das darzustellen braucht man 3 Register wo jede Zifer in einem Nibble liegt in diesem Fall etwa so
Register 1 : 1 2
Register 2 : 3 4
Register 3 : 4 5
Die Wandelroutine könnte so etwa aussehen:
XYZ Zeiger auf RAM Ausgabepuffer stellen
Oberes Nibble von Register 1 Holen, mit 0x30 verodern in Ram Ablegen XYZ Zeiger inkrementieren
Unteres Nibble holen mit 0x30 verodern in Ram Ablegen......
Doppelpunkt ':' in Ram Zeiger erhöhen
Das gleiche mit Minuten und Sekunden, noch ein '\0' hinten dran und ab auf das Display...
Ich hoffe, daß es verständlich war.
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
Hi,
ehrlich gesagt - mir raucht der Kopf. Mit der ganzen Materie habe ich eher nicht so viel am Hut. BCD, Nibble und Register verstehe ich ja noch, aber XYZ Zeiger verstehe ich jetzt nicht so. Hast Du vielleicht ein klitzekleines Sample für mich?
MfG Lothar
Sorry, ich versuche mal verständlicher, also meine Idee ist die Uhrzeit in BCD zu packen, um es einfacher zu machen nehmen wir für jede Ziffer ein Register und machen es mit Sekunden.
Du hast sicherlich eine Taktquelle, wo Du Deinen Sekundenregister inkrementierst, dort verwenden wir jetzt 2 Register, einer für 10-er Sekunden und einer für 1-er etwa so:
Um das alles auf LCD zu schicken muß jetzt alles in ASCII und nich bin vorliegen hier kann man ein Stück RAM nutzen um die Daten zwischenzuspeichern jetzt kommen die Zeiger zum einsatz also:Code:.... .def sekeiner = r16 .def sekzehn = r17 ... ;Taktquelle inc sekeiner cpi sekeiner,60 brne raus clr sekeiner inc sekzehn raus: ret
Jetzt liegt im Ram an der Adresse 0x60 die Zehner Zahl 0x61 einer Zahl und 0x62 die Nullterminierung.Code:.def tmp = r18 .equ RAMPUFFER = 0x0060 ;das sollte die erste Ramzelle sein wandeln: ldi XH,HIGH(RAMPUFFER) ldi XL,LOW(RAMPUFFER) mov tmp,sekzehn ori tmp,0x30 st X+,tmp mov tmp,sekeiner ori tmp,0x30 st X+,tmp ldi tmp,'\0' st X,tmp ret
Puh, jetzt ausgabe
Zugegeben für normale BCD ist das Quatch, da könnte man direkt in ASCII rechnen, aber denke mal an die gepackten BCDsCode:ldi XH,HIGH(RAMPUFFER) ldi XL,LOW(RAMPUFFER) lesen: ld tmp,X+ cpi tmp,'\0' breq ende ;Hier Ausgabe von tmp an LCD rjmp lesen ende: ret
So jetzt klarer ?
Gruß Sebastian
P.S. Ich habe das alles "Online" geschrieben und nicht geteste, sollte aber funktionieren
Linus TorvaldSoftware is like s e x: its better when its free.
Lesezeichen