Sommario:

Wort-Uhr: 5 passaggi
Wort-Uhr: 5 passaggi

Video: Wort-Uhr: 5 passaggi

Video: Wort-Uhr: 5 passaggi
Video: INSANE Audi Quattro Sport S1 1000 Lakes Group B Rally (Pure Engine Sound) 2024, Dicembre
Anonim
Wort-Uhr
Wort-Uhr

Ciao a tutti!

Questo sarà il mio primo istruttore e se hai qualche idea su come migliorarlo o renderlo più facile da capire, non esitare a contattarmi!

Beh, all'inizio, questo tipo di "orologio" non è una mia idea! Ho visto un sacco di Internet e possono essere ordinati per solo un paio di dollari in diversi negozi web. Ma non volevo comprarne uno, volevo crearne uno mio per imparare e capire come funziona.

Una parola per i membri "non tedeschi"… Ci scusiamo per il fatto che questo sia solo un "tedesco Wort Uhr". Potrebbe essere facilmente convertito in inglese o in qualsiasi altra lingua, ma poiché sono tedesco l'ho fatto nella mia lingua. Se hai bisogno di supporto per la tua lingua contattami e cercherò di aiutarti.

Quindi iniziamo…

Passaggio 1: lo schema

Lo schema
Lo schema

Lo schema è semplice e se l'immagine è troppo brutta da leggere, c'è anche un file PDF.

Cominciamo dall'angolo in basso a sinistra. C'è un semplice alimentatore che utilizza un LM7805 per generare un'uscita stabile a 5 V per il PIC, i registri a scorrimento (74HC164) e il chip in tempo reale DS3231. Tutti i LED sono forniti anche da questa parte. D22 all'estremità destra è solo per indicare l'alimentazione e può essere facilmente lasciato da parte se non lo si desidera.

È possibile utilizzare qualsiasi alimentatore CC per l'orologio con meno di 40 V, ma è necessario scegliere il valore appropriato per C7. Dovrebbe avere una tensione nominale di almeno il doppio della tensione di ingresso e ricorda che stai creando calore nell'LM7805, quindi dovresti cercare di mantenere la tensione di ingresso il più bassa possibile perché tutto il resto è solo uno spreco di energia. La misura migliore è qualcosa tra 9V e 12V DC.

Non preoccuparti della polarità del tuo alimentatore… Il MOSFET a canale p (Q1) agisce come una protezione contro la falsa polarità e l'orologio semplicemente non funzionerà e non subirà alcun danno. Puoi verificarlo sul LED "power" D22 se montato.

Sul lato destro dello schema ci sono i registri a scorrimento serial-in parallel-out. Ho deciso di usarli perché non volevo usare un PIC enorme con molte porte I/O. Volevo usarne uno più piccolo e in casa avevo ancora del 16F1829 quindi la scelta era già chiara. I dati (IN_1, IN_2 e IN_3) sono forniti dal PIC (vedi sezione codice sotto) e anche da REGISTER_CLK. Per semplicità nel mio codice e layout del PCB ho usato due dei 74HC164 per le ore e l'ultimo per la "logica".

Nell'angolo in alto a sinistra c'è il PIC e tutte le parti necessarie. Ho usato l'orologio interno, quindi non è necessario l'oszillatore. Solo tre resistori per SCL, SDA e MCLR. Per il fatto che ho usato i 32kHz come indicazione dei "secondi esatti" non c'è bisogno di una frequenza abbastanza stabile e precisa per il PIC.

Al centro c'è il DS3231 con un minimo di parti esterne. Infatti ho utilizzato solo gli ingressi SDA e SCL per la comunicazione su I²C e l'uscita 32kHZ come riferimento di clock esterno per Timer1 del PIC16F1829. Per questa uscita la scheda tecnica dice che è necessario un resistore di pull-up esterno. Le altre uscite non le ho usate in questo progetto e le ho lasciate scollegate.

Sempre al centro, i LED… Come si può leggere nello schema ho utilizzato dei LED blu (quelli con custodia trasparente) e un valore di resistenza di 1k Ohm. Se hai intenzione di realizzare questo progetto da solo dovresti scegliere i valori di questi resistori in base al colore e al tipo di LED che scegli. Tieni anche a mente dove vuoi che sia impostato l'orologio. Il mio si trova nella mia camera da letto, quindi non volevo che i LED fossero troppo luminosi e ho scelto un valore più grande per i resistori. Fai alcuni tentativi su una breadboard con LED e valori di resistenza prima di montarli sul PCB.

Passaggio 2: layout

Disposizione
Disposizione
Disposizione
Disposizione
Disposizione
Disposizione

Dopo aver terminato lo schema è il momento di instradare il PCB. Per questo ho usato KiCAD (anche per lo schema). Non c'è molto da dire, basta instradare le linee.

Per il fatto che ho stampato l'alloggiamento dell'orologio da solo, era abbastanza importante dove si trovano i LED sullo strato superiore. Ho messo i LED e le resistenze solo sullo strato superiore, perché ho ordinato il mio PCB parzialmente montato (tutte le parti SMD) e perché l'azienda che ho scelto per questo posiziona le parti solo su un lato e non su entrambi i lati.

Puoi vedere la collocazione nelle due immagini tridimensionali che ho realizzato con KiCAD.

Se sei interessato… È possibile esportare il PCB KiCAD su Eagle e quindi è abbastanza facile costruire l'alloggiamento, perché hai un riferimento dal PCB.

Passaggio 3: "Logica" del "Wort-Uhr"

La parte più importante di questo progetto è stato il codice per il PIC…

Dapprima trovando la "logica" del tempo parlato in tedesco e traducendola in codice.

Sfortunatamente non è stato possibile caricare direttamente il file Excel, ma spero che l'esportazione in PDF sia sufficientemente leggibile per te. In caso contrario, contattami e ti invierò il file Excel originale. Nel PDF puoi vedere come ho impostato la logica per il mio orologio. Puoi vedere come sono passato attraverso i diversi passaggi temporali e come è l'ortografia. Il calcolo all'interno del codice (principalmente istruzioni if-else) può essere derivato dalle informazioni sul lato destro della tabella. Una parte è per i minuti e una parte per le ore.

Come puoi vedere non è una magia e può essere facilmente codificato in C. Il punto "più complicato" all'interno della logica è come gestire l'ora come puoi vedere nel file che solo all'inizio di un'ora viene mostrata l'ora effettiva. In tedesco (forse potrebbe essere solo una cosa specifica bavarese) l'"ora successiva" è usata abbastanza presto.

Per la codifica ho usato MPLABX come mio IDE preferito.

Passaggio 4: frammenti di codice

Frammenti di codice
Frammenti di codice
Frammenti di codice
Frammenti di codice

Non posterò qui il mio codice, ma se hai intenzione di scrivere il tuo codice ti darò alcuni suggerimenti in cui sono "incappato" durante lo sviluppo…

Prima il riempimento del "registro":

Se trasferisci nuovi dati ai registri troppo spesso e in cicli troppo brevi ho fatto l'esperienza che i LED iniziavano a lampeggiare. Quindi ho fatto alcuni "bandierine di blocco", che solo ogni minuto viene eseguito un nuovo "calcolo" del tempo parlato e viene effettuato l'aggiornamento del registro.

Il codice per la compilazione dei registri è nella foto sopra. Come puoi vedere riempio tutti e 3 i registri in parallelo quindi ho bisogno di 3 pin del PIC per i dati e 1 pin per CLK. Il 74HC164 acquisisce nuovi dati su una transizione sulla linea CLK da 0 a 1.

Il resto del codice è principalmente roba dipendente da PIC, la logica del "tempo parlato" e la gestione della comunicazione e dei pulsanti. La comunicazione è principalmente fornita da Microchip MPLABX perché ho usato il modulo MSSP.

Una buona idea è leggere il foglio dati di DS3231 perché i dati sono memorizzati all'interno come BCD, quindi potresti dover "trasformare" questo nel tuo codice. Beh, per quanto mi riguarda, sono un ragazzo che "impara facendo" e OVVIAMENTE non ho letto la scheda tecnica … Mi è costato un sacco di nervi e ore.

Come avrai notato, ci sono due modi per "mantenere il tempo in pista" con questa implementazione.

  1. È possibile leggere l'effettivo timeout del DS3231
  2. Puoi "contare i secondi" nel PIC stesso e sincronizzare l'ora con DS3231 di volta in volta

Dipende da te ed entrambi i modi sono pratici e diretti. Ho usato la prima opzione e ho sincronizzato solo l'ora durante la regolazione dell'ora tramite i pulsanti (tempo di scrittura su DS3231) o ogni 24 ore (tempo di lettura da DS3231), perché volevo implementare più logica da solo. Spengo anche l'orologio durante la notte (dalle 23:00 alle 05:00), quindi secondo me è stato un po' più facile.

Passaggio 5: l'alloggio

Ultimo ma non meno importante, è il momento di dare una breve occhiata all'alloggiamento.

Come ho detto sopra, ho realizzato l'alloggiamento da solo (usando Eagle) e li ho stampati con la mia stampante 3D, quindi ho dovuto tenere d'occhio le posizioni dei diversi LED.

In allegato puoi trovare i file STL se vuoi usarli.

Spero che questo tutorial ti aiuti quando costruisci il tuo "Wort-Uhr". Se ci sono ancora "domande aperte" non esitate a contattarmi. Il modo migliore per commentare di seguito, perché potresti non essere l'unico ad avere una domanda specifica.

Consigliato: