Teisendage binaarkellad tavalisteks kelladeks. Raadio geek kell. Kuidas öelda aega

Pildil näete komplekteeritud komplekti binaarne kell tehtud oma kätega. Aja määramisel pole midagi keerukat ja me käsitleme seda üksikasjalikult artiklis LED-ide vertikaalne rida vastab kümnete ja ajaühikute jaoks.

Kella diagramm


Tunnid täidetud mikrokontrolleril atmega8.

Loomisetapis esitati tulevastele kelladele kohe järgmised nõuded:

  • nii plaadi kui ka seadme kui terviku suhteliselt väikesed mõõtmed;
  • maksimaalselt saadaolevate komponentide kasutamine;
  • juhtumi esinduslik välimus.

Saadaolevat DS1307 kasutatakse reaalajas kella kiibina. Samuti on MK lähedusse ja toitesisendisse paralleelselt elektriliinidega paigaldatud 100 nF mittepolaarne kondensaator ja 47 µF polaarne (tantaal) kondensaator. Kõik takistid ja kondensaatorid on SMD pakendites suurusega 0805. Ainsad väljundkomponendid on LED-id, aku pistik ja seadistusnupud. Nupud - kõik ilma fikseerimiseta; Korpuse versiooni jaoks sobivad pikkade vistrikutega nupud, näiteks järgmised:

Takistid R1..R6, R14..R18 võivad varieeruda üsna suurtes piirides. LED-ide mõõtmed ei oma tähtsust, kuid korpus ja plaat on mõeldud 5 mm ümarate LED-ide jaoks. "Reserveeritud port" on tahvlil olev tihvt, mis on tahvlil kella funktsionaalsuse potentsiaalseks laiendamiseks, näiteks kõlari lisamiseks.

Allpool on seadme trükkplaat:


Kuna LED-ide ja MK erinevate ühenduste arv on üsna suur ja ma ei tahtnud suurt hulka "rippuvaid" džempreid teha, on seade teostatud kahepoolsel PCB-l. Klaaskiu paksus on 1,5 mm, plaadi gabariidid 80 x 50 mm. Juhtnuppudega tahvel (viis nuppu) on valmistatud eraldi ja seda tutvustatakse allpool. Plaat sisaldab lisaks (pole skeemil näidatud): pistikut toite + programmeerija ühendamiseks; täiendavad augud toitekaabli ühendamiseks; takisti lähtestusahelas; kella kvartsahela kondensaatorite kohad (neid arutatakse allpool).

Plaat valmistati CNC freespingil, mis võimaldas saada peaaegu tehasekvaliteedi. Kokkupandud tahvli foto on esitatud allpool:


Kuna läbipaistvad LED-id on liiga eredad, nende pinda tuli töödelda kareda Scotch-Brite lapiga, et anda sellele mati viimistlus, mis võimaldas saada hämaramat ja hajutatud valgust.

Emaplaat ühendatakse juhtnuppudega seitsmejuhtmelise kaabli abil (2 - toide, 5 - nupud); suurus - 68 x 22 mm.

Pärast plaadi kokkupanemist ja MK püsivara vilkumist jääb viimaseks sammuks luua seadmele ilus ümbris. CNC-freespingi olemasolu tõttu otsustati seinad välja lõigata 1,5 mm paksusest klaaskiust ja ühendada need omavahel jootmise abil; Esipaneel on valmistatud umbes 1 mm paksusest alumiiniumist. Korpuse kogupikkus on 104 mm, kõrgus (koos jalgade ja nuppudega) - 77 mm, paksus - 25 mm. Korpuse paigutus kõigi aukudega on trükkplaadiga ühes failis. Külgmised, ülemised ja alumised seinad on omavahel ühendatud M3 kruvi messingist alustega:

Loomulikult eemaldati eelnevalt nagide kruviosa. Allpool on toodud kokkupaneku tulemuse erinevad etapid (viimane foto on tehtud pärast lõplikku kokkupanekut, seega on värvijäljed selgelt näha):


Nuppudega tahvel kinnitatakse ülemise paneeli külge kahele alusele (sellise aluse ühel küljel on sile pind, teisel M3 kruvi) selleks mõeldud mutrite abil, tahvlil on ette nähtud augud. Aluste kõrgus kompenseerib nuppude kõrguse, nii et viimased tõusevad veidi kehast kõrgemale:


Esipaneeli esikülg töödeldi peeneteralise liivapaberiga, seejärel GOI pastaga. Tagakülg, vastupidi, on töödeldud jämeda liivapaberiga, mis kinnitatakse külgseintele läbi 5 mm puitplokkide, kasutades epoksüvaiku. Tagaseinas on mikro-USB pistik toiteallikaks, samuti auk potentsiaalse kõlari jaoks; Kate kinnitatakse ülalmainitud messingist kuusnurkade külge, kasutades nelja M3 x 15 mm kruvi.



Otsa- ja tagaseinad värviti autode pihustusvärviga.

Alumisel paneelil on augud jalgade kinnitamiseks, kuid siis otsustati kasutada superliimiga kinnitatud kummist jalgu.

Kokkupandud korpus osutus üsna tugevaks, korduvad juhuslikud kukkumised ei kahjustanud konstruktsiooni terviklikkust. Põhiplaat kinnitatakse korpuse seintele kasutades tina- ja messingposte. See otsus tehti tänu asjaolule, et aku ja programmeerimispistik muutuvad tagakaane eemaldamisega ligipääsetavaks; ehk tasu äravõtmisel pole mõtet.


Õigesti kokku pandud seade ei vaja reguleerimist ja hakkab kohe tööle. Aja seadistamine toimub järgmiselt:

  • Peate umbes 2,5 sekundit all hoidma nuppu "0" SEC/SET (asub sekundite kohal). Pärast seda nullitakse sekundite loendur ja kell lakkab töötamast;
  • seejärel peate aja seadistusnuppude abil määrama soovitud aja;
  • seejärel vajutage nuppu "0" SEC 2,5 s; kell jätkab töötamist uuendatud ajaga.

Kokkupandud seade kingiti edukalt sõbrale ja on olnud kasutusel üle aasta, mingeid kommentaare ega probleeme ei tuvastatud.

Kokkuvõtteks tahaksin kirjeldada järgmist probleemi (kogenud raadioamatööridele). Kella kvarts ei ole alati õige kvaliteediga. Võib juhtuda, et teie kvartsi sagedus erineb deklareeritud sagedusest mitme hertsi võrra. Sellise kõrvalekalde tulemuseks on halb täpsus: näiteks 2 hertsi suurune kõrvalekalle „referentssagedusest“ põhjustab viivituse 5,27 sekundit päevas või kaks ja pool minutit kuus.
Kella kvartsi sagedust saab reguleerida, paigaldades kvartsiga järjestikku või paralleelselt mitme pikofaraadi mahutavusega kondensaatori. Nii õnnestus autoril vähendada sageduste erinevust 0,1 Hz-ni, mis toob kaasa palju väiksema vea - 7 sekundit kuus.

Proteuse projekt ja püsivara koos allikatega on arhiivis - alla laadida

Sõbranna sünnipäeva eel tekkis küsimus kingituse valiku kohta. Sõber on erinevate ebatavaliste elektroonikaseadmete ja käsitöö armastaja. Ostupromenaad ei toonud tulemusi: vidinad üllatasid ebameeldivalt kas banaalsete või kallite asjade tõttu. Tahtsin juba meeleheitlikult midagi leida, heitsin pilgu Sony kahendkella vidinale. Ja siis tabasin end mõttelt: "Sa oled kogenud elektroonikainsener ja teie käed kasvavad sellest kohast!" Tehke oma kahendkell, see on parim kingitus! Nii sündiski idee teha allpool kirjeldatud seade.

Binaarsed kellad on loodud esitama aega binaarses kümnendvormingus, st tunnid, minutid ja sekundid jagatakse kümnendkohtadeks ja esitatakse binaarses vormis (vt allolevat joonist).

Loomisetapis esitati tulevastele kelladele kohe järgmised nõuded:

  • nii plaadi kui ka seadme kui terviku suhteliselt väikesed mõõtmed;
  • maksimaalselt saadaolevate komponentide kasutamine;
  • juhtumi esinduslik välimus.

Selle tulemusena koostati järgmine diagramm:

Kasutatud MK on võib-olla mõnevõrra vananenud, kuid mitte vähem populaarne ATmega8A-AU. Saadaolevat DS1307 kasutatakse reaalajas kella kiibina. Samuti on MK lähedusse ja toitesisendisse paralleelselt elektriliinidega paigaldatud 100 nF mittepolaarne kondensaator ja 47 µF polaarne (tantaal) kondensaator. Kõik takistid ja kondensaatorid on SMD pakendites suurusega 0805. Ainsad väljundkomponendid on LED-id, aku pistik ja seadistusnupud. Nupud - kõik ilma fikseerimiseta; Korpuse versiooni jaoks sobivad pikkade vistrikutega nupud, näiteks järgmised:

Takistid R1..R6, R14..R18 võivad varieeruda üsna suurtes piirides. LED-ide mõõtmed ei oma tähtsust, kuid korpus ja plaat on mõeldud 5 mm ümarate LED-ide jaoks. "Reserveeritud port" on tahvlil olev tihvt, mis on tahvlil kella funktsionaalsuse potentsiaalseks laiendamiseks, näiteks kõlari lisamiseks.

Allpool on seadme trükkplaat:

Kuna LED-ide ja MK erinevate ühenduste arv on üsna suur ja ma ei tahtnud suurt hulka "rippuvaid" džempreid teha, on seade teostatud kahepoolsel PCB-l. Klaaskiu paksus on 1,5 mm, plaadi gabariidid 80 x 50 mm. Juhtnuppudega tahvel (viis nuppu) on valmistatud eraldi ja seda tutvustatakse allpool. Plaat sisaldab lisaks (pole skeemil näidatud): pistikut toite + programmeerija ühendamiseks; täiendavad augud toitekaabli ühendamiseks; takisti lähtestusahelas; kella kvartsahela kondensaatorite kohad (neid arutatakse allpool).

Plaat valmistati CNC freespingil, mis võimaldas saada peaaegu tehasekvaliteedi. Kokkupandud tahvli foto on esitatud allpool:

Kuna läbipaistvad LED-id on liiga eredad, tuli nende pinda töödelda kareda Scotch-Brite lapiga, et anda sellele matt viimistlus, mille tulemuseks oli hämaram ja hajusam valgus.

Emaplaat ühendatakse juhtnuppudega seitsmejuhtmelise kaabli abil (2 - toide, 5 - nupud); suurus - 68 x 22 mm.

Pärast plaadi kokkupanemist ja MK püsivara vilkumist jääb viimaseks sammuks luua seadmele ilus ümbris. CNC-freespingi olemasolu tõttu otsustati seinad välja lõigata 1,5 mm paksusest klaaskiust ja ühendada need omavahel jootmise abil; Esipaneel on valmistatud umbes 1 mm paksusest alumiiniumist. Korpuse kogupikkus on 104 mm, kõrgus (koos jalgade ja nuppudega) - 77 mm, paksus - 25 mm. Korpuse paigutus kõigi aukudega on trükkplaadiga ühes failis. Külgmised, ülemised ja alumised seinad on omavahel ühendatud M3 kruvi messingist alustega:

Loomulikult eemaldati eelnevalt nagide kruviosa. Allpool on toodud kokkupaneku tulemuse erinevad etapid (viimane foto on tehtud pärast lõplikku kokkupanekut, seega on värvijäljed selgelt näha):

Nuppudega tahvel kinnitatakse ülemise paneeli külge kahele alusele (sellise aluse ühel küljel on sile pind, teisel M3 kruvi) selleks mõeldud mutrite abil, tahvlil on ette nähtud augud. Aluste kõrgus kompenseerib nuppude kõrguse, nii et viimased tõusevad veidi kehast kõrgemale:

Esipaneeli esikülg töödeldi peeneteralise liivapaberiga, seejärel GOI pastaga. Tagakülg, vastupidi, on töödeldud jämeda liivapaberiga, mis kinnitatakse külgseintele läbi 5 mm puitplokkide, kasutades epoksüvaiku. Tagaseinas on mikro-USB pistik toiteallikaks, samuti auk potentsiaalse kõlari jaoks; Kate kinnitatakse ülalmainitud messingist kuusnurkade külge, kasutades nelja M3 x 15 mm kruvi.

Otsa- ja tagaseinad värviti autode pihustusvärviga.

Alumisel paneelil on augud jalgade kinnitamiseks, kuid siis otsustati kasutada superliimiga kinnitatud kummist jalgu.

Kokkupandud korpus osutus üsna tugevaks, korduvad juhuslikud kukkumised ei kahjustanud konstruktsiooni terviklikkust. Põhiplaat kinnitatakse korpuse seintele kasutades tina- ja messingposte. See otsus tehti tänu asjaolule, et aku ja programmeerimispistik muutuvad tagakaane eemaldamisega ligipääsetavaks; ehk tasu äravõtmisel pole mõtet.

Foto töötavast seadmest on näidatud allpool:

Õigesti kokku pandud seade ei vaja reguleerimist ja hakkab kohe tööle. Aja seadistamine toimub järgmiselt:

  • Peate umbes 2,5 sekundit all hoidma nuppu "0" SEC/SET (asub sekundite kohal). Pärast seda nullitakse sekundite loendur ja kell lakkab töötamast;
  • seejärel peate aja seadistusnuppude abil määrama soovitud aja;
  • seejärel vajutage nuppu "0" SEC 2,5 s; kell jätkab töötamist uuendatud ajaga.

Kokkupandud aparaat kingiti edukalt sõbrale ja on olnud kasutusel üle aasta, mingeid kommentaare ega probleeme ei tuvastatud.

Kokkuvõtteks tahaksin kirjeldada järgmist probleemi (kogenud raadioamatööridele). Kella kvarts ei ole alati õige kvaliteediga. Võib selguda, et teie kvartsi sagedus erineb deklareeritud sagedusest mitme hertsi võrra. Sellise kõrvalekalde tulemuseks on halb täpsus: näiteks 2 hertsi suurune kõrvalekalle „referentssagedusest“ põhjustab viivituse 5,27 sekundit päevas või kaks ja pool minutit kuus.
Kella kvartsi sagedust saab reguleerida, paigaldades kvartsiga järjestikku või paralleelselt mitme pikofaraadi mahutavusega kondensaatori. Nii õnnestus autoril vähendada sageduste erinevust 0,1 Hz-ni, mis toob kaasa palju väiksema vea - 7 sekundit kuus.

Hea meelega kuulen kommentaarides küsimusi, kriitikat, soove ja ettepanekuid.

P.S. Püsivara ja lähtekoodi, FUSE-bitise konfiguratsiooni ja projektiga failid on arhiivis.

Radioelementide loetelu

Määramine Tüüp Denominatsioon Kogus MärkusPoodMinu märkmik
U1 MK AVR 8-bitine

ATmega8A-AU

1 TQFP-32 Märkmikusse
U2 Reaalajas kell (RTC)

DS1307

1 SO-8 Märkmikusse
Q1-Q6 Bipolaarne transistor

BC817

6 Märkmikusse
D1-D20 LED 20 Märkmikusse
R1-R6, R11-R13 Takisti

4,7 kOhm

6 Märkmikusse
R7-R10 Takisti

150 oomi

4

Kõik sai alguse soovist teha AVR mikrokontrollerile mõni täiesti valmis seade.

Valik langes kahendkelladele, sest Neid on lihtne valmistada ja need näevad välja üsna muljetavaldavad. Ja ka sellepärast, et mulle on alati meeldinud KDE kahendkella plasmoid, mis näeb välja selline:

Mis on kahendkell?

Neile, kes ei tea, mis on kahendkell ja kuidas selle järgi aega määrata, teen väikese kõrvalepõike. Kahekell on lihtsalt kell, mis näitab aega kahend- (või kahend-) numbrisüsteemis, mitte kümnendarvude süsteemis, millega oleme harjunud.

Binaarseid kellasid on erinevat sorti (nagu üldiselt, tavalised kellad) - erinevate numbrite ja indikaatorite asukohaga, sekunditega või ilma, 24- või 12-tunnise kellavorminguga jne. Otsustasin valida võimaluse, mis on võimalikult sarnane ülalmainitud KDE plasmoidiga:


Kell koosneb kuuest vertikaalsest veerust – kaks veergu näitavad tundi, kaks minutit ja kaks sekundit (vasakult paremale). Iga veerg tähistab sisuliselt ühte numbrit (st kaks numbrit tundide, minutite ja sekundite jaoks).

Kellal on neli horisontaalset joont, kuna peame suutma näidata numbreid nullist üheksani (vähemalt kõige vähemtähtsa numbri puhul) ja üheksa kahendkujutus on 1001 , sisaldab nelja numbrit (bitti). Kõige vähem oluline number on allosas.

Lihtsaim viis kella kellaaja mõistmiseks on analüüsida "sihverplaati" vasakult paremale, alt üles. Kirjutame üles kahendarvu väärtuse, mida kujutab ülaltoodud pildil kujutatud kella kõige vasakpoolsem veerg (eeldusel, et põlev indikaator tähendab ühte ja kustunud indikaator nulli): 0010 kahendarvusüsteemis on see nii 2 - kümnendkohana. Kirjutame teise veeru väärtuse sarnaselt: 0001 kahendarvusüsteemis (nagu kümnendsüsteemis) või lihtsalt üks. Ehk siis kella peal 21 tund. Samamoodi saab lugeda, mida kell näitab 35 minutit ja 28 sekundit Väikese harjutamisega saate kahendkellalt aega lugeda peaaegu sama kiiresti kui tavalisest kellast.

Rakendamine

Niisiis, idee on selge, jätkame teostusega.

Alustame indikaatorist ("dial") - mis on LED-ide võre.

Kuna kellal on 4 horisontaalset ja 6 vertikaalset rida, siis kokku on vaja LED-e 6 * 4 = 24. Tegelikult saab hakkama ka vähemate LEDidega, sest kõiki numbreid ei kasutata – näiteks kella kõige olulisem number (kõige vasakpoolsem veerg) võib näidata mitte rohkem kui kahte (kahekümnetunnise ajavorminguga), mis tähendab, et saate salvestada kuni kaks LEDid. Kuid ma ei teinud seda ja paigaldasin kõik 24 LED-i, sest ... soovis (edaspidi) seda kella kasutada lihtsate tekstsõnumite kuvamiseks.

Kellaaja määramiseks vajate nuppe. Neid on kolm: esimene nupp lülitab kella kella seadistamise režiimi ja tagasi. Teine nupp, numbrivalik, lülitab veergu, milles aega parajasti reguleeritakse. Ja lõpuks, kolmas suurendab valitud veerus aega ühe võrra.

ATMega32 kasutatakse mikrokontrollerina. Muidugi pole nii lihtsa ülesande jaoks vaja kasutada nii võimsat mikrokontrollerit, kuid mul oli selline juba käepärast, nii et kasutasin seda.

Skeem ja PCB

Ahel on üsna standardne: mikrokontroller, toiteallikas, lähtestamine, pistik programmeerija ühendamiseks. TOSC1 ja TOSC2 külge on ühendatud kella kvarts, millest kell tiksuma hakkab. Aja seadistamise nupud on ühendatud toitepingega. Kümme LED-väljundit (6 veergu + 4 rida). Iga horisontaalse reale on ühendatud takisti, et piirata voolu läbi LED-i.

Trükkplaat osutus ühepoolseks, kuid siiski kahe džempriga teisel pool (märgitud punasega), mida on üsna lihtne teha õhukesest vasktraadist.

Raam

See on ilmselt kõige ebahuvitavam osa. Kuid samal ajal võttis ta suurema osa ajast.

Korpus ise on valmistatud naelte ja liimiga kinnitatud puitplaatidest. Pärast kokkupanekut lihviti lauad hoolikalt, kaeti peitsi ja mitme kihi mööblilakiga.

Valgusdioodid paigaldatakse vaheseintega võrku, mis on valmistatud pusle abil puidust joonlaudadest. Valguse hajutamiseks sisestatakse igasse LED-iga lahtrisse tavalist jälituspaberit (mida kasutatakse jooniste või mustrite jaoks).

Kella esiküljele on liimitud kahepoolne mattklaas. Tagumine osa on kaetud kruvidega kaanega, millest ulatuvad välja aja seadistusnupud.

Tarkvara osa

Otsustasin kirjutada programmi assembleris. Mitte sellepärast, et see oleks kõige mugavam arenduskeel, vaid ainult hariduslikel eesmärkidel. Lähtekoodid leiate allpool jaotisest "Failid".

Ma ei kirjelda kogu koodi, sest... seda kommenteeritakse piisavalt üksikasjalikult. Kirjeldan ainult põhipunkte.

Skaneerimine toimub veergude kaupa ehk esmalt põlevad korraks ainult esimese veeru LEDid, siis teise jne. See juhtub väga kiiresti ja silm ei jõua seda märgata, mistõttu tundub, et kõik põlevad LED-id põlevad korraga. Ajaväärtuse kuvamiseks veerus kasutage makrot DISPLAY_COLUMN. Veergude vahetamine toimub Timer0 taimeriga.

Aja muutus toimub üks kord sekundis, kui Timer/Counter2 katkestatakse. Kuna kristallide sagedus on 32768 Hz ja taimeri eelskaalaja on seatud väärtusele 128, täitub ühebaidine taimer kord sekundis üle ( 32768 / (128 * 256) = 1 ), mis on väga mugav.

Nupuklõpsude töötlemine toimub protseduurides button_stop_pressed, et nupp lülitab kella seadistusrežiimi ja tagasi, button_set_pressed aja seadistamise nupu jaoks ja button_switch_pressed veeru vahetamise nupu jaoks. Pange tähele, et protseduuri button_stop_pressed korral salvestatakse praegune kellaaeg EEPROM-i. Seda tehakse selleks, et kellaaega ei lähtestataks, kui on vaja näiteks kella teise pesa lülitada (kella sisselülitamisel loetakse kellaaeg EEPROM-ist).

Kogu põhitöö, nagu nuppude oleku küsitlemine, aktiivse skannimise veeru vahetamine ja kellaaja kuvamine, toimub põhiekraanil. . Esialgne lähtestamine on tehtud lähtestada.

Tulemus

Tulemust saab näha allolevast videost. Seal on jäädvustatud ka mõned tootmisprotsessi etapid.

Failid

Püsivara, skeemide ja juhtmestiku lähtekoodid asuvad selles GitLabi hoidlas.

Järelduseks

Üldiselt esimese seadme kohta arvan, et see tuli päris hästi välja.

Kui leiate selles artiklis ebatäpsusi või kui arvate, et midagi tuleks üksikasjalikumalt kirjeldada, kirjutage kommentaaridesse.

Idee

Kõik sai alguse soovist teha AVR mikrokontrollerile mõni täiesti valmis seade. Valik langes kahendkelladele, sest Neid on lihtne valmistada ja need näevad välja üsna muljetavaldavad. Ja ka sellepärast, et mulle on alati meeldinud KDE kahendkella plasmoid, mis näeb välja selline:

Mis on kahendkell?

Neile, kes ei tea, mis on kahendkell ja kuidas selle järgi aega määrata, teen väikese kõrvalepõike. Kahekell on lihtsalt kell, mis näitab aega kahend- (või kahend-) numbrisüsteemis, mitte kümnendarvude süsteemis, millega oleme harjunud.

Binaarseid kellasid on erinevat sorti (nagu üldiselt, tavalised kellad) - erinevate numbrite ja indikaatorite asukohaga, sekunditega või ilma, 24- või 12-tunnise kellavorminguga jne. Otsustasin valida võimaluse, mis on võimalikult sarnane ülalmainitud KDE plasmoidiga:

Kell koosneb kuuest vertikaalsest veerust – kaks veergu näitavad tundi, kaks minutit ja kaks sekundit (vasakult paremale). Iga veerg tähistab sisuliselt ühte numbrit (st kaks numbrit tundide, minutite ja sekundite jaoks).

Kellal on neli horisontaalset joont, kuna peame suutma näidata numbreid nullist üheksani (vähemalt kõige vähemtähtsa numbri puhul) ja binaarne esitus üheksa - 1001 sisaldab nelja numbrit (bitti). Kõige vähem oluline number on allosas.

Lihtsaim viis kella kellaaja mõistmiseks on analüüsida sihverplaati vasakult paremale, alt üles. Kirjutame üles kahendarvu väärtuse, mida kujutab ülaltoodud pildil kujutatud kella kõige vasakpoolsem veerg (eeldusel, et põlev indikaator tähendab ühte ja kustuv number nulli): 0010 kahendarvusüsteemis on kümnendkohana 2 numbrisüsteem. Sarnaselt kirjutame teise veeru väärtuse: 0001 kahendarvusüsteemis (nagu kümnendarvusüsteemis) või lihtsalt üks. See tähendab, et kell näitab 21. Samamoodi saab lugeda, et kell näitab 35 minutit ja 28 sekundit. Väikese harjutamisega saate kahendkellast aega lugeda peaaegu sama kiiresti kui tavalisest kellast.

Rakendamine

Niisiis, idee on selge, jätkame teostusega.

Alustame indikaatorist ("dial") - mis on LED-ide võre.
Kuna kellal on 4 horisontaalset ja 6 vertikaalset rida, siis kokku on vaja LED-e 6 * 4 = 24. Tegelikult saab hakkama ka vähemate LEDidega, sest kõiki numbreid ei kasutata – näiteks kella kõige olulisem number (kõige vasakpoolsem veerg) võib näidata mitte rohkem kui kahte (kahekümnetunnise ajavorminguga), mis tähendab, et saate salvestada kuni kaks LEDid. Kuid ma ei teinud seda ja paigaldasin kõik 24 LED-i, sest ... soovis (edaspidi) seda kella kasutada lihtsate tekstsõnumite kuvamiseks.

Kellaaja määramiseks vajate nuppe. Neid on kolm: esimene nupp lülitab kella kella seadistamise režiimi ja tagasi. Teine nupp, numbrivalik, lülitab veergu, milles aega parajasti reguleeritakse. Ja lõpuks, kolmas suurendab valitud veerus aega ühe võrra.

ATMega32 kasutatakse mikrokontrollerina. Muidugi pole nii lihtsa ülesande jaoks vaja kasutada nii võimsat mikrokontrollerit, kuid mul oli selline juba käepärast, nii et kasutasin seda.

Skeem ja PCB

Ahel on üsna standardne: mikrokontroller, toiteallikas, lähtestamine, pistik programmeerija ühendamiseks. TOSC1 ja TOSC2 külge on ühendatud kella kvarts, millest kell tiksuma hakkab. Aja seadistamise nupud on ühendatud toitepingega. Kümme LED-väljundit (6 veergu + 4 rida). Iga horisontaalse reale on ühendatud takisti, et piirata voolu läbi LED-i.

Trükkplaat osutus ühepoolseks, kuid siiski kahe džempriga teisel pool (märgitud punasega), mida on üsna lihtne teha õhukesest vasktraadist.

Raam

See on ilmselt kõige ebahuvitavam osa. Kuid samal ajal võttis ta suurema osa ajast.

Korpus ise on valmistatud naelte ja liimiga kinnitatud puitplaatidest. Pärast kokkupanekut lihviti lauad hoolikalt, kaeti peitsi ja mitme kihi mööblilakiga.

Valgusdioodid paigaldatakse vaheseintega võrku, mis on valmistatud pusle abil puidust joonlaudadest. Valguse hajutamiseks sisestatakse igasse LED-iga lahtrisse tavalist jälituspaberit (mida kasutatakse jooniste või mustrite jaoks).

Kella esiküljele on liimitud kahepoolne mattklaas. Tagumine osa on kaetud kruvidega kaanega, millest ulatuvad välja aja seadistusnupud.

Tarkvara osa

Otsustasin kirjutada programmi assembleris. Mitte sellepärast, et see oleks kõige mugavam arenduskeel, vaid ainult hariduslikel eesmärkidel. Lähtekoodid leiate allolevast arhiivist.

Ma ei kirjelda kogu koodi, sest... seda kommenteeritakse piisavalt üksikasjalikult. Kirjeldan ainult põhipunkte.

Skaneerimine toimub veergude kaupa ehk esmalt põlevad korraks ainult esimese veeru LEDid, siis teise jne. See juhtub väga kiiresti ja silm ei jõua seda märgata, mistõttu tundub, et kõik põlevad LED-id põlevad korraga. Ajaväärtuse kuvamiseks veerus kasutage makrot DISPLAY_COLUMN. Veergude vahetamine toimub Timer0 taimeriga.

Aja muutus toimub üks kord sekundis, kui Timer/Counter2 katkestatakse. Kuna kristallide sagedus on 32768 Hz ja taimeri eelskaalaja on seatud väärtusele 128, täitub ühebaidine taimer kord sekundis üle (32768 / (128 * 256) = 1) , mis on väga mugav.

Nupuklõpsud töödeldakse protseduuride kaupa nuppu_stopp_vajutatud nupp kella seadistusrežiimi ja tagasi lülitamiseks, button_set_pressed aja seadistamise nupu jaoks ja nuppu_lüliti_vajutatud veeru lülitusnupu jaoks. Pange tähele, et protseduuris nuppu_stopp_vajutatud praegune kellaaeg salvestatakse EEPROM-i. Seda tehakse selleks, et kellaaega ei lähtestataks, kui on vaja näiteks kella teise pesa lülitada (kella sisselülitamisel loetakse kellaaeg EEPROM-ist).

Class="eliadunit">

Kogu põhitöö, nagu nuppude oleku küsimine, aktiivse skannimise veeru vahetamine ja kellaaja kuvamine, toimub põhifunktsioonis. Esialgne lähtestamine toimub lähtestamise teel.

Esitan teie tähelepanu elektroonilisele mikrokontrolleri kell. Kellaahel on väga lihtne, sisaldab minimaalselt osi ja seda saavad korrata ka algajad raadioamatöörid.

Disain on kokku pandud mikrokontrollerile ja DS1307 reaalajakellale. Praeguse kellaaja indikaatorina kasutatakse neljakohalist seitsmesegmendilist LED-indikaatorit (ülihele, sinine, mis näeb pimedas hea välja ja samal ajal mängib kell öö rolli valgus). Kella juhitakse kahe nupuga. Tänu DS1307 reaalajas kella kiibi kasutamisele osutus programmi algoritm üsna lihtsaks. Mikrokontroller suhtleb reaalajas kellaga I2C siini kaudu ja seda korraldab tarkvara.

Kella diagramm:

Kahjuks on diagrammil viga:
— MK-klemmid tuleb ühendada transistoride alustega:
РВ0 kuni Т4, РВ1 kuni Т3, РВ2 kuni Т2, РВ3 kuni Т1
või muutke transistori kollektorite ühendus indikaatornumbritega:
T1 kuni DP1… T4 kuni DP4

Kella ahelas kasutatavad osad:

♦ ATTiny26 mikrokontroller:

♦ reaalajas kell DS1307:

♦ 4-kohaline seitsmesegmendiline LED-indikaator – FYQ-5641UB-21 ühise katoodiga (ülihele, sinine):

♦ kvarts 32,768 kHz, sisendmahtuvusega 12,5 pF (saab võtta arvuti emaplaadilt), kella täpsus sõltub sellest kvartsist:

♦ kõik transistorid on NPN struktuurid, kasutada võib mis tahes (KT3102, KT315 ja nende välismaised analoogid), mina kasutasin BC547S
♦ mikrolülituse pingestabilisaator tüüp 7805
♦ kõik takistid võimsusega 0,125 vatti
♦ polaarkondensaatorid tööpingele, mis ei ole madalam toitepingest
♦ varutoiteallikas DS1307 – 3 volti liitiumelement CR2032

Kella toiteks saate kasutada mis tahes mittevajalikku mobiiltelefoni laadijat (sel juhul, kui pinge laadija väljundis on vahemikus 5 volti ± 0,5 volti, võib osa vooluringist - pinge stabilisaator 7805 tüüpi kiibil. kõrvaldada)
Seadme voolutarve on 30 mA.
Te ei pea kella DS1307 jaoks varuakut paigaldama, kuid kui vooluvõrk kaob, tuleb praegune kellaaeg uuesti seadistada.
Seadme trükkplaati ei ole antud, disain on kokku pandud vigasest mehaanilisest kellast. LED (vilkumissagedusega 1 Hz, SQW DS1307 kontaktilt) eraldab indikaatoril tunde ja minuteid.

Mikrokontrolleri seaded on tehases: taktsagedus - 1 MHz, FUSE bitte ei pea puudutama.

Kella töö algoritm(Algoritmi koostajas):

1. Virnakursori seadistamine
2. Taimeri T0 seadistamine:
— sagedus SK/8
- ülevoolukatkestused (sel eelseadistatud sagedusel kutsutakse katkestus iga 2 millisekundi järel)
3. Portide lähtestamine (viigud PA0-6 ja PB0-3 on konfigureeritud väljundiks, PA7 ja PB6 sisendiks)
4. I2C siini lähtestamine (kontaktid PB4 ja PB5)
5. DS1307 registri nulli 7. biti (CH) kontrollimine
6. Globaalse katkestuse lubamine
7. Silmuse sisestamine ja nupuvajutuse kontrollimine

Esmakordsel sisselülitamisel või uuesti sisselülitamisel, kui DS307-l pole varutoidet, lähtestatakse praegune kellaaeg algsele seadistusele. Sel juhul: nupp S1 – kellaaja määramiseks, nupp S2 – üleminek järgmisele numbrile. Määrake aeg – tunnid ja minutid kirjutatakse DS1307-le (sekundid on seatud nulli) ja SQW/OUT viik (7. kontakt) on konfigureeritud genereerima ruutlaine impulsse sagedusega 1 Hz.
Kui vajutate nuppu S2 (S4 - programmis), on globaalne katkestus keelatud, programm läheb aja korrigeerimise alamprogrammi. Sel juhul seadistatakse nuppude S1 ja S2 abil minutid kümned ja ühikud, seejärel alates 0 sekundist salvestab nupu S2 vajutamine DS1307 värskendatud aja, lahendab globaalse katkestuse ja naaseb põhiprogrammi.

Kell näitas head täpsust, ajakadu kuus oli 3 sekundit.
Täpsuse parandamiseks on soovitatav ühendada kvarts DS1307-ga, nagu on näidatud andmelehel:

Programm on kirjutatud Algorithm Builder keskkonnas.
Kellaprogrammi näitel kasutades saate tutvuda I2C siini kaudu mikrokontrolleri ja teiste seadmete vahelise suhtlemise algoritmiga (iga rida on algoritmis üksikasjalikult kommenteeritud).

Foto kokkupandud seadmest ja trükkplaadist .lay formaadis saidilugeja Anatoli Pilguki poolt, mille eest suur tänu talle!

Seade kasutab: Transistorid - SMD BC847 ja CHIP takistid

Artikli manused:

(42,9 KiB, 3198 tabamust)

(6,3 KiB, 4161 tabamust)

(3,1 KiB, 2640 tabamust)

(312,1 KiB, 5913 tabamust)


Kellaprogrammi teine ​​versioon AB-s (neile, kes ei saa ülemist alla laadida)

(11,4 KiB, 1928 tabamust)



Mida muud lugeda