Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 39

Thema: DCF77 mit Pollin DCF1 Modul

  1. #21
    Kabelträger
    Registriert seit
    08.12.2016
    Beiträge
    26
    Hallo!

    Zitat Zitat von hasta Beitrag anzeigen
    also ich habe mehrere Module von Pollin im Einsatz. Ohne jegliche Zusatzbeschaltung direkt am Eingang eines Atmega8 hängen. Nur die Betriebsspannung habe ich über eine Z-Diode auf 3,3 V reduziert.
    Hab ich auch zuerst überlegt:
    Wenn der PullUp im ATmega abgeschaltet ist, verhält sich der Eingang hochomig.
    Da müsste also ein schwaches Signal von 3,xV locker und zuverlässig als High erkannt werden.

    Allerdings habe ich dann einfach zu den BS108 gegriffen. Ich mag keine hochohmigen Signale, erst recht nicht im Experimentierumfeld wo ich mit Steckbrücken zwischen µC-Experimentierboard und Steckboard arbeite.
    Da hab ich lieber gleich "mehr Wumms" dahinter, bevor ich da hochomige Störempfangsantennen zwischen schalte.

    Und die 3,3V Versorgung mittels Zehner hätte ich auch etwas Bauchschmerzen.
    Eine winzige Platine mit Ferritantenne, deren Zweck es ist bei 70-80kHz mit hoher Empfindlichkeit Signale zu empfangen, will logischer weise kein Rauschen im Umfeld haben, erst recht nicht auf Vcc.


    Zitat Zitat von hasta Beitrag anzeigen
    Alle Module laufen ohne Probleme und sind stabil. Allerdings dauert es ca. 3 Minuten bis die Synchronisation erfolgt ist und das erste Mal eine Aktuelle Zeit/Datum angezeigt wird. Ich habe die Routine aus Bascom genommen ohne gesonderte Lib.
    Das mit der 3 minütigen Synchronisationsdauer ist normal bei DCF77. DCF77 nutzt eben ein Übertragungssystem welches mit einer Übertragungsgeschwindigkeit mit knapp unter 1Bit je Sekunde läuft. Das dauert eben bis man da einen kompletten Zeitstempel empfangen hat.

    Sinn von DCF77 war ja auch nie die sekundengenaue und permanente Echtzeitübertragung ganz ohne RTC im Hintergrund.
    So wie du es verwendest war es von Anfang an solcher Zeitzeichensender auch gedacht: Die gelegentliche synchronisation einer RTC.

    Grüße

    Jürgen Hüser

  2. #22
    Spaghetti-Coder Avatar von Basti
    Registriert seit
    10.11.2016
    Beiträge
    109
    Hallo Jürgen,
    hier mal der Mitschnitt deines Programms bei mir:
    Test DCF77 Version 1.02
    Configuration
    Code:
    00:00:00 00.00.00 00:00:00 00.00.00 00000000 00000000 00000000 Timezone : 0 0 0
    00:00:01 00.00.00 00:00:01 00.00.00 00000000 00000001 10000000 Timezone : 0 8 37
    00:00:02 00.00.00 00:00:02 00.00.00 00000000 00000001 01000000 Timezone : 0 4 32
    00:00:03 00.00.00 00:00:03 00.00.00 00000000 00000000 10100000 Timezone : 0 8 36
    00:00:04 00.00.00 00:00:04 00.00.00 00000000 00000001 11010000 Timezone : 0 8 32
    00:00:05 00.00.00 00:00:05 00.00.00 00000000 00000000 11101000 Timezone : 0 8 32
    00:00:06 00.00.00 00:00:06 00.00.00 00000000 00000000 01110100 Timezone : 0 4 32
    00:00:07 00.00.00 00:00:07 00.00.00 00000000 00000000 00111010 Timezone : 0 4 36
    00:00:08 00.00.00 00:00:08 00.00.00 00000000 00000000 00011101 Timezone : 0 4 36
    00:00:09 00.00.00 00:00:09 00.00.00 00000000 00000000 00001110 Timezone : 0 4 36
    00:00:10 00.00.00 00:00:10 00.00.00 00000000 00000001 10000111 Timezone : 0 8 36
    00:00:11 00.00.00 00:00:11 00.00.00 00000000 00000000 11000011 Timezone : 0 8 32
    00:00:12 00.00.00 00:00:12 00.00.00 00000000 00000001 11100001 Timezone : 0 8 32
    00:00:13 00.00.00 00:00:13 00.00.00 00000000 00000001 01110000 Timezone : 0 4 32
    00:00:14 00.00.00 00:00:14 00.00.00 00000000 00000001 00111000 Timezone : 0 4 36
    00:00:15 00.00.00 00:00:15 00.00.00 00000000 00000001 00011100 Timezone : 0 4 36
    00:00:16 00.00.00 00:00:16 00.00.00 00000000 00000001 00001110 Timezone : 0 4 36
    00:00:17 00.00.00 00:00:17 00.00.00 00000000 00000000 10000111 Timezone : 0 8 36
    00:00:18 00.00.00 00:00:18 00.00.00 00000000 00000001 11000011 Timezone : 0 8 32
    00:00:19 00.00.00 00:00:19 00.00.00 00000000 00000000 11100001 Timezone : 0 8 32
    00:00:20 00.00.00 00:00:20 00.00.00 00000000 10000000 01110000 Timezone : 3 4 32
    00:00:21 00.00.00 00:00:21 00.00.00 00000000 10000001 10111000 Timezone : 3 8 36
    00:00:22 00.00.00 00:00:22 00.00.00 00000000 10000001 01011100 Timezone : 3 4 32
    00:00:23 00.00.00 00:00:23 00.00.00 00000000 10000001 00101110 Timezone : 3 4 36
    00:00:24 00.00.00 00:00:24 00.00.00 00000000 10000001 00010111 Timezone : 3 4 36
    00:00:25 00.00.00 00:00:25 00.00.00 00000000 10000001 00001011 Timezone : 3 4 36
    00:00:26 00.00.00 00:00:25 00.00.00 00000000 10000001 00001011 Timezone : 3 4 36
    00:00:27 00.00.00 00:00:00 00.00.00 00000000 10000001 00000101 Timezone : 3 4 76
    00:00:28 00.00.00 00:00:01 00.00.00 00000000 10000001 00000010 Timezone : 3 4 36
    00:00:29 00.00.00 00:00:02 00.00.00 00000000 10000001 00000001 Timezone : 3 4 36
    00:00:30 00.00.00 00:00:03 00.00.00 00000000 10000000 10000000 Timezone : 3 8 36
    00:00:31 00.00.00 00:00:04 00.00.00 00000000 10000001 11000000 Timezone : 3 8 32
    00:00:32 00.00.00 00:00:05 00.00.00 00000000 10000001 01100000 Timezone : 3 4 32
    00:00:33 00.00.00 00:00:06 00.00.00 00000000 10000001 00110000 Timezone : 3 4 36
    00:00:34 00.00.00 00:00:07 00.00.00 00000000 10000000 10011000 Timezone : 3 8 36
    00:00:35 00.00.00 00:00:08 00.00.00 00000000 10000000 01001100 Timezone : 3 4 32
    00:00:36 00.00.00 00:00:09 00.00.00 00000000 10000001 10100110 Timezone : 3 8 36
    00:00:37 00.00.00 00:00:10 00.00.00 00000000 10000000 11010011 Timezone : 3 8 32
    00:00:38 00.00.00 00:00:11 00.00.00 00000000 10000001 11101001 Timezone : 3 8 32
    00:00:39 00.00.00 00:00:12 00.00.00 00000000 10000000 11110100 Timezone : 3 8 32
    00:00:40 00.00.00 00:00:13 00.00.00 00000000 10000001 11111010 Timezone : 3 8 32
    00:00:41 00.00.00 00:00:14 00.00.00 00000000 10000001 01111101 Timezone : 3 4 32
    00:00:42 00.00.00 00:00:15 00.00.00 00000000 10000001 00111110 Timezone : 3 4 36
    00:00:43 00.00.00 00:00:16 00.00.00 00000000 10000001 00011111 Timezone : 3 4 36
    00:00:44 00.00.00 00:00:17 00.00.00 00000000 10000001 00001111 Timezone : 3 4 36
    00:00:45 00.00.00 00:00:18 00.00.00 00000000 10000000 10000111 Timezone : 3 8 36
    00:00:46 00.00.00 00:00:19 00.00.00 00000000 10000000 01000011 Timezone : 3 4 32
    00:00:47 00.00.00 00:00:20 00.00.00 00000000 00000000 10100001 Timezone : 1 8 36
    00:00:48 00.00.00 00:00:21 00.00.00 00000000 00000001 11010000 Timezone : 1 8 32
    00:00:49 00.00.00 00:00:22 00.00.00 00000000 00000001 01101000 Timezone : 1 4 32
    00:00:50 00.00.00 00:00:23 00.00.00 00000000 00000001 00110100 Timezone : 1 4 36
    00:00:51 00.00.00 00:00:24 00.00.00 00000000 00000001 00011010 Timezone : 1 4 36
    00:00:52 00.00.00 00:00:25 00.00.00 00000000 00000000 10001101 Timezone : 1 8 36
    00:00:53 00.00.00 00:00:26 00.00.00 00000000 00000001 11000110 Timezone : 1 8 32
    00:00:54 00.00.00 00:00:27 00.00.00 00000000 00000001 01100011 Timezone : 1 4 32
    00:00:55 00.00.00 00:31:28 00.00.00 00000000 00000000 00011111 Timezone : 1 8 36
    00:00:56 00.00.00 00:31:29 00.00.00 00000000 00000001 10001111 Timezone : 1 8 32
    00:00:57 00.00.00 00:31:30 00.00.00 00000000 00000001 01000111 Timezone : 1 4 32
    00:00:58 00.00.00 00:31:31 00.00.00 00000000 00000001 00100011 Timezone : 1 5 35
    00:00:59 00.00.00 00:31:32 00.00.00 00000000 00000001 00010001 Timezone : 1 4 36
    00:01:00 00.00.00 00:31:33 00.00.00 00000000 00000001 00001000 Timezone : 1 5 35
    00:01:01 00.00.00 00:31:34 00.00.00 00000000 00000000 10000100 Timezone : 1 8 36
    00:01:02 00.00.00 21:31:35 00.00.00 00000000 00000000 00010101 Timezone : 1 5 31
    00:01:03 00.00.00 21:31:36 00.00.00 00000000 00000001 10001010 Timezone : 1 9 35
    00:01:04 00.00.00 21:31:37 00.00.00 00000000 00000000 11000101 Timezone : 1 8 32
    00:01:05 00.00.00 21:31:38 00.00.00 00000000 00000001 11100010 Timezone : 1 9 31
    00:01:06 00.00.00 21:31:39 00.00.00 00000000 00000001 01110001 Timezone : 1 4 32
    00:01:07 00.00.00 21:31:40 00.00.00 00000000 00000001 00111000 Timezone : 1 3 36
    00:01:08 00.00.00 21:31:41 07.00.00 00000000 00000001 00000111 Timezone : 1 4 36
    00:01:09 00.00.00 21:31:42 07.00.00 00000000 00000001 00000011 Timezone : 1 5 36
    00:01:10 00.00.00 21:31:43 07.00.00 00000000 00000000 10000001 Timezone : 1 8 36
    00:01:11 00.00.00 21:31:44 07.00.00 00000001 00000001 00000110 Timezone : 1 9 31
    00:01:12 00.00.00 21:31:45 07.00.00 00000000 00000000 10000011 Timezone : 1 8 32
    00:01:13 00.00.00 21:31:46 07.00.00 00000000 00000000 01000001 Timezone : 1 5 31
    00:01:14 00.00.00 21:31:47 07.00.00 00000000 00000000 00100000 Timezone : 1 3 36
    00:01:15 00.00.00 21:31:48 07.00.00 00000000 00000000 00010000 Timezone : 1 5 36
    00:01:16 00.00.00 21:31:49 07.01.00 00000000 00000000 00000001 Timezone : 1 5 35
    00:01:17 00.00.00 21:31:50 07.01.00 00000000 00000001 10000000 Timezone : 1 9 35
    00:01:18 00.00.00 21:31:51 07.01.00 00000000 00000000 11000000 Timezone : 1 9 31
    00:01:19 00.00.00 21:31:52 07.01.00 00000000 00000001 11100000 Timezone : 1 9 31
    00:01:20 00.00.00 21:31:53 07.01.00 00000000 00000001 01110000 Timezone : 1 5 31
    00:01:21 00.00.00 21:31:54 07.01.00 00000000 00000000 10111000 Timezone : 1 8 35
    00:01:22 00.00.00 21:31:55 07.01.00 00000000 00000000 01011100 Timezone : 1 5 32
    00:01:23 00.00.00 21:31:56 07.01.00 00000000 00000000 00101110 Timezone : 1 4 35
    00:01:24 00.00.00 21:31:57 07.01.17 00000000 00000000 00010001 Timezone : 1 4 36
    00:01:25 00.00.00 21:31:58 07.01.17 00000000 00000000 01001111 Timezone : 1 5 36
    00:01:26 00.00.00 21:31:58 07.01.17 00000000 00000000 01001111 Timezone : 1 5 36
    00:01:27 00.00.00 21:31:00 07.01.17 00000000 00000000 00100111 Timezone : 1 5 75
    00:01:28 00.00.00 21:31:01 07.01.17 00000000 00000001 10010011 Timezone : 1 8 35
    00:01:29 00.00.00 21:31:02 07.01.17 00000001 00000001 11001001 Timezone : 1 9 32
    00:01:30 00.00.00 21:31:03 07.01.17 00000000 00000000 01100100 Timezone : 1 4 31
    00:01:31 00.00.00 21:31:04 07.01.17 00000000 00000001 10110010 Timezone : 1 9 36
    Bei mir arbeitet ein M1284P mit 18,432MHz, entsprechend kommen recht kleine Wert für die Pulslängen.
    Anfangs hatte ich übrigens Inverted=1 gelassen, wie bei dir.
    Dann kamen auch die seltsamen Zeiten mit 45:85 ..., wahrscheinlich weil er dann alles als 1 interpretiert.
    Das ist in deinem Mitschnitt übrigens auch recht oft zu sehen (der letzte Binär-Block zeigt die letzten 8 empfangenen Bits).

  3. #23
    Kabelträger
    Registriert seit
    08.12.2016
    Beiträge
    26
    Hallo Basti!

    Wahnsinn...aufgrund deines Erfolges hab ich mich dann gestern Abend nochmal rangesetzt.


    Zitat Zitat von Basti Beitrag anzeigen
    Bei mir arbeitet ein M1284P mit 18,432MHz, entsprechend kommen recht kleine Wert für die Pulslängen.
    Aber es funktioniert...irgendwo ran muss es ja liegen.
    Und da war es auch schon...je nach dem wann ich den Prozessor resettete, wie ein Zufallsgenerator, kamen sehr unterschiedliche Impuls- und Pausenzeiten raus.
    Da ich dann gestern Abend nur noch das Rauschen auf den Impulsen bemängelte, hab ich versucht diese irgendwie behelfsmässig zu glätten.
    Nach dem ersten N-FET dessen Gate direkt am DATA-Pin des DCF1 hängt, habe ich den Pull-Up am Drain verkleinert von 100k auf 4k7 und zusätzlich einen Elko zwischen Drain und GND geschaltet.
    Bei 10µV wurde die Flanke am Impulsende heftig verbogen, aber das Programm hatte erstmals sinvolle Decodierergebnisse.
    Also zuviel Glättung...verschiedene Kapazitäten rumprobiert und bei 2,2µF sah das Signal optimal aus.

    Vorher:
    Impulse bestanden aus einer dichten Folge schmaler Spikes...könnte wetten das dass rauschen war.
    Nun endlich ein secht sauberes Rechteck.


    Zitat Zitat von Basti Beitrag anzeigen
    Anfangs hatte ich übrigens Inverted=1 gelassen, wie bei dir.
    Dann kamen auch die seltsamen Zeiten mit 45:85 ..., wahrscheinlich weil er dann alles als 1 interpretiert.
    Das ist in deinem Mitschnitt übrigens auch recht oft zu sehen (der letzte Binär-Block zeigt die letzten 8 empfangenen Bits).
    Hab an der Inverted auch noch mal rumgetestet, aber Inverted=1 ist tatsächlich richtig bei mir, da ein High am DATA-Pin des DCF1 bei mir ein N-FET ansteuert welcher einen Pullup auf Masse tastet.

    Was soll ich sagen...offenbar hab ich hier ein DCF1 bekommen welches wohl ein Montagsmodell war, ohne Signalglättung mittels RC ging da nix.
    Seit gestern ~22Uhr läuft es nun wie gewünscht...allerdings:

    32kHz-Quarz direkt an die hochgebogenen TOSC-Pins gelötet statt irgendwo auf dem Experimentierbord, so wie es Atmel in einer Applicatons Note zum testen von Uhrenquarzen vorschlägt.
    Gestern um 22Uhr dann RTC erstmals synchronisieren lassen mit dem DCF1.
    Auf dem 2x16 Display wird angezeigt:

    "RTC: 22:02:00"
    "DCF: 22:02:00"

    Danach manuell den DCF abgeschaltet.

    Zweck des ganzen soll sein verschiedene Uhrenquarze über längere Zeit zu testen.
    Heute Mittag dann als ich in den Raum kam die Ernüchterung:

    RTC meinte es währe 11:48:52 obwohl es bereits 12:23:xx war.
    Also die selbe Ernüchterung wie ich bisher schon immer hatte, wenn ich versuchte mit 32kHz-Quarz eine RTC zu emulieren.
    Entweder viel zu schnell oder zu langsam, aber immer in einem Fehlerausmaß das eine sinnvolle als Uhr, Schaltuhr o.ä. unmöglich waren.

    Und da kam mir noch eine Idee....
    parasitätre Kapazitäten zwischen Uhrenquarz und TOSC-Pins können es ja nicht mehr sein.
    Also läuft der Timer2 tatsächlich asynchron?

    Bisher dachte ich anhand der Aussagen des Bascom-Manuals, das...:

    Config Clock = Soft
    selbstverständlich den Timer2 als asynchronen Timer für ein 32kHz-Quarz konfiguriert.
    Eben aufgrund der Aussage:

    Use SOFT for using the software based clock routines.
    You need to add an ENABLE INTERRUPTS statement to your code since the
    SOFT mode uses the timer in interrupt mode. The timer interrupt is
    enabled automatic but the global interrupt you need to enable yourself.
    While the compiler could enable the global interrupt automatic, you would
    not have control anymore when it is enabled when using multiple
    interrupts.
    In general you enable global interrupts after all interrupts are setup.
    For the SOFT mode you need to connect a special low frequency crystal
    with a value of 32768 Hz to the ASYNC TIMER oscillator pins.

    Use USER to write/use your own code in combination with an I2C clock
    chip for example.
    Da man "Config Clock = Soft" nicht zusammen mit "Config DCF77" kombinieren kann nahm ich an, das Config DCF77 selbiges tut wie Config Clock.
    Nämlich den Timer2 auf asynchronen Betrieb an einem 32kHz-Quarz konfigurieren.

    Weit gefehlt:
    Gerade eben nochmal mein Programm etwas ergänzt.
    ASSR-Register auslesen und den Wert von ASSR.3 auf's Display geschickt.

    Trotz Config DCF77 war ASSR.3 = 0, wurde also von der Mainclock (je nach Bord bei mir also 8MHz oder 16MHz) angesteuert!
    Seit etwa 14Uhr läuft nun erstmals die 32kHz-Uhr nachdem ich zwangsweise "ASSR.3 = 1" gesetzt habe.

    Ehrlich gesagt...warum zum Geier steht davon nix im Bascom-Manual?
    Da wundert es mich nun überhaupt nicht mehr das meine Erfahrungen seit Jahren mit RTC's an Atmels derart ernüchternd verlaufen sind.

    Grüße

    Jürgen

  4. #24
    Spaghetti-Coder Avatar von Basti
    Registriert seit
    10.11.2016
    Beiträge
    109
    Hallo Jürgen,
    gut, dass die Geschichte jetzt bei dir läuft.
    Du scheinst dich in den Elektronik Sachen wesentlich besser auszukennen als ich. Solche Änderungen an den Modulen würde ich mir nicht zutrauen.
    Ganz im Gegenteil, ich verwende bei mir die billigen Module, die in den Aldi Weckern eingebaut sind, die Ende letzten Jahres verkauft wurden.
    Ist zwar nur eine Mignon drin, aber die Module sind 3.3V fest und so betreibe ich die auch.

    Meine Vorstellung für meine Heizungsüberwachung ist den Timer2 asynchron laufen zu lassen und die Zeit zu setzen.
    Meine eigene DCF Routine ist dann nur dazu da, bei Empfang eines gültigen Zeit-Telegramms die Uhrzeit und das Datum zu setzen.
    Ansonsten macht alles die Config Clock=Soft Routine.

    Und ja, ich habe auch schon gemerkt, dass vieles im Manual nicht so erklärt ist, dass ich es verstehe.
    Oder das Befehle beschrieben werden, aber die wirklich interessanten Sachen nicht aufgeführt sind.
    Im alten Forum hatte es ein Wiki gegeben, wo genau dazu dann Erweiterungen geschrieben wurden.
    Mal schauen, ob wir so etwas nicht wieder hinbekommen.

    Ich hoffe, du bleibst dabei und lässt dich durch diese "kleinen" Probleme nicht von dem ganzen Hobby abhalten.
    Zumindest bei mir ist es Hobby, allerdings kann ich mich auch in so eine Sache verbeißen, bis es denn irgendwann einmal funktioniert.

    Viele Grüße Basti

  5. #25
    Kabelträger
    Registriert seit
    08.12.2016
    Beiträge
    26
    Hi Basti!

    Zitat Zitat von Basti Beitrag anzeigen
    Hallo Jürgen,
    gut, dass die Geschichte jetzt bei dir läuft.
    Oh ja, trotzdem ernüchternd.
    Seit heute Mittag läuft Timer2 nach manuellen setzen des ASSR.3 auch tatsächlich asynchrom vom Hauptquarz direkt am 32kHz-Quarz.
    Es ist noch der erste in der Versuchreihe die ich vorhabe, aber offenbar einer mit falscher Bürdekapazität oder falschem Resonanzwiderstandes.
    Denn innerhalb der letzten 5 Stunden und 27 Minuten nach DCF77-Synchronität geht die RTC bereits um 8 Minuten und 56s nach.

    Zitat Zitat von Basti Beitrag anzeigen
    Du scheinst dich in den Elektronik Sachen wesentlich besser auszukennen als ich. Solche Änderungen an den Modulen würde ich mir nicht zutrauen.
    Liegt an meinem Job: Fehlersuche und Reparatur von Betriebsfunkgeräten von Baujahr 1957 bis heute.
    Da braucht es hinreichend Erfahrung in digital+analog Schaltungstechnik, inkl. dem Austausch von Bauteilen im "Sandkorngehäuse".
    Was bei mir bisher zu kurz kam war das programmieren von µC. Für Bascom habe ich mich vorrangig entschieden, weil ich da genügend Vorkentnisse noch aus meiner Jugend im Umgang mit GWbasic unter MS-DOS hatte, die mir den Einstieg in bascom erleichtern.

    Zitat Zitat von Basti Beitrag anzeigen
    Meine Vorstellung für meine Heizungsüberwachung ist den Timer2 asynchron laufen zu lassen und die Zeit zu setzen.
    Meine eigene DCF Routine ist dann nur dazu da, bei Empfang eines gültigen Zeit-Telegramms die Uhrzeit und das Datum zu setzen.
    Ansonsten macht alles die Config Clock=Soft Routine.
    Über sowas hatte ich die Tage auch mal nachgedacht.
    Strang genommen weniger für den Timer1 wie Config Clock = Soft oder Config DCF77, sondern über Timer0 oder Timer2.
    Schließlich ist das DCF-Signal ja schnarchlangsam. Würde man mit 50ms sampeln, müsste einein 8bit-Timer für fast 13s reichen.
    Aber das habe ich erst mal in meine Schublade gelegt...irgendwann mal.

    Zitat Zitat von Basti Beitrag anzeigen
    Und ja, ich habe auch schon gemerkt, dass vieles im Manual nicht so erklärt ist, dass ich es verstehe.
    Oder das Befehle beschrieben werden, aber die wirklich interessanten Sachen nicht aufgeführt sind.
    Im alten Forum hatte es ein Wiki gegeben, wo genau dazu dann Erweiterungen geschrieben wurden.
    Mal schauen, ob wir so etwas nicht wieder hinbekommen.
    Ja, das alte Forum war auch noch nicht wirklich komplett, aber auf dem besten Weg dazu.
    Schade das die Daten zum Großteil weg sind.

    Zitat Zitat von Basti Beitrag anzeigen
    Ich hoffe, du bleibst dabei und lässt dich durch diese "kleinen" Probleme nicht von dem ganzen Hobby abhalten.
    Zumindest bei mir ist es Hobby, allerdings kann ich mich auch in so eine Sache verbeißen, bis es denn irgendwann einmal funktioniert.
    Bei mir ist es ebenso Hobby, oder je nach Projekt halbkommerziell:
    Verkaufen will ich keine Sachen die ich mit Atmels und Bascom geschraubt habe.
    Aber neben den reinen Hobbyprojekten waren auch schon einige Mischprojekte welche mir als Meß- oder Testgeräte in meinem Beruf dienen.

    Grüße

    Jürgen

  6. #26
    Spaghetti-Coder Avatar von Basti
    Registriert seit
    10.11.2016
    Beiträge
    109
    Zitat Zitat von DG7GJ Beitrag anzeigen
    Denn innerhalb der letzten 5 Stunden und 27 Minuten nach DCF77-Synchronität geht die RTC bereits um 8 Minuten und 56s nach.
    Die Abweichung scheint mir auch etwas groß

    Zitat Zitat von DG7GJ Beitrag anzeigen
    Was bei mir bisher zu kurz kam war das programmieren von µC.
    Ohne übertreiben zu wollen, kenne ich mich da recht gut aus, jedenfalls wesentlich besser als mit Schwingkreisen, FETs und so 'nem Kram.

    Zitat Zitat von DG7GJ Beitrag anzeigen
    Über sowas hatte ich die Tage auch mal nachgedacht.
    Strang genommen weniger für den Timer1 wie Config Clock = Soft oder Config DCF77, sondern über Timer0 oder Timer2.
    Ich meinte auch nicht über den Timer1 sondern den Timer2. Der kann den 32KHz Quarz verwenden, um eine recht genaue Zeitbasis zu bekommen. Die wird dann benutzt, wenn das DCF Signal nicht verfügbar ist.
    Wenn du den Timer2 nicht verwendest, dann wundert mich die große Abweichung auch nicht. Nur durch das Setzen der Bits im ASSR funktioniert das nicht.

    Zitat Zitat von DG7GJ Beitrag anzeigen
    Schließlich ist das DCF-Signal ja schnarchlangsam. Würde man mit 50ms sampeln, müsste einein 8bit-Timer für fast 13s reichen.
    Deswegen taste ich das DCF Signal mit einem anderen Timer ab, der mit etwa 70Hz überläuft und dabei den Eingang pollt. Also praktisch ohne zusätzlichen Aufwand, der kommt erst bei der Auswertung.

    Viele Grüße Basti

  7. #27
    Kabelträger
    Registriert seit
    08.12.2016
    Beiträge
    26
    Hi Basti!

    Zitat Zitat von Basti Beitrag anzeigen
    Die Abweichung scheint mir auch etwas groß
    Oh ja...wundert mich aber kein bisschen bei diesen lausigen Angaben von Atmel.
    Ganz generell gilt bei Quarzen das sie ihre Nennfrequenz und Amplitude nur erreichen, wenn alle Parameter des Quarzes möglichst exakt auf die Oszillatorschaltung abgestimmt ist. Diese Parameter bestehen nicht nur aus Nennfrequenz und Bürdekapazität, sondern darüber hinaus noch aus mindestens drei weiteren Blindanteilen zuzüglich dem reellen Resonanzwiderstand (ESR).
    Passen diese Werte nicht zur Oszillatorschaltung, dann ist es völlig normal das ein 32,768kHz eben nicht auf 32,768, sondern irgendwo zwischen 32,750 und 32,800kHz rumwabert.

    Zitat Zitat von Basti Beitrag anzeigen
    Ich meinte auch nicht über den Timer1 sondern den Timer2. Der kann den 32KHz Quarz verwenden, um eine recht genaue Zeitbasis zu bekommen. Die wird dann benutzt, wenn das DCF Signal nicht verfügbar ist.
    Wenn du den Timer2 nicht verwendest, dann wundert mich die große Abweichung auch nicht. Nur durch das Setzen der Bits im ASSR funktioniert das nicht.
    Da schreiben wir gerade aneinander vorbei.
    Mein RTC-Experiment arbeitet freilich mit dem 32kHz-Quarz an den TOSC-Pins von Timer 2.

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	DSCF37271.jpg 
Hits:	10 
Größe:	438,3 KB 
ID:	381

    Diese brachale Montage des Quarzes an den hochgebogenen TOSC-Pins soll parasitäte Blindlasten durch die Leiterbahnführungen vermeiden und entspricht einem Vorschlag aus der Application Note AVR4100 von Atmel:
    http://www.atmel.com/images/doc8333.pdf

    Das mit "Timer0 oder Timer2" was ich gestern schrieb war ein Gedanke dazu wie ich ohne die DCF77.LIB dekodieren könnte.
    Aktuell nicht wichtig, aber...:
    Sinnvoll könnte das mal sein um über längere Zeit mal die Bits 1-14 mit zu loggen.
    Zumal ich hier auch soeine DCF77 Wetterstation rumstehen habe womit ich die empfangenden Daten eventuell korreliern könnte.
    Denn es wundert mich das diese Wetterinformationen noch immer nicht vom Protokoll geknackt wurden.

    Zitat Zitat von Basti Beitrag anzeigen
    Deswegen taste ich das DCF Signal mit einem anderen Timer ab, der mit etwa 70Hz überläuft und dabei den Eingang pollt. Also praktisch ohne zusätzlichen Aufwand, der kommt erst bei der Auswertung.
    Ja, so in der Art dachte ich es mir auch.
    Aktuell geht es mir aber erstmal darum ein 32,768kHz Quarz experimentell zu finden der hinreichend genau an den ATmegas läuft.
    Als erstes geht es um ein Schaltuhrprojekt welches ansteht, aber an einem Montageplatz werkeln soll wo externe Teitbasis in Form von DCF77 oder GPS nicht funktionieren wird, aber gleichzeitig die RTC innerhalb eines Jahres maximal auf 2-10 Sekunden Abweichung kommt.

    Daneben liegt noch ein anderes Projekt in meiner Schublade. Funk-Sensormodule welche während der Initialisierung fixe Zeitschlitze bekommen sollen wo sie senden und empfangen sollen. Da sollte die Zeitabweichung aller Module sinniger weise bei Sekundenbruchteilen liegen.

    Grüße

    Jürgen

  8. #28
    Spaghetti-Coder Avatar von Basti
    Registriert seit
    10.11.2016
    Beiträge
    109
    Hallo Jürgen,
    du könntest auch mal darüber nachdenken, die 50Hz als Referenz zu nutzen.
    Die sind zwar kurzzeitig recht instabil (was du mit dem Uhrenquarz leicht feststellen kannst), Langzeit aber supergenau.
    Ich habe eine Uhr mehrere Jahre laufen gehabt und die ging nie mehr als 1 Minute falsch. Mal vor, mal zurück.
    Meinst du nicht, dass die Temperatur Schwankungen und die Alterung deinen Quarz immer in irgendeine Richtung wegziehen werden?

  9. #29
    Neuer Benutzer
    Registriert seit
    02.11.2016
    Beiträge
    54
    Hallo DG7GJ,

    verfolge mit Interesse diese Thema.
    Habe aber noch nicht verstanden warum du zusätzlich Config Clock = Soft und ein 32KHz Quarz verwendest.
    Komme ohne diese Soft- Hardware bestens zurecht.
    Macht doch alles die Bascom dcf77 lib von Josef Vögel und ist auch sehr gut beschrieben, finde ich.
    Kennst ja diese, wie ich lese, aber warum nicht nutzen und eventuell auf eigenem Projekt anpassen?

    Hatte es ja schon erwähnt, wurde die DCF77 Zeit einmal mit interner Zeit synchronisiert ist diese Zeit sehr genau(µC extTakt 16 MHz )
    Nochmals das A&O ist ein gutes DCF77 Modul für zuverlässigen Zeitsynchronisierung wenn mal nötig wie SZ/WZ.

    Gruß

  10. #30
    Kabelträger
    Registriert seit
    08.12.2016
    Beiträge
    26
    Hi Basti!

    Zitat Zitat von Basti Beitrag anzeigen
    Hallo Jürgen,
    du könntest auch mal darüber nachdenken, die 50Hz als Referenz zu nutzen.
    Die sind zwar kurzzeitig recht instabil (was du mit dem Uhrenquarz leicht feststellen kannst), Langzeit aber supergenau.
    Ich habe eine Uhr mehrere Jahre laufen gehabt und die ging nie mehr als 1 Minute falsch. Mal vor, mal zurück.
    Für die Sonderfälle wo Netzversorgung über eigenes Netzteil läuft, mag das eine Alternative sein.
    Allerdings geht es mir ganz generell nach einigen Jahren böser Erfahrungen mal das Thema RTC zu knacken.
    Quarz-Uhren zählen spätestens seit den 70'er jahren zu einem Standard recht hoher Genauigkeit. Sprich...+-20Sekunden/Jahr, durch wechselnde Temperaturschwankungen weitgehend gemittelt.
    Andere µC schaffen das ja auch, egal ob normale Quarzuhren an der Wand, Pager, Funkgeräte, und vieles mehr, alles nur mit einem zum jeweiligen µC passend spezifizierten 32,768kHz Uhrenquarz an einem asynchronen Timer. Vorteiler auf 128, dahinter einer durch 256, fertig ist die Sekunde.

    Zitat Zitat von Basti Beitrag anzeigen
    Meinst du nicht, dass die Temperatur Schwankungen und die Alterung deinen Quarz immer in irgendeine Richtung wegziehen werden?
    Oh ja, ganz bestimmt sogar, aber doch bitte innerhalb der spezifizierten Tolleranz!
    Die Spezifizierte Tolleranz je nach Quarz also +- 20ppm, 10ppm...5ppm über einen Temperaturbereich zwischen meißt 0-40°C.

    Gut, meine Tabelle lohnt noch nicht zur Umrechnung in Abweichungen ausgerechnet in ppm.
    Habe da erst zwei Quarze drin, angefangen bei den ganz billigen und verfügbarsten:

    Reichelt TC38 (+-20ppm, 10pF, 35kOhm) lief vorgestern durch und kam auf eine Abweichung von -48,3895 Sekunden je Stunde.
    Gemittelt aus einem Gesamtfehler von 19,45 Minuten über eine Meßzeit von 24 Stunden, 18 Minuten und 10 Sekunden.

    Reichelt TC26 (+-20ppm, 12,5pF, 50kOhm) lief letzte Nacht durch und kam auf eine Abweichung von -86,0 Sekunden je Stunde.
    Gemittelt aus einem Gesamtfehler von 22,733 Minuten über eine Meßzeit von 15 Stunden, 51 Minuten und 00 Sekunden.

    Das sind dimensionen die, zumindest laut meinem Bauchgefühl, nicht mehr mit zweistelligen ppm erklärbar sind. Da scheint mehr im Busch zu sein.

    Was allerdings die Temperaturwirkung angeht:
    Die Temperatur am Quarz erfasse ich nicht, wäre aber auch kein Problem, nur der Sinn ist fraglich.
    Die RTC darf gerne nachgehen, weil der ganze Aufbau mit Pollin-Evaluationsbord, LCD, nebst Steckboard und DCF1 auf einer Fensterbank an nem Südfenster liegt. Aufgrund der Jahreszeit dürfte die Temperatur dort im Bereich zwischen 11-18°C liegen.
    Das der Quarz also einstellige ppm (vielleicht 6-9ppm) langsamer ist als bei optimalen 25°C wäre klar.
    Aber 48 bis 86 Sekunden zu wenig je Stunde, ist schon ein Hammer.

    Eben habe ich da mal einen Gedanken aufgegriffen, dessen Klärung mich noch mehr verunsicherte:
    Bislang war ich ja davon ausgegangen das der Befehl "Config Dcf77" die RTC komplett einrichtet.
    Vorgestern merkte ich dann durch eine per Tastendruck abfragbare Registerausgabe, das dass ASSR.3 Bit während der Laufzeit auf 0 stand.
    Ergo: Timer2 lief nicht asynchron am 32kHz-Quarz, sondern am 8MHz Taktquarz.
    Vorgestern also dann manuell ASSR.3 auf 1 gesetzt.

    Vorhin dachte ich...wenn ich schon das Register ASSR manuell setzen muss, wie ist das dann mit dem Vorteiler (die letzten niederwertigsten Bits von TCCR2) sowie dem Compare-Register von Timer2 (OCR2)?

    Meine Abfrage zum ASSR.3 also vorhin mal erweitert um die Register TCCR2 und OCR2 ab zu fragen.
    Was soll ich sagen...:
    TCCR2 = &B00000000
    OCR2 = &B00000000

    Was zum Geier....
    Wenn der 8Bit-Timer komplett mit Faktor 256 arbeitet, müsste der Vorteiler eigentlich Faktor 128 abarbeiten. Hinten also laut Datenblatt mit 101 enden.

    Also dann auch den TCCR2 manuell gesetzt.
    Interessanter Weise nutzt ein setzen vor der Config Dcf77 nix...bleibt dann auf 0.
    Erst wenn ich das Register nach Config Dcf77 einfüge, bleibt der Wert im Register.

    Um mal das Chaos im aktuellen Zustand zu zeigen...:

    Code:
    $regfile = "m16adef.dat"
    $crystal = 8000000
    $hwstack = 40
    $swstack = 40
    $framesize = 40
    $baud = 38400
    
    Config Porta = &B00000001                                   'PortA alle Pins auf Input, bis auf PinA0 Ausgang für DCF77
    'Pina.1 = 0
    'Ddra.1 = 0
    Config Portd = &B00000111                                   'PortD auf Input (Taster) und 0-3 Output (LED's und Summer)
    
    Dim Reg As Byte
    Assr.3 = 1                                                  'Zwangsweise aktivierung des asynchronen Timer2
    
    
    
    
    Config Lcdpin = Pin , Rs = Portc.1 , E = Portc.0 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
    Config Lcd = 16 * 2
    Config Com1 = 38400 , Parity = None , Stopbits = 1 , Databits = 8
    
    Wait 5
    
    
    
    'Config Clock = Soft , Gosub = Sectic
    'Config Dcf77 = Pina.0 , Timer = 1 , Debug = 1 , Inv = 0 , Check = 0 , Upd = 0 , Updtime = 30 , Swpwr = 1 , Pin = Pina.1 , Pwrlvl = 1 , Gosub = Sectic
    Config Dcf77 = Pina.1 , Timer = 1 , Inverted = 1 , Debug = 1 , Check = 2 , Gosub = Sectic
    
    
    Config Date = Dmy , Separator = .
    
    Tccr2 = &B00000101                                          'Vorteiler RTC auf 128 setzen
    Ocr2 = &B11111111                                           'Timer 2 auf 256 setzen
    
    
    Enable Interrupts
    
    
    Cls
    Cursor Off
    
    
    
    Dim Pret As Byte
    Dim Count As Byte
    
    
    Do
    
    If Pind.2 = 1 Then Gosub Testlcd , End If
    If Pind.3 = 1 Then Gosub Regout , End If                    ' Routine zum auslesen des Timer-Registers
    
    Loop
    
    
    Sectic:
    Gosub Ausgabe
    Return
    
    Ausgabe:
    Upperline
    Lcd "RTC: " ; Time$
    Lowerline
    Lcd "DCF: " ; Time(dcf_sec)
    Print Time$ ; " " ; Date$ ; " " ; Time(dcf_sec) ; " " ; Date(dcf_day) ; " " ; Bin(dcf_status) ; " " ; Bin(dcf_parity) ; " " ; Bin(dcf_bits) ; " Timezone : " ; Dcf77timezone() ; " " ; Bdcf_impuls ; " " ; Bdcf_pause
    Return
    
    Testlcd:
    Cls
    Lcd "LCD-Test!"
    Return
    
    Regout:
    'Da die Uhr extreme Fehler aufweist (viel zu langsam!) will ich testen welche Clock an den Timer2 hängt.
    'Diese Information liegt im AS2-Bit des Registers ASSR. Nur wenn dieses Bit High ist, läuft das 32kHz-Quarz!
    'Näheres im Datenblatt AT-Mega16 Seiten 130-133.
    
    
    Reg = Assr
    If Reg.3 = 1 Then Gosub Reg1 , End If
    If Reg.3 = 0 Then Gosub Reg0 , End If
    Pret = Tccr2
    Count = Ocr2
    Return
    
    Reg1:
    Cls
    Lowerline
    Lcd "RTC 32kHz"
    Print "RTC 32kHz Pret:" ; Bin(pret) ; " Count:" ; Bin(count) ; " ASSR:" ; Bin(reg)       'zusätzliche Ausgabe TCCR2 und OCR2
    Return
    
    Reg0:
    Cls
    Lowerline
    Lcd "RTC 8MHz"
    Print "RTC 8MHz Pret:" ; Bin(pret) ; " Count:" ; Bin(count) ; " ASSR:" ; Bin(reg)
    Return
    Das manuelle setzen von TCCR2 auf den richtigen Vorteilerwert von 128, sowie der Versuch OCR2 auf &H00 oder &HFF zu ändern hat aber unter dem Strich nix gebracht.
    Das letzte Quarz (TC26) um 14:47:01 synronisiert. Die RTC zeigt jetzt zur Realzeit 16:08:00Uhr den Wert 16:06:05 an.
    Also Meßzeit seit letzter Änderung (OCR2 auf &HFF gesetzt) exakt 1:19:04 und bereits etwa 2 Minuten Verzögerung.
    In Sekunden...
    Reale Laufzeit 4744 Sekunden.
    RTC zählte hingegen nur 4629 Sekunden. Also 115s zu wenig.

    Grüße

    Jürgen

Ähnliche Themen

  1. DCF77-Signalgenerator
    Von daja im Forum Bascom
    Antworten: 10
    Letzter Beitrag: 18.11.2016, 22:17
  2. Antworten: 0
    Letzter Beitrag: 05.11.2016, 12:18

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •