- Mga Materyal na Kinakailangan:
- Ano ang mga nakakagambala at kung saan gagamitin ang mga ito:
- Circuit Diagram at Paliwanag:
- Simulation of Interrupts sa PIC Microcontroller:
- Paliwanag sa Code:
- Paggawa ng PIC16F877A Interrupts:
Sa tutorial na ito matututunan natin kung paano gumamit ng isang Panlabas na Makagambala sa PIC Microcontroller at kung bakit / kung saan kakailanganin natin sila. Ito ay isang bahagi ng pagkakasunud-sunod ng Mga Tutorial sa PIC kung saan nagsimula kaming matuto ng PIC Microcontrollers mula sa simula; kaya't ipinapalagay ng tutorial na ito na pamilyar ka sa kung paano magprogram ng isang PIC MCU gamit ang MPLABX at kung paano i-interface ang isang LCD na may PIC. Kung hindi mangyaring bumalik sa kani-kanilang mga link at basahin ang mga ito sa labangan, sapagkat lalaktawan ko ang karamihan sa impormasyong natakpan na doon.
Mga Materyal na Kinakailangan:
- PIC16F877A Perf Board
- 16x2 LCD Display
- Push Button
- Mga Koneksyon sa Mga Wires
- Lupon ng Tinapay
- PicKit 3
Ano ang mga nakakagambala at kung saan gagamitin ang mga ito:
Bago pumasok sa kung paano magprogram ng mga nakakagambala na PIC microcontroller, ipaalam sa amin na alamin kung ano talaga ang isang Interrupt at kung saan natin kakailanganin itong gamitin. Dagdag dito, maraming mga uri ng mga nakakagambala sa Microcontroller at ang PIC16F877A ay may halos 15 sa kanila. Huwag nating lituhin ang lahat sa ating ulo sa ngayon.
Kaya naman! ano ang nakakagambala sa Microcontrollers?
Tulad ng alam nating lahat na ang mga microcontroller ay ginagamit upang maisagawa ang isang hanay ng paunang natukoy na (programmed) na nagpapagana na nagpapalitaw ng mga kinakailangang output batay sa input. Ngunit, habang ang iyong Microcontroller ay abala sa pagpapatupad ng isang piraso ng code maaaring mayroong isang sitwasyong pang-emergency kung saan ang ibang piraso ng iyong code ay nangangailangan ng agarang pansin. Ang iba pang piraso ng code na nangangailangan ng agarang pansin ay dapat tratuhin bilang isang nakakagambala.
Halimbawa: Isaalang-alang namin na naglalaro ka ng iyong paboritong laro sa iyong mobile at ang taga-kontrol (palagay) sa loob ng iyong telepono ay abala sa pagkahagis ng lahat ng mga graphic na kinakailangan para masiyahan ka sa laro. Ngunit, biglang tumawag ang iyong kasintahan sa iyong numero. Ngayon, ang pinakapangit na mangyari ay ang iyong mobiles controller upang mapabayaan ang tawag ng iyong mga kasintahan dahil abala ka sa paglalaro. Upang maiwasang mangyari ang bangungot na ito, gumagamit kami ng tinatawag na mga nakakagambala.
Ang mga pagkakagambala na ito ay palaging magiging aktibong listahan para sa ilang mga partikular na pagkilos na magaganap at kapag nangyari ito ay nagpatupad ng isang piraso ng code at pagkatapos ay bumalik sa normal na pagpapaandar. Ang piraso ng code na ito ay tinatawag na interrupt service routine (ISR). Isang praktikal na proyekto kung saan sapilitan ang pag-abala ay ang "Digital Speedometer at Odometer Circuit gamit ang PIC Microcontroller"
Sa Microcontrollers mayroong dalawang pangunahing uri ng mga nakakagambala. Ang mga ito ay Panlabas na Makagambala at Panloob na Makagambala. Ang panloob na Mga Pagkagambala ay nagaganap sa loob ng Microntroller para sa pagsasagawa ng isang gawain, halimbawa Timer Interrupts, ADC Interrupts atbp.. Ang mga pagkagambala na ito ay pinalitaw ng software upang makumpleto ang operasyon ng Timer o pagpapatakbo ng ADC ayon sa pagkakabanggit.
Ang panlabas na makagambala ay ang isa na maaaring ma-trigger ng gumagamit. Sa program na ito matututunan natin kung paano gumamit ng isang Panlabas na makagambala sa pamamagitan ng paggamit ng isang pindutan ng push upang ma-trigger ang isang nakakagambala. Gumagamit kami ng isang LCD upang maipakita ang mga bilang na nagdaragdag mula 0 hanggang 1000 at kapag na-trigger ang isang nakakagambala dapat naming ipagbigay-alam tungkol dito mula sa Interrupt Service Routine ISR at pagkatapos ay magpatuloy na bumalik sa pagdaragdag ng mga numero.
Circuit Diagram at Paliwanag:
Ang circuit diagram para sa paggamit ng PIC16F877 interrupts ay ibinibigay sa imahe sa itaas. Kailangan mo lamang ikonekta ang LCD sa PIC tulad ng ginawa namin sa interfacing LCD tutorial.
Ngayon upang ikonekta ang makagambala na pin, dapat nating tingnan ang datasheet upang malaman kung aling pin ng PIC ang ginagamit para sa panlabas na makagambala. Sa aming kaso ako n PIC16F877A ang 33 rd pin RBO / INT ay ginagamit para sa panlabas na-abala. Hindi ka maaaring gumamit ng iba pang pin bukod sa pin na ito. Ang koneksyon ng Pin para sa circuit diagram na ito ay ipinapakita sa talahanayan sa ibaba.
S. Hindi: |
Numero ng Pin |
Pangalan ng Pin |
Nakakonekta sa |
1 |
21 |
RD2 |
RS ng LCD |
2 |
22 |
RD3 |
E ng LCD |
3 |
27 |
RD4 |
D4 ng LCD |
4 |
28 |
RD5 |
D5 ng LCD |
5 |
29 |
RD6 |
D6 ng LCD |
6 |
30 |
RD7 |
D7 ng LCD |
7 |
33 |
RBO / INT |
Push button |
Pinagana namin ang panloob na mga pull up resistor sa PORT B, kaya't maaari naming direktang ikonekta ang RB0 pin sa lupa sa pamamagitan ng isang pindutan ng Push. Kaya't tuwing ang PIN na ito ay nakakakuha ng LOW isang pagambala ay ma-trigger
Ang mga koneksyon ay maaaring gawin sa isang Bread board tulad ng ipinakita sa ibaba.
Kung sinusundan mo ang aming mga tutorial dapat pamilyar ka sa Perf Board na ito na ginamit ko dito. Kung hindi, hindi mo kailangang mag-isip tungkol dito lamang sundin ang circuit diagram at makukuha mo ang mga bagay na gumagana.
Simulation of Interrupts sa PIC Microcontroller:
Ang Simulation para sa proyektong ito ay ginawa gamit ang Proteus.
Kapag ginaya mo ang proyekto dapat mong makita ang isang pagkakasunud-sunod ng mga bilang na nadagdagan sa display ng LCD. Nangyayari ito sa loob ng pangunahing loop at tuwing pinindot ang pindutan ng push ay dapat ipakita ng LCD na pumasok ito sa ISR. Maaari mong gawin ang iyong mga pagbabago sa code at subukang subukan ito dito.
Paliwanag sa Code:
Ang kumpletong code para sa proyektong ito ay matatagpuan sa pagtatapos ng tutorial na ito. Gayunpaman ang programa ay nahahati sa mga mahahalagang tipak at ipinaliwanag sa ibaba para sa iyong mas mahusay na pag-unawa.
Tulad ng lahat ng mga programa kailangan naming simulan ang code sa pamamagitan ng pagtukoy sa pagsasaayos ng pin para sa mga pin na ginagamit namin sa aming programa. Narito din kailangan naming tukuyin na gumagamit kami ng RB0 / INT bilang isang panlabas na makagambala na pin at hindi bilang isang input o output pin. Ang linya sa ibaba ng code ay nagbibigay-daan sa panloob na resistor na pull-up sa portB sa pamamagitan ng paggawa ng ika- 7 bilang 0.
OPTION_REG = 0b00000000;
Pagkatapos ay paganahin namin ang Global / Peripheral interrupts at ideklara na gumagamit kami ng RB0 bilang isang panlabas na makagambala na pin.
GIE = 1; // Enable Global Interrupt PEIE = 1; // Paganahin ang Peripheral Interrupt INTE = 1; // Paganahin ang RB0 bilang panlabas na Interrupt pin
Kapag ang RB0 pin ay tinukoy bilang isang panlabas na makagambala na pin, sa bawat oras na mababaan ang panlabas na makagambala na flag na INTF ay magiging 1 at ang code sa loob ng walang bisa na paggana na pagpapaandar ay naisakatuparan dahil ang Interrupt Service Routine (ISR) ay tatawagin.
walang bisa na makagambala ISR_example () {if (INTF == 1) // External Interrupt nakita {Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Pinasok ang ISR"); INTF = 0; // limasin ang makagambala na bandila matapos itong gawin __delay_ms (2000); Lcd_Clear (); }}
Tulad ng nakikita mong pinangalanan ko ang gumambala na pag-andar bilang ISR_example. Maaari mo itong pangalanan ayon sa iyong nais. Sa loob ng nakakagambalang pagpapaandar ay susuriin namin kung mataas ang flag ng INTF at isagawa ang mga kinakailangang pagkilos. Napakahalaga na limasin ang makagambala na bandila kapag tapos ka na sa gawain. Pagkatapos lamang ang programa ay babalik sa walang bisa ng pangunahing pag-andar. Ang pag-clear na ito ay kailangang gawin ng software gamit ang linya
INTF = 0; // limasin ang makagambala na bandila matapos itong gawin
Sa loob ng pangunahing pagpapaandar, nagdaragdag lamang kami ng isang numero para sa bawat 500 ms at ipinapakita ito sa LCD screen. Wala kaming anumang tukoy na linya upang suriin ang katayuan ng RB0 pin. Ang makagambala ay laging mananatiling aktibo at tuwing pinindot ang pindutan ng itulak ay tatalon ito mula sa walang bisa na pangunahing at isagawa ang mga linya sa ISR.
Lcd_Set_Cursor (2,1); Lcd_Print_String ("Inside Main Loop"); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Bilang:"); Lcd_Print_Char (ch1 + '0'); Lcd_Print_Char (ch2 + '0'); Lcd_Print_Char (ch3 + '0'); Lcd_Print_Char (ch4 + '0'); __delay_ms (500); numero ++;
Paggawa ng PIC16F877A Interrupts:
Kapag naintindihan mo kung paano gumagana ang nakakagambala maaari mo itong subukan sa hardware at iikot ang paligid nito. Ang program na ito na ibinigay dito ay isang napaka-pangunahing halimbawa ng panlabas na makagambala kung saan binabago lamang nito ang pagpapakita ng LCD screen kapag nakita ang isang nakakagambala.
Ang kumpletong pagtatrabaho ng proyekto ay matatagpuan sa video na ibinigay sa ibaba. Sana maunawaan mo ang tungkol sa mga nakakagambala at saan / paano gamitin ang mga ito. Kung mayroon kang anumang mga pagdududa maaari mong maabot ako sa pamamagitan ng mga forum o sa pamamagitan ng seksyon ng komento.