RTC DS1307 1Hz

#3978468
Lesenswert?

Hallo @ all,

Ich habe einen Arduino Uno und einen RTC DS1307.
Die library für das RTC und I2C habe ich eingefügt.
Ich möchte von dem RTC nur das 1 Hz Signal haben.
Ich habe noch nicht viel mit dem Arduino gearbeitet.
Wäre schön, wenn mir jemand ein Code gibt/schreibt,
wo ich z.B: an Pin 2 "nur" mein 1 Hz Signal anliegen habe.

Danke im Voraus.

Mit freundlichen Grüßen.
#3980210
Lesenswert?

ok habe mich etwas umgeschaut

kam zu folgendem code:


#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68 // each I2C object has a unique bus 
address, the DS1307 is 0x68

void setup()
{
 Wire.begin();
}

void sqw1() // set to 1Hz
{
 Wire.beginTransmission(DS1307_I2C_ADDRESS);
 Wire.write(0x07); // move pointer to SQW address
 Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary)
 Wire.endTransmission();
}


void loop()
{
 sqw1();
 delay(30000);
}



habe es wie auf dem bild angeschlossen und zusätzlich an dem SQ-Pin ein 
Pull-up Widerstand und (eine LED) angeschlossen.

Frage: Wieso leutet die LED nicht im 1 Hz Takt ???
Angehängte Dateien:
#3980238
Lesenswert?

Hallo @ all

#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68 // each I2C object has a unique bus
address, the DS1307 is 0x68

void setup()
{
 Wire.begin();
}

void sqw1() // set to 1Hz
{
 Wire.beginTransmission(DS1307_I2C_ADDRESS);
 Wire.write(0x07); // move pointer to SQW address
 Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary)
 Wire.endTransmission();
}


void loop()
{
 sqw1();
 delay(30000);
}



habe es wie auf dem bild angeschlossen und zusätzlich an dem SQ-Pin ein
Pull-up Widerstand und (eine LED) angeschlossen.

Frage: Wieso leutet die LED nicht im 1 Hz Takt ???

Danke im Voraus

Mit freundlichen Grüßen
Angehängte Dateien:
#3980294
Lesenswert?

Andreas Claus schrieb:
> Frage: Wieso leutet die LED nicht im 1 Hz Takt ???

weil du zwar den Ausgang eingeschaltet hat, aber nicht wie weiter oben 
beschrieben den Oszillator aktiviert hast. Der nach dem anlegen der 
Betriebsspannung durch ein gesetztes Bit 7 im Register 0x00 gesperrt 
ist. Also schreibe einfach mal noch eine 0 in Adresse 0.

Sascha
#3980569
Lesenswert?

Hast du überhaupt schon mal eine Led mit Arduino blinken lassen?
Dann solltest du mal dieses Beispiel aus der Arduino IDE ausprobieren.
1
/*
2
  Blink
3
  Turns on an LED on for one second, then off for one second, repeatedly.
4
 
5
  This example code is in the public domain.
6
 */
7
 
8
// Pin 13 has an LED connected on most Arduino boards.
9
// give it a name:
10
int led = 13;
11

12
// the setup routine runs once when you press reset:
13
void setup() {                
14
  // initialize the digital pin as an output.
15
  pinMode(led, OUTPUT);     
16
}
17

18
// the loop routine runs over and over again forever:
19
void loop() {
20
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
21
  delay(1000);               // wait for a second
22
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
23
  delay(1000);               // wait for a second
24
}
#3980577
Lesenswert?

Andreas Claus schrieb:
> Frage: Wieso leutet die LED nicht im 1 Hz Takt ???

gute Frage, welche LED, welcher Strom welche Spannung?

Andreas Claus schrieb:
> und zusätzlich an dem SQ-Pin ein
> Pull-up Widerstand

aha, aber den willst du nicht nennen, könnte ja sein wir merken was.

woher weisst du ob deine LED mit deinem Widerstand überhaupt leuchten 
kann?
Was denkst du kann der SQ Pin als Source oder Sink liefern?
#3980581
Lesenswert?

Joachim, er meint die auf dem Arduino an Pin 13 hängende Led.
Wenn er die nun mal gar nicht erst eingebunden hat, wird sie auch nicht 
leuchten.
Das ist hier echt immer so, als würde ein Baby noch nicht mal aufstehen 
können, aber gleich mit dem Kunstturnen beginnen wollen.

Der TO hat sich das Script irgendwoher kopiert und jetzt soll der 
Kühlschrank melden, wann das das Bier kalt ist.
#3981208
Lesenswert?

ok habe mich vieleicht etwas falsch ausgedrückt.


mein Ziel ist es den RTC ds1307 so zu beschreiben das der SQ Pin des 
ds1307 1Hz ausgibt. Mehr benötige ich gar nicht von dem RTC.

Da ich noch nicht so viel Erfahrung mit dem RTC habe, habe ich einige 
Probleme damit.

Deswegen wollte ich mich an Euch wenden.

Meine Frage ist, wie ich mit dem oben geschrieben Code (Angeschlossen 
wie auf dem Bild), das so umsetze, dass ich an dem SQ Pin 1Hz habe.

Ich wollte nur eine LED anschließen um zu schauen ob ich 1Hz Signal am 
SQ habe. <--- Das ist aber nicht so wichtig.

Es wäre sehr sehr schön, wenn mir jemand hilft den Code so anzupassen, 
sodass am SQ Pin 1Hz herauskommt.

Ich suche schon ewig nach einer Lösung. Deswegen habe ich die Frage 
etwas umständlich geschrieben.

Vielen Dank im Voraus.


Mit freundliche Grüßen.
#3981283
Lesenswert?

Sascha Weber schrieb:

> weil du zwar den Ausgang eingeschaltet hat, aber nicht wie weiter oben
> beschrieben den Oszillator aktiviert hast. Der nach dem anlegen der
> Betriebsspannung durch ein gesetztes Bit 7 im Register 0x00 gesperrt
> ist. Also schreibe einfach mal noch eine 0 in Adresse 0.


Vielen Dank für die Infos, da ich mit Arduino + RTC nicht viel Erfahrung 
habe, weis ich nun nicht wie ich das in den Code schreibe.

Wäre sehr sehr nett von dir, wenn du mir da nochmal weiterhelfen 
könntest.

Wie gesagt ich benötige am SQ Pin nur 1Hz Signal. Mehr brauche ich vom 
RTC nicht.

Danke im Voraus.
#3981344
Lesenswert?

Andreas Claus schrieb:
> Sascha Weber schrieb:
>
>> weil du zwar den Ausgang eingeschaltet hat, aber nicht wie weiter oben
>> beschrieben den Oszillator aktiviert hast. Der nach dem anlegen der
>> Betriebsspannung durch ein gesetztes Bit 7 im Register 0x00 gesperrt
>> ist. Also schreibe einfach mal noch eine 0 in Adresse 0.
>
>
> Vielen Dank für die Infos, da ich mit Arduino + RTC nicht viel Erfahrung
> habe, weis ich nun nicht wie ich das in den Code schreibe.
>
> Wäre sehr sehr nett von dir, wenn du mir da nochmal weiterhelfen
> könntest.
>
> Wie gesagt ich benötige am SQ Pin nur 1Hz Signal. Mehr brauche ich vom
> RTC nicht.
>
> Danke im Voraus.

Dann gehe ich mal davon aus das du das gepostete Stück mit dem 
Einschalten des SQ nur irgendwo kopiert hast. Dort wird das Register 7 
(Adresse 7) mit 0x10 beschrieben. Dann solltes es für dich auch kein 
Problem darstellen das Register 0 mit 0 zu beschreiben.
Wenn dir hier der ganze Code fertig vorgesetzt wird hast du am Ende auch 
nichts gelernt - also ruhig mal das Datenblatt des DS anschauen.

Sascha
#3982204
Lesenswert?

Andreas Claus schrieb:
> Wäre sehr nett, wenn mir jemand den fertigen Code schreibt, ich verstehe
> einfach nicht das mit dem I2C und dem Beschreiben des RTCs.

vorne weg brauchst du erst mal #defines
hier mal ein Beispiel zum Lesen und Schreiben der DS3231, DS1307 geht 
äquivalent, solltest klar kommen.

Die DS1307 ist zickiger, Start Clock muss nach fehlender Power wohl 
gesetzt werden damit sie läuft, viel Datenblatt lesen, dann klappt das.

siehe .zip

habe noch den Unterschied zu AVR Studio ohne Arduino vorher, aber du 
willst ja pures Arduino.....

ich hoffe das hilft erst mal, lesen und verstehen, dann sollte das 
Anpassen klappen.

Profi Progger bin ich nicht, geht vielleicht eleganter aber mir reichts.

wenn du SQ auf 1Hz ausgang gesetzt hast wäre eine Überprüfung ja nicht 
schlecht, SQ Ausgan an einen freien Input Port vom Arduino und abfragen 
wenn high Arduino LED an und wenn low Arduino LED aus in der sonst 
leeren Loop Schleife, das RTC setzen der Register macht man ja im Setup.
1
#if defined(__AVR_ATmega328P__)
2

3
  #define ARDUINO_LED      5
4
  #define DDR_ARDUINO_LED  DDRB
5
  #define PORT_ARDUINO_LED PORTB
6
  #define ARDUINO_LED_ON   PORT_ARDUINO_LED|=(1<<ARDUINO_LED)
7
  #define ARDUINO_LED_OFF  PORT_ARDUINO_LED&=~(1<<ARDUINO_LED)
8

9
#elif defined(__AVR_ATmega1284P__)
10
  #define ARDUINO_LED      7
11
  #define DDR_ARDUINO_LED  DDRB
12
  #define PORT_ARDUINO_LED PORTB
13
  #define ARDUINO_LED_ON   PORT_ARDUINO_LED|=(1<<ARDUINO_LED)
14
  #define ARDUINO_LED_OFF  PORT_ARDUINO_LED&=~(1<<ARDUINO_LED)
15

16
#endif
17

18
// im Setup nach RTC Init SQ an Input Port auf Input
19

20
im Loop
21

22
if(input high) ARDUINO_LED_ON;
23
else ARDUINO_LED_OFF;
24

25
sollte blinken
Angehängte Dateien:

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