PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ausgabe einer Uhrzeit an ein Display



LotharK
28.10.2007, 17:46
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

Hubert.G
28.10.2007, 19:13
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.

T.J.
28.10.2007, 19:32
ich würde einfach einen String aus "Stunden", ":" und "Minuten" zusammenbasteln und dann ab aufs display!

LotharK
28.10.2007, 19:57
Hi,

na ja, das würde ich auch - wenn ich nur wüßte wie genau ich das machen muss.

Gruß Lothar

Hubert.G
28.10.2007, 20:02
Welcher Kontroller, welches Display, welche Sprache ?

LotharK
28.10.2007, 20:09
Ä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

izaseba
28.10.2007, 20:11
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

LotharK
28.10.2007, 20:39
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

izaseba
28.10.2007, 21:11
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:



....
.def sekeiner = r16
.def sekzehn = r17
...

;Taktquelle
inc sekeiner
cpi sekeiner,60
brne raus
clr sekeiner
inc sekzehn
raus:
ret


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:


.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

Jetzt liegt im Ram an der Adresse 0x60 die Zehner Zahl 0x61 einer Zahl und 0x62 die Nullterminierung.
Puh, jetzt ausgabe


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

Zugegeben für normale BCD ist das Quatch, da könnte man direkt in ASCII rechnen, aber denke mal an die gepackten BCDs ;-)

So jetzt klarer ?

Gruß Sebastian

P.S. Ich habe das alles "Online" geschrieben und nicht geteste, sollte aber funktionieren