DIE SELTSAME UHR IN NTP
Liebe Elektrofreunde,
Es ist eine Weile her’ von Zeit, dass ich keine neuen Veröffentlichungen sehe .... Ich hoffe, es ist nicht die Schuld eines Virus und ich hoffe, Sie sind alle bei guter Gesundheit. Ich persönlich habe nicht (Glücklicherweise) Probleme, aber aus sozialer Sicht hätte ich eine industrielle Menge. Ich lebe zu 1000 Meter in einem Land, das ein Touristenziel sein sollte: Aber in dieser Zeit durch das Land zu laufen ist wie in einer Wüste. In der Tat ist die Wüste vielleicht lebendiger.
Aber lassen wir es in Ruhe und kommen wir zum Zweck dieses Artikels. Inzwischen wissen Sie, dass ich von Uhren besessen bin und ich glaube, ich habe ein paar Dutzend der aktuellen und andere, die älter und stillgelegt sind, produziert.
Diesmal habe ich eine Uhr produziert, die nur die Stunden markiert. E und Minuten ?. Ja auch die aber alle 5 Minuten.
Dieses Foto zeigt das fertige Produkt (sozusagen: habe Mitleid mit der Ästhetik): Ich habe es als Grundlage für die 12 LEDs, die die Stunden darstellen, Eine Festplatte, die von einer ausgefallenen Festplatte kannibalisiert wurde. Jede LED repräsentiert eine Stunde gemäß der klassischen Anordnung aller Zifferblätter.
Die folgenden Fotos: Vorderseite der Uhr und interne Hardware:

E und Minuten ??. Auch sie sind vertreten, aber mit einem Schritt von 5 Verwenden Sie die Stunden-LEDs und lassen Sie sie genau für blinken 5 Minuten. Die beiden zentralen LEDs definieren AM / PM.
Nehmen wir ein Beispiel: Erz 10 e 17 Minuten: Die Stundenanzeige leuchtet auf 10 und die Stunde führte "3", die blinkt, bis die Minuten a vergehen 20 Die Stunde führte dazu, dass „4“ blitzte und so weiter. Was passiert im Moment? (zum Beispiel) wie 10,10. Nur die Stundenanzeige „10“ blinkt, um die Anzeige anzuzeigen 10 e 10 Minuten. Und dieses System gilt für alle Minuten, die mit den Stunden übereinstimmen.
Nehmen wir dann an, die Uhr schlägt nie genau auf die Uhrzeit !. Aber wenn wir den Trick kennen, können wir immer sagen, dass es die X Stunden sind, die sich überspannen 5 Minuten. Stattdessen ist die Uhr genau. Warum ?.
Weil ich die verschiedenen RTCs vom Typ DS1307 satt habe, DS3231 und andere, die im Laufe der Zeit nie genau sind und die immer angepasst werden müssen. Es gibt andere Möglichkeiten, einen genauen Zeitplan zu erstellen: Zum Beispiel erhalten Sie aus dem 220V-Netzwerk i 50 Hz verfügbar mit einer sehr einfachen Schaltung und dass mit einer geeigneten Teilerschaltung es möglich ist, die Frequenz von zu erhalten 1 HZ kann die Zählkreise ab den Sekunden ansteuern. Aber diese Lösung war vor einigen Jahrzehnten in Ordnung: Ich habe es selbst benutzt, um die erste Digitaluhr zu produzieren. Es ist klar, dass dieser Weg heute aus einer Reihe von Gründen nicht realisierbar ist: 1) die Spannung 220 es ist gefährlich, 2) Sie benötigen mehrere integrierte, um alles zu machen, 3) Es ist nicht bequem. Also habe ich mich in diesem Projekt jetzt auf das INTERNET verlassen. Das heißt, Abrufen von Uhrzeit und Datum von den NTP-Servern, die die Uhrzeit verwalten. Ich hatte bereits eine Uhr hergestellt, die über ein LCD das vollständige Datum und die Uhrzeit der NTP-Server anzeigt.

Schauen wir uns also die Konstruktionsmerkmale an:
Die verwendete Hardware:
• Mikro Arduino Nano 328 als Hauptmotor für die Verwaltung der Uhr
• Mikro ESP8266_1 zum Verwalten des NTP-Servers
• MAX7219 zur Verwaltung der LEDs. groß: mit 3 Drähte fliegen 64 LED mit nur einem integrierten mit der Möglichkeit, andere Chips in Reihe zu schalten.
• 12 LED (kaltweißes Zylindermodell mit hoher Helligkeit).
• N.1 Bidirektionaler Pegelwandler 3V / 5V zur Anpassung der ESP-Werte an die von Arduino
• N.1 Modulo AMS1117 Controller (da 5V a 3V) um das Mikro-ESP mit Strom zu versorgen
Der Pegelwandler ist erforderlich, da das ESP nur mit 3 V arbeitet und daher alle PIN-Ebenen mit dieser Ebene verwaltet werden. Der Spannungsregler für 3 V wird verwendet, um das ESP unabhängig vom Micro Arduino_Nano mit Strom zu versorgen (welches wiederum einen 3V Ausgang hat).
Software:
IDE von ARDUINO zur Erstellung und Programmierung der Skizze zur Verwaltung des NTP-Servers. Die IDE muss entsprechend konfiguriert sein, um die ESP-Serie in Bezug auf Funktionalität und Vorhandensein der PIN von der kleinsten bis zur vielseitigsten zu erkennen. Die Liste der "KARTEN"Und"BUCHKÄSTEN“. Die MAIN-Skizze für die Verwaltung kann von der ARDUINO-IDE verwaltet werden: Ich persönlich bevorzuge die Verwendung einer anderen IDE mit viel besserer Leistung: CODE:BLOCK. Es funktioniert perfekt für fast alle ARDUINO-Versionen, einschließlich Standardbibliotheken. Es ist sehr schnell und hat eine praktische "automatische Vervollständigung" für jede Funktion / Anweisung. Und die Fehlermeldungen sind viel klarer als die der Arduino IDE. Es wird nicht auf die WIFI-Bibliotheken aktualisiert. Und wenn für die Skizze keine Bibliotheken benötigt werden, fügen Sie sie einfach als .h- und .cpp-Datei in das "Projekt" ein.
Für die Verwaltung von MAX7219 Ich verwende eine "benutzerdefinierte" Bibliothek, die von mir im Vergleich zu den Originalbibliotheken erweitert und geändert wurde (im Netzwerk vorhanden). Es verfügt nicht über die Funktionen und Formen einer Standardbibliothek (Es gibt keine .h- und .cpp-Dateien) aber es ist eine .ino-Datei. Es kann jede Art von LED verwalten, jede Art von Anzeige 7 Segmente und Matrixanzeigemodule 8×8 e 7×5. Per ich zeige a 7 Segmente vom Typ a sind ebenfalls vorgesehen COMMON_ANODE: Dies liegt daran, dass der Chip nur Geräte a handhabt COMMON_CATODE. In diesem Fall ist ein kleiner Hardware-Zusatz erforderlich. Jemand wird sich jetzt fragen, warum man zwei Micro verwendet, um eine Uhr herzustellen, die niemals "GENAU" ist.. Es wäre viel einfacher gewesen, ein ESP32 zu verwenden, das mit mehr als genug Pins ausgestattet ist, um die im Projekt verwendeten Geräte anzusteuern. Aber ich habe zu diesem Zeitpunkt mehrere ESP8266 gekauft und hatte kein Interesse daran, ein ESP32 zu bekommen und die Funktionen neu entdecken zu müssen..
ma, ich wiederhole, Sie sind persönliche Entscheidungen.
Lassen Sie uns nun sehen, wie die gesamte Verwaltungssoftware entwickelt wurde:
ESP-Seite: dieses Mikro produziert von "Espressif”Ermöglicht die vollständige Verwaltung einer Internetverbindung für die Entwicklung von WEB-Seiten (über WIFI) auf einem gängigen Tablet oder PC angezeigt werden. Ich habe mehrere Skizzen angefertigt, um zu versuchen, WEB-Seiten in verschiedenen Größen und Abmessungen zu erstellen. In meinem Projekt "CIABATTA ELETTRONICA" erfolgt die Verwaltung der Relais über eine WEB-Seite, auf der der EIN / AUS-Status des 5 relais.
Leider ist dieses ESP mit PINs sehr geizig: in der Praxis sind sie nur 2 usabili GPIO / 0 und GPIO / 2. ich pin RX / TX Sie werden als serielle Schnittstelle verwendet. Für die Programmierung ist es sehr wichtig, eine Schnittstelle zwischen der Arduino-IDE und dem Mikro selbst zu haben: wenn die Ebenen von GPIO / 0, Sie sind nicht im richtigen Zustand NICHT Sie werden es nie programmieren können: Die IDE erkennt die serielle Schnittstelle auch dann nicht, wenn sie verbunden ist.
Als ich das erste ESP kaufte, kaufte ich auch ein Modul "DEBUGGER“. Dieses Modul wird als serielle Schnittstelle angesehen. Durch Einsetzen des ESP in den Anschluss, Die IDE erkennt den Port und die Programmierung (Masse automatisch auf GPIO / 0) ist richtig gemacht. Das Modul verfügt außerdem über eine Reset-Taste zum Neustart des ESP.

Bevor wir zur physischen Struktur des Projekts übergehen, wollen wir uns die Logik ansehen, mit der die Skizzen entwickelt wurden:
Skizze su ESP8266_1:
Nach den üblichen Einstellungen für die W-LAN (mit Verbindung zum Router und Zuweisung der dynamischen IP-Adresse) Eine serielle Schnittstelle wird geöffnet (Baudrate 19200) verwaltet von der Standardbibliothek "Software_Serial”Mit den Stiften GPIO / 0 und GPIO / 1 Kommen Sie RX / TX die über das Pegelwandlermodul mit zwei Arduino-Pins verbunden sind. EIN "HAND_SHAKE" oder "Ich sende Ihnen Daten, Sie antworten, dass Sie sie erhalten haben”Mit definiertem RX / TX. Dieses erste Interview wird verwendet, um die Winter- / Sommerzeit zu verwalten: Die Skizze erwartet den Code von Arduino. "36"Für Sonnenzeit oder"72"Für die Sommerzeit. Dies liegt daran, dass der NTP-Server nur die Zeit in der Sonnenzeit überträgt, aber die Bibliothek, die sie verwaltet, mit dem "SetTimeOffsetAktualisieren Sie die Uhrzeit auf Sommerzeit, indem Sie den Wert auf einstellen 7200. All dies wird im "Setup" verwaltet.
Nel "Schleife": Sie warten darauf, ein bestimmtes Zeichen vom Arduino zu erhalten, um anzuzeigen, dass das Arduino selbst bereit ist, die HOUR- und MINUTE-Werte zu empfangen, die zum Aktualisieren der Uhr verwendet werden. Erhalten dieses Zeichen, fordert der ESP den NTP-Server auf, die Stundenwerte zu senden, und sie werden empfangen 8 Zeichen im Formular HH:MM:SS und in einer Zeichenfolge gespeichert. Der NTP-Server kann auch Datumswerte senden, die in diesem Fall nicht benötigt werden. Beachten Sie, dass es mehrere Bibliotheken gibt, die NTP-Server verwalten, aber nicht alle sowohl Datums- als auch Zeitwerte verwalten. Die verwendete Bibliothek ist stattdessen vollständig. Anschließend konvertieren wir die Stunden- und Minutenwerte in das Binärformat und erhalten zwei Bytes: er Bytes JETZT (Werte von 00 ein 23) und Byte MINUTI (Werte in Gruppen von 5) nach einer einfachen Dezimal / Binär-Konvertierung. Diese beiden Bytes werden nacheinander seriell an ARDUINO gesendet, das sie zum Aktualisieren der Uhr verwendet. Der Zyklus wird dann von Anfang an fortgesetzt.
HINWEIS: Das soeben beschriebene System ist das neueste einer Reihe von Tests: Zunächst hat der ESP den HH-String gesendet:MM:Vervollständige die SS, die Arduino empfangen und nacheinander in einer ähnlichen Zeichenfolge gespeichert hat, um dann die Konvertierungen durchzuführen und die Zeit zu aktualisieren. Dieses System funktionierte bis zu einem bestimmten Punkt korrekt: dann "wurde es verrückt" in dem Sinne, dass die empfangene Zeichenfolge "DIRTY" mit absolut außer Kontrolle geratenen Werten war. Dies beeinträchtigte die Richtigkeit der Werte. All dies konnte ich über das übliche "Debug" -System erkennen, auf seriellem Monitor, von Nachrichten, um zu überprüfen, was Arduino tatsächlich empfangen hat. Und das ESP hat korrekte Werte gesendet !.
Skizzieren Sie Ihren Arduino (Mikro verwendet Arduino_Nano):
Auch in dieser Skizze wurden die üblichen Einstellungen der Ports vorgenommen, einschließlich der seriellen Standard-Ports und der zugehörigen “Software_Serial” und initialisierte die Bibliothek für die Verwaltung von MAX719 und relativen LEDs, Die erste Operation, die ausgeführt wird, besteht darin, den Code "36" oder "72" an das ESP zu senden, um die Sommer- / Winterzeit einzustellen. Diese Wahl ergibt sich aus einem Jumper auf einem Arduino-Pin, der auf den Boden gebracht oder frei gelassen wird. Nach diesem Senden und Bestätigen durch das ESP endet der Einrichtungszyklus.
Die Sektion SCHLEIFE Es ist einfacher als Sie sich vorstellen können: Sie werden nacheinander gestartet 3 Funktionen: der erste, der die Zeitwerte erhält (die zwei Bytes, die vom ESP gesendet werden), die zweite zum Aktualisieren der Stunden-LEDs und die dritte zum Aktualisieren der Minuten-LED. Und der Zyklus wird fortgesetzt.
Der "Löwe" -Teil ist die Routine, die die "HH" - und "MM" -Werte vom ESP erhalten muss: auch in diesem Fall die "HAND_SHAKE“: Es wird ein Zeichen gesendet, um das ESP zu benachrichtigen. Das ESP antwortet mit dem Senden der beiden konvertierten Byes. Der Test des Stundenwerts bestimmt das Einschalten der AM / PM-LEDs an der Vorderseite der Uhr. Die beiden anderen Routinen kümmern sich um das Testen der HH- und MM-Werte und den Zugriff auf ihre LEDs.
Lassen Sie uns die Logik sehen, mit der die LEDs für die Stunden leuchten, also auch für die Minuten:
Der MAX7219 kann individuell bis zu verwalten 64 LED oder eine Matrix 8×8 (64 LED). Ein Register adressiert die einzelnen Ketten (D0 / D7) während ein anderes Register definiert, welche LED (oder Punkt der Matrix) einschalten (oder ausschalten) abhängig davon, wie ein anderes Register gemäß der folgenden Konfiguration eingestellt wird:

DP, A / G. beziehen sich jeweils auf die Position der Segmente einer klassischen Anzeige a 7 Segmente + der Dezimalpunkt (DP). Opposition a 8 angeschlossene LEDs (gemeinsame Kathode) auf die gleiche Weise, indem jeder LED eine Position von DP zu G zugewiesen wird. Die Uhr hat 12 LED: Um sie alle anzusprechen, habe ich jeweils zwei Ketten definiert 6 LED: in diesem Fall: das Register "D0”Lenkt die LEDs von den Stunden 12(00) alle 5(17), während das Register "D1Wird die Stunden von lenken 6(18) alle 11(23). Die LEDs bleiben an, bis die Stunden oder Minuten geändert werden. Dies liegt daran, dass sich der MAX7219 auch um Multiplexing kümmert. Für die LEDs werden keine Begrenzungswiderstände benötigt.
In der MAIN-Skizze auf arduino_Nano eine spezielle Tabelle von 12 Elemente enthält die Codierung des Datenregisters mit den ein- oder auszuschaltenden Bits, und das DP-Bit wird verwendet, um zu unterscheiden, welche Kette zum Einschalten der Stunden / Minuten verwendet werden soll. Die LEDs leuchten auf, indem die relative Position auf "1" oder "0" gestellt wird, um sie auszuschalten. Dies ist die Tabelle:
Byte Tab_Led_Ore [12] =
{
DPABCDEFG ORE MIN HEX Nota: Das "G" -Bit wird niemals verwendet
B01000000, // Offset 0 Erz “0” “12” 00 0x40
B00100000, // Offset 1 Erz “1” “13” 5 0x20
B00010000, // Offset 2 Erz “2” “14” 10 0x10
B00001000, // Offset 3 Erz “3” “15” 15 0x08
B00000100, // Offset 4 Erz “4” “16” 20 0x04
B00000010, // Offset 5 Erz “5” “17” 25 0x02
B11000000, // Offset 6 Erz “6” “18” 30 0xC0
B10100000, // Offset 7 Erz “7” “19” 35 0xA0
B10010000, // Offset 8 Erz “8” “20” 40 0x90
B10001000, // Offset 9 Erz “9” “21” 45 0x88
B10000100, // Offset A Erz “10” “22” 50 0x84
B10000010 // Offset B ore “11” “23” 55 0x82
};
VORSICHT: Es besteht keine Verpflichtung zur Verwendung der D0 / D1-Register. Die anderen D2 bis D7 können auch verwendet werden, wenn sie nicht für andere Zwecke verwendet werden. Der Chip hat keine spezifischen Vorlieben.
PCB- UND SCHALTUNGSPRODUKTION
Da ich keine spezielle Ausrüstung habe, muss ich mich damit zufrieden geben, kleine Leiterplatten mit dem "PRESS_AND_PEEL“. Nach einer Reihe von Erfahrungen gelang es mir jedoch, ein ausreichend gültiges Endprodukt zu erhalten. Die drei Leiterplatten dieses Projekts sind: Das erste beherbergt das Arduino Nano Micro und den MAX7219 Chip, das zweite das ESP und die Schnittstellenelektronik und das dritte i 12 Uhr LED.
Layout der ersten Platine:

Rechts der Stecker zum Einsetzen des Micro Arduino Nano, links das MAX7219-Gehäuse. Es gibt keine spezielle Stromversorgung, da die USB-Buchse des Mikros an ein Ladegerät für Mobiltelefone oder Tablets mit 5 V 1 / A-Ausgang angeschlossen ist, es reicht aus, um das Ganze zu unterstützen. Mit dem Reset ist eine kleine Taste verbunden, die gleichzeitig den Nano und den ESP zurücksetzt. Ein Anschluss überträgt RESET-Signale,V5, GND, TX, RX in Richtung der Leiterplatte, auf der sich das ESP befindet. Der AM / PM-Pin ist mit den beiden AM / PM-LEDs mit der kleinen Platte verbunden. Endlich eine Brücke 36/72 die sogenannte Sommer / Winter-Zeit einstellen.
Layout der zweiten Platine:

Diese Platine unterstützt: der 5V Regler > 3V, um das ESP mit Strom zu versorgen, der Pegelwandler zum Einstellen der Pegel 5V bis 3V, und schließlich den Anschluss für das ESP. ich 5 Stifte oben sind jeweils mit verbunden 5 Pin del PCB Haupt. Die eingehenden RX / TX-Signale werden regelmäßig über den Pegelwandler mit den TX / RX-Pins des ESP verbunden. HINWEIS: Ein Spannungsteiler wäre ebenfalls ausreichend gewesen.
Layout der dritten Platine:

Unterkunft i 12 mit den beiden Anschlüssen geführt (A_F) für die jeweiligen Ketten und die beiden DG0 / DG1-Stifte. Die A / F-Verbindungen werden dann parallel verbunden (A mit A., B con B., usw.) dann an die jeweiligen Pins des MAX7219 anzuschließen. Sowie DG0 / DG1.
Ich habe diese letzte Platine vergessen: es bezieht sich auf die zwei AM / PM-LEDs, die je nach Pegel aufleuchten 0/1 am Eingangspin vorhanden.
.
Abschließend:
Bisher besteht das einzige zu lösende Problem darin, alles in eine geeignete Schachtel oder ähnliches zu packen. Als Erdrutsch im Heimwerken schaffe ich es nie, etwas zu tun, zumindest ästhetisch, gültig.
In der Zwischenzeit danke ich Ihnen für Ihre Aufmerksamkeit und freue mich auf Ihre Kommentare, wobei zu berücksichtigen ist, dass alles perfekt und machbar ist und bessere Ergebnisse erzielt. Ich bleibe nur ein Hobbyist, der begeistert, mit ihrer eigenen Unwissenheit, immer neue Dinge entdecken.
gvsoft marsch 2021
Glückwunsch Gvsoft! W die Uhren. Ich habe dir eine Mail geschrieben
Herzlichen Glückwunsch zum Job.
Ich versuche es mit einem ähnlichen, aber mit 7SD. Nano wird wegen ESP nicht verwendet-03 (was ich benutze) Damit kann ich einen DS3231 und den SPI an den MAX7912 anschließen.
Im Moment habe ich keine Freizeit. Vielleicht hole ich später ab.