DCF77 und RTC mit ATmega unter BASCOM

:)

SUPER, Glückwunsch!
Viel Spass weiter damit!

Grüße,
Markus

:)
 
Hallo Markus, hallo zusammen.

Ein viel schönerer und "besserer" DCF77-Dekoder habe ich übers Wochenende in den unendlichen Weiten des Internets gefunden. Es ist eine externe Library für BASCOM. Diese Lib kann man parallel mit der Softclock von BASCOM nutzen, ohne das sich beide "beißen". Damit ist es möglich, die Genauigkeit eines Uhrenquarzes bei der Softclock zu nutzen und nur ab und zu mal mit dem DCF-Telegramm zu synchronisieren.

Die Lib hat noch 2 kleine Makel. Es kommt bei der Compilierung zu einem Fehler, den man aber vernachlässigen kann und außerdem ist die Wahl des DCF77-Eingangpins nicht ganz so trivial. Dazu muß man in der Lib ein wenig "herumfroschen". Wäre schön, wenn der Autor das noch ändern könnte.

Die Lib ist, was Störanfälligkeit und Empfangsbedingungen betrifft, erste Sahne. Schon innerhalb 2 Minuten habe in selbst bei widrigen Empfangsbedingungen ein gültiges DCF77-Telegramm erhalten. Da kann sich die BASCOM-Eigenen Routine mal eine Scheibe von abschneiden !

Die Lib und ein Programmbeispiel könnt ihr unter "Wolkensensor" in meinem Beitrag hier im Forum finden.

Thomas
 
Hallo Thomas,

danke für Deinen Beitrag zur DCF77-LIB. Hast Du in der Zwischenzeit mit dem Autor der Lib Kontakt aufgenommen so dass er Feedback bekommt und seine LIB konfigurierbar macht?

Weiter sollte er von dem Kompiler-Fehler erfahren. Vielleicht hat er ja genügend Antrieb und Ergeiz das Ding zum Rennen zu bekommen. Hast Du nicht Lust Deinen umgestellten Code hier ins Forum zu stellen so das man beide Lösungen zur Verfügung hat.

:cool:

Sicherlich gibt es viele Wege eine Umsetzung zu realisieren. Wer Lust und Zeit hat kann siche die spannende Aufgabe stellen, den DCF77 Decoder selbst zu bauen. Wäre auch mal ein schönes Projekt. Mit einem Eigenbau-Decoder könnte mann dann auch gleich versuchen, die im DCF77 vorhandenen aber verschlüsselten und teilweise auch noch nicht veröffentlichen Wettervorhersage-Informationen auszuwerten.
Ich für meinen Teil habe mich erstmal für den Weg über die laufzeitoptimerte BASCOM Bibliothek entscheiden.

Hierzu erreichte mich vor ein paar Tagen eine Email von Josef welche ich euch nicht vorenthalten möchte. Josef hat mich auf einen kleinen aber feinen Punkt bzgl. des Parameter TIMER1SEC hingewiesen den ich falsch in meinem Code kommentiert hatte. Den habe ich nun korrigiert und noch mit zusätzliche Infos hierzu aufgenommen. Mehr dazu könnt Ihr Euch im Code ansehen!

Weiter möchte ich Euch auch die folgenden Infos von Josef zum Thema weitergeben:

Dcf77_hour = Makebcd(_hour)
Dcf77_min = Makebcd(_min)
Dcf77_sec = Makebcd(_sec)

Locate 1 , 1
Lcd Bcd(dcf77_hour) ; ":" ; Bcd(dcf77_min) ; ":" ; Bcd(dcf77_sec)

Dcf77_day = Makebcd(_day)
Dcf77_month = Makebcd(_month)
Dcf77_year = Makebcd(_year)
Locate 2 , 1
Lcd Bcd(dcf77_day) ; "." ; Bcd(dcf77_month) ; "." ; Bcd(dcf77_year) ; " "


Hierfür stellt BASCOM-AVR die Variablen Time$ und Date$ zur Verfügung.
LCD TIME$ ; " " ; Date$
genügt.
Sofern die Variable TIME$ bzw DATE$ verwendet wird, konvertiert BASCOM-AVR im Hintergrund die Variablen _Sec ... _Year in die Strings TIME$ und DATE$ und gibt diese dann im PRINT bzw. LCD Statement aus.
Das Datumsformat lässt sich mit CONFIG DATE festlegen.

Danke Josef!

Grüße,
Markus
 

Anhänge

  • DCF77_und_DS1307.zip
    7,1 KB · Aufrufe: 345
Hi Markus,

kannst du denn Code mal ohne Trace und Test posten,

kriege immer zahlreiche Fehlermeldungen wenn ich denn Code versuche zu kürzen. :eek: :eek:

Vielen Dank im Vorraus

Gruss Alex
 
Hallo Alex,

eigentlich bin ich ja jetzt schon ein bissle traurige da ich dachte, dass mein Code sauber strukturiert und selbsterklärend ist.
Ergo müsste es sehr sehr leicht möglich sein, überflüssige Zeilen Code zu identifizieren und rauszuschmeißen denn:

- in meines Beispieprogrammen werden Trace-Ausgabe immer geschachtelt in globalen variablen ausgewiesen.
- sind normal ausreichend Kommentare enthalten welche auf Test und Trace hinweisen.

Aber egal, ich möchte Dir dennoch weiterhelfen. Ich habe eben mal schnell alles was überflüssig ist ausgebaut. Bei mir compiliert es problemlos. Allerdings bin ich aktuell unterwegs und habe kein STK500 mit DCF77 vor der Nase um eben mal schnell den Code runetr zu laden und zu schauen ob er wirklich läuft.
Also, wie gesagt, bei mir läuft der Compiler ohne Fehler und die SW wird gebaut. Den Test überlasse ich jetzt Dir.

Weiter habe ich nicht die letzten hier in diesem Thread besprochenen und ergänzten Informationen in dem Code-Schnipsel den Du hier findest drin.
Denn, ein wenig Arbeit, Herausforderung und Freude sollst Du ja auch noch haben :)
Die reduzierte Version basiert auf meiner originalen SW zu diesemThema.

Also ran :D

Grüße, viel Glück, viel Spass und eine schöne Nacht,

Markus
 

Anhänge

  • DCF77_und_DS1307.bas
    19,2 KB · Aufrufe: 367
Huhu,

so, erstmal danke für den Code.

Zum Text, ich bin ganz deiner Meinung das ausreichend Kommentare und Beschreibungen in deinem Code vorhanden waren nur muss ich gestehen, das der Anfang immer schwer ist und man immer erst an der Software zweifelt.

(Wobei ich, aus der Elektrobranche kommend, es hätte besser wissen müssen:rolleyes: )

Gut Erstens macht mein Programmer richtig komische Sachen wie zum Beispiel nach dem Flash, dann macht das Display nämlich garnichts mehr.

Als zweites, sollte man beim Atmega dieverse Pin auf GND legen, hab ich auch rausgefunden.

Und Drittens sollte man dem Reset besondere Beachtung schenken.

:D

Nun gut es läuft, das Programm funktionierte tadellos, nachdem ich mal eine Reset mit ner Drahtbrücke gemacht habe. :p

War schon lustig, hat auch nur zwei Wochenende gedauert.

Schnell die Bilder mal in den Anhang und nochmal ein Dank an dich.

Gruss Alex
 

Anhänge

  • CIMG0083.jpg
    CIMG0083.jpg
    56,1 KB · Aufrufe: 351
  • CIMG0084.jpg
    CIMG0084.jpg
    55,4 KB · Aufrufe: 376
Hallo ihr zwei!

Ihr habt mir beide sehr weitergeholfen. Ich versuche gerade das ganze auf einem mega8 mit einem 20x4 Lcd zum laufen zu bringen . Allerdings auch ohne ds1307. Ich hab das dcf77 Modul von Conrad. Ich hab auch ein Oszi drann um das Signal zu sehen. Da geht aber irgend wie nix. Ich hab den nicht invertierten Ausgang mit 10KOhm Pullup verwendet der hängt an D3. Ich weiß auch nicht gerade wie gut mein empfang ist.
Jetzt meine frage hat von euch jemand ein kleines Programm mit dem ich sehen kann ob der dcf empfänger überhaupt tut? Dann würde ich damit mal in den Garten umziehen und Richtung Frankfurt beten.:)

Bitte in Basic was anderes kann ich leider nicht nachvollziehen :(
 
Hi,

mit einem kleinen Prog kann ich Dir leider nicht dienen. Aber, die von Dir gewünschte Funktion ist eigentlich in dem Progämmli von mir schon mit drin, nämlich die Ausgabe aller Statusbits als Binärmuster auf der untersten Display-Zeile. Mehr Informationen würdest Du mit dem Code und einem Analyse-Prog auch nicht raus bekommen. Wenn die Bits nicht zucken und sich verändern dann ist prinzipiell etwas falsch.
Zur weiteren Analyse habe ich ja noch den Trace eingebaut welcher erweiterte Informationen über RS232 rausschreibt. Aktiviere ihn und schau Dir dort auch nochmals die Werte und Bitmuster an. Wenn dort auch nix zuckt dann:
- ist die Beschaltung noch nicht korrekt
- die Initialisierung falsch
- oder der Empfang schlecht.

Mit dem Modul von Corad habe ich auf meinem Schreibtisch auch ziemliche Probleme.
1. hatte ich eine kalte Löststelle auf dem Modul und musste diese nachlöten
2. funzt das Modul dort nur in einer ganz bestimmten Position
3. hatte ich Probleme auf meinem Schreibtisch mit dem WLand was reinstört
4. hatte ich Probleme mit dem DECT Telefon was neben dran lag

Fazit: alles ziemlich empfindlich. Knickohr Thomas hatte aus diesem grund das Reichelt modul eingesetzt, was sich vielleicht besser / robuster verhält.

Musst es einfach ausprobieren. Den Kopf auf jeden Fall nicht hängen lassen. Ich hatte viele Stunden über dem Ding verbracht bis ich die erste sync. Zeit hatte.

Grüße,
Markus
 
Wunderschönen guten Abend

Bin gerate dabei mich mit dem Prog von Markus zu beschäftigen. Mir geht es im Moment weniger um DCF77 als um DS1307. Ich möchte das ganze aber nicht auf einem LCD ausgeben sondern auf 7-Segment Anzeigen. Habe hier eine Schaltung mit einem Atmega32 und 12 7-Seg. Anzeigen. 6 für Zeit und 6 fürs Datum. Eine DS1307 mit bufferbat ist auch dabei. Ich kämpfe jetzt schon eine Weile damit aus time$ und Date$ die einzelnen Werte herraus zubekommen und Sie in meine Routine einzusetzen. Ich habe mal mein Prog. angehängt. Wenn es fragen zur belegung gibt, kann ich die bei Bedarf nachreichen.

Achso, bin neu hier und freue mich über feedback.

Gruß an alle der Tipfix:)
 

Anhänge

  • UHR1.bas
    7,4 KB · Aufrufe: 142
Ich schon wieder

Hab ein bischen rumgespielt und folgendes Prog ist dabei raus gekommen. Das zeigt natürlich nicht ganz das an was ich erwarte aber zumindest scheind was von der DS1307 zu kommen. Die Frage wäre wie kann ich aus den BCD-Werten die einersekunden, zehnersekunden usw gewinnen und in meinem Prog verwenden?

Danke
 

Anhänge

  • UHR1_ds1307.bas
    5,1 KB · Aufrufe: 146
Hallo Tipfix,

der DS1307 ist ein I2C Chip welcher die Daten BCD speichert. Bedeutet, Du must sie beim Lesen und Schreiben wandeln, wenn Du sauber damit arbeiten möchtest.
In BASCOM kannst Du hierzu die Funktion "MAKEDEC" verwenden um den BCD-Wert in einen Dezimalwert (Byte oder INT) zu wandeln.
Aufgepasst, mit Deinen Befehlen "I2crbyte _sec , Ack" fällt das Kind vemutlich bereits schon in den Brunnen weil Du hart einen BCD-Wert als BYTE kastest. Das geht vermutlich schief!
Würde hier mit Hilfsvariablen arbeiten, z.B.
Code:
I2crbyte temp , Ack 
_sec = MAKEDEC(temp)

Wenn Du erstmal eine saubere Dezimalzahl hast dann kannst Du sauber mit Ganzzahldivision und Modulo Deine Einer und Zener bestimmen.

Probiers aus :D

Viele Grüße,
Markus
 
Danke für die Antwort und guten Morgen

Ganzzahldivision und Modulo Deine Einer und Zener

Damit bin ich etwas überfordert, im Moment.:confused:

Aber ich werde Google befragen und mein Ergebniss präsentieren.:)
 
Moin

So, nach einigen Schwierigkeiten hab ich es hin bekommen. Am stellen des Datums bin ich bald verzweifelt. Man muss höllich aufpassen.:mad: Das Format ist ja Wochentag->Datum->Monat->Jahr. Ist in allen Listings die so gefunden und probiert habe aber nicht erwähnt. Aber ich bin alleine drauf gekommen.:D Datenblätter lesen ist doch für was gut. Beim auslesen muss man das auch berücksichtigen, sonst kommt Müll bei raus. Anbei mein funktionierender Code.:)
 

Anhänge

  • UHR1_ds1307.bas
    5,4 KB · Aufrufe: 169
Hallo Markus!

Der Empfang beim DCF77 Modul ist das A und O bei der ganzen Geschichte. Jetzt läuf alles soweit mal. Aber nur wenn der Empfänger auf der Fensterbank liegt. Für meine Anwendung muss ich mir dann wohl doch noch so einen RTC Baustein besorgen.

Recht herzlichen Dank nochmals!
 
:) Super, freut mich zu hören.

Wie gesagt, das Ding ist empfindliche:( Habe auf meinem Schreibtisch in der Zwischenzeit eine Position gefunden wo ich auch DCF77 Empfang habe.
5mm rüber und 2mm nüber und schon funzt es nimmer.

Aber Dein Ansatz ist richtig, aus diesem Grund habe ich auch den RTC mit drauf designed. So kann ich wenigstens immer mit der korrekten Zeit starten und innerhab von 25 Stunden wird es die DCF77 wenigstens einmal geschafft haben zu syncen, so meine Hoffnung. Wir werden sehen :cool:

Grüßle,
Ma
 
hallo liebe experten!
in höchster not wende ich mich an euch um einer nahenden verzweiflung vorzubeugen.

also ... nach jahrelanger abstinenz was micorpozessoren, schaltungsentwicklung und assemler angeht, bin ich (erneuter) neuling mit atmlels, bascom und co!!!

ich habe hier ein funktionierendes hübsches rotordisplay gebaut, da kann man mit einem atmega8 text und grafiken darstellen. und als dreingabe zeigt es auch die uhrzeit an ... ah ... ihr ahnt es schon. genau mit einem dcf77 modul von conrad.
mit der tollen hilfe, den erklärungen und den ganzen programmen von euch und anderen läuft die uhr auch schon ... ich habe nur ein problem ... aarrghh ... ich weiss und finde beim besten willen nichts wie man den port in der dcf77 lib umstellen soll??

im programm wird pina.7 zugewiesen:
Code:
'---------------------- Pin für DCF Eingang definieren ---------------------
'Jeder Portpin kann benutzt werden.
'Auch in der "dcf77.lib" entsprechend anpassen !!!
Config Pina.7 = Input                                       'DCF77 Eingang
Set Porta.7                                                 'Pullup ein

und dann in der dcf77.lib definiert:
Code:
;Eingang für DCF77-Empfänger-Anschluss:
;.equ DCF_Port = $19    ;PortA für Atmega32
;.equ DCF_Pin  = 7      ;7 = Pin 7

oder auch
Code:
.equ PIND    = &H10    ;Pind
.equ PIND3   = 3       ;3 = Pin 3

und jetzt also:
wie ordne ich den verschiedenen ports diese obskuren zahlenwerte (&H10 $19 usw.) zu, so daß ich das signal an portc.0 oder irgend einem anderen einlesen kann. vielleicht ist das ja eine saublöde frage ...

für hilfreiche unterstützung danken euch meine nerven
mit den bestengrüßen
helmar
 
Registerzuordnung

Hallo @hellmars,

Die Registerzuordnungen sind für die verschiedenen AT-s (ATMegas) unterschiedlich. Das heißt Portregister können mal da oder da liegen.
Liegen aber immer innerhalb eines im Handsbuch bzw. Datenblatt angegebenen Bereiches.
(Bei den PICs -Controllern muß man ja diese Registerzuordnungen im Assembler-File selber noch manuell explizit reinschreiben, nachdem man sie aus dem Handbuch für den jeweiligen MC rausgepusselt hat.)
Das ist dei den ATs (ATMegas) nun nicht mehr nötig, da beim Assembliervorgang mit sogenannten Include-Files gearbeitet werden kann, die die gesamte Register- und so weiter Zuordnungsroutine gleich richtig einbindet.
Daher bei Bascom, der nächsthöheren Sprache die konkreten Angaben, insofern es sich um Abweichungen von den "normalen" Include-Files handelt. Alles andere wird ja schon von Bascom als "normal" und bekannt vorausgesetzt, daß es keiner Erwähnung mehr bedürfte.

Also:
$19 zum Beispiel ist "irgendein" Register. Das soll hier nun direkt mit eingebunden werden. Das kann als "Ausgaberegister" aber auch auf einem anderen Register liegen, je nachdem welchen Mikrocontroller man nun gerade benutzt.

So muß man das lesen.

Die Syntax für Argumente (Also Werte, die ins Register geschrieben werden sollen etc.) lautet eben in Bascom etwas anders als im Assembler.

Die Konventionen für "Ladebefehle" zum Beispiel in Register können im Assembler dreifach
gestaltet werden; Integer also reine Dezimalzahl , Binärwert (Format 0b00000000 ) , und sehr beliebt, da kurz und knapp: in Hexadezimalschreibweise: $FF oder auch 0xFF, aber nicht H0FF (wie man das vom 8051-er-Assembler
her noch kennt).

Das ist dann gleich, wie man das nun eingibt.
Der Assembler assembliert das dann sowieso richtig.

Wenn Du noch Fragen hast, poste ruhig nochmal. Du wirst sehen, diese Dinge gehen einem ziemlich schnell "in Fleisch und Blut" über, ist erst mal der Einstieg gegeben.


Bis bald,
Gruß von Oskar01
 
Hi hellmars,

gehe ich richtig in der Annahme, dass Du die DCF77.LIB verwendest, welche Knickohr Thomas vorgeschlagen hat und nicht diese, welche BASCOM standardmäßig mit dabei hat. Richtig?

Sonst würde ich Deine Frage nicht verstehen da in der originalen BASCOM-LIB mit dem Statement "CONFIG DCF77 = PINx.y jeder beliebige Pin konfiguriert werden kann.

Grüße,
Ma
 
hallo oskar, tipfix und markus,
danke für die hilfe. bin mit der puren erwähnung "datenblatt" weitergekommen und habe mir den atmega8-schinken noch einmal zur brust genommen und siehe da " register summary" auf seite 299, die antwort auf so viele fragen ;-)). und das beste, es läuft sogar ...

was die lib angeht markus, hast recht ich verwende nicht die bascom-lib sondern eine in version 1.0 von w.krueger bzw. v 4.0 von d.ottensmeyer ... geht mit beiden.

und zu guter letzt was das rotordisplay angeht ... sobald ich neue chips erhalte und die elektronik wieder eingebaut habe lade ich "richtige" photos hoch. hier mal was aus der frühen testphase ...

gruss
helmar
 

Anhänge

  • rotor display 1.jpg
    rotor display 1.jpg
    76,2 KB · Aufrufe: 224
  • rotor display 2.jpg
    rotor display 2.jpg
    15,7 KB · Aufrufe: 230

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)