- சுற்று வரைபடம்:
- PIC மைக்ரோகண்ட்ரோலர் PIC16F877A எல்இடி ஒளிரும் வரிசைக் குறியீடு மற்றும் வேலை விளக்கம்:
எங்கள் முந்தைய டுடோரியலில், பி.ஐ.சி மைக்ரோகண்ட்ரோலரைப் பயன்படுத்தி எல்.ஈ.டி ஒளிரச் செய்வது பற்றி அறிந்து, அதே சுற்றுகளை பெர்ஃப் போர்டில் கட்டினோம். பின்னர் நாங்கள் பயன்படுத்தப்படும் PICkit 3, ICSP மற்றும் MPLAB IPE எங்கள் செயல்திறன் பலகை மீது திட்டம் கொட்டுவதால் உள்ளது. இப்போது, இந்த டுடோரியலில், பி.ஐ.சி மைக்ரோகண்ட்ரோலரில் அதிக ஊசிகளைப் பயன்படுத்துவதற்கு நம் சுயத்தை முன்னேற்றுவோம். நாங்கள் 7 வெளியீடுகள் (எல்.ஈ.டி) மற்றும் ஒரு உள்ளீட்டைப் பயன்படுத்துவோம். இந்த டுடோரியலுக்காக நாம் பழைய பெர்ஃப் போர்டைப் பயன்படுத்துவோம் (கீழே காட்டப்பட்டுள்ளது) மற்றும் இரண்டாவது எல்.ஈ.டி போர்டில் தேவையான ஊசிகளை வெளியே இழுக்க பெர்க் குச்சிகளைச் சேர்ப்போம். இந்த டுடோரியலின் முடிவில், PIC மைக்ரோகண்ட்ரோலர் PIC16F877A ஐப் பயன்படுத்தி ஒளிரும் எல்.ஈ.டிகளின் வரிசையை உருவாக்குவோம், மேலும் பல உள்ளீடுகள் மற்றும் வெளியீடுகளை எவ்வாறு பயன்படுத்துவது என்பதைக் கற்றுக்கொள்வோம், 'ஃபார்' லூப் மற்றும் செயல்பாட்டு அழைப்பின் சில அடிப்படைகள்.


எல்.ஈ.டி போர்டு என்பது மற்றொரு பெர்ஃப் போர்டைத் தவிர வேறொன்றுமில்லை, அதில் எல்.ஈ.டி யை தற்போதைய கட்டுப்படுத்தும் மின்தடையுடன் (கீழே காட்டப்பட்டுள்ளது) சாலிடர் செய்வோம். எல்.ஈ.டி ஒளிரும் வரிசையைத் தொடங்க புஷ்பட்டனையும் சேர்ப்போம்.

சுற்று வரைபடம்:

PIC மைக்ரோகண்ட்ரோலர் PIC16F877A எல்இடி ஒளிரும் வரிசைக் குறியீடு மற்றும் வேலை விளக்கம்:
முழுமையான குறியீடு கீழே கொடுக்கப்பட்டுள்ளது (இறுதியில் சரிபார்க்கவும்), இங்கே நாம் அதை வரி மூலம் வரி மூலம் பெறுவோம். புஷ் பொத்தானை அழுத்தும்போது இந்த குறியீடு எல்.ஈ.டிகளை தொடர்ச்சியான முறையில் ஒளிர ஆரம்பிக்கும். காட்சிகளைப் புரிந்து கொள்ள, டுடோரியலின் முடிவில் வீடியோவைப் பாருங்கள். வீடியோவில் காட்டப்பட்டுள்ள வெளியீட்டை கீழேயுள்ள குறியீட்டோடு ஒப்பிட்டு நிரலைப் புரிந்துகொள்ள முயற்சிக்கிறேன்.
குறியீடு வரியை வரி மூலம் பார்ப்போம். முந்தைய டுடோரியலில் விளக்கப்பட்ட உள்ளமைவு பிட்களை அமைப்பதற்கான முதல் சில வரிகள், எனவே அவற்றை இப்போது தவிர்க்கிறேன். எந்தவொரு நிரலையும் புரிந்து கொள்வதற்கான சிறந்த வழி, பிரதான ( வெற்றிட முக்கிய () ) செயல்பாட்டிலிருந்து தொடங்குவதாகும், எனவே அதைச் செய்வோம்
TRISB0 = 1; // பொத்தானை உள்ளீடாக PORTB முள் 0 பயன்படுத்தப்படுகிறது என்று MCU க்கு அறிவுறுத்துங்கள். TRISD = 0x00; // அனைத்து ஊசிகளும் வெளியீடு PORTD = 0x00 என்று MCU க்கு அறிவுறுத்துங்கள்; // அனைத்து ஊசிகளையும் 0 ஆகத் தொடங்கவும்
முள் உள்ளீடு / வெளியீடாக பயன்படுத்தப்படுகிறதா என்பதை வரையறுக்க TRIS என்ற சொல் பயன்படுத்தப்படுகிறது மற்றும் PORT என்ற சொல் ஒரு முள் உயர் / குறைந்ததாக பயன்படுத்த பயன்படுத்தப்படுகிறது. TRISB0 = 1 என்ற வரி PORT B இன் 0 வது முள் உள்ளீடாக மாற்றும். இது எங்கள் புஷ்பட்டனாக இருக்கும். கோடுகள் TRISD = 0x00; PORTD = 0x00; போர்ட் டி இன் அனைத்து ஊசிகளையும் வெளியீடாக மாற்றி, அந்த ஊசிகளுக்கு குறைந்த ஆரம்ப மதிப்பை ஒதுக்கும்.
B0 உள்ளீடாகப் பயன்படுத்தப்படுகிறது என்று நாங்கள் கூறியதால், புஷ்பட்டனின் ஒரு முனையை முள் B0 உடன் இணைக்கிறோம், மற்றொரு முனையை தரையில் இணைப்போம். அதற்குள் நாம் பொத்தானை அழுத்தும் போதெல்லாம் மேலே உள்ள இணைப்பு வரைபடத்தில் காட்டப்பட்டுள்ளபடி முள் தரையில் வைக்கப்படும். ஆனால் இதைச் செய்ய நாம் ஒரு புல் அப் மின்தடையத்தைப் பயன்படுத்த வேண்டும், இதனால் பொத்தானை அழுத்தாதபோது முள் உயரமாக இருக்கும். ஒரு புல் அப் மின்தடை இது போன்றது.

ஆனால் எங்கள் பி.ஐ.சி எம்.சி.யுவில் உள் பலவீனமான புல் அப் மின்தடை உள்ளது, இது மென்பொருளால் செயல்படுத்தப்படலாம், இது நிறைய தொந்தரவுகளைச் சேமிக்கிறது (அதிக பொத்தான்கள் இணைக்கப்படும்போது).
பலவீனமான புல் அப் மின்தடை என்றால் என்ன?
இரண்டு வகையான புல் அப் மின்தடையங்கள் உள்ளன, ஒன்று பலவீனமான புல் அப் மற்றும் மற்றொன்று ஸ்ட்ராங் புல் அப். பலவீனமான புல் அப் மின்தடையங்கள் அதிக மதிப்புடையவை, இதனால் பலவீனமான மின்னோட்டத்தை ஓட்ட அனுமதிக்கிறது மற்றும் வலுவான இழுக்கும் மின்தடையங்கள் குறைந்த மதிப்புடையவை, இதனால் வலுவான மின்னோட்டத்தை பாய அனுமதிக்கிறது. அனைத்து MCU பெரும்பாலும் பலவீனமான புல் அப் மின்தடைகளைப் பயன்படுத்துகிறது. எங்கள் PIC MCU இல் இதைச் செயல்படுத்த, கீழேயுள்ள ஸ்னாப்ஷாட்டில் காட்டப்பட்டுள்ளபடி OPTION_REG (விருப்பப் பதிவு) க்கான எங்கள் தரவுத் தாளைப் பார்க்க வேண்டும்.

பிட் 7 காட்டப்பட்டுள்ளபடி பலவீனமான புல் அப் மின்தடையுடன் செயல்படுகிறது. அதை செயல்படுத்த பூஜ்ஜியமாக்க வேண்டும். இது OPTION_REG <7> = 0 ஆல் செய்யப்படுகிறது. இது பிட் 7 உடன் மற்ற பிட்களை அதன் இயல்புநிலை மதிப்புகளுக்கு விட்டுச்செல்கிறது. இதன் மூலம் நாம் எங்கள் வளையத்திற்குள் செல்கிறோம் , அங்கு (RB0 == 0) ஐப் பயன்படுத்தி பொத்தானை அழுத்தினால் சரிபார்க்கிறது . நிபந்தனை திருப்தி அடைந்தால், 1, 3, 7 மற்றும் 15 அளவுருக்களுடன் எங்கள் செயல்பாட்டை அழைக்கிறோம்.
sblink (1); // அளவுரு 1 sblink (3) உடன் செயல்பாட்டு அழைப்பு 1; // அளவுரு 3 எஸ்.பிளிங்க் (7) உடன் செயல்பாட்டு அழைப்பு 3; // அளவுரு 7 sblink (15) உடன் FUNCTION CALL 7; // அளவுரு 15 உடன் செயல்பாட்டு அழைப்பு 4
நாம் ஏன் செயல்பாடுகளைப் பயன்படுத்துகிறோம்?
எங்கள் குறியீட்டில் உள்ள வரிகளின் எண்ணிக்கையைக் குறைக்க செயல்பாடுகள் பயன்படுத்தப்படுகின்றன. நம்மில் பெரும்பாலோர் இதை அறிந்திருப்பார்கள். ஆனால் நாம் ஏன் வரிகளின் எண்ணிக்கையை குறைக்க வேண்டும், குறிப்பாக MCU நிரலாக்கத்திற்கு வரும்போது. காரணம் எங்களின் திட்டக் நினைவகத்தில் குறைந்த இடைவெளி உள்ளது. குறியீட்டை சரியாக மேம்படுத்தாவிட்டால், நினைவக இடம் இல்லாமல் போகலாம். குறியீடுகளின் நீண்ட பக்கங்களை எழுதும்போது இது கைக்கு வரும்.
எந்தவொரு செயல்பாட்டிற்கும் ஒரு செயல்பாடு வரையறை (எங்கள் விஷயத்தில் sblink (int get) ) மற்றும் ஒரு செயல்பாடு அழைப்பு (எங்கள் விஷயத்தில் sblink (1) ) இருக்கும். ஒரு செயல்பாட்டு அறிவிப்பைக் கொண்டிருப்பது விருப்பமானது, அதைத் தவிர்ப்பதற்காக எனது செயல்பாட்டு செயல்பாட்டை எனது முக்கிய செயல்பாட்டிற்கு அழைப்பதற்கு முன்பு எனது செயல்பாட்டு வரையறையை வைத்திருக்கிறேன்.
செயல்பாட்டு அளவுருக்கள் என்பது செயல்பாட்டு அழைப்பிலிருந்து செயல்பாட்டு வரையறைக்கு அனுப்பப்படும் மதிப்பு. எங்கள் விஷயத்தில் முழு எண் மதிப்புகள் (1, 3, 7, 15) என்பது செயல்பாட்டு அழைப்பிலிருந்து அனுப்பப்படும் அளவுருக்கள் மற்றும் மாறி "பெறு" என்பது அளவுருக்களின் மதிப்பை செயலாக்க வரையறையில் செயல்பாட்டு வரையறையில் பெறுகிறது. ஒரு செயல்பாடு ஒன்றுக்கு மேற்பட்ட அளவுருக்களைக் கொண்டிருக்கலாம்.
செயல்பாடு அழைக்கப்பட்டதும், செயல்பாட்டு வரையறையில் கீழே உள்ள கோடுகள் செயல்படுத்தப்படும்.
for (int i = 0; i <= 7 && RB0 == 0; i ++) {PORTD = get << i; // எல்.ஈ.டி நகர்வு இடது வரிசை __delay_ms (50); } for (int i = 7; i> = 0 && RB0 == 0; i--) {PORTD = get << i; // எல்.ஈ.டி நகர்வு இடது வரிசை __delay_ms (50); }
இப்போது இந்த வரி ஒற்றைப்படை என்று தெரிகிறது: PORTD = get << i . உண்மையில் இங்கே என்ன நடக்கிறது என்பதை நான் விளக்குகிறேன்.
"<<" என்பது ஒரு இடது ஷிப்ட் ஆபரேட்டர், இது அனைத்து பிட்களையும் அதன் இடது நிலைக்கு மாற்றுகிறது. இப்போது நாம் '1' அளவுருவுடன் sblink (int get) செயல்பாட்டை sblink (1) என அழைக்கும்போது, அது 'get' இன் மதிப்பை 1 ஆக மாற்றும், இது பைனரியில் 0b00000001 ஆகும். எனவே இந்த வரி PORTD = 0b00000001 << i போல இருக்கும் .
(Int i = 0; i <= 7 && RB0 == 0; i ++) க்கு 'for loop' ஐப் பயன்படுத்தியதால் "i" இன் மதிப்பு 0 முதல் 7 வரை மாறுபடும் . 'I' இன் மதிப்பு 0 முதல் 7 வரை பின்வருமாறு முடிவை மாற்றும்:

நீங்கள் பார்க்க முடியும் எனில், ஒரு நேரத்தில் ஒரு எல்.ஈ. (Int i = 7; i> = 0 && RB0 == 0; i--) க்கான அடுத்த 'for loop', அதையும் செய்யும், ஆனால் இந்த முறை எல்.ஈ.டி ஒரு வரிசையில் வலமிருந்து இடமாக இயக்கப்படும், நாங்கள் 7 இலிருந்து தொடங்கி 0 க்குச் செல்லும்போது, 200 மீட்டர் தாமதத்தைப் பயன்படுத்தினோம், இதன்மூலம் எல்.ஈ.டி ஆன் மற்றும் ஆஃப் செய்யப்படுவதைக் காணலாம்.
இப்போது நாம் மதிப்பு 3 ஐ sblink (int get) செயல்பாட்டில் கடக்கும்போது, sblink (3) செயல்பாடு செயல்படுத்தப்படும், இது 'get' இன் மதிப்பை 0b00000011 ஆக மாற்றுகிறது, எனவே PORTD இல் இதன் விளைவாக இருக்கும்:

எனவே இப்போது இந்த நேரத்தில் இரண்டு எல்.ஈ.டிக்கள் எந்த நேரத்திலும் sblink (3) ஐப் பயன்படுத்தி இயக்கப்படும். இதேபோல் sblink (7) மற்றும் sblink (15) ஆகியவற்றுக்கு, மூன்று மற்றும் நான்கு எல்.ஈ.டிக்கள் ஒரு வரிசையில் இயங்கும். இது முடிந்ததும், எல்.ஈ.டி அனைத்து PORTD = 0xFF வரியைப் பயன்படுத்துவோம் . முழு ஆர்ப்பாட்டத்திற்கு கீழே உள்ள வீடியோவைச் சரிபார்க்கவும்.
நீங்கள் குறியீட்டைப் புரிந்து கொண்டீர்கள், இதனால் நீங்கள் விரும்பிய வெளியீடுகளைப் பெற 'for' மற்றும் 'while' loop போன்ற செயல்பாடுகளை எவ்வாறு பயன்படுத்துவது என்பதைக் கற்றுக்கொண்டீர்கள் என்று நம்புகிறேன். எல்.ஈ.டி ஒளிரும் வெவ்வேறு வரிசையைப் பெற இப்போது நீங்கள் குறியீட்டைச் சுற்றி மாற்றலாம். உங்கள் குறியீட்டை தொகுத்து உங்கள் MCU இல் கொட்டி வெளியீட்டை அனுபவிக்கவும். நீங்கள் எங்காவது சிக்கிக்கொண்டால் கருத்துப் பகுதியைப் பயன்படுத்தலாம். உருவகப்படுத்துதல் மற்றும் நிரல் கோப்புகளையும் இங்கே இணைத்துள்ளேன்.
இப்போதுதான் எங்கள் அடுத்த டுடோரியலில் தாமத செயல்பாடுகளைப் பயன்படுத்துவதற்குப் பதிலாக PIC16F877A டைமர்களை எவ்வாறு பயன்படுத்துவது என்பதைக் கற்றுக்கொள்வோம். நீங்கள் அனைத்து பிஐசி மைக்ரோகண்ட்ரோலர் பயிற்சிகளையும் இங்கே உலாவலாம்.
