Оглавление:
- Шаг 1. Что нам нужно?
- Шаг 2: Подключение оборудования
- Шаг 3. Программное обеспечение Python
- Шаг 4: Программное обеспечение микроконтроллера
- Шаг 5: Заключение
Видео: Последовательная связь PIC MCU и Python: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Привет ребята! В этом проекте я попытаюсь объяснить свои эксперименты с PIC MCU и последовательной связью Python. В Интернете есть много учебных пособий и видео о том, как общаться с PIC MCU через виртуальный терминал, что очень полезно. Однако в моем основном проекте одно из требований - установить последовательную связь между PIC MCU и Python, что мне не удалось найти хорошего учебника. Итак, приступим:)
Шаг 1. Что нам нужно?
Итак, для начала посмотрим, что нам нужно. Что касается оборудования:
- Конечно, PIC MCU, который в моем случае PIC16f877a (вам не нужна эта плата. Это для упрощения некоторых грязных подключений)
- Преобразователь USB в TTL для связи с PIC MCU через порт USB с помощью контактов TX и RX.
- Программатор MCU, который в моем случае является программатором K150, но вы можете использовать PicKit 2, 3 или что-нибудь еще.
- И наконец компьютер:)
Что касается программного обеспечения:
- IDE для написания кода Python, в моем случае это Pycharm, но вы также можете использовать обычную IDE Python.
- Среда для программирования MCU, в моем случае это MPLAB X IDE с компилятором CCS C.
Шаг 2: Подключение оборудования
На рисунке показаны прилагаемые аппаратные соединения между PIC MCU и USB TTL преобразователем, как показано ниже:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Вам не нужно подключать вывод VCC преобразователя USB TTL (однако, если вы хотите, вы можете это сделать). Этих трех подключений вполне достаточно.
Шаг 3. Программное обеспечение Python
Давайте начнем писать программное обеспечение для стороны Python, которая в нашем случае будет передатчиком, потому что она отправит строку в MCU.
import serial #import serial librarydata = '24' # данные, которые мы будем отправлять data = a + '\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) # подключиться к порту ser.write (a.encode ()) # отправляем данные
В первую очередь импортируется последовательная библиотека, чтобы использовать ее фьючерсы. Мы хотим отправить пример строковых данных, чтобы подтвердить в коде MCU, что мы его приняли. Хочу здесь отметить одну вещь. Вот почему мы добавили в строку '\ 0'. Это связано с тем, что на стороне MCU невозможно полностью прочитать строку. Он читается посимвольно. Итак, мы хотим узнать конец строки, чтобы прекратить чтение. Итак, мы добавляем '\ 0' к строке, которая указывает конец строки. Затем мы подключаемся к порту, к которому подключен MCU. Вы можете определить этот порт, выполнив поиск в «Диспетчере устройств». Итак, будьте осторожны, вы находитесь на одном и том же порту. Ведь мы отправляем данные в MCU. «.encode ()» следует добавить к строковым данным, чтобы можно было отправить их получателю.
Шаг 4: Программное обеспечение микроконтроллера
Итак, давайте посмотрим наш код для MCU. Прежде всего, я хочу показать вам файл config.h внутри, который не требуется, но я сделал это для простоты. Здесь просто измените частоту вашего MCU.
#ifndef CONFIG_H # определить CONFIG_H
#включают
#device ADC = 16
#FUSES NOWDT // Нет таймера Watch Dog
# ПРЕДОХРАНИТЕЛИ NOBROWNOUT // Нет сброса при пониженном напряжении # ПРЕДОХРАНИТЕЛИ NOLVP // Нет программирования низкого напряжения, B3 (PIC16) или B5 (PIC18) используются для ввода / вывода
# использовать задержку (кристалл = 6000000)
Теперь посмотрим на основной код:
#включают
#включают
# использовать rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, parity = N, stop = 1)
#define LED_RED PIN_D0
char inp; char cmp _ = "24"; char buffer [3];
#int_rda
void serial_communication_interrupt () {disable_interrupts (int_rda); беззнаковый int я = 0; inp = getc (); putc (inp); в то время как (inp! = '\ 0') {буфер [я] = inp; inp = getc (); putc (inp); i ++; }}
void main (void) {
set_tris_d (0x00); output_d (0xFF); enable_interrupts (ГЛОБАЛЬНЫЙ); в то время как (1) {enable_interrupts (int_rda); если (strcmp (buffer, cmp_) == 0) output_low (LED_RED); иначе output_high (LED_RED); }}
Вначале мы включаем строковую библиотеку, которая нам будет полезна в строковых операциях, которые в нашем случае являются операцией сравнения строк (strcmp). Итак, наша цель в этом коде - включить светодиод, подключенный к выводу D0, если переданное значение совпадает с нашим заданным значением, которое «cmp_» равно «24».
Прежде всего мы разрешаем прерывание «rda», которое вызовет прерывание при передаче данных.
Во-вторых, давайте заглянем внутрь ISR (процедура обслуживания прерывания), которая называется «serial_communication_interrupt». Внутри мы сначала отключаем флаг прерывания, чтобы прочитать полученное значение и вызвать прерывание дальше. После этого мы читаем строку посимвольно, пока не дойдем до '\ 0'. При чтении внутри строки мы также записываем каждый символ в буфер, чтобы получить полученную строку.
В конце мы снова заходим внутрь. Здесь мы сравниваем нашу строку буфера, которая получена, и строку cmp_, чтобы увидеть, правильно ли мы получили строку. Если они равны, я включаю светодиод, в противном случае выключаю. *
* В коде я сделал обратное, потому что моя плата инвертирует значения выводов порта D. В вашем коде измените его на:
if (strcmp (buffer, cmp_) == 0) output_high (LED_RED); иначе output_low (LED_RED);
Наконец, скомпилируйте его и загрузите в свой MCU, а затем запустите код на Python. Вы должны увидеть, как загорится светодиод.
Шаг 5: Заключение
Мы успешно выполнили одну задачу. Надеюсь, он будет вам полезен. Если у вас есть вопросы, не стесняйтесь спрашивать:) До следующего проекта.
Рекомендуемые:
Последовательная конфигурация HC-05 через Bluetooth: 10 шагов
Последовательная конфигурация HC-05 через Bluetooth: при использовании устройств Android и модулей HC-05 Bluetooth SPP для некоторых проектов Arduino я хотел проверить и изменить скорость передачи данных HC-05 и другие параметры без подключения к USB-порту ПК. Вот и получилось. Модули HC-05 соединяют последовательный порт и Blu
Последовательная связь Arduino: 5 шагов
Последовательная связь Arduino: многие проекты Arduino полагаются на передачу данных между несколькими Arduino. Независимо от того, занимаетесь ли вы любительской сборкой радиоуправляемой машины, радиоуправляемого самолета или проектируете метеостанцию с удаленным дисплеем, вам необходимо знать, как надежно передача серии
Последовательная связь Arduino и Python - дисплей клавиатуры: 4 шага
Последовательная связь Arduino и Python - дисплей клавиатуры: этот проект создан для пользователей Mac, но он также может быть реализован для Linux и Windows, единственный шаг, который должен отличаться, - это установка
Беспроводная последовательная связь с использованием Bluefruit: 4 шага
Беспроводная последовательная связь с использованием Bluefruit: Вот простое пошаговое руководство по замене ваших проводов на соединение с низким энергопотреблением Bluetooth: мне потребовалось время, чтобы понять это, потому что почти нет документации по выполнению этого с помощью современных технологий Bluetooth с низким энергопотреблением, таких как как Bluefrui
Последовательная связь с использованием ARM Cortex-M4: 4 шага
Последовательная связь с использованием ARM Cortex-M4: это проект на основе макета, который использует ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) для последовательной связи с использованием виртуального терминала. Выходной сигнал может быть получен на ЖК-экране 16x2, а вход для последовательной связи может быть предоставлен в Serial Mo