Isi kandungan:

PIC MCU dan Komunikasi Bersiri Python: 5 Langkah
PIC MCU dan Komunikasi Bersiri Python: 5 Langkah

Video: PIC MCU dan Komunikasi Bersiri Python: 5 Langkah

Video: PIC MCU dan Komunikasi Bersiri Python: 5 Langkah
Video: Serial Port Monitor Code Example - Python with Tkinter 2024, Julai
Anonim
PIC MCU dan Python Serial Communication
PIC MCU dan Python Serial Communication
PIC MCU dan Python Serial Communication
PIC MCU dan Python Serial Communication

Apa khabar semua! Dalam projek ini saya akan cuba menerangkan eksperimen saya mengenai komunikasi bersiri PIC MCU dan Python. Melalui internet, terdapat banyak tutorial dan video mengenai cara berkomunikasi dengan PIC MCU melalui terminal maya yang sangat berguna. Walau bagaimanapun, dalam projek utama saya salah satu syaratnya ialah mewujudkan komunikasi bersiri antara PIC MCU dan Python yang saya tidak dapati tutorialnya yang baik. Oleh itu, mari kita mulakan:)

Langkah 1: Apa Yang Kita Perlu?

Apa Yang Kita Perlu?
Apa Yang Kita Perlu?
Apa Yang Kita Perlu?
Apa Yang Kita Perlu?

Jadi, pertama-tama mari kita lihat apa yang kita perlukan. Dari segi perkakasan:

  • Tentunya, PIC MCU yang dalam kes saya PIC16f877a (Anda tidak memerlukan papan itu. Ini adalah untuk mempermudah beberapa sambungan kotor)
  • Penukar USB ke TTL untuk berkomunikasi dengan PIC MCU melalui port USB dengan menggunakan pin TX dan RX.
  • Pengaturcara MCU yang dalam program saya K150, tetapi anda boleh menggunakan PicKit 2, 3 atau apa sahaja.
  • Dan akhirnya komputer:)

Dari segi perisian:

  • IDE untuk menulis kod python yang dalam kes saya Pycharm, tetapi anda juga boleh menggunakan Python IDE biasa.
  • Persekitaran untuk memprogram MCU yang dalam kes saya MPLAB X IDE dengan penyusun CCS C.

Langkah 2: Sambungan Perkakasan

Sambungan Perkakasan
Sambungan Perkakasan

Dalam gambar dilampirkan sambungan perkakasan yang terdapat di antara PIC MCU dan penukar USB TTL seperti di bawah:

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

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

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

Anda tidak perlu menyambungkan pin VCC penukar USB TTL (Walau bagaimanapun, jika anda mahu, anda boleh melakukannya). 3 sambungan ini cukup mencukupi.

Langkah 3: Perisian Python

Mari mula menulis perisian untuk sisi Python yang akan menjadi pemancar dalam kes kita, kerana ia akan menghantar tali ke MCU.

import serial #import serial librarydata = '24' #data yang akan kami kirimkan data = a + '\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #connect to the port ser.write (a.encode ()) # hantar data

Pertama-tama perpustakaan bersiri diimport untuk menggunakan niaga hadapannya. Kami ingin menghantar contoh data rentetan untuk mengesahkan dalam kod MCU bahawa kami menerimanya. Saya ingin melihat satu perkara di sini. Inilah sebabnya mengapa kami menambahkan '\ 0' pada rentetan. Ini kerana, di sisi MCU mustahil untuk membaca rentetan sepenuhnya. Ia dibaca watak demi watak. Oleh itu, kami ingin mengetahui akhir rentetan agar berhenti membaca. Oleh itu, kami menambah '\ 0' pada rentetan yang menunjukkan akhir rentetan. Kemudian kami menyambung ke port yang disambungkan ke MCU. Anda boleh menentukan port tersebut dengan mencari di 'Device Manager'. Oleh itu, berhati-hatilah bahawa anda berada di port yang sama. Lagipun, kami menghantar data ke MCU. ".encode ()" harus ditambahkan ke data rentetan agar dapat mengirimnya ke penerima.

Langkah 4: Perisian Mikrokontroler

Oleh itu, mari lihat kod kami untuk MCU. Pertama sekali saya ingin menunjukkan kepada anda fail "config.h" yang tidak diperlukan, tetapi saya melakukannya untuk kesederhanaan. Di sini ubah frekuensi MCU anda.

#ifndef CONFIG_H # tentukan CONFIG_H

#sertakan

# alat ADC = 16

#FUSES SEKARANG // Tanpa Watch Timer Dog

#FUSES NOBROWNOUT // Tiada tetapan semula brownout #FUSES NOLVP // Tiada prgming voltan rendah, B3 (PIC16) atau B5 (PIC18) digunakan untuk I / O

#terlambatan penggunaan (kristal = 6000000)

Sekarang mari kita lihat kod utama:

#sertakan

#sertakan

#use rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, parity = N, berhenti = 1)

#tentukan LED_RED PIN_D0

char inp; char cmp _ = "24"; penampan char [3];

#int_rda

batal serial_communication_interrupt () {disable_interrupts (int_rda); int tidak bertanda tangan = 0; inp = getc (); putc (inp); sementara (inp! = '\ 0') {penyangga = inp; inp = getc (); putc (inp); saya ++; }}

kekosongan utama (kekosongan) {

set_tris_d (0x00); output_d (0xFF); aktifkan_interrupts (GLOBAL); sementara (1) {allow_interrupts (int_rda); jika (strcmp (buffer, cmp_) == 0) output_low (LED_RED); output_high yang lain (LED_RED); }}

Pada awalnya kami memasukkan perpustakaan tali yang kami akan membantu dalam operasi rentetan yang dalam kes kami adalah operasi membandingkan rentetan (strcmp). Oleh itu, tujuan kita dalam kod ini adalah untuk menghidupkan led yang disambungkan ke pin D0 jika nilai yang dihantar sama dengan nilai yang diberikan kita iaitu "cmp_" sama dengan "24".

Pertama sekali kita mengaktifkan interrupt "rda" yang akan menyebabkan gangguan ketika data dihantar.

Kedua, mari kita lihat di dalam ISR (rutin perkhidmatan gangguan) yang disebut "serial_communication_interrupt". Di dalamnya kami terlebih dahulu mematikan bendera interrupt untuk membaca nilai yang diterima dan menyebabkan gangguan lebih jauh. Selepas itu kami membaca rentetan watak demi watak sehingga mencapai '\ 0'. Semasa membaca string dalam, kami juga menulis setiap char ke buffer untuk mendapatkan string yang diterima.

Pada akhirnya, kami kembali masuk sementara. Di sini kita membandingkan rentetan penyangga kita yang menerima rentetan dan rentetan cmp_ untuk melihat sama ada kita mendapat rentetan dengan betul. Sekiranya mereka sama maka saya hidupkan led, jika tidak, matikan. *

* Dalam kod saya terbalik kerana papan saya membalikkan nilai pin port D. Dalam kod anda, ubahnya menjadi:

jika (strcmp (buffer, cmp_) == 0) output_high (LED_RED); lain output_low (LED_RED);

Akhirnya, susun dan muat naik ke MCU anda dan kemudian jalankan kod di Python. Anda mesti melihat lampu menyala.

Langkah 5: Kesimpulannya

Kami telah menyelesaikan satu tugas dengan jayanya. Saya harap ia berguna untuk anda. Sekiranya anda mempunyai sebarang pertanyaan, jangan ragu untuk bertanya:) Sehingga projek seterusnya.

Disyorkan: