Turinys:

PIC MCU ir „Python“serijinis ryšys: 5 žingsniai
PIC MCU ir „Python“serijinis ryšys: 5 žingsniai

Video: PIC MCU ir „Python“serijinis ryšys: 5 žingsniai

Video: PIC MCU ir „Python“serijinis ryšys: 5 žingsniai
Video: BTT Manta M8P v2 - CM4 with eMMC 2024, Lapkritis
Anonim
PIC MCU ir „Python Serial Communication“
PIC MCU ir „Python Serial Communication“
PIC MCU ir „Python Serial Communication“
PIC MCU ir „Python Serial Communication“

Sveiki bičiuliai! Šiame projekte bandysiu paaiškinti savo eksperimentus su PIC MCU ir „Python“serijiniu ryšiu. Internete yra daug vadovėlių ir vaizdo įrašų, kaip bendrauti su PIC MCU per virtualų terminalą, o tai yra labai naudinga. Tačiau mano pagrindiniame projekte vienas iš reikalavimų yra sukurti nuoseklųjį ryšį tarp PIC MCU ir „Python“, kurio neradau geros pamokos. Taigi, pradėkime:)

1 žingsnis: ko mums reikia?

Ko mums reikia?
Ko mums reikia?
Ko mums reikia?
Ko mums reikia?

Taigi, pirmiausia pažiūrėkime, ko mums reikia. Kalbant apie aparatūrą:

  • Žinoma, PIC MCU, kuris mano atveju yra PIC16f877a (jums nereikia tos plokštės. Taip siekiama supaprastinti kai kuriuos nešvarius ryšius)
  • USB į TTL keitiklis, skirtas bendrauti su PIC MCU per USB prievadą naudojant TX ir RX kaiščius.
  • MCU programuotojas, kuris mano atveju yra K150 programuotojas, tačiau galite naudoti „PicKit 2“, „3“ar bet ką kitą.
  • Ir pagaliau kompiuteris:)

Kalbant apie programinę įrangą:

  • IDE, norint parašyti python kodą, kuris mano atveju yra Pycharm, tačiau taip pat galite naudoti įprastą Python IDE.
  • MCU programavimo aplinka, kuri mano atveju yra MPLAB X IDE su CCS C kompiliatoriumi.

2 žingsnis: aparatinės įrangos jungtys

Techninės įrangos jungtys
Techninės įrangos jungtys

Paveikslėlyje pateikiamos prijungtos aparatūros jungtys, esančios tarp PIC MCU ir USB TTL keitiklio, kaip nurodyta toliau:

RC7 (RX) ------------- TXD

RC6 (TX) ------------- RXD

GND -------------- GND

Jums nereikia prijungti USB TTL keitiklio VCC kaiščio (tačiau, jei norite, galite tai padaryti). Šių 3 jungčių visiškai pakanka.

3 žingsnis: „Python“programinė įranga

Pradėkime rašyti programinę įrangą „Python“pusei, kuri mūsų atveju bus siųstuvas, nes ji nusiųs eilutę į MCU.

importuoti serijos #importo serijinę biblioteką a.koduoti ()) #siųsti duomenis

Pirmiausia importuojama serijinė biblioteka, kad būtų galima naudoti jos ateities sandorius. Norime atsiųsti eilutės duomenų pavyzdį, kad patvirtintume MCU kodu, kad juos priėmėme. Čia noriu atkreipti dėmesį į vieną dalyką. Štai kodėl prie eilutės pridėjome „\ 0“. Taip yra todėl, kad MCU pusėje neįmanoma visiškai perskaityti eilutės. Tai skaitoma po simbolio. Taigi, norėdami nustoti skaityti, norime žinoti eilutės pabaigą. Taigi, prie eilutės, kuri nurodo eilutės pabaigą, pridedame „\ 0“. Tada mes prisijungiame prie prievado, kuris yra prijungtas prie MCU. Šį prievadą galite nustatyti ieškodami „Įrenginių tvarkytuvėje“. Taigi būkite atsargūs, kad esate tame pačiame uoste. Galų gale, mes siunčiame duomenis į MCU. Prie eilutės duomenų reikia pridėti „.encode ()“, kad būtų galima juos nusiųsti imtuvui.

4 žingsnis: mikrovaldiklio programinė įranga

Taigi, pažiūrėkime mūsų MCU kodą. Pirmiausia noriu parodyti „config.h“failą, kurio nereikia, bet aš tai padariau paprastumo dėlei. Čia tiesiog pakeiskite savo MCU dažnį.

#ifndef CONFIG_H#apibrėžti CONFIG_H

#įtraukti

#prietaiso ADC = 16

#FUSES NOWDT // Nėra laikrodžio šuns laikmačio

#FUSES NOBROWNOUT // Nėra „Brownout“atstatymo

#naudojimo uždelsimas (kristalas = 6000000)

Dabar pažiūrėkime pagrindinį kodą:

#įtraukti

#įtraukti

#use rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, paritetas = N, stop = 1)

#define LED_RED PIN_D0

char inp; char cmp _ = "24"; anglies buferis [3];

#int_rda

void serial_communication_interrupt () {disable_interrupts (int_rda); nepasirašytas 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); nors (1) {enable_interrupts (int_rda); if (strcmp (buferis, cmp_) == 0) output_low (LED_RED); else output_high (LED_RED); }}

Pradžioje įtraukiame stygų biblioteką, kuri mums bus naudinga atliekant eilutės operacijas, kurios mūsų atveju yra eilutės palyginimo operacija (strcmp). Taigi, mūsų tikslas šiame kode yra įjungti šviesos diodą, prijungtą prie kaiščio D0, jei perduodama vertė yra tokia pati kaip mūsų nurodyta vertė, kuri yra „cmp_“lygi „24“.

Pirmiausia įjungiame „rda“pertraukimą, dėl kurio bus nutrauktas duomenų perdavimas.

Antra, pažvelkime į ISR (pertraukimo paslaugų rutiną), kuri vadinama „serial_communication_interrupt“. Viduje pirmiausia išjungiame pertraukimo vėliavą, kad galėtume perskaityti gautą vertę ir sukelti pertrauką toliau. Po to skaitome eilutę po simbolio, kol pasieksime „\ 0“. Skaitydami eilutės vidų, mes taip pat įrašome kiekvieną simbolį į buferį, kad gautume gautą eilutę.

Pabaigoje vėl įeiname į vidų. Čia palyginame buferinę eilutę, kuri yra gauta, ir cmp_ eilutę, kad pamatytume, ar teisingai gauname eilutę. Jei jie yra lygūs, įjungiu šviesos diodą, kitu atveju išjungiu.*

*Kode aš padariau atvirkštinį, nes mano lenta apverčia D prievado kaiščio vertes. Pakeiskite kodą į:

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

Galiausiai sukompiliuokite jį ir įkelkite į savo MCU, tada paleiskite kodą „Python“. Turėtumėte matyti, kaip įjungtas šviesos diodas.

5 žingsnis: Išvada

Vieną užduotį sėkmingai baigėme. Tikiuosi, kad tai jums bus naudinga. Jei turite klausimų, nedvejodami klauskite:) Iki kito projekto.

Rekomenduojamas: