Բովանդակություն:
- Քայլ 1: Ի՞նչ է մեզ պետք:
- Քայլ 2: Սարքավորման միացումներ
- Քայլ 3: Python Software
- Քայլ 4: Միկրոհսկիչ ծրագրակազմ
- Քայլ 5: Եզրակացություն
Video: PIC MCU և Python սերիական հաղորդակցություն. 5 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:48
Ողջույն, տղերք: Այս նախագծում ես կփորձեմ բացատրել իմ փորձերը PIC MCU- ի և Python- ի սերիական հաղորդակցության վրա: Ինտերնետում կան բազմաթիվ ձեռնարկներ և տեսանյութեր, թե ինչպես կարելի է շփվել PIC MCU- ի հետ վիրտուալ տերմինալի միջոցով, ինչը շատ օգտակար է: Այնուամենայնիվ, իմ հիմնական նախագծում պահանջներից մեկն այն է, որ սերիական հաղորդակցություն հաստատվի PIC MCU- ի և Python- ի միջև, որը ես չկարողացա գտնել լավ ձեռնարկ: Այսպիսով, եկեք սկսենք:)
Քայլ 1: Ի՞նչ է մեզ պետք:
Այսպիսով, առաջին հերթին եկեք տեսնենք, թե ինչ է մեզ պետք: Սարքավորման առումով.
- Իհարկե, PIC MCU, որն իմ դեպքում PIC16f877a- ն է (ձեզ հարկավոր չէ այդ տախտակը: Սա որոշ կեղտոտ կապերը պարզեցնելու համար է)
- USB- ից TTL փոխարկիչ `PIC MCU- ի հետ USB պորտի միջոցով հաղորդակցվելու համար` օգտագործելով TX և RX կապում:
- MCU ծրագրավորող, որն իմ դեպքում K150 ծրագրավորողն է, բայց դուք կարող եք օգտագործել PicKit 2, 3 կամ որևէ այլ բան:
- Եվ վերջապես համակարգիչ:)
Softwareրագրային ապահովման առումով.
- IDE ՝ Python կոդ գրելու համար, որն իմ դեպքում Pycharm է, բայց կարող եք նաև օգտագործել սովորական Python IDE:
- MCU- ի ծրագրավորման միջավայր, որն իմ դեպքում MPLAB X IDE- ն է CCS C կոմպիլյատորով:
Քայլ 2: Սարքավորման միացումներ
Նկարում կցված ապարատային կապերն են, որոնք գտնվում են PIC MCU- ի և USB TTL փոխարկիչի միջև, ինչպես ստորև.
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Ձեզ հարկավոր չէ միացնել USB TTL փոխարկիչի VCC կապը (Այնուամենայնիվ, եթե ցանկանում եք, կարող եք դա անել): Այս 3 կապերը միանգամայն բավական են:
Քայլ 3: Python Software
Եկեք սկսենք ծրագրաշար գրել Python- ի համար, որը հաղորդիչ կլինի մեր դեպքում, քանի որ այն կուղարկի տողը MCU- ին:
ներմուծել շարք a.encode ()) #ուղարկեք տվյալները
Առաջին հերթին սերիական գրադարանը ներմուծվում է իր ապագայից օգտվելու համար: Մենք ցանկանում ենք ուղարկել լարային տվյալների օրինակ `MCU կոդով հաստատելու համար, որ մենք այն ընդունել ենք: Ես ուզում եմ այստեղ նշել մի բան. Ահա թե ինչու մենք տողին ավելացրինք '\ 0': Դա պայմանավորված է նրանով, որ MCU- ի կողմից անհնար է ամբողջությամբ կարդալ տողը: Կարդացվում է կերպար առ բնույթ: Այսպիսով, մենք ուզում ենք իմանալ տողի վերջը, որպեսզի դադարենք կարդալ: Այսպիսով, մենք ավելացնում ենք '\ 0' տողին, որը ցույց է տալիս տողի վերջը: Այնուհետեւ մենք միանում ենք նավահանգստին, որը միացված է MCU- ին: Դուք կարող եք որոշել այդ նավահանգիստը ՝ որոնելով «Սարքի կառավարիչ» բաժնում: Այսպիսով, զգույշ եղեք, որ դուք գտնվում եք նույն նավահանգստում: Ի վերջո, մենք տվյալները ուղարկում ենք MCU: «.encode ()» - ը պետք է ավելացվի լարային տվյալներին, որպեսզի կարողանա դրանք ուղարկել ստացողին:
Քայլ 4: Միկրոհսկիչ ծրագրակազմ
Այսպիսով, եկեք տեսնենք MCU- ի մեր ծածկագիրը: Առաջին հերթին ես ուզում եմ ձեզ ցույց տալ «config.h» ֆայլը, որի ներսը պարտադիր չէ, բայց ես դա արեցի պարզության համար: Այստեղ պարզապես փոխեք ձեր MCU- ի հաճախականությունը:
#ifndef CONFIG_H#սահմանել CONFIG_H
#ներառում
#սարք ADC = 16
#FUSES NOWDT // Watch Dog erամաչափ չկա
#FUSES NOBROWNOUT // Ոչ brownout reset #FUSES NOLVP // No low voltage prgming, B3 (PIC16) or B5 (PIC18) used for I/O
#օգտագործման ուշացում (բյուրեղ = 6000000)
Այժմ տեսնենք հիմնական ծածկագիրը.
#ներառում
#ներառում
#օգտագործել rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, parity = N, stop = 1)
#սահմանեք LED_RED PIN_D0
char inp; char cmp _ = "24"; char buffer [3];
#ոչ_ռդա
void serial_communication_interrupt () {անջատել_ընդհատումներ (int_rda); անստորագիր int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {buffer = inp; inp = getc (); putc (inp); i ++; }}
դատարկ հիմնական (դատարկ) {
set_tris_d (0x00); ելքային_դ (0xFF); enable_interrupts (GLOBAL); while (1) {enable_interrupts (int_rda); if (strcmp (բուֆեր, cmp_) == 0) output_low (LED_RED); այլ ելք_բարձր (LED_RED); }}
Սկզբում մենք ներառում ենք լարային գրադարան, որը մենք օգտակար կլինենք լարային գործողությունների համար, որը մեր դեպքում լարերի համեմատման գործողությունն է (strcmp): Այսպիսով, այս ծածկագրում մեր նպատակն է միացնել D0 պինին միացված led- ը, եթե փոխանցվող արժեքը նույնն է, ինչ մեր տրված արժեքը, որը «cmp_» հավասար է «24» -ին:
Առաջին հերթին մենք հնարավորություն ենք տալիս ընդհատել «rda» - ն, որը կհանգեցնի տվյալների փոխանցմանը:
Երկրորդ, եկեք նայենք ISR- ի ներսում (ծառայության ընդհատման ռեժիմ), որը կոչվում է «serial_communication_interrupt»: Ներսում մենք առաջին հերթին անջատում ենք ընդհատման դրոշը `ստացված արժեքը կարդալու և ընդհատում առաջացնելու համար: Դրանից հետո մենք կարդում ենք տողը բնավորությամբ ՝ մինչև հասնելով '\ 0': Տողի ներսում կարդալիս մենք նաև յուրաքանչյուր նշան գրում ենք բուֆերին `ստացված տողը ստանալու համար:
Վերջում մենք նորից ներս ենք մտնում: Այստեղ մենք համեմատում ենք մեր բուֆերային տողը, որը ստացվել է և cmp_ տողը, որպեսզի տեսնենք, թե արդյոք մենք տողը ճիշտ ենք ստանում: Եթե դրանք հավասար են, ես միացնում եմ led- ը, այլապես անջատում եմ*:
*Կոդում ես հակադարձեցի, քանի որ իմ տախտակը հակադարձում է D պորտի քորոցային արժեքները: Ձեր ծածկագրում փոխեք այն.
if (strcmp (բուֆեր, cmp_) == 0) output_high (LED_RED); այլ կերպ output_low (LED_RED);
Վերջապես, կազմեք այն և վերբեռնեք ձեր MCU- ում, ապա գործարկեք կոդը Python- ում: Դուք պետք է տեսնեք, որ LED- ը միացված է:
Քայլ 5: Եզրակացություն
Մենք մեկ առաջադրանք հաջողությամբ ավարտեցինք: Հուսով եմ, որ դա օգտակար կլինի ձեզ համար: Եթե ունեք որևէ հարց, խնդրում ենք մի հապաղեք հարցնել:) Մինչև հաջորդ նախագիծը:
Խորհուրդ ենք տալիս:
Arduino սերիական հաղորդակցություն. 5 քայլ
Arduino սերիական հաղորդակցություն. Arduino- ի շատ նախագծեր հիմնված են մի քանի Arduinos- ի միջև տվյալների փոխանցման վրա: Անկախ նրանից, թե դուք հոբբիստ եք, ով կառուցում է RC մեքենա, RC ինքնաթիռ, կամ հեռակառավարվող էկրանով եղանակային կայան է նախագծում, դուք պետք է իմանաք, թե ինչպես կարելի է հուսալիորեն: սերիայի փոխանցում
Arduino- ի և Python- ի սերիական հաղորդակցություն. Ստեղնաշարի ցուցադրում `4 քայլ
Arduino- ի և Python- ի սերիական հաղորդակցություն. Ստեղնաշարի ցուցադրում. Այս նախագիծը նախատեսված է mac օգտագործողների համար, բայց այն կարող է իրականացվել նաև Linux- ի և Windows- ի համար, միակ քայլը, որը պետք է տարբերվի, տեղադրումն է:
Անլար սերիական հաղորդակցություն Bluefruit- ի միջոցով. 4 քայլ
Անլար սերիական հաղորդակցություն Bluefruit- ի միջոցով. Ահա մի պարզ քայլ առ քայլ ուղեցույց ՝ ձեր լարերը փոխարինելու Bluetooth- ի ցածր էներգիայի միացումով: Դա որոշ ժամանակ տևեց, որպեսզի պարզեմ դա, քանի որ գրեթե ոչ մի փաստաթուղթ չկա դա անելու ժամանակակից bluetooth ցածր էներգիայի տեխնոլոգիայով: ինչպես Bluefrui
Վեբ վրա հիմնված SmartMirror ՝ օգտագործելով սերիական հաղորդակցություն. 6 քայլ
Վեբ վրա հիմնված SmartMirror ՝ օգտագործելով սերիական հաղորդակցություն. Այս հրահանգը տրվում է օգտագործման համար պատրաստ բոլոր ծածկագրերով: Developmentարգացումը շատ բարդ էր, բայց երբ այն ստեղծվի, իսկապես հեշտ է հարմարեցնել այն: Նայեք և վայելեք;)
Սերիական հաղորդակցություն ARM Cortex-M4- ի միջոցով. 4 քայլ
Սերիական հաղորդակցություն ARM Cortex-M4- ի միջոցով. Սա տախտակի վրա հիմնված նախագիծ է, որն օգտագործում է ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) սերիական հաղորդակցության համար `օգտագործելով վիրտուալ տերմինալը: Արդյունքը կարելի է ձեռք բերել 16x2 LCD էկրանով, իսկ սերիական հաղորդակցության համար մուտքագրումը կարող է տրվել սերիական Mo