PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datum und Zeit auf LCD



EagleStar
15.11.2006, 13:35
Servus an Alle,

ich habe folgendes Problem:
Ich möchte in einer Zeile eines LCD (4x16) das Datum und die Zeit mit Sekunden ausgeben. Ach ja, dabei werde ich unterstützt von einem ATmega8.
Mein Problem hierbei ist nun, das ja mein eigentliches Programm parallel zum Zeitprog laufen sollte, da das Hauptprog unterschiedlich lange Zyklen hat. Würde ich allso nach jedem Zyklus einen Zähler incrementieren, so wäre die Uhr sehr ungenau!

Wie allso kann ich das realisieren?

Mit freundlichen Grüßen
EagleStar

SprinterSB
15.11.2006, 16:16
Hast du keinen Timer mehr frei? Dort machst du Takte von 10 oder 100ms oder auch 1s. Die Eigentliche Ausgabe machst du in deinem Hauptprogramm.

Ein Programm sollte übrigens so aufgebaut sein, daß es keine Warteschleifen enthält.

EagleStar
15.11.2006, 17:12
Timer? ich weiß das es die gibt, aber nicht wie ich auf die zugreif bzw wie ich mit den umzugehen habe.
Kannst du mir vielleicht ein vereinfachtes Beispiel dafür geben?
Ach ja, welches Problem würde sich aus der Kombination mit Warteschleifen ergeben? Warscheinlich nur die aktualisierung. Aber anstatt warteschl. könnte man ja dann mit dem Takt oder Timer arbeiten?

MfG EagleStar

SprinterSB
15.11.2006, 17:36
Ein Beispiel für Timer-Programmierung hab ich im Wiki.

https://www.roboternetz.de/wissen/index.php/Hallo_Welt_f%C3%BCr_AVR_%28LED_blinken%29

Das ist zwar C, aber das Vorgehen in Assembler ist das gleiche.



TCCR1A = 0;

// Timer1 ist Zähler: Clear Timer on Compare Match (CTC, Mode #4)
// Timer1 läuft mit vollem MCU-Takt: Prescale = 1
TCCR1B = (1 << WGM12) | (1 << CS10);


Im Assembler schreibst du also 0 nach TCCR1A und (1 << WGM12) | (1 << CS10) nach TCCR1B

Mit den anderen SFRs wie TIMSK entsprechend. Falls dein Assembler diese Konstrukte nicht frisst (ich weiß net ob Atmel-Assembler so was kann, bei GNU-Assembler geht es. Dasz einfach ein #include <avr/io.h> machen).

Falls es nicht geht muss eben im Manual schauen, wo sich diese Bits befinden. CS10 ist glaub bit 0 in TCCR1B. Das musst du eben setzen.
Den Wert für OCR1A lässt du den Preprozessor (GNU) berechnen oder machst es von Hand aufm Tacshenrechner.

In dem Beispiel benutze ich den OCR1A-Interrupt. GNU-Assembler trägt den in die VECTAB ein, bei Atmel-Assembler musst du das händisch machen. Ist im Wiki ASM-Tutorial beschrieben.

Nach der Initialisierung der Timers kannst du IRQs aktivieren (sei). Die Interrupt-Routine musst du noch implementieren, also den COde, den er bei einem Interrupt ausführen soll.

Das Problem mit Warteschleifen ist, daß während einer Schleife die Maschine brach liegt. Bei simplen Sachen ist das nicht schlimm, aber wenn es komplizierter wird und man hat das ganze Design drauf ausgelegt, wird's ätzend.

Was die Timer angeht lies mal das Handbuch, das ist echt gut geschrieben. Zum Einstieg die Kapitelzusammenfassung oder Überblick über die Timer-Register.

EagleStar
15.11.2006, 17:52
Danke, ich glaub das Prinzip verstanden zu haben. Allerdings konnte ich mit der C-Code-Zeile absolut nix anfangen.
Aber mir ist schon mal weitergeholfen, thx!

MfG EagleStar

vajk
15.11.2006, 20:48
.. oder nutz doch eine I2C-Realtime-Clock ... dann bleiben die Werte auch nach dem Aus- und wiederschalten erhalten .. oder dekodiere ein DCF77-Modul .. auch simpel zu machen - dann muß nix gespeichert werden ...

EagleStar
20.11.2006, 11:02
I2C: klingt interessant aber damit habe ich noch nie gearbeitet. Gibt es da Beisiele für?

DCF77 ist warscheinlich zu aufwendig!

vajk
20.11.2006, 13:02
I2C - klar gibts Beispiele -> Suchfunktion
I2C gibts auch Uhrenbausteine DS 1307, DS 1337, DS 1629S, DS 1672-33 bei Reichelt ...
.. die Codierung von DCF77 ist auch kein Prob, den günstigesten Empfänger hierfür findest bei Conrad ... allerdings kann ich nur mit C-Programmbeispiele dienen :-)

AVRboy
20.11.2006, 17:59
Hilft warscheinlich nich viel mehr aber im Downloadberich gibts auf Basic Beispiele.

mfg

EagleStar
21.11.2006, 07:23
Gut, ich hab mir grade mal die Datenblätter geholt und die Bsps runtergeladen. Ich schau mir das jetzt mal an und melde mich dann wieder wenn ich Probleme hab - ich melde mich sicher...

Trotzdem schon mal danke!