Daftar Isi:

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

Video: PIC MCU dan Komunikasi Serial Python: 5 Langkah

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

Hallo teman-teman! Dalam proyek ini saya akan mencoba menjelaskan eksperimen saya pada PIC MCU dan komunikasi serial Python. Melalui internet, ada banyak tutorial dan video tentang cara berkomunikasi dengan PIC MCU melalui terminal virtual yang sangat berguna. Namun, dalam proyek utama saya salah satu persyaratan adalah untuk membangun komunikasi serial antara PIC MCU dan Python yang saya tidak dapat menemukan tutorial yang baik. Jadi, mari kita mulai:)

Langkah 1: Apa yang Kita Butuhkan?

Apa yang kita butuhkan?
Apa yang kita butuhkan?
Apa yang kita butuhkan?
Apa yang kita butuhkan?

Jadi, pertama-tama mari kita lihat apa yang kita butuhkan. Dari segi perangkat keras:

  • Tentunya, PIC MCU yang ada dalam kasus saya PIC16f877a (Anda tidak memerlukan papan itu. Ini untuk menyederhanakan beberapa koneksi yang kotor)
  • Konverter USB ke TTL untuk berkomunikasi dengan PIC MCU melalui port USB dengan menggunakan pin TX dan RX.
  • Programmer MCU yang dalam kasus saya adalah programmer K150, tetapi Anda dapat menggunakan PicKit 2, 3 atau apa pun.
  • Dan akhirnya komputer:)

Dalam hal perangkat lunak:

  • IDE untuk menulis kode python yang ada dalam kasus saya Pycharm, tetapi Anda juga dapat menggunakan Python IDE biasa.
  • Lingkungan untuk memprogram MCU yang dalam kasus saya MPLAB X IDE dengan kompiler CCS C.

Langkah 2: Koneksi Perangkat Keras

Koneksi Perangkat Keras
Koneksi Perangkat Keras

Pada gambar terpasang koneksi perangkat keras yang diberikan antara PIC MCU dan konverter USB TTL seperti di bawah ini:

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

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

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

Anda tidak perlu menghubungkan pin VCC dari konverter USB TTL (Namun, jika mau, Anda dapat melakukannya). 3 koneksi ini sudah cukup.

Langkah 3: Perangkat Lunak Python

Mari kita mulai menulis perangkat lunak untuk sisi Python yang akan menjadi pemancar dalam kasus kita, karena itu akan mengirim string ke MCU.

import serial #import serial librarydata = '24' #data yang akan kita kirim data = a+'\0' ser = serial. Serial('COM17', baudrate=9600, timeout=1) #koneksi ke port ser.write(a.encode()) #kirim data

Pertama-tama perpustakaan serial diimpor untuk menggunakan masa depannya. Kami ingin mengirim contoh data string untuk mengonfirmasi dalam kode MCU bahwa kami menerimanya. Saya ingin di sini mencatat satu hal. Inilah mengapa kami menambahkan '\0' ke string. Ini karena, di sisi MCU tidak mungkin membaca string secara total. Itu dibaca karakter demi karakter. Jadi, kami ingin tahu akhir string untuk berhenti membaca. Jadi, kami menambahkan '\0' ke string yang menunjukkan akhir dari string. Kemudian kita sambungkan ke port yang terhubung ke MCU. Anda dapat menentukan port tersebut dengan mencari di 'Device Manager'. Jadi, berhati-hatilah karena Anda berada di port yang sama. Setelah semua, kami mengirim data ke MCU. ".encode()" harus ditambahkan ke data string agar dapat mengirimkannya ke penerima.

Langkah 4: Perangkat Lunak Mikrokontroler

Jadi, mari kita lihat kode kita untuk MCU. Pertama-tama saya ingin menunjukkan kepada Anda bagian dalam file "config.h" yang tidak diperlukan, tetapi saya melakukannya untuk kesederhanaan. Di sini hanya mengubah frekuensi MCU Anda.

#ifndef CONFIG_H#menentukan CONFIG_H

#termasuk

#perangkat ADC=16

#FUSES NOWDT //Tidak Ada Pengatur Waktu Anjing Pengawal

#FUSES NOBROWNOUT //Tidak ada reset brownout #FUSES NOLVP //Tidak ada pengaturan tegangan rendah, B3(PIC16) atau B5(PIC18) digunakan untuk I/O

#gunakan penundaan (kristal = 6000000)

Sekarang mari kita lihat kode utamanya:

#termasuk

#termasuk

#gunakan rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)

#define LED_RED PIN_D0

masukan karakter; char cmp_="24"; penyangga karakter[3];

#int_rda

void serial_communication_interrupt() { disable_interrupts(int_rda); unsigned int i = 0; inp = getc(); putc(masuk); while(inp != '\0') { buffer = inp; inp = getc(); putc(masuk); saya++; } }

batal utama(batal) {

set_tris_d(0x00); keluaran_d(0xFF); aktifkan_interupsi(GLOBAL); while(1) { enable_interrupts(int_rda); if(strcmp(buffer, cmp_) == 0) output_low(LED_RED); lain output_high(LED_RED); } }

Pada awalnya kami menyertakan pustaka string yang akan kami bantu dalam operasi string yang dalam kasus kami adalah operasi perbandingan string (strcmp). Jadi, tujuan kita dalam kode ini adalah untuk menyalakan led yang terhubung ke pin D0 jika nilai yang dikirimkan sama dengan nilai yang kita berikan yaitu "cmp_" sama dengan "24".

Pertama-tama kita aktifkan interupsi "rda" yang akan menyebabkan interupsi saat data dikirimkan.

Kedua, mari kita lihat ke dalam ISR (interrupt service routine) yang disebut "serial_communication_interrupt". Di dalam, pertama-tama kami menonaktifkan flag interupsi untuk membaca nilai yang diterima dan menyebabkan interupsi lebih lanjut. Setelah itu kita membaca string karakter demi karakter hingga mencapai '\0'. Saat membaca di dalam string, kami juga menulis setiap karakter ke buffer untuk mendapatkan string yang diterima.

Pada akhirnya, kami kembali masuk sementara. Di sini kita membandingkan string buffer kita yang menerima string dan cmp_ string untuk melihat apakah kita mendapatkan string dengan benar. Jika mereka sama maka saya menyalakan led, jika tidak mati.*

*Dalam kode saya melakukan sebaliknya karena papan saya membalikkan nilai pin port D. Dalam kode Anda, ubah menjadi:

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

Terakhir, kompilasi dan unggah ke MCU Anda lalu jalankan kode dengan Python. Anda akan melihat led menyala.

Langkah 5: Kesimpulan

Kami telah menyelesaikan satu tugas dengan sukses. Saya berharap itu akan berguna untuk Anda. Jika Anda memiliki pertanyaan, jangan ragu untuk bertanya:) Sampai proyek berikutnya.

Direkomendasikan: