Che ore sono?Ho riutilizzato vecchi telefoni cellulari come orologi per diversi anni.
Android 2.2.2 - Froyo. This one still going, its sibling has failed. And more recent phones have failed.Android 2.2.2 - Froyo. Questo è ancora in corso, il suo fratello ha fallito. E i telefoni più recenti hanno fallito.
Due hanno appena fallito. Questo è l'ultimo in esecuzione ... buon hardware. Sistema operativo davvero vecchio, ma ottiene ancora il tempo libero dalla rete e si aggiorna ancora quando passiamo all'ora legale e viceversa.
Quindi ho bisogno di sostituirli, e ho iniziato a pensare ad Arduino e Lamponi e sono incappato in ESP32.
Quarter inch squares, this is about 25cm x 50cmQuadrati da un quarto di pollice, questo è di circa 25 cm x 50 cm
Questo è da espressivo e ho preso questo su Amazon, 3 per $ 17. Finora ho giocato con il lampeggiamento di un LED e utilizzando l'hardware WIFI integrato. Sì, WIFI e dente blu e molti pin I/O, 4M rom e 512K ram (penso. Non ho esplorato abbastanza lontano per saperlo con certezza.) Nel processo, ho eseguito l'esempio NTP (Network Time Protocol) e ho iniziato a chiedermi come funziona NTP.
In fondo, NTP è davvero semplice. Un computer che desidera conoscere l'ora invia un breve messaggio a un altro computer che ospita un server NTP e quel computer invia un breve messaggio che include l'ora GMT. Fatto.
(È molto più complicato; a quanto pare i server NTP possono rispondere alla domanda 1000 volte a secondo ! E i meccanismi per la sincronizzazione dei server utilizzano le statistiche. E David L Mills ha inventato la roba NTP intorno al 1980 .)
Internet utilizza principalmente TCP (protocollo di controllo della trasmissione) , un protocollo robusto basato su IP. Tentativi TCP, ecc., per assicurarsi che i dati vengano consegnati, in ordine e intatti. È un protocollo pesante. I server NTP utilizzano un protocollo leggero, UDP (anche su IP) che non garantisce nulla. I tuoi messaggi potrebbero perdersi, non arrivare mai, arrivare fuori ordine. Ma il carico sul server è minimo; il server non ha bisogno di stringere la mano in più per essere sicuro di ottenere una risposta. La U in UDP (User Datagram Protocol) significa che l'utente è responsabile della gestione degli errori.
Questo JSL crea un socket per utilizzare la porta 123 (la porta NTP) e il protocollo UDP per inviare un messaggio a un pool di server NTP e ottenere la risposta. Fa qualcosa di veramente semplice statistiche matematica che presuppone che il tempo di viaggio da e verso il server sia uguale in modo che l'ora del server possa essere sincronizzata meglio con il computer locale. I risultati sono piuttosto buoni! Ecco un esempio leggermente migliore della media che ha trovato un server nel pool dall'altra parte del mondo:
pool.ntp.org(rn5.quickhost.hk)
Tempo totale = 0,143846988677979
FlightTime = 0,143799781799316
Differenza = 0:00:00.01689
Supponendo che .hk sia davvero a Hong Kong, a 8.000 miglia dalla Carolina del Nord. 16.000 andata e ritorno. Il tempo di volo è il tempo totale meno il tempo di elaborazione a Hong Kong, che era trascurabile. Se ho fatto bene i miei calcoli, sono più di 100.000 miglia al secondo, una frazione significativa della velocità della luce.
L'ultimo numero, differenza, è la differenza tra l'orologio della mia CPU e l'orologio del server NTP. È meno di 1/50 di secondo. E ottengo risultati dalla maggior parte dei server entro 1/10 di secondo, a meno che il tempo di volo non sia elevato, nel qual caso è asimmetrico e la tecnica di correzione si interrompe.
pool.ntp.org(LAX.CALTICK.NET)
Tempo totale = 0,101963043212891
FlightTime = 0.101903915405273
Differenza = 0:00:00.08646
pool.ntp.org(ns2.nuso.cloud)
Tempo totale = 0,103617668151855
FlightTime = 0,103596687316895
Differenza = 0:00:00.04034
pool.ntp.org(50-205-57-38-static.hfc.comcastbusiness.net)
Tempo totale = 0,0763883590698242
FlightTime = 0,0763206481933594
Differenza = 0:00:00.00965
pool.ntp.org(13.86.101.172)
Tempo totale = 0,077089786529541
FlightTime = 0,07708740234375
Differenza = 0:00:00.00663
// this snippet demonstrates a UDP (User Datagram Protocol) exchange with an NTP
// (Network Time Protocol) server using a JSL socket. NTP sends enough information
// from an NTP server to correct for some network delays and make a really good guess
// at the local time, possibly within 1/100 second, usually within 1/10 second (depending
// on how similar send and receive times are.) Using the OS time setting to sync your
// clock first (which uses NTP as well) will make the deltas near zero. Otherwise the
// deltas should be similar across several runs. Your computer clock will drift between
// the syncs (once a day?) that your computer automatically performs with an NTP server.
//
// idea from https://lettier.github.io/posts/2016-04-26-lets-make-a-ntp-client-in-c.html
timezone = -4; // (tz for my computer) Eastern Daylight Time is GMT-4.
// build the transmit packet to send to the NTP server
xPacket = Hex To Blob( "1b" || Repeat( "00", 47 ) );
// make the socket object
sock = Socket( DGRAM ); // not a normal STREAM socket, this is an unreliable UDP socket.
// choose a server (or server pool)
addr = "pool.ntp.org"; // a pool of servers. Don't ask too often, they have a heavy load.
// if nothing goes wrong, the bind and ioctl are optional, but
// if we never get a response (for various reasons) we'd rather not hang forever...
rc = sock << bind( addr, "123" ); // bind, maybe not required, but needed for NBIO...
If( rc[2] != "ok",
sock << close;
Throw( "bad bind" );
);
rc = sock << Ioctl( FIONBIO, 1 ); // NBIO: non blocking i/o. the unreliable UDP may never answer.
If( rc[2] != "ok",
sock << close;
Throw( "bad ioctl" );
);
// send our request to the server. <<SENDTO is="" for="" unreliable="" udp="" packets.=""></SENDTO>

Utilizzo dei socket UDP per ottenere l'ora da un server NTP.
Re: Che ore sono?Prima di ordinare la revisione 2 del PCB sto costruendo le altre due schede del primo ordine. Come il primo, ma in parallelo, costruisci un bit e prova. E ho imparato qualcosa che non mi aspettavo.
Le fasi di costruzione sono simili a queste:
- Metti tutti i componenti di basso profilo, piccoli ed economici sulla scheda. Sono difficili da fare dopo.
- Aggiungi i driver LED, tre circuiti integrati a 16 pin.
- Aggiungere i componenti dell'alimentatore e verificare se i LED dell'indicatore di alimentazione si accendono.
- Aggiungi la CPU, assicurati che accetti un programma scaricato.
- Aggiungi le cifre sull'altro lato. Le cifre nascondono le cose, quindi devono essere le ultime.
Some of these prototypes are not working correctly.Alcuni di questi prototipi non funzionano correttamente. Le cifre (quattro di esse) sono modestamente costose e alquanto delicate. Ne ho posizionato uno in qualche modo a caso (posizione ore-uno) e ho fatto un rapido test. Solo alcuni segmenti hanno funzionato. Torna al banco da lavoro, controllo visivo, controllo del misuratore, infine estrai il cannocchiale. A questo punto ci sono una mezza dozzina di cose che potrebbero essere sbagliate; qualsiasi cosa, dalla CPU ai circuiti integrati del driver alle cifre. Non è il design di base; Ho due prototipi funzionanti (uno su una breadboard, uno sul primo PCB.)
L'orologio è un design multiplex; ogni chip driver ha quattro uscite. Uno dei driver seleziona una cifra e gli altri due selezionano sette segmenti e un punto decimale. Una matrice 4X8 di 32 elementi, indirizzata da 12 bit. Possono essere accesi fino a otto elementi alla volta (una cifra). Fortunatamente, sto guardando una cifra che dovrebbe avere la maggior parte dei suoi segmenti e vedo tutti i segmenti mancanti che appartengono a un chip driver. Usando l'oscilloscopio su quel chip, vedo che gli input richiedono che i segmenti siano attivi, ma gli output sono ... morti.
Sostituire un circuito integrato è un dolore. Ne ho preso uno nuovo dal tubo, l'ho installato e... Peccato! È meglio, ma un segmento non viene ancora visualizzato! Ho sbagliato diagnosi? Qualcos'altro che si sgretola?
Aspettare. Sto costruendo due carte in parallelo. Diamo un'occhiata all'altro. Niente. Nessun segmento. Dopo un po' di studio... Hmm. Questa volta il problema non è il driver per i segmenti, è il driver per l'altro asse nella matrice, quello che seleziona una cifra. Ho un intero tubo di circuiti integrati difettosi?
Questo era un tubo di circuiti integrati inutilizzato, acquistato per un altro progetto circa 10 anni prima. Devo costruire un tester. Ecco il tester che mostra quattro luci verdi per un chip che ho ricevuto di recente da un altro distributore.
All 10 in the newer tube checked out good.Tutti e 10 nel nuovo tubo sono andati bene.
Al momento credo che almeno 5/10 dei chip nell'altro tubo fossero difettosi su una o più uscite:
Crush the pins in (to prevent re-use) and roll them on their backs so they look like dead bugs. Even 3/4 OK is not good enough when all four outputs are needed!Schiaccia gli spilli (per evitare il riutilizzo) e arrotolali sul dorso in modo che sembrino insetti morti. Anche 3/4 OK non è abbastanza buono quando sono necessarie tutte e quattro le uscite!
Quello che ho imparato potrebbe riguardare il test dei chip prima dell'installazione, ma non penso che sia davvero necessario. Ma quello che farò è usare l'oscilloscopio per fare un test, probabilmente invertendo gli elementi 2 e 3 nell'assieme, così posso testare un po' meglio prima di allegare una cifra. Quindi, per posizionare la prima cifra, scegline una che blocca l'alimentazione, non un chip driver. In questo momento devo rimuovere una cifra in modo da poter rimuovere un driver IC.
Re: Che ore sono?Prototipo costruito e funzionante.
It's hard for me to call this the back; it was the front in KiCad.È difficile per me chiamare questo il retro; era il fronte in KiCad.
The flash makes the white balance show the red digits as red.Il flash fa sì che il bilanciamento del bianco mostri le cifre rosse come rosse.
With no flash, the white balance messes up the colors, but this is closer to what it really looks like otherwise.Senza flash, il bilanciamento del bianco incasina i colori, ma questo è più vicino a come appare realmente altrimenti.
I regolatori lineari funzionano molto bene; il regolatore da 5 V eroga circa 1/4 di amp, ma ciò significa che l'ingresso da 16 V fa cadere 11 volt * 1/4 di amp = quasi 3 watt in quel minuscolo dissipatore di calore. È ora di guardare un regolatore di commutazione sostitutivo drop-in. Apparentemente la stessa dimensione del pacchetto, ma efficiente al 90%.
Re: Che ore sono?I circuiti sono dentro! Progettato con KiCad , fabbricato da OSHPark , 20 giorni inclusi 11 giorni di produzione e 8 giorni di spedizione gratuita (risparmiando dove posso!) Probabilmente non dovrei mostrarli finché non saprò che funzionano...prototipi...
This is my first board that will have components front and back.Questa è la mia prima scheda che avrà componenti davanti e dietro.
I punti ruvidi attorno ai bordi sono dove le mie tavole sono state staccate da un pannello più grande; Li pulirò presto, sono appuntiti! Le schede sono circa 3x9 pollici. Sto usando la tecnologia a foro passante; tutti i bit a montaggio superficiale saranno su schede predefinite (GPS, BME e ESP32). Sono andato con le tavole AfterDark anche se il tempo era un po' più lungo. Mi piace l'aspetto! Un adattamento di prova preliminare dice che le parti per le quali ho progettato le impronte funzioneranno. Sìì!
Re: Che ore sono?aggiornamento... la luce blu all'estrema destra è l'esp32. Sono le 16:05.
It's really hard to get the light right to take a picture of an LED display.È davvero difficile ottenere la luce giusta per scattare una foto di un display a LED.
Le cifre alte 2 1/4 di pollice richiedono 8 volt, non i 2 volt suggeriti dalla vecchia scheda tecnica. Ciò significa che ho bisogno dell'alimentatore extra in alto a destra, realizzato con parti di scatole di spazzatura, e i 4 chip del driver provengono dalla stessa scatola. C'è anche un GPS da $ 12 in basso a destra. L'ora può essere impostata dal GPS se può vedere alcuni satelliti, o dal wifi se la password non è stata cambiata.
Non sono ancora sicuro di dove JMP si inserisca in questo, ma ho un sensore di pressione/temperatura/umidità che voglio aggiungere. Forse eseguirà un po 'di registrazione dei dati ed eseguirà un server web. O forse aggiungerò un piccolo display per il meteo. Una volta elaborati i dettagli, realizzerò un PCB. Quei fili non funzioneranno sul muro.