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
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.
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.
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.
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.
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.
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
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.
pro tipp: wer etwas auf 1ms genau messen will, hat einen zähler, der feiner auflöst.
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?
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.
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
>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
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 +++.
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.
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.
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
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...
Detlef G. schrieb: > Der Kunde hatte sich vorgestellt, Also wieder mal eine kommerzielle Entwicklung für lau aus dem Forum abstauben?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.