Përmbajtje:

Kohëmatësi i programueshëm me 8 kanale: 13 hapa
Kohëmatësi i programueshëm me 8 kanale: 13 hapa

Video: Kohëmatësi i programueshëm me 8 kanale: 13 hapa

Video: Kohëmatësi i programueshëm me 8 kanale: 13 hapa
Video: Sistemi i ujitjes DIY për ballkone dhe tarraca për vetëm 29€ 2024, Korrik
Anonim
Kohëmatësi i programueshëm me 8 kanale
Kohëmatësi i programueshëm me 8 kanale
Kohëmatësi i programueshëm me 8 kanale
Kohëmatësi i programueshëm me 8 kanale
Kohëmatësi i programueshëm me 8 kanale
Kohëmatësi i programueshëm me 8 kanale

Prezantimi

Unë kam përdorur gamën e mikrokontrolluesit PIC të Microchip për projektet e mia që nga viti 1993, dhe kam bërë të gjithë programimin tim në gjuhën e montuesit, duke përdorur Microchip MPLab IDE. Projektet e mia shkonin nga semaforë të thjeshtë dhe LED të ndezur, deri te ndërfaqet e xhojstikut USB për modelet R/C dhe analizatorët e ndërruesve të përdorur në industri. Zhvillimi zgjati shumë ditë, dhe nganjëherë mijëra rreshta të kodit të montuesit.

Pas marrjes së Matrix Multimedia Flowcode 4 Professional, isha mjaft skeptik ndaj softuerit. Dukej shumë e lehtë për ta besuar. Vendosa ta provoja dhe testova të gjitha makrot e ndryshme të Komponentit, të gjitha me sukses të madh. Pjesa më e mirë e përdorimit të Flowcode ishte se projektet e thjeshta mund të kodohen brenda një nate të vetme. Pasi luaja me I²C dhe një orë DS1307 në kohë reale, vendosa të krijoj kohëmatësin me 8 kanale duke përdorur Flowcode. Duke mos qenë një projekt i vogël dhe i lehtë, besova se ky do të ishte një projekt i shkëlqyeshëm për t'i mësuar vetes Flowcode.

Zgjedhja e një mikroprocesori dhe përbërës të tjerë

Për shkak të numrit të kunjave të I/O të kërkuar, ishte e qartë se do të nevojitej një pajisje 40 pin. PIC 18F4520 u zgjodh, kryesisht për kujtesën e tij të programit 32K, dhe 1536 bajt të kujtesës së të dhënave. Të gjithë përbërësit e përdorur, janë pajisje standarde përmes vrimave, duke bërë të mundur ndërtimin e qarkut në bordin Vero nëse kërkohet. Kjo gjithashtu ndihmoi në zhvillimin në një dërrasë buke.

Hapi 1: Objektivat e Projektit

Objektivat e Projektit
Objektivat e Projektit

Objektivat

- Ruajtje e saktë e kohës, me bateri rezervë.

- Të gjitha programet dhe të dhënat të ruhen, edhe pas humbjes së fuqisë.

- Ndërfaqe e thjeshtë e përdoruesit.

- Fleksibilitet programimi.

Mbajtja e kohes

Duke jetuar në një zonë të prirur për ndërprerje të energjisë, standardi 50/60Hz nga linjat e energjisë nuk do të jetë i mjaftueshëm për mbajtjen e saktë të kohës. Një orë në kohë reale ishte thelbësore, dhe pasi testova disa patate të skuqura RTC, vendosa për DS1307 për shkak të oshilatorit të tij të thjeshtë dhe konfigurimit të rezervimit të baterisë. Mbajtja mjaft e saktë e kohës u mor duke përdorur vetëm një kristal 32.768 kHz të lidhur me DS1307. Saktësia ishte brenda 2 sekondave gjatë një periudhe prove 2 mujore duke përdorur 4 lloje të ndryshme kristalesh.

Ruajtja e të dhënave

Të gjitha të dhënat e programit të kohëmatësit duhet të ruhen, edhe gjatë ndërprerjes së energjisë. Me deri në 100 programe të ndryshme dhe të dhëna të ndryshme konfigurimi, u bë e qartë se 256 bajtët e EEPROM në bord të PIC nuk do të jenë mjaft të mëdha. Një 24LC256 I²C EEPROM përdoret për të ruajtur të gjithë informacionin e programimit.

Ndërfaqe e thjeshtë e përdoruesit

Ndërfaqja e përdoruesit përbëhet nga vetëm 2 artikuj, një ekran LCD x 16 x 4 me dritë prapa LED dhe një tastierë 4 x 3. I gjithë programimi mund të bëhet me shtypjen e vetëm disa butonave. Shtesat në ndërfaqe janë një zile piezo e dëgjueshme dhe dritë e pasme LCD që ndizet.

Hapi 2: Fleksibiliteti i programimit

Fleksibiliteti i programimit
Fleksibiliteti i programimit

Për të siguruar fleksibilitet të mjaftueshëm të programit, kohëmatësi ka 100 programe të cilat mund të vendosen individualisht. Për secilin program, mund të caktohet koha në kohë, koha e fikur, kanalet dalëse dhe dita e javës. Çdo program ka tre mënyra:

- Auto: Në kohë, Ora e fikur, Kanali i daljes dhe Dita e javës është vendosur.

- Joaktiv: Programi individual mund të çaktivizohet, pa fshirë cilësimet. Për të aktivizuar përsëri programin, thjesht zgjidhni një mënyrë tjetër.

- Dita/Nata: Timeshtë vendosur në kohë, Ora e fikur, Kanali i daljes dhe Dita e javës. Punon njësoj si modaliteti automatik, por do

aktivizoni daljet vetëm midis kohës On dhe Off kur është errësirë. Kjo gjithashtu mundëson kontroll të plotë ditën/natën

si fleksibilitet i shtuar për të ndezur dritat në perëndim të diellit dhe fikur në lindjen e diellit.

Shembulli 1: Do të ndizet drita pas orës 20:00 dhe do të fikë dritën në lindjen e diellit.:

Në: 20:00, Fikur: 12: 00, Shembulli 2: Do të ndizet drita në perëndim të diellit dhe do të fiket në orën 23:00.

Në: 12:00

Fikur: 23:00

Shembulli 3: Do të ndezë dritën në perëndim të diellit dhe do të fikë dritën në lindjen e diellit.

Më: 12:01

Fikur: 12:00

Opsione shtesë në dispozicion, të gjitha punojnë në mënyrë të pavarur nga 100 programet On/Off.

Kanalet e Programit Aktiv: Në vend që të fikni disa programe, kanalet individuale të daljes mund të çaktivizohen pa pasur nevojë të ndryshoni programet.

Hyrjet ndihmëse: Dy hyrje dixhitale janë në dispozicion, për të lejuar që disa kanale dalëse të ndizen për një kohë të caktuar. Për shembull, mund të përdoret për të ndezur drita të caktuara kur mbërrini në shtëpi natën vonë, kur shtypet një buton në telekomandë, ose për të ndezur një seri të ndryshme të dritave kur ndizet alarmi i shtëpisë.

Rezultatet ndihmëse: Dy dalje shtesë (përveç 8 kanaleve dalëse) janë në dispozicion. Ato mund të programohen që të ndizen me kanale të caktuara dalëse, ose me hyrje dixhitale. Në instalimin tim, kam dalje 6-8 që kontrollojnë ujitje, e cila punon në 24V. Unë përdor kanalet 6-8 për të ndezur një nga daljet ndihmëse, për të ndezur një furnizim me energji 24V për sistemin e ujitjes.

Manual On: Kur jeni në ekranin kryesor, butonat 1-8 mund të përdoren për të ndezur ose fikur manualisht kanalet.

Hapi 3: Pajisje kompjuterike

Hardware
Hardware

Furnizimi me energji elektrike: Furnizimi me energji elektrike përbëhet nga një ndreqës, kondensator zbutës dhe një siguresë 1 Amp për mbrojtjen nga mbingarkesa. Ky furnizim më pas rregullohet nga një rregullator 7812 dhe 7805. Furnizimi 12V përdoret për drejtimin e stafetëve të daljes, dhe të gjitha qarqet e tjera mundësohen nga furnizimi me 5V. Meqenëse rregullatori 7805 është i lidhur me daljen e rregullatorit 7812, rryma totale duhet të kufizohet në 1 amp përmes rregullatorit 7812. Këshillohet që të vendosni këta rregullatorë në një lavaman të përshtatshëm të nxehtësisë.

Bus I²C: Megjithëse Flowcode lejon kontrollin e pajisjes I²C, vendosa të përdor konfigurimin e softuerit I²C. Kjo lejon më shumë fleksibilitet në caktimet e kunjave. Edhe pse më i ngadalshëm (50 kHz), ai ende performon shkëlqyeshëm në krahasim me autobusin hardware I²C. Të dy DS1307 dhe 24LC256 janë të lidhur me këtë autobus I²C.

Ora në kohë reale (DS1307): Gjatë fillimit, regjistri RTC 0 dhe 7 lexohet për të përcaktuar nëse përmban kohë të vlefshme dhe të dhëna konfigurimi. Pasi të jetë konfiguruar saktë, koha RTC lexohet dhe koha ngarkohet në PIC. Kjo është hera e vetme që lexohet koha nga RTC. Pas fillimit, një impuls 1Hz do të jetë i pranishëm në pin 7 të RTC. Ky sinjal 1Hz është i lidhur me RB0/INT0, dhe përmes një rutine shërbimi të ndërprerë, koha e PIC -it azhurnohet çdo sekondë.

EEPROM i jashtëm: Të gjitha të dhënat dhe opsionet e programit ruhen në EEPROM të jashtëm. Të dhënat EEPROM ngarkohen gjatë fillimit dhe një kopje e të dhënave ruhet në kujtesën e PIC. Të dhënat EEPROM azhurnohen vetëm kur ndryshohen cilësimet e programit.

Sensori i ditës/natës: Një rezistencë standarde e varur nga drita (LDR) përdoret si sensori i ditës/natës. Ndërsa LDR -të vijnë në shumë forma dhe varietete, të gjitha me vlera të ndryshme të rezistencës në të njëjtat kushte drite, kam përdorur një kanal hyrës analog për të lexuar nivelin e dritës. Nivelet e ditës dhe të natës janë të rregullueshme dhe lejojnë fleksibilitet për sensorë të ndryshëm. Për të krijuar një histerezë, mund të vendosen vlera individuale për Ditën dhe Natën. Gjendja do të ndryshojë vetëm nëse niveli i dritës është nën Ditën, ose mbi pikat e përcaktuara të Natës, për më shumë se 60 sekonda.

Ekran LCD: Përdoret një ekran me 4 rreshta, 16 karaktere, pasi të gjitha të dhënat nuk mund të shfaqen në një ekran me 2 rreshta. Projekti përfshin disa karaktere me porosi, të përcaktuara në makro LCD_Custom_Char.

Hyrjet ndihmëse: Të dy hyrjet janë të ruajtura me një transistor NPN. +12v dhe 0V janë gjithashtu në dispozicion në lidhës, duke lejuar lidhje më fleksibile me lidhjet e jashtme. Si shembull, një marrës i telekomandës mund të lidhet me furnizimin.

Daljet: Të gjitha daljet izolohen elektrikisht nga qarku me anë të një stafete 12V. Reletë e përdorura, janë vlerësuar për 250V AC, në 10 amper. Kontaktet normalisht të hapura dhe normalisht të mbyllura nxirren në terminale.

Tastiera: Tastiera e përdorur është një tastierë me matricë 3 x 4, dhe është e lidhur PORTB: 2..7.

Hapi 4: Ndërprerjet e tastierës

Ndërprerjet e tastierës
Ndërprerjet e tastierës
Ndërprerjet e tastierës
Ndërprerjet e tastierës
Ndërprerjet e tastierës
Ndërprerjet e tastierës

Doja të shfrytëzoja ndërprerjen PORTB Interrupt on Change ndërprerjen në çdo shtypës kyç. Për këtë, një Ndërprerje me porosi duhej të krijohej në Flowcode, për të siguruar që drejtimi dhe të dhënat e PORTB të vendosen saktë para dhe pas çdo ndërprerjeje të tastierës. Një ndërprerje gjenerohet sa herë që një buton shtypet ose lëshohet. Rutina e ndërprerjes përgjigjet vetëm kur shtypet një çelës.

NDTERRHYRJE E DOGANIT

Aktivizo Kodin

portb = 0b00001110; trisb = 0b11110001;

intcon. RBIE = 1;

intcon2. RBIP = 1;

intcon2. RBPU = 1;

rcon. IPEN = 0;

Kodi i mbajtësit

nëse (intcon & (1 << RBIF))

{FCM_%n ();

portb = 0b00001110;

trisb = 0b11110001;

wreg = portb;

bit_ i qartë (intkon, RBIF);

}

Problemet e gjetura

Gjatë një ndërprerje, rutina e shërbimit të ndërprerjes duhet në asnjë kusht, të thërrasë ndonjë makro tjetër që mund të përdoret diku në pjesën tjetër të programit. Kjo përfundimisht do të çojë në probleme të tejmbushjes së pirgut, pasi ndërprerja mund të ndodhë në të njëjtën kohë kur programi kryesor është gjithashtu në të njëjtën nën -program. Kjo identifikohet gjithashtu si një GABIM I RNDSIS nga Flowcode kur përpilohet kodi.

Në kodin e personalizuar të tastierës nën GetKeyPadNumber, ekziston një thirrje e tillë në makron Delay_us, e cila do të shkaktojë një dalje të pirgut. Për të kapërcyer këtë, unë kam hequr komandën Delay_us (10) dhe e kam zëvendësuar me 25 rreshta të "wreg = porta;" komandat. Ky komandë lexon PORTA dhe vendos vlerën e tij në regjistrin W, vetëm për të marrë një vonesë. Ky komandë do të përpilohet në një udhëzim të vetëm të ngjashëm me assembler movf porta, 0. Për orën 10MHz të përdorur në projekt, çdo udhëzim do të jetë 400ns, dhe për të marrë një vonesë 10us, më duheshin 25 nga këto udhëzime.

Shënim në rreshtin e dytë të Figurës 3: Kodi i personalizuar GetKeypadNumber, që komanda origjinale delay_us (10) është çaktivizuar me “//”. Poshtë kësaj, unë kam shtuar 25 "wreg = porta;" komandat për të marrë një vonesë të re 10us. Pa thirrje për asnjë makro brenda kodit të personalizuar Keypad_ReadKeypadNumber, makroja e tastierës tani mund të përdoret brenda një rutine shërbimi të ndërprerë.

Duhet të theksohet se komponentët e tastierës Flowcode dhe eBlocks nuk përdorin rezistorët standardë tërheqës në linjat e hyrjes. Në vend të kësaj, ai përdor rezistenca tërheqëse 100K. Për shkak të disa ndërhyrjeve të gjetura në tastierë gjatë zhvillimit, rezistencat 100K u zëvendësuan të gjitha me 10K, dhe të gjithë rezistorët 10K u zëvendësuan me 1K5. Tastiera u testua për të punuar në mënyrë korrekte me kapëse 200 mm.

Hapi 5: Përdorimi i kohëmatësit

Përdorimi i kohëmatësit
Përdorimi i kohëmatësit
Përdorimi i kohëmatësit
Përdorimi i kohëmatësit
Përdorimi i kohëmatësit
Përdorimi i kohëmatësit

Të gjithë ekranet janë vendosur për të treguar të gjithë informacionin e kërkuar që përdoruesi të bëjë ndryshime të shpejta në cilësimet. Linja 4 përdoret për të ndihmuar në lundrimin nëpër menutë dhe opsionet e programit. Gjithsej 22 ekrane janë në dispozicion gjatë funksionimit normal.

LINJA 1: Koha dhe Statusi

Tregon ditën dhe orën aktuale, e ndjekur nga ikonat e statusit:

A - Tregon se Aux Input A u aktivizua, dhe Aux Input A kohëmatësi po funksionon.

B - Tregon se Aux Input B është shkaktuar dhe kohëmatësi Aux Input B po funksionon.

C - Tregon se Aux Output C është aktivizuar.

D - Tregon se Aux Output D është aktivizuar.

} - Statusi i sensorit të ditës/natës. Nëse është e pranishme, tregon se është natë.

LINJA 2: Rezultatet e Programit

Tregon kanalet që janë ndezur nga programe të ndryshme. Kanalet shfaqen në numrat e tyre të daljes, dhe një "-" tregon se dalja specifike nuk është e ndezur. Kanalet që janë çaktivizuar në "Prodhimet e Programit Aktive" do të tregohen akoma këtu, por rezultatet reale nuk do të vendosen.

LINJA 3: Rezultatet reale

Tregon se cilët kanale ndizen nga programe të ndryshme, Aux Inputs A & B, ose dalje manuale të përcaktuara nga përdoruesi. Shtypja 0 do t'i kthejë të gjitha daljet e aktivizuara me dorë në fikje dhe do të rivendosë kohëmatësit e A & B të Aux Output.

LINJA 4: Menyja dhe opsionet kryesore (në të gjitha menutë)

Tregon funksionin e çelësave "*" dhe "#".

Pjesa qendrore tregon se cilët çelësa numerikë (0-9) janë aktivë për ekranin e zgjedhur.

Statusi i hyrjes së Aux Input A & B tregohet gjithashtu me anë të një ikone të çelësit të hapur ose të mbyllur.

Rezultatet mund të ndizen/fiken manualisht duke shtypur butonin përkatës në tastierë.

Në të gjithë menutë, çelësat Star dhe Hash përdoren për të lundruar nëpër opsionet e ndryshme të programit. Çelësat 0-9 përdoren për të vendosur opsionet. Aty ku opsionet e shumta janë të disponueshme në një ekran të vetëm ose meny programimi, çelësi Hash përdoret për të kaluar nëpër opsionet e ndryshme. Opsioni aktual i përzgjedhur gjithmonë do të tregohet me karakterin ">" në të majtë të ekranit.

0-9 Futni vlerat e kohës

1-8 Ndryshoni përzgjedhjen e kanalit

14 36 Programet hap pas hapi, 1 hap prapa, 4 hapa mbrapa 10 programe, 3 hapa përpara, 6 hapa përpara 10

programet

1-7 Vendosni ditët e javës. 1 = e diel, 2 = e hënë, 3 = e martë, 4 = e mërkurë, 5 = e enjte, 6 = e premte, 7 = e shtunë

0 Në ekranin kryesor, fshini të gjitha anashkalimet manuale dhe kohëmatësit e Input A & Input B. Në menutë e tjera, ndryshon

opsionet e zgjedhura

# Në ekranin kryesor, do të çaktivizoni të gjitha anashkalimet manuale, kohëmatësit e hyrjes A & Input B dhe daljet e programit, derisa

ngjarja e radhës.

* dhe 1 Rinisni kohëmatësin

* dhe 2 Pastroni të gjitha programet dhe opsionet, rivendosni cilësimet në parazgjedhje.

* dhe 3 Vendoseni kohëmatësin në gatishmëri. Për të ndezur përsëri kohëmatësin, shtypni çdo tast.

Gjatë shënimeve të pasakta të çdo vlere kohore, drita e pasme LCD do të ndizet 5 herë për të treguar një gabim. Në të njëjtën kohë, zilja do të tingëllojë. Komandat Exit dhe Next do të funksionojnë vetëm kur hyrja aktuale është e saktë.

Drita e pasme LCD

Me fillimin fillestar, drita e pasme LCD do të ndizet për 3 minuta, përveç nëse:

- Ka një dështim të harduerit (EEPROM ose RTC nuk gjenden)

- Koha e pacaktuar në RTC

Drita e pasme LCD do të ndizet përsëri për 3 minuta në çdo hyrje të përdoruesit në tastierë. Nëse drita e pasme LCD është e fikur, çdo komandë e tastierës së pari do të ndezë dritën e pasme të LCD dhe do të injorojë çelësin e shtypur. Kjo siguron që përdoruesi të jetë në gjendje të lexojë ekranin LCD para se të përdorë tastierën. Drita e pasme LCD gjithashtu do të ndizet për 5 sekonda nëse është aktivizuar Aux Input A ose Aux Input B.

Hapi 6: Menu Screen Scots

Meny Screen Scots
Meny Screen Scots
Meny Screen Scots
Meny Screen Scots
Meny Screen Scots
Meny Screen Scots

Duke përdorur tastierën, secila prej opsioneve mund të programohet me lehtësi. Imazhet japin disa informacione për atë që bën çdo ekran.

Hapi 7: Dizajnimi i Sistemit

Dizajni i Sistemit
Dizajni i Sistemit

I gjithë zhvillimi dhe testimi u bë në dërrasën e bukës. Duke parë të gjitha pjesët e sistemit, unë e ndava sistemin në tre module. Ky vendim ishte kryesisht për shkak të kufizimeve të madhësisë së PCB (80 x 100mm) të versionit falas të Eagle.

Moduli 1 - Furnizimi me energji elektrike

Moduli 2 - bordi i CPU

Moduli 3 - Bordi stafetë

Vendosa që të gjithë komponentët duhet të jenë lehtësisht të arritshëm dhe se nuk dua të përdor përbërës të montimit në sipërfaqe.

Le të kalojmë nëpër secilën prej tyre.

Hapi 8: Furnizimi me energji elektrike

Furnizimi me energji elektrike
Furnizimi me energji elektrike
Furnizimi me energji elektrike
Furnizimi me energji elektrike
Furnizimi me energji elektrike
Furnizimi me energji elektrike
Furnizimi me energji elektrike
Furnizimi me energji elektrike

Furnizimi me energji elektrike është drejtpërdrejt, dhe furnizoni CPU dhe bordet e stafetë me 12V dhe 5V.

Kam montuar rregullatorët e tensionit në lavamanët e mirë të nxehtësisë, dhe gjithashtu kam përdorur kondensatorë të mbivlerësuar për furnizimin.

Hapi 9: Bordi i CPU

Bordi i CPU
Bordi i CPU
Bordi i CPU
Bordi i CPU
Bordi i CPU
Bordi i CPU
Bordi i CPU
Bordi i CPU

Të gjithë përbërësit, përveç ekranit LCD, tastiera dhe stafetat janë montuar në tabelën e CPU -së.

Blloqet terminale u shtuan për të thjeshtuar lidhjet midis furnizimit, dy hyrjeve dixhitale dhe sensorit të dritës.

Kunjat/bazat e kokës sigurojnë lidhje të lehta me ekranin LCD dhe tastierën.

Për daljet në stafetat, kam përdorur ULN2803. Ai tashmë përmban të gjithë rezistorët e kërkuar të drejtimit dhe diodat e kthimit. Kjo siguroi që bordi i CPU të mund të bëhet akoma duke përdorur versionin falas të Eagle. Reletë janë të lidhura me dy ULN2803. ULN2803 i poshtëm përdoret për 8 daljet, dhe ULN2803 i lartë për dy daljet ndihmëse. Çdo dalje ndihmëse ka katër transistorë. Lidhjet me stafetat janë gjithashtu përmes kunjave/bazave të kokës.

PIC 18F4520 ishte i pajisur me një prizë programimi, për të lejuar programim të lehtë përmes programuesit PicKit 3.

SHËNIM:

Ju do të vini re se bordi përmban një IC shtesë prej 8 kunjash. IC -ja e sipërme është një PIC 12F675 dhe është e lidhur me një hyrje dixhitale. Kjo u shtua gjatë projektimit të PCB. Kjo e bën më të lehtë përpunimin paraprak të hyrjes dixhitale. Në aplikacionin tim, një nga hyrjet dixhitale është i lidhur me sistemin tim të alarmit. Nëse bie alarmi, disa drita ndizen në shtëpinë time. Armatosja dhe çarmatosja e sistemit tim të alarmit jep bip të ndryshëm në sirenë. Duke përdorur PIC 12F675, tani mund të bëj dallimin midis krahut/çarmatosjes dhe një alarmi të vërtetë. 12F675 është gjithashtu i pajisur me një prizë programimi.

Unë gjithashtu sigurova një port I2C përmes pin/prizës së kokës. Kjo do të jetë e dobishme më vonë me bordet e stafetave.

Bordi përmban disa kërcyes, të cilët duhet të ngjiten para se të vendosni prizat IC.

Hapi 10: Përfundimi i kodit të rrjedhës

Përfundimi i kodit të rrjedhës
Përfundimi i kodit të rrjedhës
Përfundimi i kodit të rrjedhës
Përfundimi i kodit të rrjedhës
Përfundimi i kodit të rrjedhës
Përfundimi i kodit të rrjedhës

Meqenëse jam mësuar të punoj në nivelin e regjistrit në asamble, ndonjëherë ishte e vështirë dhe zhgënjyese të përdorja makro përbërës. Kjo ishte kryesisht për shkak të mungesës sime të njohurisë për strukturën programuese të Flowcode. Vendet e vetme që kam përdorur blloqet C ose ASM, ishte që të aktivizonin daljet brenda një rutine ndërprerjeje, dhe në rutinën Do_KeyPressed për të çaktivizuar/aktivizuar ndërprerjen e tastierës. PIC vendoset gjithashtu në SLEEP duke përdorur një bllok ASM, kur EEPROM ose RTC nuk gjenden.

Ndihma rreth përdorimit të komandave të ndryshme I²C, të gjitha u morën nga skedarët e Ndihmës Flowcode. Kërkohet të dini saktësisht se si funksionojnë pajisjet e ndryshme I²C, para se komandat të mund të përdoren me sukses. Hartimi i një qarku kërkon që projektuesi të ketë të gjitha fletët e të dhënave përkatëse në dispozicion. Kjo nuk është një mangësi e kodit të rrjedhës.

Kodi i rrjedhës me të vërtetë i rezistoi testit dhe rekomandohet shumë për personat që duan të fillojnë të punojnë me gamën e mikroçipave të mikroprocesorëve.

Programimi i kodit rrjedhës dhe konfigurimi për PIC u vendosën sipas fotografive

Hapi 11: Bordi opsional i stafetave I2C

Bordi opsional i stafetave I2C
Bordi opsional i stafetave I2C
Bordi opsional i stafetave I2C
Bordi opsional i stafetave I2C
Bordi opsional i stafetave I2C
Bordi opsional i stafetave I2C

Bordi i CPU -së tashmë ka lidhje header për 16 stafetë. Këto dalje janë transistorë kolektor të hapur përmes dy çipave ULN2803. Kjo mund të përdoret për të fuqizuar drejtpërdrejt stafetat.

Pas testeve të para të sistemit, nuk më pëlqyen të gjitha telat midis bordit të CPU dhe stafetë. Duke përfshirë një port I2C në bordin e CPU, vendosa të krijoj bordin e stafetës për t'u lidhur me portën I2C. Duke përdorur një çip 16 -kanalësh MCP23017 I/O Port Expander dhe një grup transistor ULN2803, i reduktova lidhjet midis CPU dhe stafetë në 4 tela.

Meqenëse nuk mund të vendosja 16 stafetë në një PCB 80 x 100 mm, vendosa të bëj dy dërrasa. Çdo MCP23017 përdor vetëm 8 nga 16 portet e tij. Bordi 1 trajton 8 daljet, dhe bordi 2 dy daljet ndihmëse. Dallimi i vetëm në bordet është adresat e secilës tabelë. Kjo vendoset lehtësisht me një mini bluzë. Çdo bord ka lidhje për të furnizuar energjinë dhe të dhëna I2C në bordin tjetër.

SHËNIM:

Nëse kërkohet, programi siguron vetëm një bord që mund të përdorë të 16 portat. Të gjitha të dhënat e stafetave dalëse janë të disponueshme në tabelën e parë.

Meqenëse qarku është opsional dhe shumë i thjeshtë, unë nuk krijova një skemë. Nëse ka kërkesë të mjaftueshme, mund ta shtoj më vonë.

Hapi 12: Lidhje opsionale RF

Lidhje opsionale RF
Lidhje opsionale RF
Lidhje opsionale RF
Lidhje opsionale RF
Lidhje opsionale RF
Lidhje opsionale RF

Pas përfundimit të projektit, shpejt kuptova se më duhet të tërheq shumë instalime elektrike 220V AC në kohëmatës. Kam zhvilluar një lidhje RF duke përdorur module standarde 315MHz që lejonin që kohëmatësi të vendoset brenda një dollapi, dhe bordet e stafetë brenda çatisë, afër të gjitha instalimeve elektrike 220V.

Lidhja përdor një AtMega328P që funksionon në 16MHz. Softueri për transmetuesin dhe marrësin është i njëjtë, dhe mënyra zgjidhet nga një mini kërcyes.

Transmetues

Transmetuesi thjesht lidhet me portën CPU I2C. Asnjë konfigurim shtesë nuk kërkohet, pasi AtMega328P dëgjon të njëjtat të dhëna si bordet e stafetave I2C.

Të dhënat azhurnohen një herë në sekondë në portën I2C, dhe transmetuesi e dërgon këtë informacion përmes lidhjes RF. Nëse transmetuesi nuk merr të dhëna I2C për rreth 30 sekonda, transmetuesi do të transmetojë vazhdimisht të dhëna për të fikur të gjithë stafetat në njësinë e marrësit.

Fuqia në modulin e transmetuesit mund të zgjidhet midis 12V dhe 5V me një mini kërcyes në bordin e PC. Unë po fuqizoj transmetuesin tim duke përdorur 12V.

Marrësi

Marrësi dëgjon të dhënat e koduara nga transmetuesi dhe i vendos të dhënat në një port I2C. Bordi i stafetës thjesht futet në këtë port dhe funksionon njësoj siç ishte futur në bordin e CPU.

Nëse marrësi nuk merr të dhëna të vlefshme për 30 sekonda, marrësi do të dërgojë vazhdimisht të dhëna në portën I2C për të fikur të gjithë stafetat në pllakat e stafetës.

Skematike

Një ditë, nëse ka kërkesë për të. Skica Arduino përmban të gjithë informacionin e kërkuar për të ndërtuar qarkun pa një diagram qarku.

Gama

Në instalimin tim, transmetuesi dhe marrësi janë rreth 10 metra larg. Kohëmatësi është brenda një dollapi, dhe njësia e stafetës në krye të tavanit.

Hapi 13: Produkti Përfundimtar

Produkti Përfundimtar
Produkti Përfundimtar
Produkti Përfundimtar
Produkti Përfundimtar
Produkti Përfundimtar
Produkti Përfundimtar

Njësia kryesore ishte e pajisur në një kuti të vjetër projekti. Ai përmban sa vijon:

- Transformator 220V/12V

- Bordi i Furnizimit me Energji

- Bordi i CPU

- Ekran LCD

- Tastiera

- Transmetues i lidhjeve RF

- Njësi shtesë e marrësit në distancë në shtëpi për të më mundësuar të ndez/fik dritat përmes telekomandës

Njësia e stafetë përbëhet nga sa vijon:

- Transformator 220V/12V

- Bordi i Furnizimit me Energji

- Marrës i lidhjes RF

- 2 x Borde Rele të I2C

Të gjitha dërrasat u krijuan me të njëjtin dimension, duke e bërë të lehtë vendosjen e tyre njëra mbi tjetrën me ndarës 3mm.

Recommended: