Forum: Mikrocontroller und Digitale Elektronik AVR Zeit? Wie genau schafft das ein ausgelasteter AVR


von screw (Gast)


Lesenswert?

Hi

Wie genau kann man mit einem AVR eine Uhr realisieren, wenn der AVR noch 
viele andere Aufgaben übernehmen muss?
Beispielsweise Ansteuerung eines Displays, WAV-Ausgabe, Kommunikation 
teilweise mit Software emulierten Protokollen.

von Alexander S. (esko) Benutzerseite


Lesenswert?

Indem man die Such bemüht.
AVR - Die genaue Sekunde / RTC

von Falk B. (falk)


Lesenswert?

@  screw (Gast)

>Wie genau kann man mit einem AVR eine Uhr realisieren, wenn der AVR noch
>viele andere Aufgaben übernehmen muss?

Sehr genau, 1ppm wenn es sein muss. Das macht im wesentlichen ein Timer. 
Und wenn man die Grundlagen für den Interrupt  beachtet, passiert da 
nix.

AVR - Die genaue Sekunde / RTC

>Beispielsweise Ansteuerung eines Displays, WAV-Ausgabe, Kommunikation
>teilweise mit Software emulierten Protokollen.

Das sind alles Sachen, die in einem soliden Programm dennoch nicht dazu 
führen dürfen, dass Interrutps verschluckt werden.

MFG
Falk

von hdd (Gast)


Lesenswert?

Mit Timern. Die laufen nebenher und zählen bei jedem Schritt ein 
Register hoch. Wenn das überläuft oder einen bestimmten Wert erreicht 
(z.B. jede Sekunde) wird ein Interrupt aufgerufen, der dann deine 
Uhrzeit um eins erhöht.
Wenn der Rest zeitkritisch ist, sollte dieser Interrupt natürlich 
möglichst kurz sein. Aber da der Controller sich "merkt" wenn ein 
Interrupt aufgetreten ist bis er dann wirklich ausgeführt wird, kannst 
du für bestimmte Sachen die Interrupts auch kurz aus- und dannach wieder 
einschalten und so schlimm ist es ja nicht, wenn die Sekunde mal 100µs 
später umschaltet ;)

von screw (Gast)


Lesenswert?

Gut, dann kann ich das ja mit dem Hauptprozessor machen.

Ansonsten hätte ich nämlich einen extra Prozessor für die DCF77 
Dekodierung und Uhrenfunktion genommen. z.B. einen kleinen Tiniy, der 
dann vom Hauptprozessor einfach ausgelesen wird, wenn die Uhrzeit 
gebraucht wird.

von Simon K. (simon) Benutzerseite


Lesenswert?

Von DCF war im Ursprungsbeitrag aber keine Rede... Mit der Dannegger 
Methode geht aber auch das noch nebenbei.

von screw (Gast)


Lesenswert?

Das DCF 77 würde ich ohnehin nur bei einem extra "uhrenprozessor" 
realisieren. Damit es sich wenigstens lohnt.

Wenn ich nur den Hauptprozessor verwende, holt er sich mehrmals am Tag 
die Uhrzeit über die ISM Funkstrecke.
Sofern es grade keine technischen Probleme gibt.

Über die ISM Funkstrecke kann das Gerät nicht nur die Zeit holen, 
sondern auch ins Internet. Über ein am Server oder Router 
angeschlossenes Funk-RS232 Modul und ein Phyton Script.

von screw (Gast)


Lesenswert?

Achja, der Internetzugang wird benötigt, um den Kalender zu 
synchronisieren.

Es wird ein ganz besonderer Wecker, der mir morgens beim Aufstehen auf 
dem Display schon anzeigt, was den Tag über so ansteht.
Er berücksichtigt ebenfalls Feiertage, meinen Schichtplan und 
Urlaubstage.

von Detlev T. (detlevt)


Lesenswert?

screw schrieb:
> Das DCF 77 würde ich ohnehin nur bei einem extra "uhrenprozessor"
> realisieren. Damit es sich wenigstens lohnt.

Das muss ja nicht sein. Viele AVRs haben eine "Input Capture"-Funktion, 
wo man per Hardware den Zeitpunkt eines externen Ereignisses 
registrieren kann. Es ist dann nicht mehr nötig, zeitnah eine ISR zu 
starten, um den Timerwert auszuwerten. Ausgewertet wird, "wenn Zeit ist" 
- im günstigsten Fall halt nur einmal pro Sekunde.

von screw (Gast)


Lesenswert?

Hmm, diese Input Captur Funktion habe ich noch nicht verwendet.

Ich habe einen DCF77 Decoder programmiert. Solange das Signal auf Low 
ist, wird ein Zähler hochgezählt. Jenachdem in welchem Bereich der 
Zähler ist, wird es dann als 0 oder 1 Signal interpretiert. Kurze Spikes 
z.B. durch Funkenstörungen werden toleriert.
Die decodierten Bits werden dann in einen 64 Bit langen Speicherbereich 
reinkopiert. Kommt der Minutenimpuls, wird ausgewertet. Das Ganze wird 
mehrmals gemacht. Wenn dann die Empfangen Werte mehrere Minuten 
zusammenpassen, wird das dann in die Uhr übernommen.
De Uhr ist bei mir auch nur ein Timerinterrupt, der einen 
Millisekundenzähler hochzählt. Die Decodierung der Millsekunden seit 
Tagesbeginn in Stunde, Minute, Sekunde wird erst bei Bedarf gemacht.

Wenn der AVR sonst nix zu tun hat, klappt das wunderbar. Ich war mir nur 
nicht sicher, was passiert, wenn ich eine hohe Auslastung des AVR mit 
anderen Aufgaben habe.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Detlev T. schrieb:
> Viele AVRs haben eine "Input Capture"-Funktion,
> wo man per Hardware den Zeitpunkt eines externen Ereignisses
> registrieren kann.

Für DCF77 völlig ungeeignet. Wenn das Modul aufgrund von Störungen 
spinnt, legt es den ganzen Controller lahm. Das DCF77-Signal kann von 
einem ohnehin laufenden Timer-Interrupt kontrolliert werden.

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.