Innehållsförteckning:
- Tillbehör
- Steg 1: Anslut Digit Drive och Segment Drive för Multiplexed Display
- Steg 2: Testa anslutningarna
- Steg 3: Kod för visningstid och PWM för att styra ljusstyrkan
- Steg 4: Skapa en internetanslutning
- Steg 5: Lägg till BASIC -kod för att analysera tiden från webben
- Steg 6: Lägg till en ljussensor och kod för att dimma skärmen
- Steg 7: Knappa upp klockan och börja använda den
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Hittade en digital klocka på $ 10 på Amazon. Nu för att anpassa det för att få tid från internet.
Tillbehör
ARM Stamp programmerbar i BASIC tillgänglig här
Steg 1: Anslut Digit Drive och Segment Drive för Multiplexed Display
Jag började med en billig digital klocka på hyllan. Först tog jag bort det befintliga klockchippet. Gjorde sedan en del undersökningar och hittade de 7 segmentanslutningarna, som kan drivas direkt av mikroprocessorn. Hittade sedan de fyrsiffriga drivrutinerna som var transistorer som mikroprocessorn kan driva. Och sedan kopplade de upp dem.
Steg 2: Testa anslutningarna
Som ett experiment skrev jag ett BASIC -program för att driva alla linjer, för att kontrollera ledningarna och mäta strömmen, som i detta fall var 82 mA
Nästa var att skriva koden för att skanna linjerna.
'webbklocka displayenhet
IO (7) = 0 'PMOS -enhet - kommer att vara PWM någon gång
för y = 45 till 48
IO (y) = 0 'siffra enhet
för x = 8 till 15
IO (x) = 0 'segment -enhet
vänta (500)
IO (x) = 1
nästa x
DIR (y) = 0 'inaktivera enhet på segment
nästa y
Steg 3: Kod för visningstid och PWM för att styra ljusstyrkan
Därefter lade jag till en PMOS -transistor i strömförsörjningen till alla sifferdrivrutiner. Med det som drivs av pulsbreddsmodulering styr displayens ljusstyrka. Här är BASIC -koden för att visa tiden.
'webbklocka display #inkludera "LPC11U3x.bas"
'globaler
hr = 0 'definiera timme
min = 0 'definiera minut
#define SEG_0 & HBB00
#define SEG_1 & H1800
#define SEG_2 & HD300
#define SEG_3 & HD900
#define SEG_4 & H7800
#define SEG_5 & HE900
#define SEG_6 & HEB00
#define SEG_7 & H9800
#define SEG_8 & HFB00
#define SEG_9 & HF800
#define SEG_o & H4B00
#define SEG_f & HE200
const DIGarray = {SEG_0, SEG_1, SEG_2, SEG_3, SEG_4, SEG_5, SEG_6, SEG_7, SEG_8, SEG_9, SEG_o, SEG_f}
#define DIG_WAIT 1
#define US_TIME
sub display_time (err, hr, min)
dim hr10, hr1, min10, min1, i
#ifdef US_TIME
om hr> 12 så hr -= 12
om hr = 0 då hr = 12
#endif
hr10 = hr / 10
hr1 = hr MOD 10
min10 = min / 10
min1 = min MOD 10
för i = 0 till 1
om hr10 då
IO (45) = 0
endif
GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarray (hr10)
GPIO_CLR (0) = DIGarray (hr10)
vänta (DIG_WAIT)
INGÅNG (45)
IO (46) = 0
GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarray (hr1) + IF (i, & H400, 0)
GPIO_CLR (0) = DIGarray (hr1) + IF (i, & H400, 0)
vänta (DIG_WAIT)
INGÅNG (46)
IO (47) = 0
GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarray (min10)
GPIO_CLR (0) = DIGarray (min10)
vänta (DIG_WAIT)
INGÅNG (47)
IO (48) = 0
GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarray (min1)
GPIO_CLR (0) = DIGarray (min1)
vänta (DIG_WAIT)
INGÅNG (48)
nästa i
ändsub
'användare TIMER1 (32 bit) för att avbryta varje minut
AVBRYT SUB TIMER1IRQ
T1_IR = 1 'Rensa avbrott
min += 1
om min> 59 då
min = 0
tim += 1
om tim> 23 då
tim = 0
endif
endif
ENDSUB
SUB ON_TIMER (max_cnt, detta)
TIMER1_ISR = gör denna + 1 'inställningsfunktion för VIC - behöver +1 för tummen
SYSCON_SYSAHBCLKCTRL ELLER = (1 << 10) 'aktivera TIMER1
T1_PR = 0 'ingen förskalning - justerar värdet för mer exakt tid
VICIntEnable OR = (1 << TIMER1_IRQn) 'Aktivera avbrott
T1_MR0 = max_cnt-1 'ställa in matchningsantal ms
T1_MCR = 3 'Avbrott och återställning på
MR0 T1_IR = 1 'klart avbrott
T1_TC = 0 'tydlig timerräknare
T1_TCR = 1 'TIMER1 Aktivera
ENDSUB
#define MINUT_PCLK 2880000000 '60 sekunder vid 48 MHz
huvud:
tim = 9
min = 33
ON_TIMER (MINUT_PCLK, ADDRESSOF TIMER1IRQ)
IO (7) = 0 'PWM någon dag - måste flytta till P0_22 ??
medan 1
display_time (0, hr, min)
slinga
Steg 4: Skapa en internetanslutning
Använd en ESP8266 för en WiFi -anslutning. Efter att ha petat runt på nätet ett tag var den bästa lösningen nodemcu version 0.9.6 och en äldre esp8266_flasher fungerade bäst.
www.electrodragon.com/w/File:Nodemcu_20150704_firmware.zip
Sedan en enkel PHP-webbsida för att servera tid från internet--
Coridium Time Server
<? php
$ tidszon = htmlspecialchars ($ _ GET ["zon"]); if ($ tidszon == "")
$ timezone = 'America/Los_Angeles';
$ tz_object = ny DateTimeZone ($ tidszon);
$ datetime = new DateTime ();
$ datetime-> setTimezone ($ tz_object);
echo "time is-", $ datetime-> format ('H: i: s');
eko "";
eko "datum är-", $ datetime-> format ('m/d/Y');
?>
Den webbsidan är så att du kan begära
coridium.us/time.php - och du får väl tidszon i USA
eller
coridium.us/time.php?zone=Europe/London
Inget felkontroll och kommer troligen aldrig att bli det
Och Lua att läsa det -
wifi.sta.config ("your_SSID", "your_PASSWORD")> wifi.sta.connect () …
sk = net.createConnection (net. TCP, 0)
sk: on ("ta emot", funktion (sck, c) print (c) end)
sk: connect (80, "coridium.us")
sk: send ("GET /time.php HTTP/1.1 / r / nHost: coridium.us / r / nConnection: keep-alive / r / nAccept: */ *\ r / n / r / n")
Och du får tillbaka tiden som
tid är-09: 38: 49datum är-2018-31-12
Steg 5: Lägg till BASIC -kod för att analysera tiden från webben
Detta är en delmängd av hela BASIC -programmet, hela programmet kan ses på länken i det sista steget.
if strstr (build_gets, "time is-") = 0 then
hr = build_gets (8) - "0"
if build_gets (9) = ":" då
min = (build_gets (10) - "0")*10
min += build_gets (11) - "0"
annan
hr = hr * 10 + build_gets (9) - "0"
min = (build_gets (11) - "0")*10
min += build_gets (12) - "0"
endif
endif
Steg 6: Lägg till en ljussensor och kod för att dimma skärmen
En fototransistor tillsattes för att känna av det omgivande ljuset i rummet. Utan det är displayen tillräckligt ljus för att väcka de döda (jag) på natten.
Den analoga spänningen för utgången på fototransistorn avläses och pulsbreddsmodulationen anger skärmens totala ljusstyrka.
Steg 7: Knappa upp klockan och börja använda den
Den slutliga versionen visar tiden, och runt 03:00 går den ut på webben för att läsa den aktuella tiden. Detta klarar också sommartid.
Motiveringen för detta projekt var de strömavbrott vi upplever här i bergen och behovet av att återställa klockor eller byta batterier för att hålla dem vid liv.
Detta har varit en snabb översikt över projektet.
Fullständig information om denna DIY webbkopplade klocka.