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
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.
genau... denn mit "waitms" kann ich des wohl schwer realisieren :) is zu ungenau
Sich mit den Timer/Counter zu beschäftigen ist aber Grundvoraussetzung, egal was für eine Sprache man verwendet.
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
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!
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
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?
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
"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
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
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.