Hallo, ich möchte bei einer RTC DS3231 erstmalig die Zeit einstellen. Die RTC hängt an einem Arduino Nano. Bis jetzt habe ich immer in einem Sketch die Zeit von Hand eingetragen und somit den DS3231 "gestellt". Ich habe nun diese Anleitung gefunden: http://www.instructables.com/id/Synchronise-DS3221-RTC-with-PC-via-Arduino/step2/Send-the-time-from-PC-to-Arduino/ Leider sieht die Ausgabe der Batch-Datei bei mir nicht so wie gewünscht aus (siehe Anhang). Kann mir bitte jemand bei der Fehlersuche helfen, bzw. gibt es eine andere einfache Möglichkeit die PC-Zeit zu übertragen? Da soll nur einmalig, bei der ersten Inbetriebnahme bzw. nach einem Batteriewechsel geschehen. Vielleicht gibt es ja schon eine gute funktionierende Anleitung. Vielen Dank
ich hoffe du kannst programmieren der Code kann noch Fehler enthalten, funktioniert aber bis jetzt ist ja nur ein Ausschnitt wenns klemmt melden
:
Bearbeitet durch User
Klaus M. schrieb: > Da soll nur einmalig, bei der ersten Inbetriebnahme bzw. nach einem > Batteriewechsel geschehen. Localtime Format bei dir entsprechend verändern, wirkt manchmal Wunder... P.S. Oder folgendes als z.B. ChkTime.bat probieren, sehen was dein PC dazu meint:
1 | @echo off |
2 | for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j |
3 | |
4 | @echo Datum:%ldt:~6,2%.%ldt:~4,2%.%ldt:~0,4% |
5 | @echo Zeit:%ldt:~8,2%:%ldt:~10,2%:%ldt:~12,2% |
Wenn es nicht stimmt, Format verändern.
:
Bearbeitet durch User
Marc V. schrieb: > Klaus M. schrieb: >> Sorry, aber jetzt bin ich irgendwie überfordert... :( > > Womit ? mit dem Beitrag von Joachim :) Die Batch-Datei gibt die Zeit und das Datum so aus: Datum:21.03.2017 Zeit:11:10:14 Das muß jetzt auf die richtige Com-Schnittstelle umgeleitet werden >COMx ? Dann muß wahrscheinlich auf dem Arduino noch ein Sketch laufen, wo die Werte eingelesen und in der RTC gespeichert wird. Gibt es da vielleicht schon ein fertiges Skript? Ich wundere mich nur. Meistens soll man die Zeit von Hand eintragen und dann auf den Arduino übertragen. so in der Form: setup { setTime(15, 04, 00, 18, 3, 2017); //set the system time to 23h31m30s on 13Feb2009 RTC.set(now()); //set the RTC from the system time } Vielleicht hab ich mir das aber auch zu einfach vorgestellt.
Klaus M. schrieb: > Das muß jetzt auf die richtige Com-Schnittstelle umgeleitet werden >COMx > ? Nein. Dein Arduino erwartet die Daten so:
1 | Sxx, |
2 | Dxx, |
3 | Hxx, |
4 | Txx, |
5 | Mxx, |
6 | Jxxxx, |
Wofür auch die Komma gut sein soll... > Dann muß wahrscheinlich auf dem Arduino noch ein Sketch laufen, wo die > Werte eingelesen und in der RTC gespeichert wird. Selbstverständlich, irgendwo auf der verlinkten Seite muss es auch einen Sketch geben, oder ?
Klaus M. schrieb: > Sorry, aber jetzt bin ich irgendwie überfordert... :( na denn, programmieren lernen gcc gibt dir sehr schön compile Datum und Zeit aus, das kann man prima nutzen um auch gleich die RTC beim Sketch aufpielen zu stellen +- Tranfertempo Man kann auch mit einem beliebigen Computer und Terminal Programm die Uhr per Kommando stellen time11:56:35 und oder date2017/03/21 wenn dich das überfordert, erst mal lernen.
Ja, diesen Sketch gibt es. Diesen kann man auch fehlerfrei auf den Arduino flashen. Wenn du die Ausgabe der Batch-Datei anschaust und mit dem Bild in meinem ersten Post vergleichst, siehst du was ich meine. Die Ausgabe der verlinkten Batch-Datei funktioniert bei mir nicht richtig, und somit wird die Zeit auch nicht übertragen.
Klaus M. schrieb: > Die Ausgabe der verlinkten Batch-Datei funktioniert bei mir nicht > richtig, und somit wird die Zeit auch nicht übertragen. Woher kommt die Fehlermeldung: "92" kann syntaktisch...
:
Bearbeitet durch User
Keine Ahnung. Ich sehe auch nur die Ausgabe wie im Bild. Die Zahl ist aber bei jedem Aufruf von Time_Send.Bat eine andere. Vielleicht hat das was mit den Sekunden zu tun?
Klaus M. schrieb: > Keine Ahnung. Ich sehe auch nur die Ausgabe wie im Bild. Die Zahl ist > aber bei jedem Aufruf von Time_Send.Bat eine andere. Vielleicht hat das > was mit den Sekunden zu tun? Sende dein .bat file
Funktioniert auch nicht. Ist der gleiche Fehler. Sieht man auch ohne Arduino. Entweder alle Com Zeilen auskommentieren oder Com1 (falls vorhanden nehmen). Der Fehler ist der Gleiche. Wenn man mehrmals hintereinander probiert kommt auch eine andere Fehlermeldung. Habe leider keinen Screenshot gemacht, aber es hat irgenwas mit dem Zahlenformat zu tun. Entweder es wird eine Dezimalzahl angezeigt, wo eine Hex erwartet wird oder umgekehrt. Wie gesagt kam nur einmal und lässt sich nicht provozieren.
Klaus M. schrieb: > Der Fehler ist der Gleiche. Wenn man mehrmals hintereinander probiert > kommt auch eine andere Fehlermeldung. Habe leider keinen Screenshot > gemacht, aber es hat irgenwas mit dem Zahlenformat zu tun. Entweder es Probiere nur das (direkt im DOS Fenster):
1 | wmic os get LocalDateTime |
und mache Screenshot.
Ist im Anhang. Auch wenn es nicht klappen sollte... Vielen Dank schon mal für die Mühe
Klaus M. schrieb: > Ist im Anhang. Irgendwas stimmt nicht mit Abfragen. Probieren:
1 | mode COM5 BAUD=9600 PARITY=n DATA=8 |
2 | @echo off |
3 | for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j |
4 | set hours=%ldt:~8,2% |
5 | set minutes=%ldt:~10,2% |
6 | set seconds=%ldt:~12,2% |
7 | |
8 | echo S%ldt:~12,2% >\\.\COM5 |
9 | echo D%ldt:~10,2% >\\.\COM5 |
10 | echo H%ldt:~8,2% >\\.\COM5 |
11 | |
12 | echo T%ldt:~6,2% >\\.\COM5 |
13 | echo M%ldt:~4,2% >\\.\COM5 |
14 | echo J%ldt:~0,4% >\\.\COM5 |
15 | |
16 | @echo Datum:%ldt:~6,2%.%ldt:~4,2%.%ldt:~0,4% |
17 | @echo Zeit:%ldt:~8,2%:%ldt:~10,2%:%ldt:~12,2% |
Sollte durchgehen...
Jetzt gehts!!!!!!!!!!! Ich bin begeistert!!!!!!!! Vielen Dank nochmal für die Mühe.
Klaus M. schrieb: > Ich bin begeistert!!!!!!!! > Vielen Dank nochmal für die Mühe. Keine Ursache. Bei mir geht es sowohl mit als auch ohne Abfrage, kann den Fehler der bei dir auftritt, nicht reproduzieren.
Ist auch egal. Ich habe hier ein paar von diesen DS3231 und die müssen alle gestellt werden. Jetzt brauche ich die nur aufs Steckbrett zu stecken, dann die Batch ausführen und fertig. Ist doch viel eleganter als immer die neue Zeit von Hand eingeben. Danke für die Hilfe
Klaus M. schrieb: > stecken, dann die Batch ausführen und fertig. Ist doch viel eleganter > als immer die neue Zeit von Hand eingeben. Danke für die Hilfe Falls du Zeit hast, probiere mal folgendes:
1 | mode COM5 BAUD=9600 PARITY=n DATA=8 |
2 | @echo off |
3 | for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j |
4 | set hours=%ldt:~8,2% |
5 | set minutes=%ldt:~10,2% |
6 | set /A seconds=%ldt:~12,2%+1 |
7 | set miliSeconds=%ldt:~15,3% |
8 | :loop |
9 | if %TIME% LSS "%hours%:%minutes%:%seconds%.00" goto loop |
10 | for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j |
11 | |
12 | echo S%ldt:~12,2% >\\.\COM5 |
13 | echo D%ldt:~10,2% >\\.\COM5 |
14 | echo H%ldt:~8,2% >\\.\COM5 |
15 | |
16 | echo T%ldt:~6,2% >\\.\COM5 |
17 | echo M%ldt:~4,2% >\\.\COM5 |
18 | echo J%ldt:~0,4% >\\.\COM5 |
19 | |
20 | @echo Datum:%ldt:~6,2%.%ldt:~4,2%.%ldt:~0,4% |
21 | @echo Zeit:%ldt:~8,2%:%ldt:~10,2%:%ldt:~12,2% |
Bin gespannt ob das auch durchgeht...
:
Bearbeitet durch User
Habs nicht mehr ausgehalten :) Bei dieser Variante kommt wieder diese Fehlermeldung: Kann syntaktisch nicht verarbeitet werden...
Klaus M. schrieb: > Bei dieser Variante kommt wieder diese Fehlermeldung: > Kann syntaktisch nicht verarbeitet werden... Probiere das (direkt im DOS Fenster):
1 | echo %TIME% |
Ich mache das immer mit unixtime.. dabei brauch man nur im Setup wenn PinX auf High auf einen String warten und innerhalb von 20 Sekunden mit
1 | if(digitalRead(myPin)==high){ |
2 | Serial.setTimeout(20000); |
3 | long unixtime=Serial.parseInt(); |
4 | Serial.setTimeout(1000) |
5 | rtc.adjust(unixtime); //oder andere lib rtc.adjust(DateTime(unixtime)); |
6 | }
|
je nach Library die Uhr setzen..manche Librarys brauchen ein DateTime Objekt.
1 | //DateTime von Bash übergeben "Feb 24 2011 19:20:28"
|
2 | if(digitalRead(myPin)==high){ |
3 | Serial.setTimeout(20000); |
4 | String myDateTime=Serial.readStringUntil('\n'); |
5 | //Hier muss man über Serial "Ein DateTime String übergeben"
|
6 | Serial.setTimeout(1000) |
7 | rtc.adjust(myDateTime); |
8 | }
|
Kommt halt drauf welche Library oder ob sonst noch was am serialPort genutzt wird.. Wenn sonst nix genutzt wird kann man das mit 3 zusätzlichen Zeilen umsetzen anstatt der Pin Abfrage. Beispiel Sketch.. nur unxitime in die Konsole von unixtime.de kopieren (Selbst noch importen ;) und RTC starten):
1 | void setup() { |
2 | |
3 | Serial.begin(115200); |
4 | Serial.setTimeout(30000); |
5 | unsigned long unixtime=Serial.parseInt(); |
6 | rtc.adjust(unixtime); |
7 | // oder andere RTC Lib
|
8 | //rtc.adjust(DateTime(unixtime));
|
9 | }
|
10 | |
11 | void loop() { |
12 | // put your main code here, to run repeatedly:
|
13 | }
|
:
Bearbeitet durch User
Und das ?
1 | mode COM5 BAUD=9600 PARITY=n DATA=8 |
2 | @echo off |
3 | for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j |
4 | set hours=%ldt:~8,2% |
5 | set minutes=%ldt:~10,2% |
6 | set /A seconds=%ldt:~12,2%+1 |
7 | set miliSeconds=%ldt:~15,3% |
8 | :loop |
9 | if %TIME% LSS %hours%:%minutes%:%seconds%,00 goto loop |
10 | for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j |
11 | |
12 | echo S%ldt:~12,2% >\\.\COM5 |
13 | echo D%ldt:~10,2% >\\.\COM5 |
14 | echo H%ldt:~8,2% >\\.\COM5 |
15 | |
16 | echo T%ldt:~6,2% >\\.\COM5 |
17 | echo M%ldt:~4,2% >\\.\COM5 |
18 | echo J%ldt:~0,4% >\\.\COM5 |
19 | |
20 | @echo Datum:%ldt:~6,2%.%ldt:~4,2%.%ldt:~0,4% |
21 | @echo Zeit:%ldt:~8,2%:%ldt:~10,2%:%ldt:~12,2% |
:
Bearbeitet durch User
Klaus M. schrieb: > Fehler > Kann syntaktisch nicht verarbeitet werden... Kann nicht nachvollziehen, auf jeden Fall hat es mit %TIME% zu tun. Bei dir ist es ein Komma, bei mir ist es ein Punkt. Trotzdem, ich kann es bei mir mit Punkt und Komma vergleichen, es geht immer durch... Egal, auch so hast du max. 1 sec. Fehler (wenn überhaupt).
Marc V. schrieb: > Egal, auch so hast du max. 1 sec. Fehler (wenn überhaupt). Sehe ich auch so. Man muß nicht immer alles verstehen. Im Endeffekt zählt das Ergebnis und das wurde zu 100% erfüllt. Vielen Dank noch einmal dafür
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.