Forum: Mikrocontroller und Digitale Elektronik Uhrenbaustein mit ms


von Detlef G. (oldcharly)


Lesenswert?

Hallo Community

Ich brauche mal dringend eure Hife.

Ich suche einen RTC (Uhrenbaustein), der zusätzlich zu Datum und Zeit 
auch noch die Millisekunden ausgibt.

Begründung:
Ich muß einen Schnittstellenanalysator bauen, bei dem ich jedes 
empfangene Zeichen mit einem Zeitstempel versehe.
Bei 9600 Baud brauche ich somit pro Zeichen eine Millisekunde.
Ich weiß, das es hunderte von Schnittstellenanalysatoren zu kaufen gibt. 
Ich muß aber ein eigenes Protokoll mit einem ganz speziellen Timing 
überwachen und das empfangene Frame
dekodieren und anzeigen.

Zur Funktion:
Der Uhrenbaustein läuft lustig vor sich hin.
Dann kommt auf der Leitung ein Signal rein, ein Interrupt wird 
ausgelöst.
Wunsch: Im Interrupt setze ich eine Hold-Leitung, die die aktuelle Zeit 
einfriert. Der Uhrenbaustein selbst läuft weiter!
Ich hole dann das empfangene Zeichen aus dem UART, und speicher es mit 
dem Zeitstempel in eine Struktur.
Dann deaktiviere ich die Hold-Leitung wieder und warte auf das nächste 
Zeichen.

So sehe ich, ob das vorgeschriebene Timing eingehalten wird und an Hand 
der Zeichen die ich empfange kann ich erkennen, welcher Teilnehmer was 
sendet (Multimasterbetrieb).
In einer späteren Ausbaustufe werden in meinen Schnittstellenanalysator 
auch noch Triggerbedingungen eingebaut, die genau auf das Timing 
aufsetzen, aber das kommt erst später.
Erst muß mal die Kommunikation fehlerfrei laufen.

Ich hoffe ihr kommt mit meiner Beschreibung klar.

Frage an an die Spezialisten: gibt es einen Uhrenbaustein, der auch 
Millisekunden zur Verfügung stellt?

Da ich z.Zt. viel unterwegs bin, kann ich nur alle 2-3 Tage antworten. 
Ich werde mich aber auf alle Fälle melden!
Für Eure Antworten bedanke ich mich schon einmal.


OldCharly

von Benedikt S. (benedikt_s)


Lesenswert?

Frage an an die Spezialisten: gibt es einen Uhrenbaustein, der auch
Millisekunden zur Verfügung stellt?

Wenn ich mich nicht täusche kann die in den STM32 integrierte RTC das.
Und selbst wenn nicht, kannst du dir aus einem Timer-Interrupt und einem 
zweiten Timer mit geignetem pre Sacler auch eine Milisekunden Uhr Bauen 
die jede Sekunde neu startet.

Wenn du keinen STM32 verwendest kannst du auch eine DS3231+Timer nehmen.

von Peter D. (peda)


Lesenswert?

Typisch schreibt man Applikationen so, daß sie einmalig nach dem Power 
On oder nach Aufwachen aus deep Sleep sich den Timestamp holen und dann 
mit internen Timern in der gewünschten Granularität weiter zählen.
Zeit aus Variablen im internen RAM zu holen geht nämlich erheblich 
schneller und Ressourcen schonender, als jedesmal umständlich aus nem 
externen Chip.

von m.n. (Gast)


Lesenswert?

Auf ms genau wird es keinen geben, der mit 32,768 kHz arbeitet.
Ein PCF8563 kann ein Signal mit 1024 Hz ausgeben. Damit gibt es pro 
Millisekunde ein paar 'gestempelte Werte' mehr.

von Thomas F. (igel)


Lesenswert?

Detlef G. schrieb:
> Wunsch: Im Interrupt setze ich eine Hold-Leitung, die die aktuelle Zeit
> einfriert.

Verstehe ich nicht: Soll der Uhrenbaustein die Zeit intern 
zwischenspeichern? Und dann holst du die Zeit bei jedem Zeichen jedesmal 
von der RTC?


Für ein CAN-Bus-Tool welches ebenfalls den Zeitstempel in Millisekunden 
speichern soll habe ich auf einem Atmega328 einen 1ms Timer eingerichtet 
der eine int32-Variable für die Zeit hochzählt. Bei jedem neuen 
"Ereignis" muss ich lediglich die 4 Bytes des Zeitstempels aus den RAM 
lesen und mit abspeichern. Geht schnell und effektiv.

von Jim M. (turboj)


Lesenswert?

Detlef G. schrieb:
> Zur Funktion:
> Der Uhrenbaustein läuft lustig vor sich hin.
> Dann kommt auf der Leitung ein Signal rein, ein Interrupt wird
> ausgelöst.
> Wunsch: Im Interrupt setze ich eine Hold-Leitung, die die aktuelle Zeit
> einfriert. Der Uhrenbaustein selbst läuft weiter

Machs nich zu kompliziert. Moderne µC haben RTCs integriert, und da kann 
man oft auch das Zählregister direkt im Interrupt auslesen. Da die RTC 
üblicherweise mit 'nem 32768Hz Quarz arbeiten, bist du auf +- 1/32768 
Sekunden genau. Millisekunden sind da nur noch Dreisatz.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Detlef G. schrieb:
> Wunsch: Im Interrupt setze ich eine Hold-Leitung, die die aktuelle Zeit
> einfriert. Der Uhrenbaustein selbst läuft weiter!
Auf welcher Plattform soll denn das Ganze laufen?
Brauchst du wirklich einen Uhrenbaustein?
Sowas setzt man normalerweise nur ein, wenn ein Gerät auch 
ausgeschaltet und stromlos lange Zeit weiterlaufen muss.
Wenn du aber sowieso Strom hast, dann kannst du einfach auf deinem µC 
irgendeinen Zähler mit 1 ms hochlaufen lassen und ein einziges Mal die 
Zeit einstellen oder mit relativen Zeiten rechnen.

: Bearbeitet durch Moderator
von Axel S. (a-za-z0-9)


Lesenswert?

Detlef G. schrieb:
> Der Uhrenbaustein läuft lustig vor sich hin.
> Dann kommt auf der Leitung ein Signal rein, ein Interrupt wird
> ausgelöst.
> Wunsch: Im Interrupt setze ich eine Hold-Leitung, die die aktuelle Zeit
> einfriert. Der Uhrenbaustein selbst läuft weiter!
> Ich hole dann das empfangene Zeichen aus dem UART, und speicher es mit
> dem Zeitstempel in eine Struktur.

Abgesehen davon, daß ein RTC-Baustein keine exakte Millisekunde liefern 
kann - aus verschiedenen Gründen, s.u. - man verwendet eine RTC auch 
nicht so. Der Zweck eines RTC-Bausteins besteht darin, eine Uhr zu haben 
die auch dann weiterläuft, wenn der µC im Tiefschlaf ist oder gar ganz 
ohne Strom. Dann wird beim Aufwachen des µC die aktuelle Zeit aus der 
RTC geholt und so lange der µC aktiv ist, kümmert er sich selber um die 
weitere Zeitmessung. Die kann er dann (abhängig von den verfügbaren 
Zeit/Frequenznormalen) mit im Prinzip beliebiger Genauigkeit machen.

Warum RTC keine exakten Millisekunden liefern können: RTC sollen so 
sparsam wie möglich sein, damit sie lange aus kleinen Pufferbatterien 
laufen. Deswegen ist die Quarzfrequenz a) niedrig und b) eine Potenz von 
2. Die üblichste Frequenz ist 32768Hz. Daraus lassen sich zwar 1024Hz 
gewinnen, aber eben keine glatten 1000Hz. Korrekturmechanismen (sofern 
die RTC welche hat) arbeiten sogar mit noch höherer Granularität. Sie 
strecken oder stauchen einzelne Sekundenmarken.

Langer Rede kurzer Sinn: laß einfach einen Timer in deinem µC mit 1000Hz 
überlaufen. In der Überlauf-ISR kannst du dann die Zeit mitzählen. Und 
im Interrupt für dein Ereignis kopierst du einfach die paar Bytes 
Zeitinformation in einen Buffer. Eine RTC brauchst du nur dann, wenn die 
Zeitstempel absolut sein müssen. Meistens reichen relative Zeitstempel, 
aber wir kennen deine Anwendung ja nicht.

von dunno.. (Gast)


Lesenswert?

pro tipp:

wer etwas auf 1ms genau messen will, hat einen zähler, der feiner 
auflöst.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

dunno.. schrieb:
> wer etwas auf 1ms genau messen will, hat einen zähler, der feiner
> auflöst.
Warum?
Wenn ich auf 1ms genau messen will, dann brauche ich nur genau diese 
Zeit. Was würde mir da ein Zähler helfen, der aus 1/10ms genau auflöst?

von dunno.. (Gast)


Lesenswert?

klar, im sinne von pass/fail kann es mir egal sein, ob da was jittert 
oder nicht... dann sind die gemessenen 0ms oder 2ms halt einfach fail.

von Hurra (Gast)


Lesenswert?

Benedikt S. schrieb:
> Frage an an die Spezialisten: gibt es einen Uhrenbaustein, der
> auch
> Millisekunden zur Verfügung stellt?

Jupp. Viele haben einen konfigurierbaren Ausgang, der bestimmte Zeiten 
liefern kann.

So kann man mit einer DS1337 sich einen Rechteck mit 1kHz ausgeben 
lassen.
Diesen kann man entweder in einer ISR einfach nur zählen, oder mit einem 
Timer genauer erfassen.

https://datasheets.maximintegrated.com/en/ds/DS1337-DS1337C.pdf

von Hans M. (Gast)


Lesenswert?

>So sehe ich, ob das vorgeschriebene Timing eingehalten wird und an Hand
>der Zeichen die ich empfange kann ich erkennen, welcher Teilnehmer was
>sendet (Multimasterbetrieb).

Oder Du nimmst einfach mal n Oszi und misst deinen Bus einfach aus.
Oder wie willst Du sicher stellen, das dein "Analysator" die Timings 
richtig aufnimmt ( Interrupt Latenz etc )?

MfG Hans

von m.n. (Gast)


Lesenswert?

Hurra schrieb:
> So kann man mit einer DS1337 sich einen Rechteck mit 1kHz ausgeben
> lassen.

Im Datenblatt finde ich nur 1 Hz oder aber 4096 Hz +++.

von Hurra (Gast)


Lesenswert?

m.n. schrieb:
> Hurra schrieb:
>> So kann man mit einer DS1337 sich einen Rechteck mit 1kHz ausgeben
>> lassen.
>
> Im Datenblatt finde ich nur 1 Hz oder aber 4096 Hz +++.

Urks :-(

Danke für die Korrektur! Da habe ich völligen Käse erzählt.

von Johnny B. (johnnyb)


Lesenswert?

Falls Du einen MSP430 oder MSP432 hast, dann kannst Du mit dem 
Uhrenquarz als Referenzclock den internen DCO mit einer praktisch 
beliebigen Frequenz laufen lassen und die ist dann exakt gleich genau 
wie die Frequenz vom Uhrenquarz.

von Detlef G. (oldcharly)


Lesenswert?

Hallo Leute,

vielen Dank für die vielen Infos.
Ich komme gerade vom Kunden. Wir hatten ein längeres Gespräch, in dem 
sich dann genau das heraus kristallisiert hat, was ihr mir geraten habt.

Der Kunde hatte sich vorgestellt, das er den Analysator in die Leitung 
schaltet und dauerhaft mitlaufen lässt.
Tritt dann irgend wann (Stunden, Tage...) mal ein Fehler auf, kann er 
mit Datum und Uhrzeit genau sagen, welcher Teilnehmer den Fehler wann 
verursacht hat.
Wir haben uns dann darauf geeinigt, wenn der Bus 24 Std fehlerfrei 
läuft, kann man davon ausgehen, das er auch bei längeren Betrieb 
fehlerfrei läuft.
Sollte doch mal ein Fehler auftreten, wird der über das 
Kommunikationshandling weiter behandelt (evtl auch gemeldet).

Als Hardware steht ein MEGA64 zur Verfügung, der z.Zt. ein altes 
Protokoll überwacht.
Das Protokoll wurde überarbeitet und erweitert und jetzt muß der 
Analysator ebenfalls überarbeitet und erweitert werden.
Der Mitarbeiter des Kunden, der das Projekt bisher bearbeitet hatte, 
steht nicht mehr zur Verfügung.
So bin ich ins Spiel gekommen.

Eine neue Analysatorhardware ist nicht gewünscht. Ich muß also mit der 
vorhandenen Version leben.

Der Kunde und ich haben uns jetzt auf folgendes Vorgehen geeinigt:
1. Keine Hardwareänderung
2. Kein RTC (RTC mit ms gibt es nicht [siehe Beiträge], kein Platz 
dafür)
3. Der MEGA64 wird evtl. höher getaktet (läuft bisher mit 1MHz)
4. Über Timer wird eine relative 1ms-Zeitbasis erzeugt

Und das ist genau das, was ihr alle vorgeschlagen habt.


Ich danke euch für die Hilfe und guten Vorschläge
OldCharly

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Detlef G. schrieb:
> 3. Der MEGA64 wird evtl. höher getaktet (läuft bisher mit 1MHz)
Das reicht doch locker für 1ms. Wie schnell kommen die Bytes herein? Wie 
schnell kannst du den Speicher des Loggers beschreiben?

Aber wenn du eh eine dauerhafte Stromversorgung hast, dann macht auch 
das bisschen Mehrverbrauch durch die höhere Taktfrequenz nichts...

von Manfred (Gast)


Lesenswert?

Detlef G. schrieb:
> Der Kunde hatte sich vorgestellt,
Also wieder mal eine kommerzielle Entwicklung für lau aus dem Forum 
abstauben?

von Detlef G. (oldcharly)


Lesenswert?

Lothar M. schrieb:
> Das reicht doch locker für 1ms. Wie schnell kommen die Bytes herein? Wie
> schnell kannst du den Speicher des Loggers beschreiben?

Lothar, ich gebe Dir Recht.
Aber die Zeichen werden nicht nur abgespeichert, sondern das empfangene 
Frame wird noch analysiert und angezeigt.
Wenn die 1ms dafür ausreichen, bleibt es bei dem Takt. Die Praxis wird 
es zeigen.


Manfred schrieb:
> Also wieder mal eine kommerzielle Entwicklung für lau aus dem Forum
> abstauben?

Hallo Manfred, wofür ist denn dieses Forum? Nur für Hobbybastler?
Ich staube keine Entwicklung für lau ab. Ich habe eine technische Frage, 
in der ich nicht weiter komme. Wo würdest Du dir in diesem Fall einen 
Rat holen?
Außerdem ist mein "Kunde" ein guter Freund für den ich das mache. Und 
dieser Umbau ist für lau, ich verlange und bekomme nicht einen Cent 
dafür!
Und selbst wenn ich etwas dafür bekäme, bei einer Stückzahl von 3 werde 
ich davon bestimmt nicht reich.
Also wenn du etwas beitragen möchtest, bitte konstruktiv, kein 
Dummgeschwätz!

Allen anderen danke ich für ihre Hilfe

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.