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
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.
Sorry, aber jetzt bin ich irgendwie überfordert... :(
Klaus M. schrieb:
> Sorry, aber jetzt bin ich irgendwie überfordert... :(
Womit ?
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...
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
Klaus M. schrieb:
> Habe in txt umbenannt
Das klappt so nicht.
Probiere es mit angehängtem .bat
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...
probier ich morgen, muß jetzt los...
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):
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 | }
|
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%
|
Fehler
Kann syntaktisch nicht verarbeitet werden...
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.
|