Forum: Mikrocontroller und Digitale Elektronik Arduino und DS1307


von Sebastian Hennig (Gast)


Lesenswert?

Hallo,

Ich habe mir eine RTC (DS1307) besorgt. Ich habe vor damit eine Uhr zu 
bauen.
Auf diser Seite (http://pc-rentner.de/index.php/rtc-mit-ds1307) habe ich 
nach langen suchen eine Lösung gefunden und natürlich gleich 
ausprobiert. Funktioniert aber doch nicht. Im Serial Monitor wird immer 
nur "165/165/165 45:165:165" angezeigt. Habt ihr eine Idee was ich 
falsch gemacht haben könnte?

von Florian F. (flof3000)


Lesenswert?

Glaskugel sagt: vbat nicht richtig beschaltet, DS1307 läuft gar nicht.

von Sebastian Hennig (Gast)


Lesenswert?

Florian F. schrieb:
> Glaskugel sagt: vbat nicht richtig beschaltet, DS1307 läuft gar nicht.

Wie muss ich denn vabt beschalten?

von Max H. (hartl192)


Lesenswert?


von Sebastian Hennig (Gast)


Lesenswert?

Tut mir leid, ich stelle mich ganz schön blöd an. Wie müsste denn ein 
fertiger Schaltkreis mit dem Arduino und der RTC aussehen?

von MWS (Gast)


Lesenswert?

Du solltest ein/e gültige/s Datum Zeit reinschreiben, im Code ist das 
auskommentiert. Dann sieht man gleich ob was Vernünftiges zurückkommt, 
auch wird das CH-Bit dabei gelöscht, was die RTC erst zum Gang 
motiviert.

von Sebastian Hennig (Gast)


Lesenswert?

So ich habe jetzt ein Datum reingeschrieben, es kommt aber immernoch der 
gleiche schrott: 165/165/165 45:165:165
1
#include "Wire.h"
2
#define DS1307_ADDRESS 0x68
3
byte zero = 0x00; //workaround for issue #527
4
5
6
void setup(){
7
  Wire.begin();
8
  Serial.begin(9600);
9
  setDateTime(); //MUST CONFIGURE IN FUNCTION
10
}
11
12
void loop(){
13
  setDateTime();
14
  delay(3000);
15
  printDate();
16
}
17
18
void setDateTime(){
19
20
  byte second =      5; //0-59
21
  byte minute =      59; //0-59
22
  byte hour =        15; //0-23
23
  byte weekDay =     2; //1-7
24
  byte monthDay =    3; //1-31
25
  byte month =       6; //1-12
26
  byte year  =       14; //0-99
27
28
  Wire.beginTransmission(DS1307_ADDRESS);
29
  Wire.write(zero); //stop Oscillator
30
31
  Wire.write(decToBcd(second));
32
  Wire.write(decToBcd(minute));
33
  Wire.write(decToBcd(hour));
34
  Wire.write(decToBcd(weekDay));
35
  Wire.write(decToBcd(monthDay));
36
  Wire.write(decToBcd(month));
37
  Wire.write(decToBcd(year));
38
39
  Wire.write(zero); //start 
40
41
  Wire.endTransmission();
42
43
}
44
45
byte decToBcd(byte val){
46
// Convert normal decimal numbers to binary coded decimal
47
  return ( (val/10*16) + (val%10) );
48
}
49
50
byte bcdToDec(byte val)  {
51
// Convert binary coded decimal to normal decimal numbers
52
  return ( (val/16*10) + (val%16) );
53
}
54
55
void printDate(){
56
57
  // Reset the register pointer
58
  Wire.beginTransmission(DS1307_ADDRESS);
59
  Wire.write(zero);
60
  Wire.endTransmission();
61
62
  Wire.requestFrom(DS1307_ADDRESS, 7);
63
64
  int second = bcdToDec(Wire.read());
65
  int minute = bcdToDec(Wire.read());
66
  int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
67
  int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
68
  int monthDay = bcdToDec(Wire.read());
69
  int month = bcdToDec(Wire.read());
70
  int year = bcdToDec(Wire.read());
71
72
  //print the date EG   3/1/11 23:59:59
73
  Serial.print(month);
74
  Serial.print("/");
75
  Serial.print(monthDay);
76
  Serial.print("/");
77
  Serial.print(year);
78
  Serial.print(" ");
79
  Serial.print(hour);
80
  Serial.print(":");
81
  Serial.print(minute);
82
  Serial.print(":");
83
  Serial.println(second);
84
}

von Karl H. (kbuchegg)


Lesenswert?

Photo vom Aufbau?


165 ist der Wert, der sich ergibt wenn man 0xFF der bcdToDec Umwandlung 
unterzieht. d.h. am Eingangspin liest der 1-Wire Code lauter 1-er ein.

von Sebastian H. (bastiono)


Angehängte Dateien:

Lesenswert?

Hier ist der Aufbau:

von Max H. (hartl192)


Lesenswert?

Sebastian Hennig schrieb:
> Hier ist der Aufbau:
Vcc (Pin 8) nicht angeschlossen, Vbat auf GND (ka. ob der IC das mag).

: Bearbeitet durch User
von Sebastian H. (bastiono)


Lesenswert?

So VCC steckt wieder, ich hatte es wahrscheinlich vergessen weil ich es 
zwischendurch neu auf gebaut habe. Zumindest funktioniert es immer noch 
nicht :(

von Christoph N. (christoph_n)


Lesenswert?

Ansonsten gibt es unter http://www.adafruit.com/products/264 ein 
Breakout Board dafür. Mit Arduino Code.Damit gings bei mir in ein paar 
Minuten (haben auch eagle-dateien irgendwo auf dem Server)

Gruß

Christoph

von Karl H. (kbuchegg)


Lesenswert?

Max H. schrieb:
> Sebastian Hennig schrieb:
>> Hier ist der Aufbau:
> Vcc (Pin 8) nicht angeschlossen, Vbat auf GND (ka. ob der IC das mag).

Laut Datenblatt ist das ok.
Da steht explizit drinnen, dass man VBat auf GND legen soll, wenn man 
keine Batterie anschliest.
Das ist es also nicht.

Im Moment frage ich mich ob am Arduino A0 und A1 die richtigen 
Anschlüsse für I2C sind.

von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:

> Im Moment frage ich mich ob am Arduino A0 und A1 die richtigen
> Anschlüsse für I2C sind.


Hmm. Was ist das überhaupt für ein Arduino?

Laut
http://arduino.cc/de/Reference/Wire
gibt es keinen, bei dem die I2C Anschlüsse auf A0 bzw. A1 liegen würden.

Edit: Und auch auf dem im Eröffnungsposting abgebildeten Aufbau gehen 
die beiden Leitungen ganz woanders hin.

: Bearbeitet durch User
von Schleby N. (schleby)


Lesenswert?

So wie ich das sehen liegt da einiges im argen die DS 1307 wird ja 
bekanntlich per I2C angesprochen und das heist du kannst dir die pins an 
denen du SCL und SDA anschließt NICHT aussuchen, die müssen schon an SDA 
und SCL was sie laut bild defenitiv nicht sind.

Board  I2C / TWI pins
Uno, Ethernet  A4 (SDA), A5 (SCL)
Mega2560  20 (SDA), 21 (SCL)
Leonardo  2 (SDA), 3 (SCL)
Due  20 (SDA), 21 (SCL), SDA1, SCL1

Gruß
Hoffe geholfen zu haben

von Sascha W. (sascha-w)


Lesenswert?

@Sebastian,

1) man sollte auch irgendwo die Geschwindigkeit für die I2C 
Schnittstelle einstellen
2) sicher das die Angabe der Deviceadresse des 1307 so richtig ist? In 
der Bitposition wie dann die Ausgabe erfolgt lautet die 0xD0! Dein Wert 
sind nur die oberen 7Bit.

Sascha

: Bearbeitet durch User
von Florian F. (flof3000)


Lesenswert?

Falls an der Adresse Zweifel bestehen (und A0/A1 sind definitiv nicht 
die richtigen Pins): Es gibt eine fertige Adress-Scanner Sketch, die 
kann man mal drüber laufen lassen.

von Karl H. (kbuchegg)


Lesenswert?

Sascha Weber schrieb:

> 2) sicher das die Angabe der Deviceadresse des 1307 so richtig ist?

Ist laut Datenblatt und Arduino Doku richtig.
Die Arduino Klasse will die 7-Bit Adresse unverschoben haben.


Im Moment seh ich eigentlich nur die falschen SDA und SCL Verbindungen. 
Da hat es wohl nicht ganz mit dem Umdenken bei der Übernahme von der 
Vorlage aus dem geposteten Link geklappt, bei dem der Ardunio um 180° 
gedreht da liegt.

: Bearbeitet durch User
von Sebastian H. (bastiono)


Lesenswert?

Schleby na schrieb:
> Leonardo  2 (SDA), 3 (SCL)

Ich habe jetzt SDA und SCL angeschlossen. Es ist aber immer noch falsch, 
jetzt habe die Version mit adfruit genommen und es zeigt das hier an:

2165/165/165 165:165:85
 since 1970 = 2094398289s = 24240d
 now + 7d + 30s: 2036/5/21 17:18:39

Aber das verändert sich halt nicht.

von Schleby N. (schleby)


Lesenswert?

Welchen wert haben deine Pullup widerstände also am besetn ist was 
zwische 1 und 5 kiloohm

von Schleby N. (schleby)


Lesenswert?

und was ist mit vbat hast du dan nun eine 3v zelle drann weil auf dem 
bild lieg der pin auf gnd das ist defenitiv nicht gut

von Sebastian H. (bastiono)


Lesenswert?

Die pullup widerstände sind 10kOhm und Vbat sind jetzt an 3V.
Geht aber immer noch nicht.

von Thomas H. (pcexperte) Benutzerseite


Lesenswert?

Zeige mal den aktuellen Code (Sketch) bitte.

von Schleby N. (schleby)


Lesenswert?

10kohm ist zu viel grade das wirre zeug was bei dir da ankommt ist ein 
inditz dafür das was mit der kommunikation nicht stimmt nimm 1 -max 5 
kohm und dann geht das.

: Bearbeitet durch User
von Sebastian H. (bastiono)


Angehängte Dateien:

Lesenswert?

Ich habe jetzt entdeckt das es am Leonardo liegt und nicht am code bzw. 
an der Hardware. Am Leonardo gibt es extra einen pin SCL und SDA auf der 
Seite mit den digitalen Ein- und Ausgängen. ich habs natürlich gleich 
ausprobiert und siehe da es funktioniert :)

Schleby na schrieb:
> 10kohm ist zu viel

Ist das jetzt schädlich für die RTC oder den Arduino?

Anbei noch der code und ein "Aufbau-Bild" fals jemand später den Beitrag 
noch findet und das gleiche Problem hat.
EDIT: Wenn es nicht funktioniert, könnte es an Vbat liegen da müssen 3V 
drauf.

Schleby na schrieb:
> und was ist mit vbat hast du dan nun eine 3v zelle drann



Ich möchte mich bei allen bedanken, die mir helfen wollten (außer bei 
dem troll der mich nach machen wollte).

: Bearbeitet durch User
von Gerald B. (gerald_b)


Lesenswert?

Der RTC muß erst mal gestartet und gestellt werden. Und ohne 
Backupbatterie jedesmal, ehe du das Teil nutzen kannst.
Da ist bei den Beispielsketchen was dabei, was das kann.
Die Startsequenz hat den Sinn, das ein Gerät mit Batterie die Batterie 
schont, wenn die RTC noch "schläft"
Tu dir einen Gefallen und besorge dir den DS3231. Der ist wesentlich 
genauer, als das Schätzeisen DS1307 und kaum teurer. Der Code ist 1:1 
verwendbar. Allerdings ist der DS3231 nicht im DIL-Gehäuse erhältlich. 
Dafür gibt es preiswerte, kompakte Module vom freundlichen Chinesen :-)

Gruß Gerald

von Schleby N. (schleby)


Lesenswert?

Sebastian Hennig schrieb:

>
> Schleby na schrieb:
>> 10kohm ist zu viel
>
> Ist das jetzt schädlich für die RTC oder den Arduino?
>

Nein schädlich ist das nicht,nur wenn deine Leitungen länger wird kann 
das zu problemen führen.

Aber das die SCL und SDA Pins auf der anderen Seite liegen wurde dir 
auch schon gesagt.

Schleby na schrieb:
> Leonardo  2 (SDA), 3 (SCL)

sonst hätte da ja

Schleby na schrieb:
> Leonardo  A2 (SDA), A3 (SCL)

gestanden.

gruß

: Bearbeitet durch User
von Sebastian H. (bastiono)


Lesenswert?

Schleby na schrieb:
>> Schleby na schrieb:
> Aber das die SCL und SDA Pins auf der anderen Seite liegen wurde dir
> auch schon gesagt.
>
> Schleby na schrieb:
>> Leonardo  2 (SDA), 3 (SCL)
>
> sonst hätte da ja
>
> Schleby na schrieb:
>> Leonardo  A2 (SDA), A3 (SCL)
>
> gestanden.

Aber SDA und SCL sind nicht pin 2 und 3, es sind extra pins, hier ist es 
zu sehen: 
http://i1.wp.com/tronixstuff.com/wp-content/uploads/2012/09/leonardoi2c.jpg

von Schleby N. (schleby)


Angehängte Dateien:

Lesenswert?

Kuck dir mal den schaltplan von deinem board an dann wirst du merken es 
keine extra pins sind ,sonder d2 / d3

http://arduino.cc/en/uploads/Main/arduino-leonardo-schematic_3b.pdf

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.