PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Uhrzeiten vergleichen in asm



michiE
12.03.2006, 18:36
kann mir jemand ein kleines Codebeispiel dafür geben , wie die Differenz in sekunden oder minuten zwischen einer gegebenen und der aktuellen Uhrzeit in asm berechnen kann ?

mfg und danke schon mal
MichiE

michiE
18.03.2006, 15:35
äh ... sieht so aus als hätte da keiner erfahrung damit ... andere Frage : hat ein avr überhaupt so eine art "systemzeit" ???
soll heisen eine art "echtzeittimer" ? oder anders gefragt : kann man mit nem avr softwaremäßig ne uhr bauen ?

PicNick
18.03.2006, 16:02
Eine effektive Systemzeit hat der AVR NICHT. Was natürlich leicht zu machen ist, ist mit einem der Timer einen größeren Zähler raufzuzählen.
Je nach Einheit muß der halt größer oder kleiner sein. Die ANSI-Zeit ist ein 32-Bit Zähler, der die Sekunden seit dem 1.1.1980 zählt
Aus dem wird dann im Bedarfsfall sowas wie "17-mar-2006 17:02:00" gemacht.
Die Differenzrechnung ist dann einfach eine Subtraktion. Aus der Differenz wird dann eben "tage hh:mm:ss" als Differenz.
Soll heissen, das Gewurstel ist immer die Umrechnung von sekunden in Jahre, monate, Tage, stunden,...... etc.

So gut/genau wie eine normale Quartzuhr kriegt man einen µC schon hin.

michiE
23.03.2006, 19:29
es geht genauer gesagt darum , ne uhr zu bauen , die n Programm mit den abfahrtszeiten eines Busses hat ( der z.B. im Stundentakt fährt), und anzeigt , wie lange es bis zum nächsten buss ist :-)
ist für nen freund , der hat die angewohnheit , die dinger zu verpassen *g*
thx
mfg
michi

AlexAtRobo
24.03.2006, 08:04
Da gibt es jeden Menge verschiedene ansätze, ist aber nicht wirklich kompiziert. Ich gehe meistens dazu über, die Stunden, Minuten und Sekunden je in einem Register abzulegen.
Dann ist es einfach zu handhaben
http://www.schoeppl.info/elektronik/atmel-avr-mega-8-uhr/atmel-avr-mega-8-quarzuhr.aspx
Da habe ich mal die Sache mit dem Uhrenquarz dokumentiert.

Und die Subtraktion ist auch nicht schwer.
Sekunde = r21
Minute = r22
Stunde = r23

Deine Zeit lädst du in:
Sekunde=r18
minute =r19
stunde=r20

Die differenz:
sub r18, r21
// ergebnis kann 0, <0 oder >0 werden
cpi r18, 60
brlo nothingtodowithsecond
add r18, 196 ; sprich, wenn die Sekunde negativ übergelaufen ist, einfach 196 dazu und sie liegt wieder zw. 0-59 natürlich muss nun die Minute erniedrigt werden
dec r19
nothingtodowithsecond:
// jetzt minute vergleichen
sub r19, r22
cpi r19, 60
brlo nothingtodowithminute
add r19, 196
dec r20
nothingtodowithminute:
sub r20, r23
cpi r20, 24
brlo nothingtodowithhour
add r20, 232

Habs grad aus dem Kopf geschrieben, hoffe dass kein fehler drinn ist.

Natürlich gibts noch tausend andere Wege nach Rom, der ist aber einfach nachzuvollziehen.

lg

Alex

michiE
25.03.2006, 10:37
danke =)
ich versuchs mal damit *g*
mfg
michi