Daftar Isi:
- Langkah 1: Apa yang Kita Butuhkan?
- Langkah 2: Koneksi Perangkat Keras
- Langkah 3: Perangkat Lunak Python
- Langkah 4: Perangkat Lunak Mikrokontroler
- Langkah 5: Kesimpulan
Video: PIC MCU dan Komunikasi Serial Python: 5 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
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?
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
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:
Raspberry PI 3 - Aktifkan Komunikasi Serial ke TtyAMA0 ke BCM GPIO 14 dan GPIO 15: 9 Langkah
Raspberry PI 3 - Aktifkan Komunikasi Serial ke TtyAMA0 ke BCM GPIO 14 dan GPIO 15: Saya baru-baru ini tertarik untuk mengaktifkan UART0 pada Raspberry Pi (3b) saya sehingga saya dapat menghubungkannya langsung ke perangkat level sinyal RS-232 menggunakan standar 9 -pin konektor d-sub tanpa harus melalui adaptor USB ke RS-232. Bagian dari ketertarikan saya
Papan Penemuan STM32F4 dan Komunikasi Python USART (STM32CubeMx): 5 Langkah
Papan Penemuan STM32F4 dan Komunikasi USART Python (STM32CubeMx): Hai! Dalam tutorial ini kita akan mencoba membangun komunikasi USART antara STM32F4 ARM MCU dan Python (bisa diganti dengan bahasa lain). Jadi, mari kita mulai
Komunikasi Serial Arduino dan Python - Tampilan Keypad: 4 Langkah
Komunikasi Serial Arduino dan Python - Tampilan Keypad: Proyek ini dibuat untuk pengguna mac tetapi juga dapat diimplementasikan untuk Linux dan Windows, satu-satunya langkah yang harus berbeda adalah instalasi
Komunikasi ESP8266 dan Python Untuk Noobs: 6 Langkah
ESP8266 dan Komunikasi Python Untuk Noobs: Panduan ini memungkinkan Anda untuk mendapatkan data apa pun dari ESP8266 dan mengontrolnya melalui python tanpa perintah AT. Untuk pemula, sebagian besar panduan tentang penggunaan ESP8266 sulit, karena mereka ingin Anda mem-flash “AT COMMANDS” ke dalam chip, yaitu: Pemborosan yang Tidak Perlu
Komunikasi Nirkabel Menggunakan Modul RF 433MHz Murah dan Mikrokontroler Pic. Bagian 2: 4 Langkah (dengan Gambar)
Komunikasi Nirkabel Menggunakan Modul RF 433MHz Murah dan Mikrokontroler Pic. Bagian 2: Pada bagian pertama dari instruksi ini, saya mendemonstrasikan cara memprogram PIC12F1822 menggunakan MPLAB IDE dan compiler XC8, untuk mengirim string sederhana secara nirkabel menggunakan modul TX/RX 433MHz yang murah. Modul penerima terhubung melalui USB ke UART TTL iklan kabel