DCF77 und RTC mit ATmega unter BASCOM

Hallo Tipfix,

ich wünsche dir ebenfalls ein gutes neues Jahr.

Ich kenne mich mit Bascom leider nicht so aus, aber hat dein Problem vielleicht damit etwas zu tun? ...

Thread von Thomas seiner Wetterstation
http://www.avr-praxis.de/forum/showthread.php?p=9801#post9801
Hallo zusammen,

das neue Jahr fängt ja schon gut an. Heute Nacht mußte ich feststellen, das meine Wetterstation das falsche Datum anzeigt :( Zuerst dachte ich an eine fehlerhafte DCF-Synchronisation, aber nach einigen Resets blieb das Problem immer noch bestehen. Der Fehler war relativ schnell gefunden, eine BCD nach Dezimal-Umwandlung wurde in der DCF77.lib vergessen. Was die letzten 10 Jahre nicht in Erscheinung trat, kam heute Nacht zum Vorschein.

OK, hier die korrigierte LIB, die hoffentlich für die nächsten 90 Jahre funktioniert :
http://www.roboternetz.de/phpBB2/vie...=478341#478341

(Da das nicht auf meinem Mist gewachsen ist, verweise ich direkt auf die LIB im Nachbaruniversum) ;)

Thomas
Schöne Grüße,
Dirk
 
Morgen

Ich wollte mich noch für die Tipps bedanken.
Die neue Lib tut's jetzt.
Kann es aber sein das für Januar 1 statt 01 steht?
Beim Tag ist die führende Null da aber beim Monat nicht.
Sieht irgendwie komisch aus.

Entschuldigung für die späte Antwort.:flowers:

Andreas
 
Hallo Markus,
ich habe die Software mit einem Atmega128, dem RTC und dem Conrad DCF77 Empfänger am laufen. Das einzige Problem was ich habe, ist manchmal überspringt die Anzeige eine Sekunde. Hat jemand das gleiche Problem?

Gruss Peter
 
Hallo Peter,

welche SW verwendest Du? Meine?

Du solltest mir verraten, welche Sekunden übersprungen werden? Immer die gleichen? Springt er bei der 59 Sekunde? Alsooo, je nach SW könnte es korrekt sein, wenn er bei der 59 Sekunde springt.

Wie gibst Du die Zeit aus? Verwendest Du auch die SoftClock so wie ich?

Grüße,
Ma
 
Hallo Markus,
ich habe die Software mit einem Atmega128, dem RTC und dem Conrad DCF77 Empfänger am laufen. Das einzige Problem was ich habe, ist manchmal überspringt die Anzeige eine Sekunde. Hat jemand das gleiche Problem?

Gruss Peter

Hallo Peter,
hab die gleiche HW bei mir am laufen.
Hatte den gleichen Fehler, lag bei mir an der "SecTic" wenn die zu lange wird, bzw. selbst eine Routine aufruft.
Ebenso kann ein "wait" das Problem auslösen (hatte zum Testen ein paar wait nach "LCDat" eingebaut)

Gruß Siggi
 
DCF77 mit RTC

Hallo Danke an Euch, habe die Uhr gerade erst in Betrieb genommen. Bedingt durch wenig Zeit im Moment werde ich das ganze testen.

An Markus:
ich vewende diese Version
DCF77_und_DS1307.BAS Stand 03.05.2008
' -------------------- (C) Markus Fulde

habe eigentlich nur die Anpassung an mein LCD Display vorgenommen
sonst nichts geändert.
Die synchronisation mit der RTC klappt


Sprünge
innerhalb einer Minute z.B.:
von der 8. auf die 10 Sek.
von 28. auf die 30. Sek.
von 45. auf die 47. Sek.

andere Minute:

von 17. auf die 19. Sek.
von 36. auf die 38. Sek.

dementsprechend verschiebt sich die 59. Sekunde
mit nicht übereinstimmend mit der Anzeige

Nochmals vielen Dank und Grüße Peter
 
RTC + DCF77 Real Time Clock

Hallo vielen Dank für Eure Mühe,

im Anhang der Bascom Code, ich hoffe ich habe nicht zu viele Fehler gemacht.
Grüsse Peter
 

Anhänge

  • DCF77_und_DS1307-06.zip
    6,6 KB · Aufrufe: 113
Hallo Peter,
hab mir den code mal angesehen, ist ja fast 1/1 der von Markus.

Ich kann leider auch keinen Fehler finden, kommt der Fehler nur bei trace_an oder auch bei trace_aus.

Gruß Siggi
 
RTC + DCF77 Real Time Clock

Hallo Siggi,
dauert leider immer ein wenig, bin zeitweise unterwegs. Es bleibt sich gleich bei beiden Einstellungen.

Gruss Peter
 
Guten Tag,

Ich habe mir hier viel von euch schon durchgelesen und das hat mir schon sehr geholfen, allerdings bräuchte ich noch Hilfe. und zwar habe ich folgendes Problem: Ich weiß nicht wie ich das signal des dcf77 genau auseinader nehme. ich brauch die 10er der stunden und einer, sowie die zehner der Minuten und die einer der Minuten.

Hintergrund: ich habe eine Nixieuhr gebaut und weiß gerade nicht wie ich das dcf77 Signal auf die Röhren bringe.


Aufbau:

DCF77 ----> Mega8 -----> PCF8574P-----> 7441 -----> Röhre


der PCF8574P überliefert die Ziffern im BCD code an den Nixietreiber....

und ich müßte den PCF8574 über i2c ansprechen, ich weiß das der PCF8574 die uhrzeit binär braucht also zb. &B00010001 wobei der ersten vier Bits für die Zehner der Stunden sind die zweiten für die Einer der Stunden aber wie mache ich das in bascom? es wäre echt cool wenn jemand von euch mir dazu mal einen code basteln könnte und mir den erklären könnte. ich habe zu testversuchen das DCF77 modul an einer lcd aber die soll später weg...


Bitte um Hilfe

MFG

P4711
 
Hey danke für deine schnelle antwort... der Beitrag von Cassio ist gut.. damit habe ich nur noch ein Problem und zwar wie ich das mit den Zehnern und Einern der Stundenanzeige bzw Minuten Anzeige mache.
 
Hallo P4711 !

Am einfachsten ist es, wenn du die Zahlen in das BCD-Format konvertierst. Dann hast du die Zehner- und Einerstellen getrennt!
Eigentlich werden die Werte ja via DCF77 schon im BCD-Format übertragen, aber wenn du die BASCOM-Softclock nutzt dann ist die Ausgabe natürlich wieder binär. :wink:

Mit MAKEBCD kannst du aber ganz bequem die binären Werte in das BCD-Format konvertieren.

Anschließend musst du nur noch die passenden Bits für Zehner und Einer auswählen und diese dann an den PCF8574 schicken.

EDIT (neuer LINK):
Als Hilfe kannst du aber auch diesen Thread verwenden. :cool:


Viele Grüße,
Cassio
 
Hallo Leute,

ich muss mal diesen Tread wieder vorholen. Bin gerade dabei ein DCF-Modul zusammen mit einem DS1307 zusammen zum laufen zu bewegen und habe dazu den Code aus dem ersten Beitrag genommen und etwas gekürzt. Das DCF-Modul läuft an sich problemlos. Leider will es mit dem I2C nicht so recht. Das Programm (code siehe unten) soll nach dem alle Variablen deklariert sind zuerst den Ds1307 auslesen (Routine Rtc_set_softclock). Leider bleibt der Atmega dort beim ersten I2crbyte hängen und läuft nicht weiter. Ich hab schon alles mögliche versucht. Habt Ihr noch einen Rat woran es liegen könnte? Gibt es irgend welche Besonderheiten bei den Fuse Bits?

Besten Dank und schöne Grüße
rakohr



$regfile = "m128def.dat" ' ATmega 128
$crystal = 16000000 ' 16 MHz
$hwstack = 32
$swstack = 32
$framesize = 40

$lib "i2c_twi.lbx"

Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 3 , Cd = 0 , Wr = 2 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6

Backlight Alias Portg.4
Config Backlight = Output
Backlight = 0
Cls
Cursor Off

Config Dcf77 = Pinc.6 , Timer = 1 , Inverted = 1 , Check = 1 , Update = 0 , Timer1sec = 1 , Debug = 1 , Gosub = Sectic
Config Date = Dmy , Separator = .
Enable Interrupts

Portb.1 = 1

'***für DS1307***
Dim Dcf77_hour As Byte ' Globale Stundenvariable
Dim Dcf77_min As Byte ' Globale Minutenvariable
Dim Dcf77_sec As Byte ' Globale Sekundenvariable
Dim Dcf77_weekday As Byte ' Globaler Wochentag
Dim Dcf77_day As Byte ' Globale Tagvariable
Dim Dcf77_month As Byte ' Globale Monatsvariable
Dim Dcf77_year As Byte
Sda_port Alias Portd.1
Scl_port Alias Portd.0
Const Rtc_address_write = &B11010000 ' Adresse des DS1307 = &HD0 (schreiben)
Const Rtc_address_read = &B11010001 ' Adresse des DS1307 = &HD1 (lesen)
Const Rtc_address_seconds = &H00
Const Rtc_address_minutes = &H01
Const Rtc_address_hours = &H02
Const Rtc_address_day = &H03
Const Rtc_address_date = &H04
Const Rtc_address_month = &H05
Const Rtc_address_year = &H06
Const Rtc_address_control = &H07

Config Sda = Sda_port
Config Scl = Scl_port
I2cinit
Config Twi = 100000
Twcr = &B00000100

Gosub Rtc_set_softclock

Do
'***
Loop
End

Sectic:
'***
Return

Anzeige:
'***
Return

Rtc_set_softclock:
I2cstart ' START-Sequenz senden
I2cwbyte Rtc_address_write ' Daten schreiben initiieren
I2cwbyte Rtc_address_seconds ' Adresse übertragen = &H00
I2cstop ' STOP-Sequenz wird nicht zwingend benötigt
I2cstart ' START-Sequenz erneut senden
I2cwbyte Rtc_address_read
Locate 1 , 1
Lcd "stopp" ' Daten lesen initiieren
'an dieser Stelle bleibt das Programm stecken
I2crbyte Dcf77_sec , Ack ' Byte 1 lesen
I2crbyte Dcf77_min , Ack ' Byte 2 lesen
I2crbyte Dcf77_hour , Ack ' Byte 3 lesen
I2crbyte Dcf77_weekday , Ack ' Byte 4 lesen
I2crbyte Dcf77_day , Ack ' Byte 5 lesen
I2crbyte Dcf77_month , Ack ' Byte 6 lesen
I2crbyte Dcf77_year , Nack ' Byte 7 lesen und fertig (NACK)
I2cstop ' STOP-Sequenz
_hour = Makedec(dcf77_hour)
_min = Makedec(dcf77_min)
_sec = Makedec(dcf77_sec)
_weekday = Makedec(dcf77_weekday)
_day = Makedec(dcf77_day)
_month = Makedec(dcf77_month)
_year = Makedec(dcf77_year)
Return

Rtc_set_rtc_clock:
Dcf77_hour = Makebcd(_hour)
Dcf77_min = Makebcd(_min)
Dcf77_sec = Makebcd(_sec)
Dcf77_weekday = Makebcd(_weekday)
Dcf77_day = Makebcd(_day)
Dcf77_month = Makebcd(_month)
Dcf77_year = Makebcd(_year)
I2cstart ' START-Sequenz senden
I2cwbyte Rtc_address_write ' Daten schreiben initiieren
I2cwbyte Rtc_address_seconds ' Adresse übertragen = &H00
I2cwbyte Dcf77_sec ' Byte 1 übertragen
I2cwbyte Dcf77_min ' Byte 2 übertragen
I2cwbyte Dcf77_hour ' Byte 3 übertragen
I2cwbyte Dcf77_weekday ' Byte 4 übertragen
I2cwbyte Dcf77_day ' Byte 5 übertragen
I2cwbyte Dcf77_month ' Byte 6 übertragen
I2cwbyte Dcf77_year ' Byte 7 übertragen
I2cstop
Return
 
Hallo Rakohr,

ich kann auf Anhieb keinen Fehler sehen, bin aber auch nicht der Beste im Fehler finden.
Im Anhang eine Version von "Markus Fulde" , welche ich für ein Projekt von mir angepasst habe.
Wenn ich es richtig gesehen habe, brauchst Du nur Dein Display und das Pin für DCF Empfänger anpassen.

Verkleinere zum Testen e.v. mal die Pull-Up am TWI auf 1,8KOhm, falls Du hier deutlich größer genommen hast.

Gruß Siggi

Anhang anzeigen DCF77_und_DS1307at128.bas
 
Hallo,

Verkleinere zum Testen e.v. mal die Pull-Up am TWI auf 1,8KOhm, falls Du hier deutlich größer genommen hast.
wenn man nicht grade nen halben Meter und mehr als Busleitung hat dann reichen 4,7kOhm allemal aus. Alles andere zieht nur unnötig Strom.

Wobei bei mir auch 400kHz Bustakt mit 50cm Flachbandkabel und 4,7kOhm problemlos laufen.

Gruß
Dino
 
Hallo,

ich hab max. 3cm Leitung und bisher 10kOhm genommen. Ich hab jetzt das ganze mit gleichem Aufbau an einem Atmega32 getestet. Da läuft es ohne Probleme, igendwie komisch beim Atmega128 will es nicht klappen.
Ich werd euren Vorschlag mal aufgreifen und mit kleinerem R probieren.

Viele Grüße
Rakohr
 
Danke Jungs,

Ihr habt mir sehr weiter geholfen. Ich hab jetzt 4,7kOhm drin und nun läuft es wie es soll.

Viele Grüße
Rakohr
 

Ü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)