Uhrzeit von der systemuhr des PC holen.

Hallo ich habe mir ein Programm gebastelt womit ich mein Aquarium steuer. Der Arduino ist dabei an einem Netbook angeschlossen und zeigt mit auf dem Netbook ein Menü über den Externen Serial Monitor Putty. das Programm läuft Stabil ist Zeitgesteuert über die RTC 1307 und alle Funktionen wie Uhrzeit, Datum, einzene Lichtphasen, Pumpensteuerung, Erinnerung an Wasserwechsel sowie Nachfüllautomatik werden über den Monitor Putty angezeigt. Meine frage ist, das Netbook ist mit dem Arduino über USB verbunden. Der Anschluss liefert die Stromversorgung sowie die Uploads. ist es möglich das sich der Arduino automatisch ein oder zweimal am Tag auch die Uhrzeit vom PC holen kann, da der PC im Netzwerk hängt und immer die Aktuelle Zeit hat. Oder geht das nicht ohne Ethernet Shild für den Arduino.

Die wenigsten Betriebssysteme erlauben ein remote login über eine serielle Schnittstelle, heutzutage.

Geht aber sicher, mit einem kleinen eigenen Programm auf dem PC.
Ich denke es ist einfacher vom PC aus zu schicken, als vom Arduino zu fragen.

Der Arduino würde sowieso an der seriellen Schnittstelle hören,
da brauchst du nur ein Programm auf dem PC, was z.B. täglich einmal vom Scheduler beauftragt, die aktuelle Zeit sendet.

Muss man nur aufpassen, dass das Öffnen der seriellen Schnittstelle den Ardiuno möglichst nicht resettet.

Der Serielle Monitor ist ja immer auf, also ich verwende einen Externen Putty 062 der zeigt mir auf dem Menü am Netbook alle Funktionen des Arduino Programm an und die Zeitlichen Abläufe, ich weis oder vielmehr ich habe ein kleinen sketsch für den Seriellen Monitor des Arduino damit kann ich die Uhrzeit in der Eingabeleiste im Seriellen Monitor eingeben und die Uhr wird auf dem Arduino also die RTC neu gestellt ohne das der Arduino resettet. Ich denke mir das wenn ich das von Hand machen kann es doch auch irgendwie gehen müsste das vom PC ausführen zu lassen.

malerlein:
Der Serielle Monitor ist ja immer auf, also ich verwende einen Externen Putty 062 der zeigt mir auf dem Menü am Netbook alle Funktionen des Arduino Programm an und die Zeitlichen Abläufe, ich weis oder vielmehr ich habe ein kleinen sketsch für den Seriellen Monitor des Arduino damit kann ich die Uhrzeit in der Eingabeleiste im Seriellen Monitor eingeben und die Uhr wird auf dem Arduino also die RTC neu gestellt ohne das der Arduino resettet. Ich denke mir das wenn ich das von Hand machen kann es doch auch irgendwie gehen müsste das vom PC ausführen zu lassen.

Oh, war mir nicht bewusst, dass du immer (Edit: wohl dieser thread ) ein Terminalprogramm ( deinen "Externen Putty 062" ? ) aktiv hast.
Der belegt natürlich die externe Schnittstelle und lässt keinen anderen ran.

Ob man den "Externen Putty 062" so konfigurieren kann, dass er von sich aus was sendet ( und dann noch die jeweils aktuelle Zeit ), weiss ich nicht.
Ein eigenes PC - Programm, das neben der Anzeige der Serial.print Ausgaben ab und zu die Uhrzeit sendet, und so den putty ersetzt, sollte aber leicht zu machen sein. Muss ja nicht alles können, was putty kann, sondern nur das was du brauchst.
... Und könnte sich auch anstelle des Arduino um die graphische Gestaltung der Anzeige kümmern ...
Nachtrag: ... Und könnte auch eine komfortable grafische Bedienoberfläche sein, wenn es mehr als nur "Vollautomatik" sein darf ...


Und zum RTC Stellen lädst du erst einen anderen kleinen Spezial-Sketch ?
Da hast du auch noch Optimierungspotential, wenn ich das richtig verstanden habe .

malerlein:
Ich denke mir das wenn ich das von Hand machen kann es doch auch irgendwie gehen müsste das vom PC ausführen zu lassen.

Ja, natürlich. So wie Michael schon schrieb.

Du kannst Dir beispielsweise ein Batchdatei machen, mit folgendem Inhalt:

echo %date% >\.\COM11
echo %time% >\.\COM11

Damit würde das Datum und Uhrzeit an COM11 gesendet werden.

Allerdings gibt es mehrere Knackpunkte:

Erstens muss Dein angeschlossenes Arduino-Board immer dieselbe COM-Schnittstelle haben.

Zweitens musst Du schaltungstechnisch beim Arduino den Auto-Reset abschalten, nachdem Du Deinen Sketch hochgeladen hast. Sonst würde nämlich beim Öffnen der Schnittstelle zum Senden der Arduino einen Reset ausführen und die Zeichen empfangen, während gerade der Bootloader läuft, also Dein Sketch davon gar nichts sehen. Dazu kannst Du einen Kondensator geeigneter Größe zwischen die GND und RESET Pins schalten.

Und last but not least darf weder der serielle Monitor noch ein Terminalprogramm gleichzeitig auf derselben Schnittstelle laufen. Denn es kann immer nur EIN Programm zur Zeit mit der seriellen Schnittstelle verbunden sein. Entweder das Upload-Programm Avrdude ODER der serielle Monitor von Arduino ODER ein anderes Terminalprogramm wie Putty ODER die Batchdatei, die Zeit und Datum sendet.

Ein geeigneter Zeitpunkt zum Senden wäre beispielsweise das Hochfahren des Rechners, so dass man die Batch-Datei beispielsweise aus der Autostart-Gruppe heraus ausführen lassen könnte. Aber wie gesagt: Solange das Arduino-Board sein Autoreset beim Öffnen der Schnittstelle ausführt, ist es auf diese Weise Essig. Entweder Autoreset abschalten, oder Du brauchst eine Software, die zeitverzögert erst die COM-Schnittstelle öffnet, ein paar Sekunden wartet bis das Arduino-Board gebootet hat, und dann erst Zeit und Datum sendet. Mit einem einfachen Batch-Skript auf dem PC funktioniert das meines Wissens nach aber nicht, da eine ECHO-Zeile mit Umleitung auf den COM-Port die Schnittstelle immer öffnet, die Daten sendet und sofort wieder schließt.

@michael_x
Ich glaube ein eigenes Programm kam hier nicht in Frage, da er eher Anfänger ist und das für ihn etwas zu schwierig wäre.

Obwohl du im Prinzip natürlich recht hast. Die .NET Serial Klasse z.B. ist sehr einfach

Also ist es wahrscheinlich einfacher aus dem Seriellen Monitor per Eingabe die Uhr zu stellen, da ich ja für den Seriellen Monitor von dem Arduino so ein Sketsch irgend wo gespeichert habe, da gibt man über die Eingabe Zeile : z.B. 12:15:00 5-7-13 ein und dann stellt sich die RTC richtig ohne zu resetten, da der Serielle Monitor ja auf ist und erst resettet wenn ich ihn verlasse. Das müsste man doch auch z.B. durch Tastendrock oder vielmehr durch Eingabe im Putty bewerkstelligen können oder ? Ich muss sagen es ist von mir immer nur so ein Gedanke und ich weis nicht ob es geht, aber ich habe mir so gedacht in dem Programm ein Eingabe Feld zu erstellen wo man die Zeit eingibt wenn es eben nicht so geht das die zeit vom PC kommt und die Zeit/Datum zum Arduino gesendet wird, da sollte der Arduino ja nicht resetten, da der Monitor ja nicht verlassen wird. Wenn meine Gedanken nicht realisierbar ist , sagt es mir , dann werde ich eventuell doch noch auf eine Inet verbindung umsteigen für den Arduino.

hi,

ja, das geht so, wie Du denkst. Du mußt halt das programm zur zeiteingabe mit Deinem zur aquariumssteuerung kombinieren.

gruß stefan

Ich glaube ein eigenes Programm kam hier nicht in Frage, da eher Anfänger ist und dass für ihn etwas zu schwierig wäre.

Ein Ethernetshield ist dann aber auch keine Lösung, finde ich.

Da passt wohl eher der Tip von Eisebaer Stefan, die sketches zum Zeitstellen und die Aquarium-Automatik zusammenzulegen, und die Zeiteingabe in putty zu machen ( manuell ).

Zu bedenken ist da, dass putty vermutlich (? wer kennt putty ?) jeden Buchstaben einzeln sendet, und nicht wie SerialMonitor auf Enter wartet.
Man könnte auch den Zeit-Stellen Sketch so schreiben, dass jedes
'+' die Zeit um 1 Minute vorstellt,
'-' die Zeit um 1 Minute zurückstellt,
'S' die Uhr um 1 Stunde vorstellt ( Sommer )
'W' die Uhr um 1 Stunde zurückstellt ( Winter )

ja das wäre natürlich eine Lösung, denn die RTC1307 läuft ja ziemlich genau, sie geht jetzt im grunde innerhalb 14 TG so um die 30 Sekunden nach, aber das könnte ich eventuell noch nachstellen im Programm. es ist ja nicht so als wenn was wichtiges von abhängt, im grunde ist es egal ob mein licht um 22 Uhr aus geht oder ein/zwei Minuten früher oder später. Aber ich habe mir das Programm nunmal so auf den Putty eingerichtet und wenn ich noch eingaben machen kann ist es ja in Ordnung. Ich habe noch soviel Platz auf dem Monitor , da muss was hin und ich denke einmal besser kann man es nicht lernen als aus zu probieren.

monitor.bmp (769 KB)

Das ist ein Screenshot von meinem Großen PC so wie Putty mir alles zeigt, nur da kann man jetzt nicht die Uhrzeit und das Datum sehen da ich da nur einen Nackte Mega dran habe und nicht die RTC wo die Uhr/Datum ausgelesen und angezeigt wird.

hi,

im grunde ist es egal ob mein licht um 22 Uhr aus geht oder ein/zwei Minuten früher oder später

da mußt Du schon aufpassen. bei kühen zum beispiel müssen die zeiten extrem genau eingehalten werden, sonst geben sie gleich weniger licht.

ich weiß ja nicht, wozu Du Deine fische nützt...

gruß stefan

Es gibt Fische die geben mehr Licht als Kühe, wenn sie richtig eingestellt sind. :wink: :wink:

Die meiste Uhr-Einsteller können nur ganze Minuten stellen, aber dann werden jeweils die Sekunden auf 00 gestellt.
Damit kann man tatsächlich die Zeit auf eine halbe Sekunde genau stellen und die Qualität der DS1307 prüfen...

Das ist ein Riffaquarium, die Korallen,Anemonen und Korallenfische können keine UHR lesen und denen kommt es immer nur aufs Futter an. nur es muss eine gewisse Zeit beleuchtet werden damit die Korallen und deren Zooxantellen, sprich Algen nicht absterben sowie die Pumpensteuerung damit im Becken ungefähr die Strömung Verhältnisse wie im Meer herchen. . An Sonsten ist es ein Aquarium zum rein schauen .

hi,

ich hab' grad gesehen, daß Du die 1307er direkt mit wire liest und keine spezielle library benutzt.
genauso kannst Du auch die zeit stellen.

gruß stefan

Ja Stefan,

Das ist ja nicht das Problem, aber dafür muss ich aus meinem Programm raus und das laden. Ich habe einen Sketsch den man einbinden kann damit kann ich beim Arduino im Seriellen Monitor über die Eingabe Zeile Oben die Zeit eingeben ohne das Programm zu verlassen und sowas möchte ich mir in den Putty frickeln... :slight_smile:

hi,

ja, genau das hab' ich gemeint. Du holst in Deinem sketch auf diese art schon die zeit. genauso kannst Du sie aus Deinem sketch auch an die 1307 senden. eingeben ins putty-fenster und von dort an den arduino senden. die gesendeten daten übergibst dann mit wire.send an die 1307.

gruß stefan

Jetzt verstehe ich es, Danke muss ich auf Montag verschieben, ich fahre jetzt zum Wohnwagen

l.G.Jürgen

Irgendwie fehlt mir da so eine wenig das Verständnis zum Sinn der Aktion.
Dein Arduino läuft mit einer RTC = RealTimeClock !?
Warum das mit dem PC synchronisieren ?
... kommen da deine Fische bei µs- oder ms-Abweichungen weshalb auch immer aus dem Tritt ? :grin:
Sind die auch RTC-Synchronisiert ? 8)

So wie ich das bisher auch in anderen Fred's/Postings gelesen habe, willst du do eigentlich nur dein "NetzBuch" als übergroße Anzeige "missbrauchen".
Oder hab ich da was überlesen ?

Falls ja - dann soltest du dich ggf. mal mit der Erstellung eines eigenen Programms für den PC/NetBook befassen, was so nebenbei dem COM-Port lauscht und die überlieferten Daten dann nach deinem Geschmack auf dem Schirm zaubert.

Meiner Meinung nach sind Terminal-Proggis ala Putty & Co. sicherlicherlich dazu in der Lage, eine halbswegs gescheite Formatierung durchzuführen, aber ...
... der Aufwand dazu ist schon erheblich / das ganze eher nicht wirklich nach Wunsch machbar.

In Delphi (ja, auch in C, wer's kann ...) ist das eher ein knapper 100-Zeiler, der am COM lauscht und dann den Screen/das Fenster "updated".
Warum so kompliziert ?

Na ja, wenn man schon die Zeit sekundengenau anzeigt, dann will man sie auch stellen können, alle paar Wochen mal, oder min. 2 mal im Jahr :wink:

Dazu aber erst einen anderen Sketch laden und wieder zurück, das ist nun wirklich nicht "state of the art".

Und wenn man eine semigrafische Terminal-Lösung hat, dann will man sie auch behalten. Da ist malerlein nicht allein :wink:
Ein netbook ist doch eine prima Maschine als VT100 - Simulator und 5V-USB Stromversorger in einem.