Talaan ng mga Nilalaman:

8 Channel Programmable Timer: 13 Mga Hakbang
8 Channel Programmable Timer: 13 Mga Hakbang

Video: 8 Channel Programmable Timer: 13 Mga Hakbang

Video: 8 Channel Programmable Timer: 13 Mga Hakbang
Video: Grade 10 AP Q1 Ep16: Mga Hakbang sa Pagbuo ng CBDRRM Plan - Ikaapat na Yugto 2024, Hulyo
Anonim
8 Programmable Timer ng Channel
8 Programmable Timer ng Channel
8 Programmable Timer ng Channel
8 Programmable Timer ng Channel
8 Programmable Timer ng Channel
8 Programmable Timer ng Channel

Panimula

Gumagamit ako ng saklaw ng Microchip's PIC na saklaw ng microcontroller para sa aking mga proyekto mula pa noong 1993, at nagawa ko ang lahat ng aking programa sa wikang assembler, gamit ang Microchip MPLab IDE. Ang aking mga proyekto ay nagmula sa simpleng mga ilaw ng trapiko at mga kumikislap na LED, hanggang sa mga interface ng USB joystick para sa mga modelo ng R / C, at mga switchgear analiser na ginamit sa industriya. Ang pag-unlad ay tumagal ng maraming araw, at kung minsan ay libu-libong mga linya ng assembler code.

Matapos matanggap ang Matrix Multimedia Flowcode 4 Professional, hindi ako nag-alinlangan sa software. Napakadali nitong tumingin. Nagpasya akong subukan ito, at sinubukan ang lahat ng iba't ibang Mga Component Macros, lahat ay may tagumpay. Ang pinakamagandang bahagi ng paggamit ng Flowcode ay ang mga simpleng proyekto na maaaring naka-code sa isang solong gabi. Matapos maglaro kasama ang I²C at isang DS1307 real time na orasan, nagpasya akong idisenyo ang 8 Channel Timer gamit ang Flowcode. Hindi isang maliit at madaling proyekto, naniniwala ako na ito ay magiging isang mahusay na proyekto upang turuan ang aking sarili ng Flowcode.

Pagpili ng isang microprocessor at iba pang mga bahagi

Dahil sa bilang ng mga kinakailangang I / O na pin, malinaw na kakailanganin ang isang 40 pin na aparato. Ang PIC 18F4520 ay napili, pangunahin para sa memorya ng 32K na programa, at 1536 bytes ng memorya ng data. Ang lahat ng ginamit na mga sangkap, ay karaniwang mga through-hole na aparato, na ginagawang posible na itayo ang circuit sa Vero board kung kinakailangan. Tumulong din ito sa pag-unlad sa isang breadboard.

Hakbang 1: Mga Layunin ng Proyekto

Mga Layunin ng Proyekto
Mga Layunin ng Proyekto

Mga Layunin

- Tumpak na pagpapanatili ng oras, na may back-up ng baterya.

- Lahat ng mga programa at data na panatilihin, kahit na pagkatapos ng pagkawala ng lakas.

- Simple interface ng gumagamit.

- Kakayahang umangkop sa Programming.

Pagpapanatili ng oras

Ang pamumuhay sa isang lugar na madaling kapitan ng mga pagkabigo sa kuryente, ang pamantayang 50 / 60Hz mula sa mga linya ng kuryente ay hindi sapat para sa tumpak na pagpapanatili ng oras. Ang isang real time na orasan ay mahalaga, at pagkatapos ng pagsubok ng maraming mga chips ng RTC, nagpasya ako sa DS1307 dahil sa simpleng oscillator at pagsasaayos ng back-up ng baterya. Ang tumpak na pagpapanatili ng oras ay nakuha gamit lamang ang isang 32.768 kHz na kristal na konektado sa DS1307. Ang kawastuhan ay nasa loob ng 2 segundo sa loob ng 2 buwan na panahon ng pagsubok na gumagamit ng 4 na magkakaibang paggawa ng mga kristal.

Pagpapanatili ng data

Ang lahat ng data ng programa ng timer ay dapat panatilihin, kahit na sa panahon ng kabiguan ng kuryente. Na may hanggang sa 100 iba't ibang mga programa at iba't ibang mga data ng pagsasaayos, naging malinaw na ang 256 bytes ng on-board EEPROM ng PIC ay hindi magiging sapat na malaki. Ginagamit ang isang 24LC256 I²C EEPROM upang iimbak ang lahat ng impormasyon sa programa.

Simpleng interface ng gumagamit

Ang interface ng gumagamit ay binubuo lamang ng 2 mga item, isang 16 x 4 na linya ng LCD display na may LED backlight, at isang 4 x 3 keypad. Ang lahat ng mga programa ay maaaring gawin sa pagpindot ng ilang mga pindutan lamang. Ang mga karagdagan sa interface ay isang naririnig na piezo buzzer, at visual flashing na LCD backlight.

Hakbang 2: Kakayahang umangkop sa Programming

Kakayahang umangkop sa Programming
Kakayahang umangkop sa Programming

Upang matiyak ang sapat na kakayahang umangkop ng programa, ang timer ay may 100 mga programa na maaaring itakda nang paisa-isa. Para sa bawat programa, maaaring maitakda ang Sa oras, Walang Oras, Mga Output Channel, at Araw ng Linggo. Ang bawat programa ay may tatlong mga mode:

- Auto: Sa Oras, Off time, Output Channel at Araw ng linggo ay itinakda.

- Off: Ang indibidwal na programa ay maaaring hindi paganahin, nang hindi tinatanggal ang mga setting. Upang muling paganahin ang programa, pumili lamang ng ibang mode.

- Araw / Gabi: Sa Oras, Off time, Output Channel at Araw ng linggo ay itinakda. Gumagawa ang pareho sa mode na Auto, ngunit gagawin

i-on lamang ang mga output sa pagitan ng mga oras ng Bukas at Patay kapag madilim ito. Pinapagana nito rin ang buong kontrol ng Araw / Gabi

bilang idinagdag na kakayahang umangkop upang i-on ang mga ilaw sa paglubog ng araw, at patayin sa pagsikat ng araw.

Halimbawa 1: Mag-iilaw pagkatapos ng 20:00, at papatayin ang ilaw sa pagsikat ng araw.:

Sa: 20:00, Off: 12:00, Halimbawa 2: I-o-on ang ilaw sa paglubog ng araw, at i-o-off ang ilaw sa 23:00.

Sa: 12:00

Off: 23:00

Halimbawa 3: Magbubukas ng ilaw sa paglubog ng araw, at papatayin ang ilaw sa pagsikat ng araw.

Sa: 12:01

Naka-off: 12:00

Magagamit ang mga karagdagang pagpipilian, lahat ay nagtatrabaho nang nakapag-iisa mula sa 100 na On / Off na programa.

Aktibo ang Mga Channel ng Programa: Sa halip na patayin ang maraming mga programa, ang mga indibidwal na channel ng output ay maaaring hindi paganahin nang hindi na kailangang baguhin ang mga programa.

Mga input na pantulong: Dalawang mga digital na input ang magagamit, upang payagan ang ilang mga output channel na i-on para sa isang tukoy na oras. Maaari itong halimbawa magamit upang buksan ang ilang mga ilaw kapag pagdating sa bahay nang gabing-gabi, kapag ang isang pindutan sa isang remote ay pinindot, o upang i-on ang isang iba't ibang mga ser ng ilaw kapag ang alarma sa bahay ay na-trigger.

Mga Auxiliary output: Dalawang karagdagang mga output (bukod sa 8 output channel) ay magagamit. Maaari silang mai-program upang i-on kasama ang ilang mga output channel, o sa mga digital input. Sa aking pag-install, mayroon akong mga output na 6-8 na kinokontrol ang aking irigasyon, na gumagana sa 24V. Gumagamit ako ng mga channel 6-8 upang i-on ang isa sa mga auxiliary output, upang buksan ang isang 24V power supply para sa irrigation system.

Manu-manong Bukas: Kapag nasa pangunahing screen, ang mga pindutan na 1-8 ay maaaring magamit upang manu-manong i-on o i-off ang mga channel.

Hakbang 3: Hardware

Hardware
Hardware

Power Supply: Ang supply ng kuryente ay binubuo ng isang rectifier, smoothing capacitor, at isang 1 Amp fuse para sa sobrang proteksyon. Ang suplay na ito ay kinokontrol ng isang 7812 at 7805 regulator. Ang supply ng 12V ay ginagamit para sa pagmamaneho ng mga output relay, at lahat ng iba pang mga circuit ay pinalakas mula sa 5V supply. Tulad ng 7805 regulator ay konektado sa output ng 7812 regulator, ang kabuuang kasalukuyang ay dapat na limitado sa 1 amp sa pamamagitan ng 7812 regulator. Maipapayo na i-mount ang mga regulator na ito sa isang naaangkop na heat sink.

I²C Bus: Bagaman pinapayagan ng Flowcode para sa kontrol ng hardware na I²C, napagpasyahan kong gamitin ang pagsasaayos ng software na I²C. Pinapayagan nito ang higit na kakayahang umangkop ng mga takdang-aralin sa pin. Bagaman mas mabagal (50 kHz), mahusay pa rin itong gumaganap kumpara sa hardware na I²C bus. Parehong konektado ang DS1307 at 24LC256 sa bus na ito ng I²C.

Real Time Clock (DS1307): Sa panahon ng pagsisimula, binabasa ang rehistro ng RTC 0 at 7 upang matukoy kung naglalaman ito ng wastong oras at data ng pagsasaayos. Kapag tama ang pag-set up, nabasa ang oras ng RTC at ang oras na na-load sa PIC. Ito lamang ang oras na nabasa ang oras mula sa RTC. Pagkatapos ng pagsisimula, isang 1Hz pulso ay makikita sa pin 7 ng RTC. Ang signal na 1Hz na ito ay konektado sa RB0 / INT0, at sa pamamagitan ng isang nakakagambala na gawain sa serbisyo, ang oras ng PIC ay na-update bawat segundo.

Panlabas na EEPROM: Ang lahat ng data ng programa at mga pagpipilian ay nakaimbak sa panlabas na EEPROM. Ang data ng EEPROM ay na-load sa pagsisimula, at isang kopya ng data ay nakaimbak sa memorya ng PIC. Ina-update lamang ang data ng EEPROM kapag binago ang mga setting ng programa.

Araw / Gabi Sensor: Ang isang karaniwang light dependant resistor (LDR) ay ginagamit bilang sensor ng Araw / Gabi. Tulad ng mga LDR sa maraming mga hugis at pagkakaiba-iba, lahat ay may iba't ibang mga halaga ng paglaban sa ilalim ng parehong mga kundisyon ng ilaw, gumamit ako ng isang analog input channel upang mabasa ang antas ng ilaw. Ang Araw pati na rin ang mga antas ng Gabi ay naaayos, at pinapayagan para sa ilang kakayahang umangkop para sa iba't ibang mga sensor. Upang mag-set up ng ilang hysteresis, maaaring itakda ang mga indibidwal na halaga para sa Araw at Gabi. Magbabago lamang ang estado kung ang antas ng ilaw ay mas mababa sa Araw, o sa itaas ng mga itinakdang puntos ng Gabi, nang mas mahaba sa 60 segundo.

LCD Display: 4 linya, 16 character display ang ginagamit, dahil ang lahat ng data ay hindi maipakita sa isang 2-line display. Kasama sa proyekto ang ilang mga pasadyang character, na tinukoy sa LCD_Custom_Char macro.

Mga Pag-input na Pantulong: Ang parehong mga input ay buffered gamit ang isang NPN transistor. + 12v at 0V ay magagamit din sa konektor, na nagpapahintulot para sa mas maraming kakayahang umangkop na mga koneksyon sa mga panlabas na koneksyon. Bilang isang halimbawa, ang isang remote control receiver ay maaaring konektado sa supply.

Mga Output: Ang lahat ng mga output ay electrically na nakahiwalay mula sa circuit sa pamamagitan ng isang 12V relay. Ang mga ginamit na relay, na-rate para sa 250V AC, sa 10 amps. Ang karaniwang bukas at karaniwang saradong mga contact ay inilalabas sa mga terminal.

Keypad: Ang ginamit na keypad ay isang 3 x 4 matrix keypad, at konektado sa PORTB: 2..7.

Hakbang 4: Nakagambala ang Keypad

Nakagambala ang Keypad
Nakagambala ang Keypad
Nakagambala ang Keypad
Nakagambala ang Keypad
Nakagambala ang Keypad
Nakagambala ang Keypad

Nais kong gamitin ang PORTB Interrupt on Change makagambala sa anumang key press. Para sa mga ito, isang Custom Interrupt ay kailangang likhain sa Flowcode, upang matiyak na ang direksyon at data ng PORTB ay na-set up nang tama bago at pagkatapos na magambala ang bawat keypad. Nabubuo ang isang nakakagambala sa bawat oras na ang isang pindutan ay pinindot, o pinakawalan. Ang gumagambala na gawain ay tumutugon lamang kapag ang isang susi ay pinindot.

CUSTOM INTERRUPT

Paganahin ang Code

portb = 0b00001110; trisb = 0b11110001;

intcon. RBIE = 1;

intcon2. RBIP = 1;

intcon2. RBPU = 1;

rcon. IPEN = 0;

Handler code

kung (intcon & (1 << RBIF))

{FCM_% n ();

portb = 0b00001110;

trisb = 0b11110001;

wreg = portb;

clear_bit (intcon, RBIF);

}

May mga problemang nakita

Sa panahon ng isang nakakagambala, ang nakagagambala na gawain ay dapat na sa ilalim ng WALANG mga kundisyon, tumawag sa anumang iba pang mga macro na maaaring magamit sa isang lugar sa natitirang programa. Sa kalaunan ay hahantong ito sa mga problema sa stack overflow, dahil ang pagkakagambala ay maaaring mangyari nang sabay na ang pangunahing programa ay nasa parehong subroutine din. Nakikilala din ito bilang isang SERIOUS ERROR ng Flowcode kapag ang code ay naipon.

Sa Pasadyang code ng Keypad sa ilalim ng GetKeyPadNumber, mayroong isang tawag sa Delay_us macro, na magiging sanhi ng isang overflow ng stack. Upang malampasan ito, inalis ko ang utos ng Delay_us (10), at pinalitan ito ng 25 mga linya ng "wreg = porta;" utos. Binabasa ng utos na ito ang PORTA, at inilalagay ang halaga nito sa pagrehistro sa W, upang makakuha lamang ng pagkaantala. Ang utos na ito ay maiipon sa isang solong tagubilin na katulad ng assembler Movf porta, 0. Para sa 10MHz na orasan na ginamit sa proyekto, ang bawat tagubilin ay magiging 400ns, at upang makakuha ng 10us na pagkaantala, kailangan ko ng 25 sa mga tagubiling ito.

Tandaan sa pangalawang linya ng Larawan 3: GetKeypadNumber Pasadyang Code, na ang orihinal na pagka-antala_us (10) na utos ay hindi pinagana ng "//". Sa ibaba nito, idinagdag ko ang aking 25 "wreg = porta;" utos upang makakuha ng isang bagong pagkaantala ng 10us. Nang walang mga tawag sa anumang mga macros sa loob ng Keypad_ReadKeypadNumber pasadyang code, ang Keypad macro ay maaari na ngayong magamit sa loob ng isang nakakagambala na gawain sa serbisyo.

Dapat pansinin na ang Flowcode Keypad at mga bahagi ng eBlocks ay hindi gumagamit ng karaniwang mga pull-up resistor sa mga linya ng pag-input. Sa halip, gumagamit ito ng 100K pull-down resistors. Dahil sa ilang pagkagambala na natagpuan sa keypad sa panahon ng pag-unlad, ang 100K resistors ay pinalitan ng 10K, at lahat ng 10K resistors ay pinalitan ng 1K5. Ang keypad ay sinubukan upang gumana nang tama sa mga lead na 200mm.

Hakbang 5: Paggamit ng Timer

Paggamit ng Timer
Paggamit ng Timer
Paggamit ng Timer
Paggamit ng Timer
Paggamit ng Timer
Paggamit ng Timer

Ang lahat ng mga screen ay naka-set up upang ipahiwatig ang lahat ng kinakailangang impormasyon para sa gumagamit na gumawa ng mabilis na mga pagbabago sa mga setting. Ginagamit ang linya 4 upang makatulong sa pag-navigate sa pamamagitan ng mga menu at mga pagpipilian sa programa. Isang kabuuang 22 mga screen ang magagamit habang normal na operasyon.

Linya 1: Oras at Katayuan

Ipinapakita ang kasalukuyang araw at oras, na sinusundan ng mga icon ng katayuan:

A - Ipinapahiwatig na ang Aux Input A ay na-trigger, at ang Aux Input Isang timer ay tumatakbo.

B - Isinasaad na ang Aux Input B ay na-trigger, at ang Aux Input B timer ay tumatakbo.

C - Isinasaad na naka-on ang Aux Output C.

D - Isinasaad na naka-on ang Aux Output D.

} - Katayuan ng sensor ng Araw / Gabi. Kung mayroon, ipahiwatig na ito ay gabi.

LINYA 2: Mga Output ng Programa

Ipinapakita ang mga channel na na-on ng iba't ibang mga programa. Ang mga channel ay ipinapakita sa kanilang mga numero ng output, at isang "-" ay nagpapahiwatig na ang partikular na output ay hindi nakabukas. Ang mga channel na hindi pinagana sa "Program Outputs Aktibo" ay ipapahiwatig pa rin dito, ngunit ang Mga totoong output ay hindi maitatakda.

LINYA 3: Totoong Mga Output

Ipinapakita kung aling mga channel ang naka-on ng iba't ibang mga programa, Mga Aux Input na A & B, o manu-manong mga output na itinakda ng gumagamit. Ang pagpindot sa 0 ay ibabalik ang lahat ng mga manu-manong pinapagana na output upang i-off, at i-reset ang mga timer ng Aux Output A & B.

Linya 4: Menu at mga pangunahing pagpipilian (sa lahat ng mga menu)

Isinasaad ang pagpapaandar ng mga key na "*" at "#".

Ipinapahiwatig ng gitnang bahagi kung aling mga numerong key (0-9) ang aktibo para sa napiling screen.

Ang katayuan ng pag-input ng Aux Input A & B ay ipinapakita rin sa pamamagitan ng isang bukas o Isara na icon ng switch.

Ang mga output ay maaaring i-on / i-off nang manu-mano sa pamamagitan ng pagpindot sa kaukulang key sa keypad.

Sa buong menu, ang mga susi ng Star at Hash ay ginagamit upang mag-navigate sa iba't ibang mga pagpipilian sa programa. Ginagamit ang mga key 0-9 upang maitakda ang mga pagpipilian. Kung saan maraming mga pagpipilian ang magagamit sa isang solong screen o menu ng programa, ang Hash key ay ginagamit upang hakbangin sa iba't ibang mga pagpipilian. Ang kasalukuyang napiling pagpipilian ay palaging ipahiwatig ng character na ">" sa kaliwa ng screen.

0-9 Ipasok ang mga halaga ng oras

1-8 Baguhin ang pagpipilian ng channel

14 36 Hakbang sa pamamagitan ng mga programa, 1-step back, 4-step back 10 na programa, 3-step forward, 6-step forward 10

mga programa

1-7 Itakda ang mga araw ng linggo. 1 = Linggo, 2 = Lunes, 3 = Martes, 4 = Miyerkules, 5 = Huwebes, 6 = Biyernes, 7 = Sabado

0 Sa pangunahing screen, i-clear ang lahat ng manu-manong mga override at timer ng Input A & Input B. Sa ibang mga menu, mga pagbabago

mga napiling pagpipilian

# Sa pangunahing screen, hindi pagaganahin ang lahat ng manu-manong mga override, Input A & Input B timer at Mga Output ng Program, hanggang sa

ang susunod na kaganapan.

* at 1 I-reboot ang timer

* at 2 I-clear ang lahat ng mga programa at pagpipilian, ibalik ang mga setting sa default.

* at 3 Ilagay ang timer sa standby. Upang muling buksan ang timer, pindutin ang anumang key.

Sa mga maling entry ng anumang halaga ng oras, ang LCD backlight ay mag-flash ng 5 beses upang ipahiwatig ang isang error. Sa parehong oras, ang buzzer ay tunog. Ang Exit at Susunod na mga utos ay gagana lamang kung ang kasalukuyang entry ay tama.

LCD Backlight

Sa paunang pagsisimula, ang LCD backlight ay bubukas sa loob ng 3 minuto, maliban kung:

- Mayroong pagkabigo sa hardware (hindi nahanap ang EEPROM o RTC)

- Hindi itinakda ang oras sa RTC

Ang LCD backlight ay muling buksan para sa 3 minuto sa anumang input ng gumagamit sa keypad. Kung naka-off ang backlight ng LCD, ang anumang utos ng keypad ay unang i-on ang LCD backlight, at hindi papansinin ang susi na pinindot. Tinitiyak nito na mababasa ng gumagamit ang LCD display bago gamitin ang keypad. Ang LCD backlight ay bubuksan din sa loob ng 5 segundo kung ang Aux Input A o Aux Input B ay naaktibo.

Hakbang 6: Mga Screen Shot ng Menu

Mga Screen Shot ng Menu
Mga Screen Shot ng Menu
Mga Screen Shot ng Menu
Mga Screen Shot ng Menu
Mga Screen Shot ng Menu
Mga Screen Shot ng Menu

Gamit ang keypad, ang bawat isa sa mga pagpipilian ay maaaring mai-program madali. Nagbibigay ang mga imahe ng ilang impormasyon ng kung ano ang ginagawa ng bawat screen.

Hakbang 7: Disenyo ng System

Disenyo ng Sistema
Disenyo ng Sistema

Ang lahat ng pag-unlad at pagsubok ay ginawa sa breadboard. Sa pagtingin sa lahat ng mga seksyon ng system, sinira ko ang system sa tatlong mga module. Ang pagpapasyang ito ay pangunahing sanhi ng mga limitasyon sa laki ng PCB (80 x 100mm) ng libreng bersyon ng Eagle.

Modyul 1 - Power Supply

Modyul 2 - CPU board

Modyul 3 - Relay board

Napagpasyahan kong lahat ng mga sangkap ay dapat na madaling makuha, at ayaw kong gumamit ng mga bahagi ng mount mount.

Dumaan tayo sa bawat isa sa kanila.

Hakbang 8: Supply ng Kuryente

Power Supply
Power Supply
Power Supply
Power Supply
Power Supply
Power Supply
Power Supply
Power Supply

Ang suplay ng kuryente ay tuwid na pasulong, at ibibigay ang CPU at relay boards na may 12V at 5V.

Inilagay ko ang mga regulator ng boltahe sa disenteng mga heat sink, at ginamit din ang mga overrated capacitor para sa supply.

Hakbang 9: Lupon ng CPU

Lupon ng CPU
Lupon ng CPU
Lupon ng CPU
Lupon ng CPU
Lupon ng CPU
Lupon ng CPU
Lupon ng CPU
Lupon ng CPU

Ang lahat ng mga bahagi, maliban sa LCD screen, keypad at relay ay naka-mount sa board ng CPU.

Ang mga bloke ng terminal ay idinagdag upang gawing simple ang mga koneksyon sa pagitan ng supply, dalawang digital input, at light sensor.

Ang mga header pin / socket ay nagbibigay ng probisyon para sa madaling koneksyon sa LCD screen at keypad.

Para sa mga output sa mga relay, ginamit ko ang ULN2803. Naglalaman na ito ng lahat ng kinakailangang resistors ng pagmamaneho at mga flyback diode. Tinitiyak nito na ang CPU board ay magagawa pa rin gamit ang libreng bersyon ng Eagle. Ang mga relay ay konektado sa dalawang ULN2803s. Ang ilalim na ULN2803 ay ginagamit para sa 8 output, at sa tuktok na ULN2803 para sa dalawang mga auxiliary output. Ang bawat output na pantulong ay mayroong apat na transistors. Ang mga koneksyon sa mga relay ay din sa pamamagitan ng mga pin ng header / sockets.

Ang PIC 18F4520 ay nilagyan ng socket ng programa, upang payagan ang madaling programa sa pamamagitan ng programmer ng PicKit 3.

TANDAAN:

Mapapansin mo na ang board ay naglalaman ng isang karagdagang 8 pin IC. Ang nangungunang IC ay isang PIC 12F675, at nakakonekta sa isang digital input. Idinagdag ito sa panahon ng disenyo ng PCB. Ginagawa nitong mas madali upang i-pre-proseso ang digital input. Sa aking aplikasyon, ang isa sa mga digital na input ay konektado sa aking alarm system. Kung tumunog ang alarma, ang ilang mga ilaw ay nakabukas sa aking bahay. Ang pag-armas at pag-aalis ng sandata ng aking system ng alarma ay nagbibigay ng iba't ibang mga beep sa sirena. Sa pamamagitan ng paggamit ng PIC 12F675, maaari ko na ngayong makilala ang pagitan ng braso / pag-alis ng sandata at isang tunay na alarma. Ang 12F675 ay nilagyan din ng isang socket ng programa.

Gumawa din ako ng probisyon para sa isang port ng I2C sa pamamagitan ng header pin / socket. Darating ito sa madaling gamiting paglaon sa mga relay board.

Naglalaman ang board ng ilang mga jumper, na dapat na solder bago iakma ang mga socket ng IC.

Hakbang 10: Konklusyon ng Flowcode

Konklusyon ng Flowcode
Konklusyon ng Flowcode
Konklusyon ng Flowcode
Konklusyon ng Flowcode
Konklusyon ng Flowcode
Konklusyon ng Flowcode

Tulad ng nakasanayan kong pagtatrabaho sa antas ng rehistro sa pagpupulong, minsan mahirap at nakakabigo na gamitin ang mga bahagi ng macros. Pangunahin ito ay sanhi ng aking kawalan ng kaalaman sa istraktura ng programa ng Flowcode. Ang mga lugar lamang na ginamit ko ang mga bloke ng C o ASM, ay upang buksan ang mga output sa loob ng isang nakakagambalang gawain, at sa Do_KeyPressed na gawain upang hindi paganahin / paganahin ang keypad makagambala. Ang PIC ay inilalagay din sa SLEEP gamit ang isang ASM block, kapag hindi nakita ang EEPROM o RTC.

Ang tulong sa paligid ng paggamit ng iba't ibang mga utos ng I²C, lahat ay nakuha mula sa loob ng mga file ng Tulong sa Flowcode. Kinakailangan upang malaman nang eksakto kung paano gumagana ang iba't ibang mga aparato ng I²C, bago matagumpay na magamit ang mga utos. Ang pagdidisenyo ng isang circuit ay nangangailangan ng taga-disenyo na magkaroon ng lahat ng nauugnay na mga datasheet na magagamit. Hindi ito isang pagkukulang ng Flowcode.

Talagang tumayo ang Flowcode sa pagsubok, at lubos na inirerekomenda para sa mga taong nais na magsimulang magtrabaho kasama ang saklaw ng Microchip ng mga microprocessor.

Ang pag-program ng Flowcode at pagsasaayos para sa PIC ay itinakda ayon sa bawat larawan

Hakbang 11: Opsyonal na I2C Relay Board

Opsyonal na I2C Relay Board
Opsyonal na I2C Relay Board
Opsyonal na I2C Relay Board
Opsyonal na I2C Relay Board
Opsyonal na I2C Relay Board
Opsyonal na I2C Relay Board

Ang board ng CPU ay mayroon nang mga koneksyon sa header para sa 16 na relay. Ang mga output na ito ay bukas na transector ng kolektor sa pamamagitan ng dalawang chips na ULN2803. Maaari itong magamit upang direktang mapalakas ang mga relay.

Matapos ang unang mga pagsubok ng system, hindi ko gusto ang lahat ng mga wire sa pagitan ng CPU board at relay. Habang isinama ko ang isang port ng I2C sa board ng CPU, nagpasya akong idisenyo ang relay board upang kumonekta sa port ng I2C. Gamit ang isang 16 channel MCP23017 I / O Port Expander chip at isang ULN2803 transistor array, binawasan ko ang mga koneksyon sa pagitan ng CPU at relay sa 4 na mga wire.

Dahil hindi ako magkasya sa 16 na mga relay sa isang 80 x 100mm PCB, nagpasya akong gumawa ng dalawang board. Ang bawat MCP23017 ay gumagamit lamang ng 8 sa 16 na mga port. Hawak ng Board 1 ang 8 output, at board 2 ang dalawang auxiliary output. Ang pagkakaiba lamang sa mga board ay ang mga address ng bawat board. Madali itong itinakda sa isang mini jumper. Ang bawat board ay may mga konektor upang magbigay ng lakas at data ng I2C sa kabilang board.

TANDAAN:

Kung kinakailangan, ang software ay gumagawa ng pagkakaloob para sa isang board lamang na maaaring magamit ang lahat ng 16 port. Ang lahat ng data ng output relay ay magagamit sa unang board.

Tulad ng ang circuit ay opsyonal at napaka-simple, hindi ako lumikha ng isang eskematiko. Kung may sapat na demand, maaari ko itong idagdag sa paglaon.

Hakbang 12: Opsyonal na RF Link

Opsyonal na RF Link
Opsyonal na RF Link
Opsyonal na RF Link
Opsyonal na RF Link
Opsyonal na RF Link
Opsyonal na RF Link

Matapos makumpleto ang proyekto, napagtanto ko na kailangan kong hilahin ang maraming 220V AC na mga kable sa timer. Bumuo ako ng isang link na RF gamit ang karaniwang mga modyul na 315MHz na pinapayagan ang timer na mailagay sa loob ng isang aparador, at ang mga relay board sa loob ng bubong, malapit sa lahat ng mga 220V na kable.

Gumagamit ang link ng isang AtMega328P na tumatakbo sa 16MHz. Ang software para sa parehong transmitter at receiver ay pareho, at ang mode ay pinili ng isang mini jumper.

Transmitter

Ang transmiter ay simpleng naka-plug sa port ng I2C ng CPU. Walang kinakailangang karagdagang pag-setup, dahil ang AtMega328P ay nakikinig sa parehong data bilang mga I2C relay board.

Ang data ay na-update isang beses bawat segundo sa port ng I2C, at ang nagpapadala ay nagpapadala ng impormasyong ito sa link na RF. Kung hindi makakatanggap ang transmitter ng data ng I2C ng halos 30 segundo, patuloy na magpapadala ng data ang transmitter upang patayin ang lahat ng mga relay sa unit ng tatanggap.

Ang kapangyarihan sa module ng transmitter ay maaaring mapili sa pagitan ng 12V at 5V na may isang mini jumper sa PC board. Pinapagana ko ang aking transmiter gamit ang 12V.

Tagatanggap

Nakikinig ang tatanggap para sa naka-code na data mula sa transmiter, at inilalagay ang data sa isang port ng I2C. Ang relay board ay simpleng naka-plug sa port na ito, at gumagana ang parehong bilang ito ay naka-plug sa CPU board.

Kung hindi tatanggap ang tatanggap ng wastong data sa loob ng 30 segundo, ang tatanggap ay patuloy na magpapadala ng data sa port ng I2C upang patayin ang lahat ng mga relay sa mga relay board.

Mga Skema

Isang araw, kung mayroong isang pangangailangan para dito. Naglalaman ang sketch ng Arduino ng lahat ng kinakailangang impormasyon upang maitayo ang circuit nang walang diagram ng circuit.

Saklaw

Sa aking pag-install, ang transmiter at tatanggap ay halos 10 metro ang layo. Ang timer ay nasa loob ng isang aparador, at ang relay unit sa tuktok ng kisame.

Hakbang 13: Pangwakas na Produkto

Pangwakas na Produkto
Pangwakas na Produkto
Pangwakas na Produkto
Pangwakas na Produkto
Pangwakas na Produkto
Pangwakas na Produkto

Ang pangunahing yunit ay nilagyan ng isang lumang kahon ng proyekto. Naglalaman ito ng mga sumusunod:

- 220V / 12V Transformer

- Lupon ng Supply ng Kuryente

- Lupon ng CPU

- LCD Display

- Keypad

- RF Link Transmitter

- Karagdagang unit ng remote na home receiver upang paganahin ako upang i-on / i-off ang mga ilaw sa pamamagitan ng remote

Ang yunit ng relay ay binubuo ng mga sumusunod:

- 220V / 12V Transformer

- Lupon ng Supply ng Kuryente

- RF Link Receiver

- 2 x I2C Relay Board

Ang lahat ng mga board ay dinisenyo kasama ang kanyang parehong sukat, na ginagawang madali upang i-stack ang mga ito sa tuktok ng bawat isa na may 3mm spacers.

Inirerekumendang: