Ich habe in einem Schulprojekt die Aufgabe die 59. Sekundenmarke zuerkennen. Dabei habe ich folgende Vorgaben: ENTITY dcf77SekundenMarke IS PORT( clk1khz: IN std_logic; --Abtasttakt resn: IN std_logic; --Reset, aktiv low new_data: IN std_logic; --neue Daten sind vorhanden dcf77cod_filteres: IN std_logic; --gefiltertes Empfangssignal sekunde0: OUT std_logic; --0te Sekundenmarke ); Nun bräuchte ich eure Hilfe: Ich bin von einem Zähler ausgegangen, der bei Zählerstand >900 das fehlen der der 59.Sekundenmarke registriert. Nun meinte der Prof zu meinem Vorschlag, dass es doch etwas komplizierter sei, die 0te Sekundenmarke zu setzen. Vielen Dank für Eure Mühe :-)
Hallo Klaus, das Prinzip geht so schon, jedoch kann man nicht einfach sagen, dass ein Impuls > 900ms eine Minutenmarke ist. Ich habs bei meiner Funkuhr(mit einem AVR) so gemacht: Ich messe die Zeit des Impulses und vergleiche ob er größer als 990 ms ist. Wenn er das ist, wird geprüft, ob der Sekundenzähler auf 59 liegt. Wenn das der Fall ist, wird gewartet, bis der Impuls zu Ende ist. Dort wird geprüft, ob der Impuls kürzer als 1010ms war. Wenn all dies zutrifft, dann ist es eine Minutenmarke. D.h. ich hab eine Toleranz von 20 ms und es wird geprüft, ob gerade Sekunde 59 ist. Wenn man das weglässt und ein Störimpuls, der um die 1000 ms dauert, auftritt, kann es sein, dass auch dieser als Minutenmarke gewertet wird. Deshalb ist die Marke nur gültig, wenn sie in Sekunde 59 auftrat. Ich kann leider keinen Code posten....ich hätte ja gern mal schnell einen geschrieben, aber ich hab grad kein Synthesetool da...und außerdem (da Du von einem Professor sprichst gehe ich davon aus, dass Du Student bist) könntest Du Dir das auch mal selbst überlegen. Ich mein...so schwer ist das auch nicht. Die Funktionsweise hab ich ja schon verraten...Jetzt probierst Du mal das in VHDL umzusetzen. Wenns gar nicht klappt bekommst Du vielleicht meinen Code(den ich auch erst schreiben müsste). Mal sehen, was ihr Studenten so drauf habt ;) Bit&Byte-Bruch Daniel
Hi Daniel, vielen dank für deine Gedanken. Die Programmierung dürfte ich selbst hinbekommen, ist ja nicht so, dass ich das von jemand anderem erledigt haben möchte. Mir geht es nur um meinen grundsätzlichen Ansatz. Grüße Klaus
Dann lass mal Dein Ergebnis sehen, wenn Du fertig bist :) Dann haben Andere eventuell auch was davon. Daniel
Beim Einschalten, also beim ersten mal einsynchronisieren hast, hast Du noch keine Information über die 59. sekunde. Außerdem gibt es da noch die Sache mit der Schaltsekunde (sehr selten!), bei der die Lücke an der 60. Sekunde auftritt. Grüße Klaus
Die Schaltsekunde wird aber im gesendeten Protokoll mit angekündigt, man kann sich also drauf vorbereiten.
OK, beim Einschalten ist das anders. Bei mir wird dann eben der nächstbeste 1000ms Impuls als Min-mark genommen. Danach wird ein Flag gesetzt, welches die Überprüfung auf Sekunde 59 steuert. Die Schaltsekunde ist auch ein gutes Beispiel für einen "Fehlimpuls". Meine Variante wirft das Datenpaket weg und läuft intern weiter. Wo bleibt der Code? ;) Daniel
Hab das nun letztendlich folgendermassen realisiert: Das Eingangssignal (dcf77cod_filteres) ist negiert. Sprich die Pulse von 100ms und 200ms führen bei uns HI Pegel, sonst LOW Pegel. Ich habe einen Zähler der bei einem Zählerstand >999 seinen Ausgang auf HI setzt. Zurückgesetzt wird der Zähler entweder mit einem HI Puls (dcf77cod_filteres) oder einem Resetknopf (resn, für das gesamte System). Gezählt werden die positven Flanken des clk1kHZ Signals. Der Pegel des Zählerausgangs wird in einem Flipflop zwischengespeichert. Das Ausgangsignal des Flipflops und das Eingangssignal (dcf77cod_filteres) werden einem UND Gatter zugeführt. Am Ausgang des Gatters entsteht nun eine Puls von 1ms der den genauen Zeitpunkt der 0ten Minutmarke wiederspiegelt. Den Code füge ich bei Gelegenheit ein. Momentan leider keine Zeit. Ist aber gar nicht so wild. Grüße
Hallo, hier hat schon mal jemand sowas gemacht: http://www.i-tip.de/projectDCF/dcfDoku.html Vielleicht für den ein oder anderen interessant. Gruß Didi
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.