Мазмуну:
- 1 -кадам: Бизге эмне керек?
- 2 -кадам: Аппараттык туташуулар
- 3 -кадам: Python программасы
- 4 -кадам: Микроконтроллер программасы
- 5 -кадам: Жыйынтык
Video: PIC MCU жана Python сериялык байланыш: 5 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:40
Салам балдар! Бул долбоордо мен PIC MCU жана Python сериялык байланыш боюнча эксперименттеримди түшүндүрүүгө аракет кылам. Интернетте PIC MCU менен виртуалдык терминал аркылуу кантип байланышуу боюнча көптөгөн окуу куралдары жана видеолор бар, бул абдан пайдалуу. Бирок, менин негизги долбоорумда талаптардын бири - PIC MCU менен Python ортосунда сериялык байланыш түзүү, бирок мен аны жакшы үйрөткүч таба алган жокмун. Ошентип, баштайлы:)
1 -кадам: Бизге эмне керек?
Ошентип, биринчи кезекте бизге эмне керек экенин көрөлү. Аппараттык жактан:
- Албетте, менин учурда PIC16f877a болгон PIC MCU (Сизге бул тактанын кереги жок. Бул кээ бир кир байланыштарды жөнөкөйлөтүү үчүн)
- TX жана RX казыктарын колдонуу менен USB порту аркылуу PIC MCU менен байланышуу үчүн USB TTL конвертерине.
- Менин учурда K150 программисти болгон MCU программисти, бирок сиз PicKit 2, 3 же башка нерсени колдоно аласыз.
- Акыры компьютер:)
Программалык камсыздоо жагынан:
- Pycharm менин абалымдагы Python кодун жазуу үчүн IDE, бирок кадимки Python IDEди дагы колдоно аласыз.
- CCU C компилятору менен MPLAB X IDE болгон MCU программалоо чөйрөсү.
2 -кадам: Аппараттык туташуулар
Сүрөттө тиркелген аппараттык туташуулар PIC MCU менен USB TTL алмаштыргычтарынын ортосунда көрсөтүлгөн:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Сиз USB TTL конвертеринин VCC пинин туташтыруунун кажети жок (Бирок, эгер кааласаңыз, жасай аласыз). Бул 3 байланыш абдан жетиштүү.
3 -кадам: Python программасы
Келгиле, Python тарапка программаны жаза баштайлы, ал биздин учурда өткөргүч болот, анткени ал сапты MCUга жөнөтөт.
Import serial serial #import serial librarydata = '24' #data, we will send data = a+'\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #портка туташуу ser.write (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 Timer жок
#FUSES NOBROWNOUT // Brownout жок #FUSES NOLVP // Төмөн чыңалуудагы пргминг жок, В3 (PIC16) же B5 (PIC18) I/O үчүн колдонулат
#колдонуу кечигүүсү (кристалл = 6000000)
Эми негизги кодду карап көрөлү:
#кошуу
#кошуу
#rs232 колдонуу (baud = 9600, xmit = pin_C6, rcv = pin_C7, parity = N, stop = 1)
#Dedine LED_RED PIN_D0
char inp; char cmp _ = "24"; char буфер [3];
#int_rda
жараксыз serial_communication_interrupt () {disable_interrupts (int_rda); unsigned int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {buffer = inp; inp = getc (); putc (inp); i ++; }}
void main (жараксыз) {
set_tris_d (0x00); output_d (0xFF); enable_interrupts (ГЛОБАЛДЫК); while (1) {enable_interrupts (int_rda); if (strcmp (buffer, cmp_) == 0) output_low (LED_RED); else output_high (LED_RED); }}
Башында биз саптык китепкананы камтыйбыз, ал сап операцияларында жардам берет, бул биздин учурда сапты салыштыруу операциясы (strcmp). Ошентип, бул коддогу биздин максатыбыз, эгер D0 пинине туташкан ледти иштетүү, эгерде берилген мааниси "cmp_" "24" ге барабар болгон маанибиз менен бирдей болсо.
Биринчиден, биз "rda" үзгүлтүккө учуроону иштетебиз, бул маалымат берилип жатканда үзгүлтүккө алып келет.
Экинчиден, "serial_communication_interrupt" деп аталган ISRдин (үзгүлтүккө учуроо кызматы) ичин карап көрөлү. Ичинде биз биринчи кезекте алынган маанини окуу жана андан ары үзгүлтүккө учуроо үчүн үзгүлтүк желегин өчүрөбүз. Андан кийин биз '\ 0' жеткенге чейин сапты тамга менен окуйбуз. Саптын ичинде окуп жатканда, биз кабыл алынган сапты алуу үчүн буферге ар бир charти жазабыз.
Акыр -аягы, биз кайра эле кирип келе жатабыз. Бул жерде биз сапты туура алганыбызды билиш үчүн, string жана cmp_ string алынган буфердик сапты салыштырабыз. Эгерде алар бирдей болсо, анда мен LEDны күйгүзөм, болбосо өчүрөм.*
*Коддо мен тескерисинче кылдым, анткени менин тактам D портунун пин маанилерин тескери бурат. Сиздин кодуңузда аны өзгөртүңүз:
if (strcmp (buffer, cmp_) == 0) output_high (LED_RED); башка output_low (LED_RED);
Акыр -аягы, аны түзүп, MCUга жүктөңүз, андан кийин Pythonдо кодду иштетиңиз. Сиз LED күйгүзүүнү көрүшүңүз керек.
5 -кадам: Жыйынтык
Биз бир тапшырманы ийгиликтүү аяктадык. Сиз үчүн пайдалуу болот деп ишенем. Суроолоруңуз болсо, тартынбастан сураңыз:) Кийинки долбоорго чейин.
Сунушталууда:
Микро: бит MU Vision Sensor - Сериялык туташуу жана OLED экраны: 10 кадам
Микро: бит MU Vision Sensor - Сериялык туташуу жана OLED экраны: Бул MU көрүү сенсоруна үчүнчү жол көрсөтмөм. Буга чейин биз MUны сандарды жана формаларды камтыган карттарды таануу үчүн колдонууга аракет кылдык, бирок MU сенсорубузду татаал долбоор менен изилдөө үчүн, биз жакшыраак чыгарууну каалайбыз. Биз анча маалымат ала албайбыз
Байланыш азыраак жана коррозиясыз суунун деңгээлинин көрсөткүчү жана моторду башкаруу: 5 кадам
Байланыш азыраак жана коррозиясыз суунун деңгээлинин индикатору жана моторду көзөмөлдөө: HI, бул көрсөтмөдө биз үч түрдүү түстүү леддерди колдонуп, суу сактагычтын суунун деңгээлине (Жогорку, Орто, Төмөн) негизделген суу сактагычынын статусун кантип алууну көрөбүз. УЗИ сенсорунун жана Arduino uno тактасынын жардамы менен байланышсыз жол
Арзан 433MHz RF модулдарын жана Pic микроконтроллерлерин колдонуу менен зымсыз байланыш. 2 -бөлүк: 4 кадам (Сүрөттөр менен)
Арзан 433MHz RF модулдарын жана Pic микроконтроллерлерин колдонуу менен зымсыз байланыш. 2 -бөлүк: Бул көрсөтмөнүн биринчи бөлүгүндө мен MPLAB IDE жана XC8 компиляторун колдонуп, арзан TX/RX 433MHz модулдарын колдонуп жөнөкөй жипти жөнөтүү үчүн PIC12F1822ди кантип программалоону көрсөттүм. кабелдик жарнама
Bluefruit колдонуу менен зымсыз сериялык байланыш: 4 кадам
Bluefruit аркылуу зымсыз сериялык байланыш: Бул жерде зымдарды bluetooth аз энергия байланышы менен алмаштыруу боюнча этап -этабы менен көрсөтмө бар: Муну түшүнүү үчүн мага бир аз убакыт керек болду, анткени муну блютуздун заманбап энергиясы аз технологиясы менен жүргүзүү мүмкүн эмес. Bluefrui катары
ARM Cortex-M4 колдонуу менен сериялык байланыш: 4 кадам
ARM Cortex-M4 колдонуу менен сериялык байланыш: Бул виртуалдык терминалды колдонуу менен сериялык байланыш үчүн ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) колдонгон панелдик долбоор. Чыгарууну 16x2 ЖК экрандан алууга болот жана Сериялык байланыш үчүн киргизүүнү Serial Moдо берсе болот