RTC DS1307

Wenn man Layouts zu bestimmten Schaltungen hat, können sie hier gepostet werden

Moderator: Sebi

RTC DS1307

Beitragvon dussel07 » 28.11.2011, 23:12

Hab mal eine RTC Platine gebastelt.
In Anlehnung an das BBeetle-Modul - Wannenstecker passend zu den RN Definitionen.
Ausschlaggebend war/ist ein Streifenrasterprodukt was einfach nicht will - blödes Dingens, das!
Hoffentlich mag die neue Creation jetzt?
RTC.GIF
Dateianhänge
RTC.lay
(44.17 KiB) 149-mal heruntergeladen
Ja, - ich bin Zwilling
Benutzeravatar
dussel07
 
Beiträge: 1618
Registriert: 30.04.2009, 21:04
Wohnort: Goslar

Re: RTC DS1307

Beitragvon dussel07 » 29.11.2011, 00:02

Hier mal das Streifenrasterchaos - Punktraster war alle - MIST -
RTC oben.jpg

und von unten
RTC unten.jpg

Mein Messgerät sagt "Alles OK"
Das LCD am MC sagt "00:00:00"
RTC Müll.jpg

Ziehe ich die Jumper (Pullup) kommt keine Anzeige?
Drehe ich SCL und SDA kommt auch nichts??
Also scheint doch die I2C Verbindung zu klappen???
Aber die Uhr tickt nich richtig - - - - - - -

ich vergaß - den Code (Made by Hans Jürgen Jakob (Pirna))
Spoiler: show
Code: Alles auswählen
$regfile = "m8def.dat"
$crystal = 3686411

' Einstellen des LCD Display's von myAVR in BASCOM
'Config Portd = Output
Config Lcdpin=Pin, Db4=Portd.4, Db5=Portd.5, Db6=Portd.6, Db7=Portd.7, E=Portd.3, Rs=Portd.2
Config Lcd = 16 * 2

' Einstellen der TWI (I2C) Schnittstelle in BASCOM
Config Sda = Portc.4
Config Scl = Portc.5
' Address des DS1307 $D0=schreiben $D1=lesen
Const Ds1307w = &HD0
Const Ds1307r = &HD1

' Einstellen der Datum-/Zeitfunktion in BASCOM dabei werden automatisch
' die Variablen _year,_month,_day,_hour,_min,_sec im BCD Format angelegt
Config Clock = User
' Datumsformat deutsch Tag.Monat.Jahr und als Trennzeichen den Punkt
Config Date = Dmy , Separator = .

Cls
Cursor Off

' Nur zum stellen der Uhr Kommentar entfernen
'Time$ = "17:30:59"
'Date$ = "24.08.07"

Lcd " *** myAVR ***"

Do
Locate 2 , 1 : Lcd Mid(date$ , 1 , 6) ; " " ; Time$
Waitms 1000
Loop

End

' Benutzer definierte Routinen die von der datetime.lib im BASCOM genutzt werden
Dim Weekday As Byte
Getdatetime:
  I2cstart                     ' Start
  I2cwbyte Ds1307w             ' DS1307 schreiben
  I2cwbyte 0                   ' DS1307 Adresszeiger auf 0 stellen

  I2cstart                     ' Start
  I2cwbyte Ds1307r             ' DS1307 lesen (ab vorher eingestellter Adresse 0)
  I2crbyte _sec , Ack          ' Sekunden
  I2crbyte _min , Ack          ' Minuten
  I2crbyte _hour , Ack         ' Stunden
  I2crbyte Weekday , Ack       ' Wochentag (in Dummy gelesen da von date$/time$ nicht genutzt)
  I2crbyte _day , Ack          ' Tag
  I2crbyte _month , Ack        ' Monat
  I2crbyte _year , Nack        ' Jahr
  I2cstop
  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
  _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

Setdate:
  _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
  I2cstart                     ' Start
  I2cwbyte Ds1307w             ' DS1307 schreiben
  I2cwbyte 4                   ' DS1307 Adresszeiger auf 4 (Byte 5) stellen
  I2cwbyte _day                ' Tag schreiben
  I2cwbyte _month              ' Monat schreiben
  I2cwbyte _year               ' Jahr schreiben
  I2cstop
Return

Settime:
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  I2cstart                     ' Start
  I2cwbyte Ds1307w             ' DS1307 schreiben
  I2cwbyte 0                   ' DS1307 Adresszeiger auf 0 stellen
  I2cwbyte _sec                ' Sekunden schreiben
  I2cwbyte _min                ' Minuten schreiben
  I2cwbyte _hour               ' Stunden schreiben
  I2cstop
Return
Ja, - ich bin Zwilling
Benutzeravatar
dussel07
 
Beiträge: 1618
Registriert: 30.04.2009, 21:04
Wohnort: Goslar

Re: RTC DS1307

Beitragvon Anse » 29.11.2011, 10:28

ich vergaß - den Code (Made by Hans Jürgen Jakob (Pirna))
Den Code habe ich auch verwendet und es funzt. Allerdings habe ich alle LCD-Befehle weggelassen und die Werte über RS232 direkt an den PC gesendet. Soll ich den gänderten Code posten? Welche Werte haben die Pullups?
Anse
Anse
 
Beiträge: 1440
Registriert: 09.06.2011, 14:18

Re: RTC DS1307

Beitragvon dussel07 » 29.11.2011, 12:16

Über den Code würde ich mich freuen!
Pullups = 10K
Ja, - ich bin Zwilling
Benutzeravatar
dussel07
 
Beiträge: 1618
Registriert: 30.04.2009, 21:04
Wohnort: Goslar

Re: RTC DS1307

Beitragvon Anse » 29.11.2011, 13:43

Ich verwende als Pullups 4,7K.
Hir der vereinfachte Code. Die seriele Schnittstelle musste ich per Software einstellen weil der Attiny13 kein Hardware UART hat.
Für z.B. Atmega8 braucht man das nicht.
Spoiler: show
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 4
$framesize = 4



' Einstellen der TWI (I2C) Schnittstelle in BASCOM
Config Sda = Portb.3
Config Scl = Portb.4
Config I2cdelay = 1000

I2cinit

' Address des DS1307 $D0=schreiben $D1=lesen
Const Ds1307w = &HD0
Const Ds1307r = &HD1



' Einstellen der Datum-/Zeitfunktion in BASCOM dabei werden automatisch
' die Variablen _year,_month,_day,_hour,_min,_sec im BCD Format angelegt
Config Clock = User
' Datumsformat deutsch Tag.Monat.Jahr und als Trennzeichen den Punkt
Config Date = Dmy , Separator = .



' Nur zum stellen der Uhr Kommentar entfernen
'Time$ = "16:09:10"
'Date$ = "31.10.11"

'Software UART wird eingeschalten. Nur für MCUs ohne Hardware UART
Open "comb.1:300,8,n,1" For Output As #1






Do
Gosub Getdatetime
Print #1 , _hour ; ":" ; _min ; ":" ; _sec
Print #1 , _day ; "." ; _month ; "." ; _year
Wait 3 'alle 3 sec. wird die Uhrzeit und das Datum gelesen und gesendet
Loop

End

' Benutzer definierte Routinen die von der datetime.lib im BASCOM genutzt werden

Dim Weekday As Byte

Getdatetime:
I2cstart ' Start
I2cwbyte Ds1307w ' DS1307 schreiben
I2cwbyte 0 ' DS1307 Adresszeiger auf 0 stellen

I2cstart ' Start
I2cwbyte Ds1307r ' DS1307 lesen (ab vorher eingestellter Adresse 0)
I2crbyte _sec , Ack ' Sekunden
I2crbyte _min , Ack ' Minuten
I2crbyte _hour , Ack ' Stunden
I2crbyte Weekday , Ack ' Wochentag (in Dummy gelesen da von date$/time$ nicht genutzt)
I2crbyte _day , Ack ' Tag
I2crbyte _month , Ack ' Monat
I2crbyte _year , Nack ' Jahr
I2cstop

_sec = Makedec(_sec)
_min = Makedec(_min)
_hour = Makedec(_hour)
_day = Makedec(_day)
_month = Makedec(_month)
_year = Makedec(_year)

Return


Setdate:
'Umwandlung Nach Bcd
_day = Makebcd(_day)
_month = Makebcd(_month)
_year = Makebcd(_year)

I2cstart ' Start
I2cwbyte Ds1307w ' DS1307 schreiben
I2cwbyte 4 ' DS1307 Adresszeiger auf 4 (Byte 5) stellen
I2cwbyte _day ' Tag schreiben
I2cwbyte _month ' Monat schreiben
I2cwbyte _year ' Jahr schreiben
I2cstop
Return

Settime:
'Umwandlung Nach Bcd
_sec = Makebcd(_sec)
_min = Makebcd(_min)
_hour = Makebcd(_hour)

I2cstart ' Start
I2cwbyte Ds1307w ' DS1307 schreiben
I2cwbyte 0 ' DS1307 Adresszeiger auf 0 stellen
I2cwbyte _sec ' Sekunden schreiben
I2cwbyte _min ' Minuten schreiben
I2cwbyte _hour ' Stunden schreiben
I2cstop
Return
Anse
 
Beiträge: 1440
Registriert: 09.06.2011, 14:18

Re: RTC DS1307

Beitragvon dussel07 » 30.11.2011, 00:59

Nochmal Danke für den Code!
Also - mein Streifenrasterkonstruckt läuft - getestet am MyAVR MK2.
Dann hilfts nichts - weitersuchen wo der Fehler stecken könnte??? :?: :?: :?:
Ja, - ich bin Zwilling
Benutzeravatar
dussel07
 
Beiträge: 1618
Registriert: 30.04.2009, 21:04
Wohnort: Goslar

Re: RTC DS1307

Beitragvon Anse » 30.11.2011, 10:00

Kläre mich mal auf. Das Streifenrasterkonstruckt läuft oder wird immer nur 0 gelesen? Das würde darauf hinweisen, dass der Oszillator der RTC nicht läuft. Der Oszillator muss erst per Fuse Bits eingeschalten werden. Sonst läuft da nichts. Wenn ich mein RTC Modul vom MCU trenne wird der Wert 165 gesendet und nicht 0.
Mir fehlt etwas mehr Hintergrundwissen was für Geräte du Verwendest. Kannst du mal eine Übersichtszeichnung machen?
Anse
 
Beiträge: 1440
Registriert: 09.06.2011, 14:18

Re: RTC DS1307

Beitragvon dussel07 » 30.11.2011, 12:50

Mein Streifenraster Gebilde läuft direkt am TWI Anschluß vom "myAVR Board MK2".
Sozusagen ohne Mikrocontroller.
TWI.GIF
TWI.GIF (10.89 KiB) 7859-mal betrachtet

Unter der Software "mysmartUSB....." hat es die Option den DS1307 direckt anzusprechen.
Mysmart USB.jpg
Die roten Pfeile sind natürlich nicht von Bedeutung - das Stellen und auslesen geschieht im Kasten darüber

Werde also weiter den Fehler (entweder auf meinem Entwicklungsboard oder im Programm) suchen.
Ja, - ich bin Zwilling
Benutzeravatar
dussel07
 
Beiträge: 1618
Registriert: 30.04.2009, 21:04
Wohnort: Goslar

Re: RTC DS1307

Beitragvon Anse » 30.11.2011, 15:04

Also deine RTC läuft und lässt sich auch ansprechen.
Hast du mal meinen Code ausprobiert? Ich kann auch einen für Atmega8 posten.
Ich habe das noch in den von dir geposteten Code eingefügt:
Code: Alles auswählen
Config Sda = Portb.3
Config Scl = Portb.4
Config I2cdelay = 1000

I2cinit
Damit wird die TWI-Geschwindigkeit heruntergesetzt.
Im Datenblatt steht, das die DS1307 nur TWI mit 100kHz statt mit 400kHz unterstützt.
Anse
 
Beiträge: 1440
Registriert: 09.06.2011, 14:18

Re: RTC DS1307

Beitragvon Berger » 30.11.2011, 19:38

Hallo!

Anse hat geschrieben:Das würde darauf hinweisen, dass der Oszillator der RTC nicht läuft. Der Oszillator muss erst per Fuse Bits eingeschalten werden. Sonst läuft da nichts.

Wie kann das verstehen?

Anse hat geschrieben:Config I2cdelay = 1000

Geht nur zwischen 1 und 255 laut Hilfe!

Hab hier fast den gleichen Code mit 10k Pulllups, läuft einwandfrei.
Würd dann eher auf der Hardwareseite suchen.
Spoiler: show
Code: Alles auswählen
$regfile = "m168def.dat"
$crystal = 18432000
$hwstack = 32
$swstack = 32
$framesize = 32


Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portd.1 , Rs = Portd.0
Config Lcd = 16 * 2
Cls
Cursor Off

Config Sda = Portc.4                                   ' I2C Bus
Config Scl = Portc.5

Const Ds1307w = 208                                    ' Addresse des Ds1307
Const Ds1307r = 209

Config Clock = User
Config Date = Dmy , Separator = .


Time$ = "19:10:00"
Date$ = "30.11.11"


Do

Locate 1 , 1
Lcd Date$

Locate 2 , 1
Lcd Time$

Waitms 500

Loop


Dim Weekday As Byte
Getdatetime:
  I2cstart
  I2cwbyte Ds1307w
  I2cwbyte 0
  I2cstart
  I2cwbyte Ds1307r
  I2crbyte _sec , Ack
  I2crbyte _min , Ack
  I2crbyte _hour , Ack
  I2crbyte Weekday , Ack
  I2crbyte _day , Ack
  I2crbyte _month , Ack
  I2crbyte _year , Nack
  I2cstop
  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
  _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

Setdate:
  _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
  I2cstart
  I2cwbyte Ds1307w
  I2cwbyte 4
  I2cwbyte _day
  I2cwbyte _month
  I2cwbyte _year
  I2cstop
Return

Settime:
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  I2cstart
  I2cwbyte Ds1307w
  I2cwbyte 0
  I2cwbyte _sec
  I2cwbyte _min
  I2cwbyte _hour
  I2cstop
Return

End


MfG
Berger
Berger
 
Beiträge: 52
Registriert: 27.04.2010, 15:10

Re: RTC DS1307

Beitragvon dussel07 » 30.11.2011, 21:03

Puh, geschafft!
Danke für die Unterstützung!!
Es lag, ganz banal, an einem Kontackt (Buchsenleiste). Einmal kurz mein Atmega32 Modul ab - dann wieder drauf - läuft.
Jetzt geht es weiter in Richtung Zeitschaltuhr - später, sollte es klappen, kombiniert mit einem Dämmerungsschalter.
klappt.jpg
Ja, - ich bin Zwilling
Benutzeravatar
dussel07
 
Beiträge: 1618
Registriert: 30.04.2009, 21:04
Wohnort: Goslar

Re: RTC DS1307

Beitragvon derKontor » 30.11.2011, 21:55

Muss man die Uhr nach einem Batteriewechsel immer neu stellen?
derKontor
 

Re: RTC DS1307

Beitragvon Chef » 30.11.2011, 22:14

Einmal, alle paar Jahre neu stelln sollte wohl machbar sein ;)

Chef :D
Wenn es die Elektronik nicht gäbe, müsste man sie erfinden.
Benutzeravatar
Chef
Site Admin
 
Beiträge: 2917
Registriert: 04.11.2008, 17:56
Wohnort: Hamburg

Re: RTC DS1307

Beitragvon Tim Sasdrich » 01.12.2011, 00:12

Oder ein Funkuhrempfänger dafür verwenden.
"Der Kluge lernt aus allem und von jedem, der Normale aus seinen Erfahrungen und der Dumme weiß alles besser." - Sokrates (470 - 399 v. Chr.), griechischer Philosoph
Tim Sasdrich
 
Beiträge: 2941
Registriert: 07.01.2009, 14:15
Wohnort: Villingen-Schwenningen

Re: RTC DS1307

Beitragvon finn » 01.12.2011, 07:01

kann man net die batterie auch bei angeschlossener versorgungsspannung wechseln?
finn
 

Nächste

Zurück zu Layouts

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron