Arduino und DS1307

Gast #3678167
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?
Gast #3678262
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.
Gast #3678271
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
}
#3678395
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.
#3678402
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.
#3678409
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
#3678426
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.
#3678742
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).
Angehängte Dateien:
#3678778
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
#3678840
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ß
#3678883
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren