Мазмұны:

PIC MCU және Python сериялық байланысы: 5 қадам
PIC MCU және Python сериялық байланысы: 5 қадам

Бейне: PIC MCU және Python сериялық байланысы: 5 қадам

Бейне: PIC MCU және Python сериялық байланысы: 5 қадам
Бейне: 12V Bluetooth Relay to control AC or DC load using mobile Phone 2024, Қараша
Anonim
PIC MCU және Python сериялық байланысы
PIC MCU және Python сериялық байланысы
PIC MCU және Python сериялық байланысы
PIC MCU және Python сериялық байланысы

Сәлем, жігіттер! Бұл жобада мен 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' #біз жіберетін деректер = 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 // Қоңырауды қалпына келтіру жоқ #FUSES NOLVP // Төмен кернеуді енгізу жоқ, енгізу/шығару үшін B3 (PIC16) немесе B5 (PIC18) қолданылмайды

#пайдалану кідірісі (кристалл = 6000000)

Енді негізгі кодты қарастырайық:

#қосу

#қосу

#rs232 пайдалану (baud = 9600, xmit = pin_C6, rcv = pin_C7, parity = N, stop = 1)

#LED_RED PIN_D0 анықтаңыз

char inp; char cmp _ = «24»; char буфері [3];

#int_rda

void serial_communication_interrupt () {disable_interrupts (int_rda); белгісіз int i = 0; inp = getc (); putc (кіріс); while (inp! = '\ 0') {буфер = inp; inp = getc (); putc (кіріс); i ++; }}

void main (void) {

set_tris_d (0x00); output_d (0xFF); enable_interrupts (GLOBAL); while (1) {enable_interrupts (int_rda); if (strcmp (буфер, cmp_) == 0) output_low (LED_RED); else output_high (LED_RED); }}

Басында біз жолдық кітапхананы қосамыз, ол бізге жолдық операцияларда көмектеседі, бұл біздің жағдайда жолды салыстыру операциясы (strcmp). Сонымен, бұл кодтағы біздің мақсатымыз - егер D0 түйреуішіне қосылған сымды қосу, егер берілген мән біздің «cmp_» «24» мәніне тең болса.

Ең алдымен, біз «rda» үзілісін қосамыз, бұл деректер жіберілген кезде үзіліс тудырады.

Екіншіден, «serial_communication_interrupt» деп аталатын ISR (үзіліс қызметі) режимін қарастырайық. Ішінде біз алдымен алынған мәнді оқу үшін үзіліс жалаушасын өшіреміз және одан әрі үзіліс тудырамыз. Осыдан кейін біз жолдың таңбасын '\ 0' мәніне жеткенше оқимыз. Ішкі жолды оқу кезінде біз алынған жолды алу үшін буферге әр таңбаны жазамыз.

Соңында, біз қайтадан ішке кіреміз. Мұнда біз жолды дұрыс алғанымызды білу үшін string және cmp_ жолын алған буферлік жолды салыстырамыз. Егер олар тең болса, онда мен светодиодты қосамын, әйтпесе өшіремін*.

*Кодта мен керісінше болдым, себебі менің тақтам D портының мәндерін өзгертеді. Сіздің кодыңызда оны өзгертіңіз:

if (strcmp (buffer, cmp_) == 0) output_high (LED_RED); else output_low (LED_RED);

Соңында, оны құрастырып, MCU -ге жүктеңіз, содан кейін Python -да кодты іске қосыңыз. Сіз жарықдиодты қосуды көруіңіз керек.

5 -қадам: Қорытынды

Біз бір тапсырманы сәтті аяқтадық. Сізге пайдалы болады деп үміттенемін. Егер сізде сұрақтар болса, тартынбаңыз:) Келесі жобаға дейін.

Ұсынылған: