Bei der Zeitabfrage zeigt die RTC nur Unsinn an. Benutzt wird der DS1307-Monitor-Sketch von Oliver Kraus in der Version für die Arduino-Version 1.0.
s 2012-06-12 // Setzen der Uhr
Assign 2012-06-12 to RTC //Antwort via Serial.read
i // Abfrage der Uhr
RTC date: 2165-165-165 Mo time: 165:165:85
62162 days or 1076433489 seconds since 2000-01-01 00:00:00
DS1307_Test aus der gleichen Library:
DS1307 Testsketch
Format is "hh:mm:ss dd-mm-yyyy DDD"
MEZ=0, MESZ=1 : 0
DS1307 Testsketch
Format is "hh:mm:ss dd-mm-yyyy DDD"
MEZ=0, MESZ=1 : 1
165:165:85 165-165-2165 MON seconds since 1.1.2000:1076433489 MEZ=0, MESZ=1 : 0 - Address in NV-RAM is: 0 - Clock was set!
165:165:85 165-165-2165 MON seconds since 1.1.2000:1076433489 MEZ=0, MESZ=1 : 0 - Address in NV-RAM is: 1 - Clock was set!
165:165:85 165-165-2165 MON seconds since 1.1.2000:1076433489 MEZ=0, MESZ=1 : 0 - Address in NV-RAM is: 2 - Clock was set!
165:165:85 165-165-2165 MON seconds since 1.1.2000:1076433489 MEZ=0, MESZ=1 : 0 - Address in NV-RAM is: 3 - Clock was set! usw....
Sie will nicht mehr weiterzählen und blockiert irgendwie. Meine Suche in den Foren war zwar halbwegs erfolgreich, aber alle Sketche für 0.22.
Was ich bisher versucht habe:
Ich habe die RTC resettet (USB 'raus - Batt raus - 3sec warten und Batt wieder rein) ==> kein Erfolg
Betrieb ohne Batt (Pin Batt an GND) ==> kein Erfolg
/*Reads the value from a Real Time Clock (RTC) DS1307 and displays it in the serial monitor
*
*Created by D. Sjunnesson 1scale1.com d.sjunnesson (at) 1scale1.com
*
*Created with combined information from
*http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1180908809
*http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1191209057
*
*
*Big credit to mattt (please contact me for a more correct name...) from the Arduino forum
*which has written the main part of the library which I have modified
*
*/
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h> // written by mattt on the Arduino forum and modified by D. Sjunnesson
void setup()
{
Serial.begin(9600);
RTC.stop();
RTC.set(DS1307_SEC,00); //set the seconds
RTC.set(DS1307_MIN,00); //set the minutes
RTC.set(DS1307_HR,21); //set the hours
RTC.set(DS1307_DOW,1); //set the day of the week
RTC.set(DS1307_DATE,13); //set the date
RTC.set(DS1307_MTH,2); //set the month
RTC.set(DS1307_YR,12); //set the year
RTC.start();
}
void loop()
{
}
/*Reads the value from a Real Time Clock (RTC) DS1307 and displays it in the serial monitor
*
*Created by D. Sjunnesson 1scale1.com d.sjunnesson (at) 1scale1.com
*
*Created with combined information from
*http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1180908809
*http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1191209057
*
*
*Big credit to mattt (please contact me for a more correct name...) from the Arduino forum
*which has written the main part of the library which I have modified
*
*/
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h> // written by mattt on the Arduino forum and modified by D. Sjunnesson
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
Serial.print(":");
Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
Serial.print(":");
Serial.print(RTC.get(DS1307_SEC,false));//read seconds
Serial.print(" "); // some space for a more happy life
Serial.print(RTC.get(DS1307_DATE,false));//read date
Serial.print("/");
Serial.print(RTC.get(DS1307_MTH,false));//read month
Serial.print("/");
Serial.print(RTC.get(DS1307_YR,false)); //read year
Serial.println();
Wire.beginTransmission(1);
Wire.send(DS1307_HR);
Wire.send(DS1307_MIN);
Wire.endTransmission();
}
Die RTC muss gestartet werden nach dem Stellen im Bit 7 des Controlbyte 0x00.
Das Bit muss auf 0 geschrieben werden (CH ClockHalt). Da es nach einem neustart automatisch auf 1 gesetzt ist und dadruch "steht".
Bin erst heute dazu gekommen die Hilfen auszuprobieren. Das Spiel gestern abend war wichtiger 8)
@Megaionstorm:
Leider bringt die Library folgen Fehlermeldungen: In file included from sketch_jun14a.cpp:17: F:\arduino\arduino-1.0.1\libraries\DS1307/DS1307.h:47: error: 'boolean' has not been declared F:\arduino\arduino-1.0.1\libraries\DS1307/DS1307.h:48: error: 'boolean' has not been declared F:\arduino\arduino-1.0.1\libraries\DS1307/DS1307.h:55: error: 'byte' does not name a type
Ich bin nicht so der Crack, dass ich wüsste wo ich die Library korrigieren müsste.
Zur Anzeige: Ja, später einmal.
@volvodani
Wie kann ich gezielt dieses Bit auslesen bzw. auf 0 setzen?
Hi eberduino,
wenn du die Lib benutzt machst du das mit " RTC.start(); " nach dem Stellen der Uhr. Aber beachte das muss du nicht immer tun nur nach dem Stellen der Uhrzeit. Am besten so wie Megaionstorm im Sketch Uhr stellen beschrieben hat.
Ich habe diese Lib nicht benutzt sondern alles "selber" gemacht. Da hat ich auch das Problem das man die 1307 starten muss (habe lange danach gesucht), die 1337 braucht das nämlich nihct die läuft immer los deswegen bin ich da einem Pferd aufgesessen.
Guß
Daniel
Langsam glaube ich hat das Ding einen weg bekommen.
Ich habe mir die Entwicklungsumgebung 0022 installiert und die Library von DS1307 geladen. Dann den ersten Teil des Sketches hineinkopiert, überprüft (keine Fehler) und hochgeladen. Da sollte wohl der 13.02.2012 21:00:00 drinstehen. Und was steht drin?
Mist!
Wenn SCL und SDA nicht richtig angeschlossen wären, dürfte doch nix kommen, oder liege ich da falsch.
Bin drauf und dran mal zu untersuchen, was passiert, wenn ich 220V Wechselstrom an den RTC anlege... :0 :0 :0 :0
Wenn ihr jetzt auch keine Idee mehr habt, bestell ich mir 'ne neue RTC. Nur Mist dass ich wieder einen Monat warten muss. Die Chinetzen sind einfach grottenlangsam.
ich schäme mich so, dass ich nur ganz klein unter dem Tisch hervorschaue.
Verkabelungsfehler. Ich hatte SCL und SDA auf 2 und 3 digital. Ein anderer Sketch wollte die dorthin haben. Sie gehören aus irgendeinem Grund aber auf 4 und 5 analog. Wo liegt der I2C-Bus wirklich? Sehe ich irgendwo wohin die definiert sind?
Für eure Geduld schließe ich alle Beteiligten heute in mein Nachtgebet ein. Ihr seid toll!!!!
eberduino:
... Ich hatte SCL und SDA auf 2 und 3 digital. ... Sie gehören aus irgendeinem Grund aber auf 4 und 5 analog. Wo liegt der I2C-Bus wirklich? Sehe ich irgendwo wohin die definiert sind?
Beim ATmega168 (ältere Arduino 2009) und ATmega328 (neuere Arduino 2009 und Arduino UNO) liegt die I2C Schnittstelle auf A4 und A5. Das ist einfach so. Intern sind diese Pins mit der Hardware für die I2C Schnittstelle verbunden. Das gleiche gilt für die serielle Schnittstelle mit dem UART Pin D0 und D1, der SPI-Schnittstelle (Pins 10 bis 13), der PWM Ausgängen ( D3,D5,D6,D9,D10,D11) den Level-getriggerten Interrupteingängen ( D2 und D3) (Flankengetriggert können alle sein).
Beim ATmega1280 und ATmega2560 (Arduino MEGA und MEGA 2560, MEGA ADK) ist die I2C auf pin D20 und D21.
Alle Arduino R3-Versionen haben 2 pin neben AREF mit der I2C Schnittstelle um den UNO und MEGA zu vereinheitlichen und Shields kompatibel für beide zu machen.
Bei kurzen I2C Leiterbahnen genügen oft die internen Pullup-Widerstände die automatisch von der Bibiothek aktiviert werden damit der Bus funktioniert.
Nach meinem persönlichen Waterloo traue ich mich hier (fast) nichts mehr zu posten. Ganz demütig frage ich dennoch:
Uwe, Du schreibst:
Das gleiche gilt für die serielle Schnittstelle mit dem UART Pin D0 und D1, der SPI-Schnittstelle (Pins 10 bis 13),......
Ich habe in einem Sketch nun flogende Definition für die SPI-Schnittstelle gefunden:
// Ports
int PIN_CS = PINB2; // chip select
int PIN_MOSI = PINB3; // master out slave in
int PIN_MISO = PINB4; // master in slave out
int PIN_CLOCK = PINB5; // clock
Habe ich recht, wenn hier die HW-Ausgänge/-Eingänge am ATmega328 gemeint sind? Das würde sich mit deiner Pinbeschreibung decken. Nur mit dem PINB2 habe ich noch Probleme.
Das ist aus einem Code für den Zugriff auf eine SD-Karte. Überall steht, dass der Zugriff auf die SD-Card mit Pin4 (CS) geschehen soll. Pin(4) auf dem Board würde aber bedeuten: HW-Pin auf dem Atmega328 => PINPD3. ????
Soll ich dieses Thema unter einem neuen Thread posten?
Bei der SPI sind nur MOSI MISO CLK fest den Chip Select (CS) kannst du hinlegen wo du willst.
Damit kannst du dann mehrere SPI Devices über den Bus laufen lassen in dem du einen bestimmten anwählst.
Achtung angweählt heisst bei SPI LOW und HIGH ist abgewählt.
Gruß
Daniel