Forum: Mikrocontroller und Digitale Elektronik Uhrzeitausgabe mit avr


von Andi (Gast)


Lesenswert?

hi

ich habe einen atmega8 und möchte gerne eine systemzeit (die per uart
eingestellt wird) auslesen um zu einer bestimmten tageszeit z.b. einen
pin auf high setzen.

also der pc sendet die systemzeit und der avr speichert diese und läuft
von alleine weiter. die synconisation auszuprogrammieren wär nicht das
problem aber ich schaff es ned dass ich mit dem avr eine mitlaufende
uhr schreibe.
hoffe mir kann da jemand helfen!

programmiersprache: basic




ich hab jetz schon stundenlang mit google, irgendwelchen foren und
testprogrammen verschwendet, doch nix hat funktioniert.. thx im vorraus
für eure antworten

von Hubert (Gast)


Lesenswert?

Ich kann kein Basic, aber das Problem ist doch nicht gross.
Einen Sekundentakt produzieren,
Sekunden bis 60 zählen, Minuten um 1 erhöhen, Sekunden auf 0 setzten,
Minuten auf 60 zählen, Stunden um 1 erhöhen, Minuten auf 0 setzen usw.
Wenn die Systemzeit kommt, die vorhandene Zeit sysnchronisieren.
Das dürfte auch in Basic kein Problem sein.

von Andreas (Gast)


Lesenswert?

Sein Problem ist sicherlich, der Timer-IRQ zu programmieren...

von Andi (Gast)


Lesenswert?

genau... denn mit "waitms" kann ich des wohl schwer realisieren :) is
zu ungenau

von Hubert (Gast)


Lesenswert?

Sich mit den Timer/Counter zu beschäftigen ist aber Grundvoraussetzung,
egal was für eine Sprache man verwendet.

von E_D (Gast)


Lesenswert?

wenn du bascom-avr nimmst, geht das mit einem fingerschnips.
entsprechende bibliotheken werdenn dann dazugelinkt.
es gibt auch eine an von atmel, wie das ganze in asm geht...
vg ed

von Andy (Gast)


Angehängte Dateien:

Lesenswert?

ich dachte ich helf dir mal n bischen - ich bin grade dabei eine DCF-Uhr
zu baun, für denn fall, dass der DCF-Empfang gesört ist sollte eine
interne uhr weiterlaufen. das programm liegt bei!

von Andi (Gast)


Lesenswert?

Na ja Andy (gleich der obige), wie schon erwähnt, mit WaitMS sollte man
das ja nicht machen sondern mit einem Timer-Interrupt.
Das mit dem Zählen und vergleichen ist ja OK.
Am besten zählt man im Timer die Sekunden hoch, wenn man den Timer auf
eine Sekunde einstellt, und in der Main-Loop dann den Rest.
Ein Interrupt für das serielle Empfangen der Uhrzeit-Daten muß auch
noch her.

MfG
Andi

von Andy (Gast)


Lesenswert?

okay das alles geht ja ohne probleme mit dem timer1 - du startest ihn
einfach und errechnest wieviel der tackt runtergeteilt werden muss.
abhängig ist das ja von deinem quarz. welchen µc benutzt du? wie meinst
du das mit dem seriellen empfang? etwa DCF77?

von Andi (Gast)


Lesenswert?

Lies mal den ersten Post ganz oben (synchronisieren).

MfG
Andi

von Condor (Gast)


Lesenswert?

Hallo

warum nimst du keine CPU mit RTC ?
oder eine RTC mit I2C bus ?

von Andi - mainoperator :) (Gast)


Lesenswert?

also erstmal: es gibt viel zu viele Andi's auf dieser welt! g

ich hab des ganze jetz so umgestaltet dass ich die aktuelle systemzeit
per visualbasic über rs232 auf den ATmega8 schicke und dieser sendet
die daten dann an einen PCF8583 weiter.
der PCF is ein I2Cbus RTC baustein und kann auch mit geringer
stromaufnahme betrieben werden und die uhrzeit läuft trotzdem noch
mit.

der vorteil dabei ist dass die uhrzeit sehr genau ist und wenn ich die
schaltung mit microcontroller abschalte, den PCF auch noch mit batterie
weiterlaufen lassen kann.

eine lösung mit dem atmega8 alleine wäre schwer möglich gewesen, da ich
schon ein ziemlich komplexes programm habe (~4kb) und da würde die
zeitfunktion ziemlich ungenau werden.. ausserdem hab ichs irgendwie
unabsichtlich geschafft dass ich den internen 1mhz oszillator aktiviere
und damit wars mir nicht mehr möglich einen externen anzuschließen mit
dem ich die sekunden genau hinbringen würde.

jedenfalls funktioniert das ganze jetz schon einigermaßen so wies
soll.

danke für eure beiträge!

mfg

von peter dannegger (Gast)


Lesenswert?

"da ich schon ein ziemlich komplexes programm habe (~4kb) und da würde
die zeitfunktion ziemlich ungenau werden."

Nanu, der 1.April ist doch schon vorbei.

Die Timer zählen immer exakt !
Und eine Abhängigkeit von der Codegröße ließe ich mir nur am 1.April
einreden.


"ausserdem hab ichs irgendwie unabsichtlich geschafft dass ich den
internen 1mhz oszillator aktiviere und damit wars mir nicht mehr
möglich einen externen anzuschließen mit dem ich die sekunden genau
hinbringen würde."

Es scheint, Dir ist noch nicht bekannt, daß der ATMega8 Fusebits hat.
Dann aber schleunigst ins Datenblatt geschaut und das Versäumte
nachgeholt. Dann wüßtest Du auch, warum die 1MHz ab Werk immer aktiv
sind.

Der ATMega8 hat sogar einen speziellen Stromsparmodus, wo nur der T2
mit einem 32kHz Uhrenquarz weiterläuft.


Peter

von Andi - mainoperator :) (Gast)


Lesenswert?

nur wie setze ich die fusebits ohne stk500?
ich spiel die basic programme per ISP rüber, eigentlich durfte man da
doch garkeine fusebits setzen können.. hat mir zumindest ein lehrer
erklärt. habs anscheinend mit irgend nem befehl doch gemacht nur
zurücksetzen kann man die nimmer.

der pcf8583 is jetz eh schon fix eingeplant, ausserdem kann ich den 240
byte speicher recht gut als schaltzeiten speicher nutzen :)

bring ich den timer auf mit dem 1mhz internen oszilator genau hin?
und wie mach ich in basic nen timer? im visual basic bring ichs hin
aber fürs bascom hat mir bis jetz noch die zeit gefehlt.

mfg

von Malte (Gast)


Lesenswert?

>ich spiel die basic programme per ISP rüber, eigentlich durfte man da
>doch garkeine fusebits setzen können.. hat mir zumindest ein lehrer
>erklärt.
Dann hat es dein Lehrer wohl nicht richtig gewusst. Es lassen sich beim
ATMEGA8 alle Fuses per SPI setzten mit Außnahme des Fusebits um SPI
selbst zu deaktivieren. Aber Reset könntest du damit auch deaktivieren,
der ja für SPI benötigt wirt - AUFPASSEN.
Ich meine mich zu erinnern dass sich beim AT90S2313 (veraltet) in der
Tat die Fuses nur im paralellprogramming Modus verändern lassen
(welcher mit dem STK500 verwendet werden kann), bei allen anderen
bisher von mir verwendete AVRs traf dies aber nicht zu.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.