- தேவைகள்:
- UART தகவல்தொடர்புக்கான நிரலாக்க PIC மைக்ரோகண்ட்ரோலர்:
- எங்கள் திட்டத்தை உருவகப்படுத்துதல்:
- வன்பொருள் அமைத்தல் மற்றும் வெளியீட்டைச் சோதித்தல்:
இந்த டுடோரியலில் , PIC மைக்ரோகண்ட்ரோலருடன் UART தகவல்தொடர்புகளை இயக்குவதையும், உங்கள் கணினியிலிருந்து தரவை எவ்வாறு மாற்றுவது என்பதையும் கற்றுக்கொள்கிறோம். இதுவரை, ஏடிசி, டைமர்கள், பிடபிள்யூஎம் போன்ற அனைத்து அடிப்படை தொகுதிகளையும் நாங்கள் உள்ளடக்கியுள்ளோம், மேலும் எல்சிடிகள் மற்றும் 7-பிரிவு காட்சிகளை எவ்வாறு இடைமுகப்படுத்துவது என்பதையும் கற்றுக்கொண்டோம். இப்போது, பெரும்பாலான மைக்ரோகண்ட்ரோலர் திட்டங்களில் பரவலாகப் பயன்படுத்தப்படும் UART எனப்படும் புதிய தகவல்தொடர்பு கருவி மூலம் நம் சுயத்தை சித்தப்படுத்துவோம். MPLAB மற்றும் XC8 ஐப் பயன்படுத்தி எங்கள் முழுமையான PIC மைக்ரோகண்ட்ரோலர் டுடோரியல்களை இங்கே பாருங்கள்.
இங்கே நாம் PIC16F877A MCU ஐப் பயன்படுத்தினோம், இது USART என விரைவில் அறியப்படும் “முகவரி செய்யக்கூடிய யுனிவர்சல் ஒத்திசைவான ஒத்திசைவற்ற ரிசீவர் மற்றும் டிரான்ஸ்மிட்டர்” எனப்படும் ஒரு தொகுதியைக் கொண்டுள்ளது. USART என்பது இரண்டு கம்பி தகவல்தொடர்பு அமைப்பாகும், இதில் தரவு தொடர்ச்சியாக பாய்கிறது. யு.எஸ்.ஐ.ஆர்.டி ஒரு முழு-இரட்டை தகவல்தொடர்பு ஆகும், அதாவது சி.ஆர்.டி டெர்மினல்கள் மற்றும் தனிநபர் கணினிகள் போன்ற புற சாதனங்களுடன் தொடர்பு கொள்ள பயன்படுத்தக்கூடிய ஒரே நேரத்தில் தரவை அனுப்பலாம் மற்றும் பெறலாம்.
USART பின்வரும் முறைகளில் கட்டமைக்க முடியும்:
- ஒத்திசைவற்ற (முழு-இரட்டை)
- ஒத்திசைவு - மாஸ்டர் (அரை-இரட்டை)
- ஒத்திசைவு - அடிமை (அரை-இரட்டை)
8-பிட் மற்றும் 9-பிட் பயன்முறையில் இரண்டு வெவ்வேறு முறைகள் உள்ளன, இந்த டுடோரியலில், யு.எஸ்.ஐ.ஆர்.டி தொகுதி 8-பிட் தகவல்தொடர்பு அமைப்புடன் ஒத்திசைவற்ற பயன்முறையில் வேலை செய்ய கட்டமைக்கிறோம், ஏனெனில் இது மிகவும் பயன்படுத்தப்படும் தொடர்பு வகை. இது ஒத்திசைவற்றதால், தரவு சமிக்ஞைகளுடன் கடிகார சமிக்ஞையை அனுப்ப தேவையில்லை. UART இரண்டு தரவு வரிகளைப் பயன்படுத்துகிறது (Tx) மற்றும் பெற (Rx) தரவைப் பெறுகிறது. இரண்டு சாதனங்களின் தரையும் பொதுவானதாக இருக்க வேண்டும். இந்த வகை தகவல்தொடர்பு ஒரு பொதுவான கடிகாரத்தைப் பகிர்ந்து கொள்ளாது, எனவே கணினி செயல்பட ஒரு பொதுவான மைதானம் மிகவும் முக்கியமானது.

இந்த டுடோரியலின் முடிவில், உங்கள் கணினிக்கும் உங்கள் PIC மைக்ரோகண்ட்ரோலருக்கும் இடையில் ஒரு தகவல்தொடர்பு (UART) ஐ நிறுவ முடியும் மற்றும் உங்கள் மடிக்கணினியிலிருந்து PIC போர்டில் எல்.ஈ.டி. எல்.ஈ.டி யின் நிலை உங்கள் லேப்டாப்பிற்கு PIC MCU இலிருந்து அனுப்பப்படும். கணினியில் ஹைப்பர் டெர்மினலைப் பயன்படுத்தி வெளியீட்டைச் சோதிப்போம். இந்த டுடோரியலின் முடிவில் விரிவான வீடியோவும் கொடுக்கப்பட்டுள்ளது.
தேவைகள்:
வன்பொருள்:
- PIC16F877A Perf Board
- யூ.எஸ்.பி மாற்றி தொகுதிக்கு RS232
- கணினி
- பிக்கிட் 3 புரோகிராமர்
மென்பொருள்:
- MPLABX
- ஹைபர்டெர்மினல்
ஒரு யுஎஸ்பி மாற்றி RS232 மற்றும் கணினியில் படிக்கக்கூடிய வடிவத்தில் தொடர் தரவு மாற்ற வேண்டும். உங்கள் சொந்த தொகுதியை வாங்குவதற்கு பதிலாக உங்கள் சொந்த சுற்று வடிவமைக்க வழிகள் உள்ளன, ஆனால் அவை சத்தத்திற்கு உட்பட்டதால் அவை நம்பகமானவை அல்ல. நாம் பயன்படுத்தும் ஒன்று கீழே காட்டப்பட்டுள்ளது

குறிப்பு: ஒவ்வொரு RS232 முதல் USB மாற்றி வரை ஒரு சிறப்பு இயக்கி நிறுவப்பட வேண்டும்; நீங்கள் சாதனத்தை செருகியவுடன் அவற்றில் பெரும்பாலானவை தானாக நிறுவப்படும். ஆனால், அது ஓய்வெடுக்கவில்லை என்றால் !!! கருத்துப் பகுதியைப் பயன்படுத்தவும், நான் உங்களுக்கு உதவுவேன்.
UART தகவல்தொடர்புக்கான நிரலாக்க PIC மைக்ரோகண்ட்ரோலர்:
எல்லா தொகுதிக்கூறுகளையும் (ADC, டைமர், PWM) எங்கள் PIC16F877A MCU இன் USART தொகுதியையும் துவக்கி UART 8-பிட் தகவல்தொடர்பு பயன்முறையில் வேலை செய்யுமாறு அறிவுறுத்த வேண்டும். உள்ளமைவு பிட்களை வரையறுத்து, UART துவக்க செயல்பாட்டில் தொடங்குவோம்.
PIC மைக்ரோகண்ட்ரோலரின் UART தொகுதியைத் துவக்குதல்:
Tx மற்றும் Rx ஊசிகளும் RC6 மற்றும் RC7 ஊசிகளில் உடல் ரீதியாக உள்ளன. தரவுத்தாள் படி, TX ஐ வெளியீடாகவும், RX ஐ உள்ளீடாகவும் அறிவிப்போம்.
// **** UART க்கான I / O ஊசிகளை அமைத்தல் **** // TRISC6 = 0; // TX முள் வெளியீடாக அமைக்கப்படுகிறது TRISC7 = 1; // RX முள் உள்ளீடாக அமைக்கப்பட்டுள்ளது // ________ I / O பின்ஸ் தொகுப்பு __________ //
இப்போது பாட் வீதத்தை அமைக்க வேண்டும். பாட் வீதம் என்பது ஒரு தகவல் தொடர்பு சேனலில் தகவல் மாற்றப்படும் வீதமாகும். இது பல இயல்புநிலை மதிப்புகளில் ஒன்றாக இருக்கலாம், ஆனால் இந்த நிரலில் நாங்கள் 9600 ஐப் பயன்படுத்துகிறோம்.
/ ** தேவையான பாட் வீதத்திற்காக SPBRG பதிவைத் தொடங்கவும், வேகமாக baud_rate க்கு BRGH ஐ அமைக்கவும் ** / SPBRG = ((_XTAL_FREQ / 16) / Baud_rate) - 1; பி.ஆர்.ஜி.எச் = 1; // உயர் பாட்_ரேட்டுக்கு // _________ பாட்_ரேட் அமைப்பின் முடிவு _________ //
பாட் வீதத்தின் மதிப்பு SPBRG பதிவைப் பயன்படுத்தி அமைக்கப்பட வேண்டும், மதிப்பு வெளிப்புற படிக அதிர்வெண்ணின் மதிப்பைப் பொறுத்தது, பாட் வீதத்தைக் கணக்கிடுவதற்கான சூத்திரங்கள் கீழே காட்டப்பட்டுள்ளன:
SPBRG = ((_XTAL_FREQ / 16) / பாட்_ரேட்) - 1;
அதிவேக பிட் வீதத்தை இயக்க பிட் பி.ஆர்.ஜி.எச். தரவுத்தாள் (பக்கம் 13) இன் படி, அதை இயக்குவது எப்போதும் சாதகமானது, ஏனெனில் இது தகவல்தொடர்புகளின் போது பிழைகளை அகற்றும்.
முன்பு கூறியது போல் நாங்கள் ஒத்திசைவற்ற பயன்முறையில் பணியாற்றுவோம், எனவே பிட் SYNC ஐ பூஜ்ஜியமாக்க வேண்டும் மற்றும் தொடர் ஊசிகளை (TRISC6 மற்றும் TRICSC5) செயல்படுத்த பிட் SPEM ஐ அதிகமாக்க வேண்டும்.
// **** ஒத்திசைவற்ற சீரியல் போர்ட்டை இயக்கு ******* // SYNC = 0; // ஒத்திசைவற்ற SPEN = 1; // சீரியல் போர்ட் ஊசிகளை இயக்கு // _____ ஒத்திசைவற்ற சீரியல் போர்ட் இயக்கப்பட்டது _______ //
இந்த டுடோரியலில் நாம் MCU க்கும் கணினிக்கும் இடையில் தரவை அனுப்புவதும் பெறுவதும் ஆகும், எனவே TXEN மற்றும் CREN பிட்களை இயக்க வேண்டும்.
// ** பரிமாற்றம் மற்றும் வரவேற்புக்கு தயாராகலாம் ** // TXEN = 1; // பரிமாற்றத்தை இயக்கு CREN = 1; // வரவேற்பை இயக்கு // __ UART தொகுதி மேலே மற்றும் பரிமாற்றம் மற்றும் வரவேற்புக்கு தயாராக உள்ளது __ //
பிட்கள் TX9 மற்றும் RX9 பூஜ்யம் மேற்கொள்ள வேண்டும் நாம் 8-பிட் முறையில் செயல்படும். அதிக நம்பகத்தன்மை இருக்க வேண்டும் என்றால் 9 பிட் பயன்முறையைத் தேர்ந்தெடுக்கலாம்.
// ** 8-பிட் பயன்முறையைத் தேர்ந்தெடுக்கவும் ** // TX9 = 0; // 8-பிட் வரவேற்பு தேர்ந்தெடுக்கப்பட்ட RX9 = 0; // 8-பிட் வரவேற்பு முறை தேர்ந்தெடுக்கப்பட்டது // __ 8-பிட் பயன்முறை தேர்ந்தெடுக்கப்பட்டது __ //
இதன் மூலம் எங்கள் துவக்க அமைப்பை முடிக்கிறோம். மற்றும் செயல்பாட்டுக்கு தயாராக உள்ளது.
UART ஐப் பயன்படுத்தி தரவை அனுப்பும்:
UART தொகுதி மூலம் தரவை அனுப்ப கீழேயுள்ள செயல்பாடு பயன்படுத்தப்படலாம்:
// ** ஒரு பைட் தேதியை UART க்கு அனுப்பும் செயல்பாடு ** // வெற்றிட UART_send_char (char bt) {போது (! TXIF); // TX இடையக இலவசமாக இருக்கும் வரை நிரலை வைத்திருங்கள் TXREG = bt; // பெறப்பட்ட மதிப்புடன் டிரான்ஸ்மிட்டர் இடையகத்தை ஏற்றவும்} // _____________ செயல்பாட்டின் முடிவு ________________ //
தொகுதி துவக்கப்பட்டதும், பதிவில் ஏற்றப்பட்ட எந்த மதிப்பும் TXREG UART வழியாக அனுப்பப்படும், ஆனால் பரிமாற்றம் ஒன்றுடன் ஒன்று வரக்கூடும். எனவே நாம் எப்போதும் டிரான்ஸ்மிஷன் குறுக்கீடு கொடி TXIF ஐ சரிபார்க்க வேண்டும் . இந்த பிட் குறைவாக இருந்தால் மட்டுமே, அடுத்த பிட் பரிமாற்றத்துடன் தொடர முடியும், இல்லையெனில் இந்த கொடி குறைவாக இருக்கும் வரை காத்திருக்க வேண்டும்.
இருப்பினும், மேலே உள்ள செயல்பாடு ஒரு பைட் தரவை மட்டுமே அனுப்புவதற்கு மட்டுமே பயன்படுத்த முடியும், ஒரு முழுமையான சரத்தை அனுப்ப கீழேயுள்ள செயல்பாடு பயன்படுத்தப்பட வேண்டும்
// ** சரத்தை பைட்டாக மாற்றுவதற்கான செயல்பாடு ** // UART_send_string (char * st_pt) {போது (* st_pt) // ஒரு கரி UART_send_char (* st_pt ++) இருந்தால்; // இதை ஒரு பைட் தரவாக செயலாக்கவும்} // ___________ செயல்பாட்டின் முடிவு ______________ //
சுட்டிகள் இருப்பதால் இந்த செயல்பாடு புரிந்து கொள்ள சற்று தந்திரமானதாக இருக்கலாம், ஆனால் என்னை நம்புங்கள் சுட்டிகள் அற்புதமானவை, அவை நிரலாக்கத்தை மிகவும் எளிதாக்குகின்றன, இது ஒரு சிறந்த எடுத்துக்காட்டு.
நீங்கள் கவனிக்கிறபடி, நாங்கள் மீண்டும் UART_send_char () என்று அழைத்தோம், ஆனால் இப்போது அந்த வட்டத்திற்குள். நாம் சரத்தை தனித்தனி எழுத்துக்களாகப் பிரித்துள்ளோம், ஒவ்வொரு முறையும் இந்த செயல்பாடு அழைக்கப்படும் போது, ஒரு கரி TXREG க்கு அனுப்பப்படும், அது பரவுகிறது.
UART ஐப் பயன்படுத்தி தரவைப் பெறுதல்:
UART தொகுதியிலிருந்து தரவைப் பெற பின்வரும் செயல்பாடு பயன்படுத்தப்படலாம்:
// ** UART இலிருந்து ஒரு பைட் தேதியைப் பெறுவதற்கான செயல்பாடு ** // char UART_get_char () {if (OERR) // பிழையைச் சரிபார்க்கவும் {CREN = 0; // பிழை இருந்தால் -> CREN ஐ மீட்டமை = 1; // பிழை இருந்தால் -> மீட்டமை} போது (! RCIF); // RX இடையக இலவச வருவாய் RCREG ஆகும் வரை நிரலை வைத்திருங்கள்; // மதிப்பைப் பெற்று முக்கிய செயல்பாட்டிற்கு அனுப்பவும்} // _____________ செயல்பாட்டின் முடிவு ________________ //
UART தொகுதிக்கூறு மூலம் ஒரு தரவைப் பெறும்போது, அதை எடுத்து RCREG பதிவேட்டில் சேமிக்கிறது. நாம் வெறுமனே எந்தவொரு மாறிக்கும் மதிப்பை மாற்றி அதைப் பயன்படுத்தலாம். ஆனால் ஒன்றுடன் ஒன்று பிழை இருக்கலாம் அல்லது பயனர் தொடர்ந்து தரவை அனுப்புவார், நாங்கள் இன்னும் அவற்றை ஒரு மாறிக்கு மாற்றவில்லை.
அந்த வழக்கில் ரிசீவ் கொடி பிட் ஆர்.சி.ஐ.எஃப் மீட்க வருகிறது. தரவு பெறப்பட்டு, இன்னும் செயலாக்கப்படாத போதெல்லாம் இந்த பிட் குறைவாக இருக்கும். ஆகவே, அந்த மதிப்பைக் கையாளும் வரை நிரலை வைத்திருக்க தாமதத்தை உருவாக்கி, அதை லூப் லூப்பில் பயன்படுத்துகிறோம்.
PIC மைக்ரோகண்ட்ரோலரின் UART தொகுதியைப் பயன்படுத்தி எல்.ஈ.டி.
இப்போது நிரலின் இறுதிப் பகுதியான வெற்றிட முக்கிய (வெற்றிட) செயல்பாட்டிற்கு வருவோம், அங்கு PIC க்கும் கணினிக்கும் இடையிலான UART தகவல்தொடர்புகளைப் பயன்படுத்தி கணினி வழியாக ஒரு LED ஐ மாற்றுவோம்.
“1” (கணினியிலிருந்து) ஒரு எழுத்தை நாம் அனுப்பும்போது, எல்.ஈ.டி இயக்கப்பட்டு, “RED LED -> ON” என்ற நிலைச் செய்தி கணினிக்கு (PIC MCU இலிருந்து) திருப்பி அனுப்பப்படும்.
இதேபோல் “0” (கணினியிலிருந்து) ஒரு எழுத்தை அனுப்புகிறோம், எல்.ஈ.டி அணைக்கப்பட்டு, “RED LED -> OFF” என்ற நிலைச் செய்தி கணினிக்கு (PIC MCU இலிருந்து) திருப்பி அனுப்பப்படும்.
போது (1) // எல்லையற்ற வளையம் {get_value = UART_get_char (); if (get_value == '1') // பயனர் "1" அனுப்பினால் {RB3 = 1; // எல்.ஈ.டி UART_send_string ஐ இயக்கவும் ("RED LED -> ON"); // கணினிக்கு அறிவிப்பை அனுப்பு UART_send_char (10); // ASCII மதிப்பு 10 வண்டி திரும்புவதற்கு (புதிய வரியில் அச்சிட) பயன்படுத்தப்படுகிறது} if (get_value == '0') // பயனர் "0" {RB3 ஐ அனுப்பினால் = 0; // எல்.ஈ.டி UART_send_string ஐ முடக்கு ("RED -> OFF"); // கணினிக்கு அறிவிப்பை அனுப்பவும் UART_send_char (10); // ASCII மதிப்பு 10 வண்டி திரும்புவதற்கு பயன்படுத்தப்படுகிறது (புதிய வரியில் அச்சிட)}}
எங்கள் திட்டத்தை உருவகப்படுத்துதல்:
வழக்கம் போல் புரோட்டியஸைப் பயன்படுத்தி எங்கள் திட்டத்தை உருவகப்படுத்துவோம், அது எதிர்பார்த்தபடி செயல்படுகிறதா என்பதைக் கண்டுபிடிப்போம்.

மேலே உள்ள படம் ஒரு மெய்நிகர் முனையத்தைக் காட்டுகிறது, அதில் எல்.ஈ.டி யின் வரவேற்பு செய்தி மற்றும் நிலையை இது காட்டுகிறது. சிவப்பு வண்ண எல்.ஈ.டி முள் ஆர்.பி 3 உடன் இணைக்கப்படுவதை கவனிக்க முடியும். உருவகப்படுத்துதலின் விரிவான செயல்பாட்டை வீடியோவில் காணலாம்.
வன்பொருள் அமைத்தல் மற்றும் வெளியீட்டைச் சோதித்தல்:
இந்த சுற்றுக்கான இணைப்பு மிகவும் எளிதானது, நாங்கள் எங்கள் PIC Perf போர்டைப் பயன்படுத்துகிறோம், மேலும் மூன்று கம்பிகளை RS232 உடன் USB மாற்றிக்கு இணைத்து, கீழே காட்டப்பட்டுள்ளபடி USB தரவு கேபிளைப் பயன்படுத்தி எங்கள் கணினியுடன் தொகுதியை இணைக்கிறோம்.


அடுத்து ஹைப்பர் டெர்மினல் பயன்பாட்டை நிறுவுகிறோம் (அதை இங்கிருந்து பதிவிறக்குங்கள்) திறந்து திறக்கிறோம். இது போன்ற ஒன்றைக் காட்ட வேண்டும்

இப்போது உங்கள் கணினியில் சாதன நிர்வாகியைத் திறந்து, உங்கள் தொகுதி எந்த காம் போர்ட்டுடன் இணைக்கப்பட்டுள்ளது என்பதைச் சரிபார்க்கவும், என்னுடையது கீழே காட்டப்பட்டுள்ளபடி COM போர்ட் 17 உடன் இணைக்கப்பட்டுள்ளது

குறிப்பு: உங்கள் விற்பனையாளரின் படி உங்கள் தொகுதிக்கான COM போர்ட் பெயர் மாறக்கூடும், இது ஒரு சிக்கல் அல்ல.
இப்போது ஹைப்பர் டெர்மினல் அப்ளிகேஷனுக்குச் சென்று, அமைவு -> போர்ட் உள்ளமைவுக்கு செல்லவும் அல்லது Alt + C ஐ அழுத்தவும், பின்வரும் பாப் அப் பெட்டியைப் பெறவும், பாப்-அப் சாளரத்தில் விரும்பிய போர்ட்டை (என் விஷயத்தில் COM17) தேர்ந்தெடுத்து இணை என்பதைக் கிளிக் செய்யவும்.

இணைப்பு நிறுவப்பட்டதும் உங்கள் PIC perf போர்டை இயக்கவும், இதுபோன்ற ஒன்றை நீங்கள் கீழே காண வேண்டும்

உங்கள் கர்சரை கட்டளை சாளரத்தில் வைத்து 1 ஐ உள்ளிட்டு Enter ஐ அழுத்தவும். எல்.ஈ.டி இயக்கப்பட்டு கீழே காட்டப்பட்டுள்ளபடி நிலை காண்பிக்கப்படும்.

அதே வழியில், உங்கள் கர்சரை கட்டளை சாளரத்தில் வைத்து 0 ஐ உள்ளிட்டு Enter ஐ அழுத்தவும். எல்.ஈ.டி அணைக்கப்பட்டு, கீழே காட்டப்பட்டுள்ளபடி நிலை காண்பிக்கப்படும்.

கீழே முழுமையான குறியீடு மற்றும் விரிவான வீடியோ கொடுக்கப்பட்டுள்ளது, இது “1” மற்றும் “0” க்கு எல்.ஈ.டி உண்மையான நேரத்தில் எவ்வாறு பதிலளிக்கிறது என்பதைக் காண்பிக்கும்.
அது தான் தோழர்களே, நாங்கள் எங்கள் கணினியுடன் PIC UART ஐ இணைத்து, ஹைப்பர் டெர்மினலைப் பயன்படுத்தி எல்.ஈ.டி ஐ மாற்றுவதற்கு தரவை மாற்றியுள்ளோம். நீங்கள் புரிந்து கொண்டீர்கள் என்று நம்புகிறேன், இல்லையென்றால், உங்கள் வினவலைக் கேட்க கருத்துப் பகுதியைப் பயன்படுத்தவும். எங்கள் அடுத்த டுடோரியலில் நாம் மீண்டும் UART ஐப் பயன்படுத்துவோம், ஆனால் புளூடூத் தொகுதியைப் பயன்படுத்தி அதை மேலும் சுவாரஸ்யமாக்குவோம் மற்றும் தரவை ஒளிபரப்பலாம்.
இரண்டு ATmega8 மைக்ரோகண்ட்ரோலர்களுக்கிடையேயான UART தகவல்தொடர்பு மற்றும் ATmega8 மற்றும் Arduino Uno க்கு இடையிலான UART தகவல்தொடர்புகளையும் சரிபார்க்கவும்.
