Mục lục:
- Bước 1: Chúng ta cần gì?
- Bước 2: Kết nối phần cứng
- Bước 3: Phần mềm Python
- Bước 4: Phần mềm vi điều khiển
- Bước 5: Kết luận
Video: Giao tiếp nối tiếp PIC MCU và Python: 5 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
Xin chào các bạn! Trong dự án này, tôi sẽ cố gắng giải thích các thử nghiệm của tôi về PIC MCU và giao tiếp nối tiếp Python. Trên internet, có rất nhiều hướng dẫn và video về cách giao tiếp với PIC MCU qua thiết bị đầu cuối ảo rất hữu ích. Tuy nhiên, trong dự án chính của tôi, một trong những yêu cầu là thiết lập giao tiếp nối tiếp giữa PIC MCU và Python mà tôi không thể tìm thấy hướng dẫn tốt. Vậy hãy bắt đầu:)
Bước 1: Chúng ta cần gì?
Vì vậy, trước hết chúng ta hãy xem những gì chúng ta cần. Về phần cứng:
- Chắc chắn, PIC MCU trong trường hợp của tôi là PIC16f877a (Bạn không cần bảng đó. Điều này là để đơn giản hóa một số kết nối bẩn)
- Bộ chuyển đổi USB sang TTL để giao tiếp với PIC MCU qua cổng USB bằng cách sử dụng chân TX và RX.
- Lập trình viên MCU trong trường hợp của tôi là lập trình viên K150, nhưng bạn có thể sử dụng PicKit 2, 3 hoặc bất kỳ thứ gì khác.
- Và cuối cùng là một chiếc máy tính:)
Về phần mềm:
- Một IDE để viết mã python, trong trường hợp của tôi là Pycharm, nhưng bạn cũng có thể sử dụng Python IDE thông thường.
- Môi trường để lập trình MCU trong trường hợp của tôi là MPLAB X IDE với trình biên dịch CCS C.
Bước 2: Kết nối phần cứng
Trong hình, các kết nối phần cứng đính kèm được đưa ra giữa PIC MCU và bộ chuyển đổi USB TTL như bên dưới:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Bạn không cần kết nối chân VCC của bộ chuyển đổi USB TTL (Tuy nhiên, nếu bạn muốn, bạn có thể làm). 3 kết nối này là khá đủ.
Bước 3: Phần mềm Python
Hãy bắt đầu viết phần mềm cho bên Python sẽ là bộ truyền trong trường hợp của chúng ta, vì nó sẽ gửi chuỗi đến MCU.
import serial #import serial librarydata = '24' #data mà chúng tôi sẽ gửi dữ liệu = a + '\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) # kết nối với cổng ser.write (a.encode ()) #send data
Trước hết, thư viện nối tiếp được nhập để sử dụng tương lai của nó. Chúng tôi muốn gửi dữ liệu chuỗi mẫu để xác nhận trong mã MCU rằng chúng tôi đã chấp nhận nó. Tôi muốn lưu ý một điều ở đây. Đây là lý do tại sao chúng tôi thêm '\ 0' vào chuỗi. Điều này là do, về phía MCU, không thể đọc toàn bộ chuỗi. Nó được đọc theo từng ký tự. Vì vậy, chúng tôi muốn biết kết thúc của chuỗi để dừng đọc. Vì vậy, chúng tôi thêm '\ 0' vào chuỗi cho biết kết thúc của chuỗi. Sau đó, chúng tôi kết nối với cổng được kết nối với MCU. Bạn có thể xác định cổng đó bằng cách tìm kiếm trong 'Trình quản lý thiết bị'. Vì vậy, hãy cẩn thận rằng bạn đang ở trên cùng một cổng. Sau cùng, chúng tôi gửi dữ liệu đến MCU. ".encode ()" phải được thêm vào dữ liệu chuỗi để có thể gửi nó đến người nhận.
Bước 4: Phần mềm vi điều khiển
Vì vậy, hãy xem mã của chúng tôi cho MCU. Trước hết, tôi muốn cho bạn thấy tệp "config.h" bên trong không bắt buộc, nhưng tôi đã làm điều đó vì đơn giản. Ở đây chỉ cần thay đổi tần số MCU của bạn.
#ifndef CONFIG_H # xác định CONFIG_H
#bao gồm
#device ADC = 16
#FUSES NOWDT // Không có Đồng hồ hẹn giờ cho chó theo dõi
#FUSES NOBROWNOUT // Không đặt lại brownout #FUSES NOLVP // Không prgming điện áp thấp, B3 (PIC16) hoặc B5 (PIC18) được sử dụng cho I / O
# sử dụng độ trễ (pha lê = 6000000)
Bây giờ chúng ta hãy xem mã chính:
#bao gồm
#bao gồm
#use rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, parity = N, stop = 1)
#define LED_RED PIN_D0
char inp; char cmp _ = "24"; đệm char [3];
#int_rda
void serial_communication_interrupt () {disable_interrupts (int_rda); không dấu int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {buffer = inp; inp = getc (); putc (inp); i ++; }}
void main (void) {
set_tris_d (0x00); output_d (0xFF); enable_interrupts (TOÀN CẦU); while (1) {enable_interrupts (int_rda); if (strcmp (đệm, cmp_) == 0) output_low (LED_RED); else output_high (LED_RED); }}
Lúc đầu, chúng tôi bao gồm thư viện chuỗi mà chúng tôi sẽ hữu ích trong các hoạt động chuỗi mà trong trường hợp của chúng tôi là hoạt động so sánh chuỗi (strcmp). Vì vậy, mục đích của chúng ta trong đoạn mã này là bật led được kết nối với chân D0 nếu giá trị được truyền giống với giá trị đã cho của chúng ta là "cmp_" bằng "24".
Trước hết chúng ta kích hoạt ngắt "rda" sẽ gây ra ngắt khi dữ liệu được truyền đi.
Thứ hai, hãy xem bên trong ISR (quy trình dịch vụ ngắt) được gọi là "serial_communication_interrupt". Bên trong, trước hết chúng ta vô hiệu hóa cờ ngắt để đọc giá trị nhận được và gây ra gián đoạn thêm. Sau đó, chúng tôi đọc từng ký tự trong chuỗi cho đến khi đạt đến '\ 0'. Trong khi đọc chuỗi bên trong, chúng tôi cũng ghi từng ký tự vào bộ đệm để nhận chuỗi đã nhận.
Cuối cùng, chúng tôi một lần nữa vào bên trong trong khi. Ở đây, chúng tôi so sánh chuỗi đệm của chúng tôi là chuỗi đã nhận và chuỗi cmp_ để xem liệu chúng tôi có lấy chuỗi đúng hay không. Nếu chúng bằng nhau thì tôi bật đèn led, nếu không thì tắt. *
* Trong mã, tôi đã đảo ngược vì bảng của tôi đảo ngược các giá trị chân cổng D. Trong mã của bạn, hãy thay đổi nó thành:
if (strcmp (buffer, cmp_) == 0) output_high (LED_RED); else output_low (LED_RED);
Cuối cùng, biên dịch nó và tải lên MCU của bạn và sau đó chạy mã bằng Python. Bạn sẽ thấy đèn led bật sáng.
Bước 5: Kết luận
Chúng tôi đã hoàn thành một nhiệm vụ thành công. Tôi hy vọng rằng nó sẽ hữu ích cho bạn. Nếu bạn có bất kỳ câu hỏi nào, xin vui lòng hỏi:) Cho đến khi dự án tiếp theo.
Đề xuất:
Giao tiếp nối tiếp Arduino: 5 bước
Giao tiếp nối tiếp Arduino: Nhiều dự án Arduino dựa vào việc truyền dữ liệu giữa một số Arduino. chuyển seria
Giao tiếp nối tiếp Arduino và Python - Hiển thị bàn phím: 4 bước
Giao tiếp nối tiếp Arduino và Python - Hiển thị bàn phím: Dự án này được thực hiện cho người dùng mac nhưng nó cũng có thể được thực hiện cho Linux và Windows, bước duy nhất nên khác là cài đặt
Giao tiếp nối tiếp không dây bằng Bluefruit: 4 bước
Giao tiếp nối tiếp không dây sử dụng Bluefruit: Đây là hướng dẫn từng bước đơn giản để thay thế dây của bạn bằng kết nối bluetooth năng lượng thấp: Tôi đã mất một lúc để tìm ra điều này vì hầu như không có bất kỳ tài liệu nào về việc này với công nghệ năng lượng thấp bluetooth hiện đại như vậy với tư cách là Bluefrui
SmartMirror dựa trên web sử dụng giao tiếp nối tiếp: 6 bước
SmartMirror dựa trên web sử dụng giao tiếp nối tiếp: Hướng dẫn này được cung cấp với tất cả mã đã sẵn sàng để sử dụng. Quá trình phát triển rất phức tạp nhưng một khi nó được thiết lập, nó thực sự dễ dàng tùy chỉnh. Hãy xem và tận hưởng;)
Giao tiếp nối tiếp bằng ARM Cortex-M4: 4 bước
Giao tiếp nối tiếp sử dụng ARM Cortex-M4: Đây là một dự án dựa trên bảng mạch chủ sử dụng ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) cho Giao tiếp nối tiếp sử dụng Thiết bị đầu cuối ảo. Đầu ra có thể thu được trên Màn hình LCD 16x2 và đầu vào cho Giao tiếp nối tiếp có thể được cung cấp trong Serial Mo