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.
Datenblatt lesen und herausfinden, welches Register für den 1hz Takt zu setzen ist. Dann die Dokumentation der TWI Library lesen und herausfinden, wie man ein Register mit I2C beschreibt.
RS0 und RS1 auf 0 setzen = 1Hz SQWE auf 1 setzen um den Ausgang einzuschalten. Anschließend noch die RTC einschalten indem du eine 0 in CH schreibt. Datenblatt: http://datasheets.maximintegrated.com/en/ds/DS1307.pdf Und den Pullup nicht vergessen! Grüße Frank
Mhhh alles sehr sehr schwirig für mich.. wie schreibe ich das denn mit dem Arduino Ich schaue hier als im Internet und finde nix :(
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 ???
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
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
Gefällt dir dieser Thread nicht mehr? https://www.mikrocontroller.net/topic/35619277 BTW: Für Code bitte die Formatierung verwenden:
1 | [c]C-Code[/c] |
S.E.M.G.M. schrieb: > Gefällt dir dieser Thread nicht mehr? > https://www.mikrocontroller.net/topic/35619277 Sry, dieser Link was, bin wohl aus Versehen an die '7' Taste gekommen. Beitrag "RTC DS1307 1Hz"
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 | } |
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?
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.
:
Bearbeitet durch User
F. Fo schrieb: > Joachim, er meint die auf dem Arduino an Pin 13 hängende Led. das konnte ich nicht lesen....... hier jedenfalls leuchten alle LEDs die sollen, auch die Arduino LED im 1s Takt und ganz ohne DS1307 SQ :-) http://www.mikrocontroller.net/attachment/244383/m1284p_m328p.jpg
Joachim B. schrieb: > http://www.mikrocontroller.net/attachment/244383/m1284p_m328p.jpg Da bekommt der TO, meiner Einschätzung nach, nicht mal die Verdrahtung hin.
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.
Du solltest die Uhr auch noch stellen. Mir ist da schon mal seltsames Verhalten aufgefallen wenn nur der Sq Out gesetzt wird.
C-lover schrieb: > Du solltest die Uhr auch noch stellen. Ja das werde ich berücksichtigen. Ich benötige aber nur das 1 Hz Signal, kannst du mir weiterhelfen..?
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.
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
Danke für die Antwort Hänge schon seit mehreren Wochen an diesem Problem Wäre sehr nett, wenn mir jemand den fertigen Code schreibt, ich verstehe einfach nicht das mit dem I2C und dem Beschreiben des RTCs. Den Rest meines Projektes schaffe ich alleine. Ich benötige nur dieses 1Hz Signal.
Andreas Claus schrieb: > Hänge schon seit mehreren Wochen an diesem Problem Und in der Zeit hast du es nicht fertig gebracht, dir die Library mit den Beispielen für den DS1307 herunterzuladen und anzusehen, wie man über I²C ein paar Registerwerte ändert? http://playground.arduino.cc/Code/Time
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 |
:
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.