PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Standard ASURO als digitale Uhr



Quarki
25.03.2010, 12:27
Hallo, ich bin dabei mir den Asuro als eine digitaluhr einzurichten, die die Uhrzeit auf Knopfdruck anzeigt. Das klappt bisher auch schon ganz gut. Ich kann zwar die Uhrzeit noch nicht einstellen, aber es ist möglich die vergangene Zeit seit dem einschalten anzeigen zu lassen und auch abzulesen. Dabei ist mir aufgefallen, dass die Uhr leider etwas falsch geht. Ich hatte den ASURO exakt 8 Stunden und 8 Minuten laufen lassen, die angezeigt Zeit war allerdings 8 Stunden und 9 Minuten und 18 Sekunden. Das bedeutet, dass in den von Asuro gemessenen 1000 Millisekunden in wirklichkeit nur 977,3431 Millisekunden um sind.
Das ist aber meine erste und einzige Messung dazu und ich bin mir nicht sicher, ob dieser Wert konstant ist, oder sich evtl mit Tastendrücken und Batterieabnutzung verändert. Unerklärlicherweise klappt die Anzeige der Minuten nicht, wenn ich bei 7 Minuten bin, dann werden seltsamerweise die Sekunden angezeigt. Wenn ich raten müsste woran es liegt würde ich die Taster vermuten, und zwar dass Taster 2 dann su tut als wäre er Taster 1.

Das waren die aufgetauchten Probleme.
Nun zur Anzeige der Uhrzeit:
Zur Zeit verwende ich den timebase Wert aus Gettime(), habe eine Time Struktur erzeugt, die die Zeitwerte von Minuten, Sekunden, Stunden und Tage speichert und zähle diese automatisch immer mit hoch, wenn eine Sekunde um ist, die Sekunden, wenn 60 Sekunden um sind die Minuten usw. Dabei achte ich auf Überzählige Millisekunden, Sekunden usw. die ich mit Berücksichtige.
Wenn keine Taste gedrückt ist, blinkt die Frontlampe: alle 500 ms wechselt sie zwischen an und aus. Drücke ich den rechten Taster (von hinten) werden die Sekunden angezeigt, beim zweiten Taster die Minuten, dritten Stunden und vierten Tage.

Die Anzeige eines Wertes erfolgt binär mit Hilfe der LED's:
1 FrontLED
2 BackLED links
4 BackLED rechte
8 StatusLED rot
16 StatusLED grün

Das sind aber leider nur 5 Bit, so dass ich mir etwas einfallen lassen musste, um bis zu 60 Sekunden und bis zu 60 Minuten anzeigen zu können. Er zählt von 1 bis 30 normal hoch, wechselt dann in den "Blink-Modus" und fängt dann blinkend wieder bei 1 an, so dass Zahlen ab 31 daran erkannt werden, dass sie blinken.

Zeit und Wecker werde ich demnächst noch programmierbar (per Tastendruck) hinzufügen.
Ich würde mich freuen, wenn ihr das Programm runter lädt und prüft, wie das Programm bei euch läuft. Ob es auch Probleme mit der Anzeige gibt, ob der ASURO auch falsch die Zeit misst, usw.

Testen ist erlaubt! ;)
Wenn ich die Programmierbarkeit von Uhrzeit und Wecker hinzugefügt habe, gebe ich auch gerne mal den Quellcode raus.

Ich hoffe auf viele Antworten, Tipps und konstruktive Kritik!
=P~

Quarki

P.S.: Fortsetzung des Kommentars zum Download:
... (unsigned long timebase Limitüberschreitung noch nicht abgefangen, wäre aber kein Problem, das nach einem Tag zurück zu setzen. Das folgt in späteren Versionen.)

Rabenauge
25.03.2010, 13:56
Hm, ich bin mit dem Asuro nicht wirklich fit, aber die Probleme mit der Ganggenauigkeit sind bekannt.
Da du keinen Quellcode postest, tippe ich mal drauf, dass du Warteschleifen als Zeitbasis benutzt?

Nix gut. Da kannst du herausrechnen, was du willst, wirklich genau wird das nie funktionieren. Das geht einfacher, wenn du einen Hardwaretimer benutzt.
Somit hast du eine feste, vom Rest nahezu unabhängige Zeittakt-Basis.
Das heisst: wann immer der Prozessor etwas anderes tut als zu "warten", wird delay() ungenau. Ein Hardwaretimer läuft ungerührt weiter, dort musst du lediglich aufpassen, dass du keinen Interrupt (z.B. duch zu lange Interrupthandler-Routinen) verlierst.
Wobei die, wenn ich mich recht entsinne, gepuffert werden, also nicht wirklich verloren gehen. Trotzdem kann sich dadurch natürlich der Zeittakt auch etwas "verschieben, wenn der interrupthandler die Interrupts beispielsweise zu lange sperrt, denke ich.

http://blackstrom.derschwarz.de/avr/avr_uhr/index.shtml

Dort hast du ein bereits fertiges Programm, Basic ist nicht wirklich mein Gebiet, aber _das_ schaut recht gut aus (wobei es einiges mehr kann, schick ist der Empfang des Funk-Zeitsignals).

Musst du halt adaptieren auf den Asuro.

Das hier http://www.mikrocontroller.net/articles/AVR-Tutorial:_Uhr
ist zwar eine Assembler-Umsetzung, dafür aber wird dort schön auf die Probleme mit der Ganggenauigkeit eingegangen und auch gut erklärt, wie sie zustande kommen und teilweise umgangen werden können.

Wenn meine Biene dann ihr Display hat (da schweisse ich grade dran) werd ich das ganz sicher auch mal probieren, wobei die mit ihren 15MHz zumindest rechnerisch Vorteile in der Genauigkeit haben dürfte.

Ansonsten ist so eine Uhr, meiner Meinung nach, eine sehr gute Fingerübung, das wird nur klappen, wenn man leidlich effizient programmiert. Ich hätte dann _später_ gerne noch eine Möglichkeit, sie zu puffern (oder halt ein Funkmodul dazu)..

Valen
25.03.2010, 22:09
... Ich hatte den ASURO exakt 8 Stunden und 8 Minuten laufen lassen, die angezeigt Zeit war allerdings 8 Stunden und 9 Minuten und 18 Sekunden. Das bedeutet, dass in den von Asuro gemessenen 1000 Millisekunden in wirklichkeit nur 977,3431 Millisekunden um sind....Es ist nicht ganz so schlecht. Du habst ein rechn fehler gemacht. Das söll 997,3431 millisekunden sein. Nur ein viertel prozent abweichung.

Rabenauge:

Er benutzt die Gettime funktion (von dem erweiterte lib fur Asuro) der schön durch den Timer2 interupt getaktet wird. Leider had den Asuro kein richtiges quartz kristal, sondern eine keramische resonator. Deshalb ist die zeitgenauichkeit nicht wirklich gut.

Quarki
02.04.2010, 17:27
Hi nochmal.
Ich habe inzwischen ein paar Messungen gemacht. Mein Asuro scheint immer um ca. 0,25% vor zu gehen, also schneller zu ticken.
Ich habe zwei verschiedene Batteriesätze verwendet, beim ersten aber leider nur eine Messung gemacht, bevor die Batterien leer waren. Bei diesem ersten Batteriesatz war das Ergebnis ca. 0,26% abweichung von der vergangenen Zeit (gemessen mit Funkuhr).
Diese Abweichung kann ich dann in das Programm so einprogrammieren, dass es sie berücksichtigt und dann richtig geht.

Jetzt aber mal eine andere Frage: Die Batterien waren schon nach wenigen Tagen total leer, würde sich das sehr verändern, wenn ich die Frontlampe nicht mehr blinken lasse um Strom zu sparen? Dann würde Asuro nur dann die LED's an haben, wenn man einen Taster betätigt. Habt ihr Tipps für mich, wie ich im Asuro Betrieb den Stromverbrauch sonst noch minimieren kann, um Batterieladung zu sparen?

Frohe Osterfeiertage!
Quarki

Valen
02.04.2010, 18:31
Den atmega8 datenblat lesen. Es hat einiger grafiken uber die abweichung von den clock-frequenz auf basis der temperatur und spannung. Aber auch ein kapitel uber schlaf zustand und stromverbrauch minimalisierung, wie zb. den analog-digital-converter oder interne spannungsreferenz abschalten. Aber vielleicht macht das wenige gar nichts aus im vergleich mit dem ruhe verbrauch.

Weiss jemand wieviel ein Asuro im ruhe zustand (wie ein FirstTry program) uberhaupt verbraucht? Ich kan am meine nicht mehr messen weil ich sehr kleine konnektoren zwisschen das batterie fach und platine soldiert habbe. Das wird nur kurzschluss machen oder kein contact flach haben. Ich muss erst neue konnekoren kaufen und etwas da zwisschen basteln.

M1.R
04.04.2010, 12:47
Jetzt aber mal eine andere Frage: Die Batterien waren schon nach wenigen Tagen total leer, würde sich das sehr verändern, wenn ich die Frontlampe nicht mehr blinken lasse um Strom zu sparen? Dann würde Asuro nur dann die LED's an haben, wenn man einen Taster betätigt. Habt ihr Tipps für mich, wie ich im Asuro Betrieb den Stromverbrauch sonst noch minimieren kann, um Batterieladung zu sparen?
Bie meinem Wecker-ASURO hat der Sleep-Mode viel gebracht:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=336046#336046
Gruss
M.