Satura rādītājs:
- 1. darbība. Kas mums vajadzīgs?
- 2. darbība. Aparatūras savienojumi
- 3. darbība: Python programmatūra
- 4. solis: mikrokontrollera programmatūra
- 5. darbība. Secinājums
Video: PIC MCU un Python seriālā komunikācija: 5 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:55
Sveiki puiši! Šajā projektā es mēģināšu izskaidrot savus eksperimentus ar PIC MCU un Python sērijas sakariem. Internetā ir daudz noderīgu pamācību un video par to, kā sazināties ar PIC MCU, izmantojot virtuālo termināli. Tomēr manā galvenajā projektā viena no prasībām ir izveidot seriālu komunikāciju starp PIC MCU un Python, kuru nevarēju atrast labu pamācību. Tātad, sāksim:)
1. darbība. Kas mums vajadzīgs?
Tātad, vispirms redzēsim, kas mums vajadzīgs. Aparatūras ziņā:
- Protams, PIC MCU, kas manā gadījumā ir PIC16f877a (šī plāksne jums nav nepieciešama. Tas ir, lai vienkāršotu dažus netīrus savienojumus)
- USB uz TTL pārveidotājs, lai sazinātos ar PIC MCU, izmantojot USB portu, izmantojot TX un RX tapas.
- MCU programmētājs, kas manā gadījumā ir K150 programmētājs, bet jūs varat izmantot PicKit 2, 3 vai jebko citu.
- Un beidzot dators:)
Runājot par programmatūru:
- IDE, lai rakstītu python kodu, kas manā gadījumā ir Pycharm, bet jūs varat izmantot arī parasto Python IDE.
- Vide MCU programmēšanai, kas manā gadījumā ir MPLAB X IDE ar CCS C kompilatoru.
2. darbība. Aparatūras savienojumi
Attēlā ir pievienoti aparatūras savienojumi, kas ir starp PIC MCU un USB TTL pārveidotāju, kā norādīts zemāk:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Jums nav jāpievieno USB TTL pārveidotāja VCC tapa (tomēr, ja vēlaties, varat to darīt). Ar šiem 3 savienojumiem pilnīgi pietiek.
3. darbība: Python programmatūra
Sāksim rakstīt programmatūru Python pusei, kas mūsu gadījumā būs raidītājs, jo tā nosūtīs virkni uz MCU.
importēt serial #import serial librarydata = '24' #data, ka mēs nosūtīsim datus = a+'\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #izveidojiet savienojumu ar portu ser.write (a.kodēt ()) #nosūtīt datus
Pirmkārt, sērijveida bibliotēka tiek importēta, lai izmantotu tās nākotnes iespējas. Mēs vēlamies nosūtīt virknes datu piemēru, lai MCU kodā apstiprinātu, ka esam to pieņēmuši. Šeit es gribu atzīmēt vienu lietu. Tāpēc virknei pievienojām “\ 0”. Tas ir tāpēc, ka MCU pusē nav iespējams pilnībā izlasīt virkni. Tas tiek lasīts pēc rakstzīmes. Tātad, mēs vēlamies uzzināt virknes beigas, lai pārtrauktu lasīšanu. Tātad virknei pievienojam “\ 0”, kas norāda virknes beigas. Tad mēs izveidojam savienojumu ar portu, kas ir savienots ar MCU. Šo portu var noteikt, meklējot ierīču pārvaldniekā. Tāpēc esiet piesardzīgs, atrodoties tajā pašā ostā. Galu galā mēs nosūtām datus uz MCU. Virknes datiem jāpievieno ".encode ()", lai tos varētu nosūtīt uztvērējam.
4. solis: mikrokontrollera programmatūra
Apskatīsim mūsu MCU kodu. Vispirms es vēlos jums parādīt "config.h" failu, kas nav nepieciešams, bet es to darīju vienkāršības labad. Šeit vienkārši mainiet MCU biežumu.
#ifndef CONFIG_H#definēt CONFIG_H
#iekļaut
#ierīces ADC = 16
#FUSES NOWDT // Bez sargsuņa taimera
#DROŠINĀTĀJI NOBROWNOUT // Nav atiestatīšanas režīma
#izmantot aizkavi (kristāls = 6000000)
Tagad apskatīsim galveno kodu:
#iekļaut
#iekļaut
#izmantot rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, paritāte = N, stop = 1)
#define LED_RED PIN_D0
char inp; char cmp _ = "24"; ogļu buferšķīdums [3];
#int_rda
void serial_communication_interrupt () {disable_interrupts (int_rda); neparakstīts int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {buferis = inp; inp = getc (); putc (inp); i ++; }}
void main (void) {
set_tris_d (0x00); output_d (0xFF); enable_interrupts (GLOBAL); kamēr (1) {enable_interrupts (int_rda); if (strcmp (buferis, cmp_) == 0) output_low (LED_RED); cits output_high (LED_RED); }}
Sākumā mēs iekļaujam virkņu bibliotēku, kas mums palīdzēs virkņu operācijās, kas mūsu gadījumā ir virkņu salīdzināšanas darbība (strcmp). Tātad mūsu mērķis šajā kodā ir ieslēgt LED, kas savienots ar tapu D0, ja pārraidītā vērtība ir tāda pati kā mūsu dotā vērtība, kas ir "cmp_", kas vienāda ar "24".
Pirmkārt, mēs iespējojam pārtraukumu "rda", kas izraisīs pārtraukumu, kad tiek pārsūtīti dati.
Otrkārt, ieskatīsimies ISR (interrupt service rutīnas) iekšpusē, ko sauc par "serial_communication_interrupt". Iekšpusē mēs vispirms atspējojam pārtraukuma karodziņu, lai nolasītu saņemto vērtību un izraisītu pārtraukumu tālāk. Pēc tam mēs lasām virkni pēc rakstzīmes, līdz tiek sasniegts “\ 0”. Lasot virknes iekšpusē, mēs arī rakstām katru simbolu buferī, lai iegūtu saņemto virkni.
Beigās mēs atkal nonākam iekšā. Šeit mēs salīdzinām mūsu bufera virkni, kas ir saņemta virkne, un cmp_ virkni, lai redzētu, vai mēs pareizi iegūstam virkni. Ja tie ir vienādi, es ieslēdzu LED, pretējā gadījumā izslēdzu.*
*Kodā es apgriezos, jo mana dēlis apgriež D porta pin vērtības. Kodā nomainiet to uz:
if (strcmp (buferis, cmp_) == 0) output_high (LED_RED); else output_low (LED_RED);
Visbeidzot, apkopojiet to un augšupielādējiet savā MCU un pēc tam palaidiet kodu programmā Python. Jums vajadzētu redzēt LED ieslēgšanos.
5. darbība. Secinājums
Vienu uzdevumu esam veiksmīgi pabeiguši. Es ceru, ka tas jums noderēs. Ja jums ir kādi jautājumi, lūdzu, nevilcinieties jautāt:) Līdz nākamajam projektam.
Ieteicams:
Mac Lilypad USB seriālā porta/draivera problēmas novēršana: 10 soļi (ar attēliem)
Mac Lilypad USB seriālā porta/draivera problēmas novēršana: Vai kopš 2016. gada jūsu Mac ir jaunāks par 2 gadiem? Vai nesen esat jauninājis uz jaunāko OS (Yosemite vai kaut ko jaunāku)? Vai jūsu Lilypad USB/MP3 vairs nedarbojas? apmācība parādīs, kā es laboju savus Lilypad USB. Kļūda, ar kuru es saskāros, bija saistīta
Lasiet un rakstiet no seriālā porta, izmantojot Raspberry Pi, izmantojot Wemos: 5 soļi
Lasiet un rakstiet no seriālā porta, izmantojot Raspberry Pi, izmantojot Wemos: Saziņa ar Raspberry Pi, izmantojot Wemos D1 mini R2
Izmantojot ultraskaņas attāluma sensoru un seriālā monitora izeju: 6 soļi
Izmantojot ultraskaņas attāluma sensoru un seriālā monitora izeju: Hei puiši! Vēlaties uzzināt, kā izmantot seriālā monitora izvadi. Šeit jums ir ideāla apmācība, kā to izdarīt! Šajā pamācībā es jums sniegšu vienkāršas darbības, kas nepieciešamas, lai noteiktu attālumu, izmantojot ultraskaņas sensoru, un ziņošu
Programmas vai koda augšupielāde Arduino Pro Mini, izmantojot CH340 UART seriālā pārveidotāja kabeli: 4 soļi
Programmas vai koda augšupielāde Arduino Pro Mini, izmantojot CH340 UART seriālā pārveidotāja kabeli: USB TTL sērijas kabeļi ir virkne USB līdz sērijas pārveidotāju kabeļu, kas nodrošina savienojumu starp USB un sērijas UART saskarnēm. Ir pieejams kabeļu klāsts, kas piedāvā savienojamību ar 5 voltiem, 3,3 voltiem vai lietotāja norādītiem signāla līmeņiem ar
Bezvadu seriālā komunikācija, izmantojot Bluefruit: 4 soļi
Bezvadu seriālā komunikācija, izmantojot Bluefruit: Šeit ir vienkāršs soli pa solim, lai nomainītu vadus ar Bluetooth zema enerģijas patēriņa savienojumu: man vajadzēja kādu laiku, lai to noskaidrotu, jo gandrīz nav dokumentācijas par to, kā to izdarīt ar modernām Bluetooth zema enerģijas patēriņa tehnoloģijām. kā Bluefrui