www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Uhrzeitausgabe mit avr


Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sein Problem ist sicherlich, der Timer-IRQ zu programmieren...

Autor: Andi (Gast)
Datum:

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

Autor: Hubert (Gast)
Datum:

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

Autor: E_D (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andy (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lies mal den ersten Post ganz oben (synchronisieren).

MfG
Andi

Autor: Condor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

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

Autor: Andi - mainoperator :) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andi - mainoperator :) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Malte (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.