Forum: Mikrocontroller und Digitale Elektronik Warum DCF-Empfänger am Interrrupt-Pin


von Marek N. (Gast)


Lesenswert?

Nebend,

eben gerade wieder in der Artikelsammlung entdeckt.

Warum grassiert auch noch im Jahre 2013 die Unsitte, bei DCF-Projekten 
den Empfänger an den Interruptpin anzuschließen und im Worst-Case den µC 
in Interrupts absaufen zu lassen?

Dabei existiert doch eine breite Palette an eleganten und ausführlichst 
diskutierten Lösungen mit Polling, Faltung über Haar-Wavelets bis hin 
zum kompletten Korrelations-Empfänger im FPGA. Allesamt hier 
vorgestellt.

Wie kommt man auf die Idee, dass man auf ein Signal, das sich maximal 1 
Mal pro Sekunde ändert, unverzüglich und sofort reagieren muss?

Ich werde es nie verstehen.

Beste Grüße, Marek

von Stefan F. (Gast)


Lesenswert?

Man muss nicht unbedingt unverzüglich auf das Signal reagieren. Aber man 
kann. Ich möchte gerne eine Gegenfrage stellen: Was stört Dich daran? 
Ich keine, gerade bei der erwarteten Frequenz ist wohl kaum damit zu 
rechnen, dass der Mikrocontroller mit zu vielen Interrupt überfordert 
wird.

Wenn man den Sekunden-Takt und das DCF Signal per Interrupt empfängt, 
kann das Hauptprogramm für die Darstellung der Anzeige dienen. Sicher 
kann man das auch anders herum machen (Interrupt für die Anzeige und 
Hauptprogramm für den Empfang). Ist doch gleichwertig.

von B e r n d W. (smiley46)


Lesenswert?

Dir ist aber schon klar, dass Pollen mehr Rechenleistung verbraucht, als 
2 Interrupts pro Sekunde. Falls jemand im Umkreis von 200 km um 
Mainflingen wohnt, reicht das vollkommen.

> und im Worst-Case den µC in Interrupts absaufen zu lassen?

Der µC sollte auf beide Flankenwechsel reagieren, nicht auf einen 
Dauerzustand. Sicherlich sind vor allem bei schwachen Signalen andere 
Methoden von Vorteil.

> Interrupt für die Anzeige und Hauptprogramm für den Empfang
> Ist doch gleichwertig

Das sehe ich nicht als gleichwertig an, vor allem, wenn der 
DCF77-Empfang nicht die Hauptaufgabe des µCs darstellt. Interrupts sind 
das Multitasking des kleinen Mikrocontrollers.

von Karl H. (kbuchegg)


Lesenswert?

Stefan us schrieb:
> Man muss nicht unbedingt unverzüglich auf das Signal reagieren. Aber man
> kann. Ich möchte gerne eine Gegenfrage stellen: Was stört Dich daran?
> Ich keine, gerade bei der erwarteten Frequenz ist wohl kaum damit zu
> rechnen, dass der Mikrocontroller mit zu vielen Interrupt überfordert
> wird.

Was er meint: Wenn der Empfänger keinen Empfang hat, dann ist nicht 
gesagt, dass der Ausgang auch ruhig bleibt.

OK, kann man machen.
Aber der Regelfall ist ja eher so, dass man eine interne Uhr hat, die 
eigenständig läuft und einmal am Tag synchronisiert man die. In der Zeit 
wird der Interrupt aktiviert und in der Zwischenzeit ist er ganz einfach 
deaktiviert.

von M.N. (Gast)


Lesenswert?

Moin,

eben das meine ich: Man sollte immer von einem maximal gestörten Kanal 
ausgehen. Schlimmstenfalls wackelt der Empfänger-Ausgang ständig, wenn 
ein gestörtes Signal (früher waren es die Röhrenmonitore) empfangen 
wird. Der Controller würde von einem Interrupt zum anderen springen, 
ohne auch nur annähernd was gescheites dekodieren zu können.

Eine elegantere Lösung wäre es doch, z.B. den Empfänger-Pin z.B. alle 10 
ms abzufragen und die Zustände in einem Akkumulator aufzuintegrieren. 
Damit hätte man schon eine gewisse Mittelung und Bandbegrenzung und 
spontane Störungen wären ignoriert.

Auf diese Akkumulator-Daten könnten man dann einen wie auch immer 
gearteten Decoder loslassen.

Mich würden mal die tatsächlich erreichten Bitfehlerraten der 
verschiedenen Decoder-Konzepte interessieren, bei gleichen 
Empfangsbedingungen.

Beste Grüße, Marek

von Ulrich (Gast)


Lesenswert?

Das mit dem Interrupt kann man machen muss es aber nicht. Da moderne µC 
oft genügend Interruptfähige Pins haben, stört es von den HW 
Anforderungen aber auch wenig. Durch die Hardware sollte es auch kaum 
viele zusätzliche Interrupts geben, denn die Bandbreite sollte begrenzt 
sein, und eine mindestens kleine Hysterese wird man auch haben.

Bei der Software hängt es davon ab, was der µC noch alles zu tun hat, ob 
ein Interrupt etwa 1-2 mal je Sekunde oder gleichmäßig alle etwa 5-20 ms 
mehr stört. Meist stört weder das eine noch das andere.

Will man einen wirklich empfindlichen Empfänger haben, ist es sowieso 
schon problematisch das Signal nur Digital als 1 Bit Wert zum µC zu 
senden. Da wäre es besser wenn der µC auch eine Amplitudeninformation 
mit Zwischenwerten hätte. Wenn der µC sonst nicht viel zu tun hat, 
könnte man ggf. sogar auf die Idee kommen und den Empfänger als SDR 
(Software Defined Radio (reciever)) aufzubauen, dem µC also so etwas wie 
eine gefilterte ZF anzubieten.

von Jürgen (jliegner)


Lesenswert?

Marek N. schrieb:
> Warum grassiert auch noch im Jahre 2013 die Unsitte, bei DCF-Projekten
> den Empfänger an den Interruptpin anzuschließen und im Worst-Case den µC
> in Interrupts absaufen zu lassen?

Das werde ich auch nicht verstehen. Für mich gibts da ne ganz klare 
Trennung. Alles was nicht genau definiert ist kommt nicht an einen 
Interrupt. Punkt. Da gehören alle! Empfänger dazu. Auch die häufig 
verwendeten AM/FM Empfänger im 868 oder 433Mhz Bereich.

Ein kurzer Test am Oszi zeigt, dass diese Ausgänge auch mal ein schönes 
Rauschen produzieren können. Da kommt dann Freude auf für den 
Interrupthandler.

Normalerweise ist DCF ja nicht das einzige im System. Da sind dann noch 
ein paar Tasten oder Drehgeber dran oder andere langsame Peripherie. 
Einen zyklischen Interrupt braucht man eh oft genug und das ist auch 
genau der Punkt wo solche Sachen abgefragt werden. Alles andere ist 
Schwachsinn.

Viele HF-Empfänger haben oft kurze Spikes an den Ausgängen. Das macht 
eine Interruptauswertung ohnehin kaputt, bzw. eine zyklische pollende 
Abfrage erhöht die Erkennungssicherkeit oft dramatisch.

Leider ist aber die Aussage: "Pollen ist schlecht" nicht aus den Köpfen 
zu kriegen.

von Jürgen (jliegner)


Lesenswert?

M.N. schrieb:
> Mich würden mal die tatsächlich erreichten Bitfehlerraten der
> verschiedenen Decoder-Konzepte interessieren, bei gleichen
> Empfangsbedingungen.
>
> Beste Grüße, Marek

Ich kann als Beispiel nur den WDE2 (oder so) von ELV angeben. Den 
benutzte ich fuer 2 Temperatur/Feuchtesensoren. Die schaffen nicht mal 
10m Luftline sicher. Ich kenne zwar die Firmeware nicht, aber ich erahne 
sie...

Der selben Empfänger pollend betrieben erkennt 8 S555 problemlos im 
ganzen Haus.

von Ralf (Gast)


Lesenswert?

Das Argument, dass die Ausgänge bei Störungen wesentlich mehr Interrupts 
erzeugen würden, als sie es im fehlerfreien Fall zu tun ist sicherlich 
standhaft.
Nichtsdestotrotz möchte ich bei nem DCF77-Signal nicht per Polling 
arbeiten. Da in der Regel irgendwo eh immer ein Timer involviert ist 
verwende ich diesen, um das Signal zu gaten. Damit verhindere ich, dass 
das System bei Störungen mit Interrupts zugemüllt wird und kann 
andererseits aber trotzdem die Pulse per Interrupt auswerten.

Ralf

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


Lesenswert?

Ralf schrieb:
> Nichtsdestotrotz möchte ich bei nem DCF77-Signal nicht per Polling
> arbeiten.

Über Geschmack lässt sich einfach nicht streiten. Über sinnvolles 
Programmieren schon. Letztlich ist jedoch das Programm gut, was immer 
und unter allen Umständen funktioniert - innerhalb der Spezifikationen 
des Bauteils, versteht sich.

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Ich habe mal Abhandlungen gelesen, wie dermaßen exakt der Null-Durchgang 
des DCF-77-Signals ist, da sind 10ms-Polling ein echter Witz !!!

Ja, auf den Interrupt und ordentliche Software schreiben !

Bei mir läuft immer noch eine DCF-86 ven ELV aus dem Jahre 1986. Die 
schafft das immer...

von avr3 (Gast)


Lesenswert?

Bernd Rüter schrieb:
> Ich habe mal Abhandlungen gelesen, wie dermaßen exakt der Null-Durchgang
> des DCF-77-Signals ist, da sind 10ms-Polling ein echter Witz !!!
>
> Ja, auf den Interrupt und ordentliche Software schreiben !

Mag sein, dass die Aussendung noch extrem genau ist. Das war's dann aber 
auch schon. 1ms läuft das Signal bei mir alleine schon durch die Luft. 
Wie sich der Ausgang der üblichen Empfänger zum Eingangssignal verhält 
wäre auch noch zu untersuchen. Wenn da weniger als 10ms Verzögerung 
rauskommen wäre ich sehr überrascht.
Wenn du allerdings auf die µs genau geweckt werden willst.....
Sämtliche Hardwareeinheiten in Controllern die async. serielle Signale 
auswerten sampeln mehr oder wenig. Egal ob UART oder CAN. Das hat 
sicherlich auch seinen Grund. Da wo Signale vorhersehbar aufbereitet und 
definiert ankommen spricht nichts gegen Interrupts. In allen anderen 
Fällen sind sie nicht angebracht. Und da gehören Ausgänge von 
HF-Empfängern dazu genauso wie mechanische! Schalter, Taster und 
Drehencoder. Also alles was irgendwie Prellen kann hat nichts am 
Interrupt zu suchen solange er nicht fürs Aufwachen aus dem Tiefschlaf 
benötigt wird. Ausser natürlich das ist der einzige Interrupt im System. 
Dann ist das aber auch keine ernst zu nehmende Anwendung. Ehr sowas wie 
DCF auf UART. Da kanns dir ja egal sein wenn der Empfängerausgang 
rauscht. Wenn aber gleichzeitig noch Motoren gesteuert werden oder 
Magnetventile, dann ist es nicht zulässig die Möglichkeit bestehen zu 
lassen, dass mit schnellen Interruptfolgen das System nicht mehr 
arbeitet.

In der Industrie werden massenhaft SPS eingesetzt. Bis auf einen 
verschwindend kleinen Anteil an Spezialfällen werden da auch alle 
Eingänge nur 1 mal während der Zykluszeit gesampelt. Da braucht auch 
niemand (fast) einen externen Interrupt.

Warum 10ms ein Witz sind ist mir hier schleierhaft. Es geht ja wohl in 
der Regel nicht um die Genauigkeit der Sekunde im ms Bereich sondern 
darum eine interne RTC mit dem DCF-Signal zu stellen.

Weiterhin steht ja auch nicht fest ob dein Interrupt auch immer sofort 
bearbeitet werden kann. Und dem DCF-Signal einen hochpriorisierten 
Interrupt zu geben ist noch hirnrissiger.


>
> Bei mir läuft immer noch eine DCF-86 ven ELV aus dem Jahre 1986. Die
> schafft das immer...

Was du damit sagen willst weißt sicher nur du.
Ich habe auch einen Funkwecker der schon lange läuft.

von Stefan W. (dl6dx)


Lesenswert?

avr3 schrieb:
> Wie sich der Ausgang der üblichen Empfänger zum Eingangssignal verhält
> wäre auch noch zu untersuchen. Wenn da weniger als 10ms Verzögerung
> rauskommen wäre ich sehr überrascht.

Die PTB gibt selbst an[1], dass die Genauigkeit des empfangenen 
Signals stark von den Ausbreitungsbedingungen abhängig ist.

In einem Papier von hopf Electronic[2] wird für die Praxis eine 
resultierende Abweichung der aus dem AM-Signal gewonnenen Sekundenmarke 
zwischen +5 ms bis +150 ms angegeben. Will man mehr, müsse man das 
phasenmodulierte Signal auswerten.

Grüße

Stefan

[1] PTB-Mitteilungen 114 (2004), Heft 4, 
http://www.ptb.de/cms/fileadmin/internet/fachabteilungen/abteilung_4/4.4_zeit_und_frequenz/pdf/dcf77.pdf

[2] Webseite hopf Elektronik - Genauigkeitsvergleich, 
http://www.hopf.com/de/dcf-gps.htm, abgerufen am 13.12.2010

von Stefan W. (dl6dx)


Lesenswert?

Jürgen Liegner schrieb:

Das sehe ich auch so. Die Art der Auswertung hängt im Wesentlichen von 
der Art des Empfängers ab:

- Bei einem einfachen Empfänger, der lediglich die Amplitudeninformation 
gleichrichtet und so ein mehr oder weniger rauschüberlagertes Signal 
liefert, muss in der Software gefiltert werden. Das geht mit einem mit 
fester Abtastrate gewonnenen Signal am einfachsten, also Polling. (Ob 
man nun mit 100 Hz oder 1 kHz abtastet, ist eine zweite Frage.)

- Hat man einen Empfänger, der die komplette Demodulation und 
Rauschunterdrückung selbst erledigt und ein stabilisiertes und 
definiertes Sekundensignal ähnlich dem 1PPS-Signal eines GPS-Empfängers 
liefert, dann brächte die Auswertung über einen Interrupt Vorteile.

Und was man nicht vergessen darf:

Für die übliche "Funkuhr im Haushalt" ist in vielen Fällen eine absolute 
Genauigkeit (Uhrstand) von etwa 1 s mehr als ausreichend. Wichtiger ist, 
dass diese Abweichung über die Zeit (Uhrgang) gleich bleibt.

Und das sollte bereits mit einem einfachen Empfänger, fester Abtastung 
und einer einfachen Filterung gut zu erreichen sein.

Grüße

Stefan

von Marek N. (Gast)


Lesenswert?

Danke, dann kan ich ja wieder beruhigt schlafen ;-)

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.