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?
Florian F. schrieb: > Glaskugel sagt: vbat nicht richtig beschaltet, DS1307 läuft gar nicht. Wie muss ich denn vabt beschalten?
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?
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.
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 | } |
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.
Sebastian Hennig schrieb: > Hier ist der Aufbau: Vcc (Pin 8) nicht angeschlossen, Vbat auf GND (ka. ob der IC das mag).
:
Bearbeitet durch User
So VCC steckt wieder, ich hatte es wahrscheinlich vergessen weil ich es zwischendurch neu auf gebaut habe. Zumindest funktioniert es immer noch nicht :(
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
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.
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
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
@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
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.
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
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.
Welchen wert haben deine Pullup widerstände also am besetn ist was zwische 1 und 5 kiloohm
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
Die pullup widerstände sind 10kOhm und Vbat sind jetzt an 3V. Geht aber immer noch nicht.
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
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.