Съдържание:
- Стъпка 1: Какво ни трябва?
- Стъпка 2: Хардуерни връзки
- Стъпка 3: Софтуер на Python
- Стъпка 4: Софтуер за микроконтролер
- Стъпка 5: Заключение
Видео: PIC MCU и серийна комуникация на Python: 5 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Здравейте момчета! В този проект ще се опитам да обясня експериментите си с 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, но можете да използвате и обикновена Python IDE.
- Среда за програмиране на MCU, която в моя случай е MPLAB X IDE с CCS C компилатор.
Стъпка 2: Хардуерни връзки
На снимката са приложени хардуерни връзки, които са между PIC MCU и USB TTL конвертор, както е показано по -долу:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Не е необходимо да свързвате VCC щифт на USB TTL конвертора (ако искате обаче можете да го направите). Тези 3 връзки са напълно достатъчни.
Стъпка 3: Софтуер на Python
Нека започнем да пишем софтуер за Python страна, който ще бъде предавател в нашия случай, защото той ще изпрати низ към MCU.
import serial #import serial librarydata = '24' #data, които ще изпратим data = a+'\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #connect to the port ser.write (a.encode ()) #изпратете данните
На първо място серийната библиотека се внася, за да се използват нейните фючърси. Искаме да изпратим примерни низови данни, за да потвърдим в MCU кода, че сме ги приели. Тук искам да отбележа едно нещо. Ето защо добавихме „\ 0“към низа. Това е така, защото от страна на MCU е невъзможно да се прочете изцяло низът. Чете се символ по символ. И така, искаме да знаем края на низа, за да спрем четенето. И така, добавяме „\ 0“към низа, който показва края на низа. След това се свързваме към порта, който е свързан към MCU. Можете да определите този порт, като потърсите в „Диспечер на устройства“. Така че внимавайте да сте на едно и също пристанище. В крайна сметка изпращаме данните до MCU. ".encode ()" трябва да се добави към низовите данни, за да може да се изпрати до получателя.
Стъпка 4: Софтуер за микроконтролер
Така че, нека видим нашия код за MCU. Първо искам да ви покажа файла "config.h", който не е задължителен, но го направих за простота. Тук просто променете честотата на вашия MCU.
#ifndef CONFIG_H#дефинирайте CONFIG_H
#включва
#устройство ADC = 16
#FUSES NOWDT // Няма таймер за кучета за наблюдение
#FUSES NOBROWNOUT // Без нулиране на изгаряне #FUSES NOLVP // Няма ниско напрежение, B3 (PIC16) или B5 (PIC18), използвани за I/O
#използване на забавяне (кристал = 6000000)
Сега нека видим основния код:
#включва
#включва
#използвайте rs232 (бод = 9600, xmit = pin_C6, rcv = pin_C7, паритет = N, стоп = 1)
#define LED_RED PIN_D0
char inp; char cmp _ = "24"; буфер за въглища [3];
#int_rda
void serial_communication_interrupt () {disable_interrupts (int_rda); без знак int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {буфер = inp; inp = getc (); putc (inp); i ++; }}
void main (void) {
set_tris_d (0x00); output_d (0xFF); enable_interrupts (GLOBAL); while (1) {enable_interrupts (int_rda); if (strcmp (буфер, cmp_) == 0) output_low (LED_RED); else output_high (LED_RED); }}
В началото включваме низова библиотека, която ще бъдем полезни при низови операции, които в нашия случай са операция за сравнение на низове (strcmp). И така, нашата цел в този код е да включим светодиода, свързан към извода D0, ако предадената стойност е същата като дадената от нас стойност, която е "cmp_", равна на "24".
На първо място активираме прекъсване "rda", което ще предизвика прекъсване при предаване на данни.
На второ място, нека погледнем вътре в ISR (услуга за прекъсване на услугата), която се нарича "serial_communication_interrupt". Вътре първо деактивираме флаг за прекъсване, за да прочетем получената стойност и да предизвикаме допълнително прекъсване. След това четем низа символ по символ, докато достигнем '\ 0'. Докато четем вътре в низа, ние също записваме всеки символ в буфера, за да получим получен низ.
Накрая отново влизаме вътре. Тук сравняваме нашия буферен низ, който е получен низ и cmp_ низ, за да видим дали получаваме низа правилно. Ако са равни, включвам светодиода, в противен случай изключвам.*
*В кода направих обратно, защото моята платка инвертира стойностите на изводите на D порт. Във вашия код го променете на:
if (strcmp (буфер, cmp_) == 0) output_high (LED_RED); иначе output_low (LED_RED);
Накрая го компилирайте и качете във вашия MCU и след това стартирайте кода в Python. Трябва да видите включването на светодиода.
Стъпка 5: Заключение
Успешно завършихме една задача. Надявам се, че ще ви бъде полезно. Ако имате някакви въпроси, моля не се колебайте да попитате:) До следващия проект.
Препоръчано:
Arduino серийна комуникация: 5 стъпки
Arduino серийна комуникация: Много проекти на Arduino разчитат на предаване на данни между няколко Arduinos. Независимо дали сте любител, който изгражда RC кола, RC самолет или проектира метеорологична станция с отдалечен дисплей, ще трябва да знаете как да се уверите надеждно трансферна серия
Безжична комуникация, използваща евтини 433MHz RF модули и микроконтролери Pic. Част 2: 4 стъпки (със снимки)
Безжична комуникация, използваща евтини 433MHz RF модули и микроконтролери Pic. Част 2: В първата част на тази инструкция, аз демонстрирах как да програмирате PIC12F1822 с помощта на MPLAB IDE и XC8 компилатор, за да изпратите обикновен низ безжично, използвайки евтини модули TX/RX 433MHz. Приемният модул беше свързан чрез USB към UART TTL кабелна реклама
Безжична серийна комуникация с Bluefruit: 4 стъпки
Безжична серийна комуникация с помощта на Bluefruit: Ето едно просто стъпка по стъпка ръководство за подмяна на кабелите ви с Bluetooth връзка с ниска енергия: Отне ми известно време, за да разбера това, защото едва ли има документация за това с модерни технологии за ниска енергия на Bluetooth, като като Bluefrui
Уеб-базиран SmartMirror, използващ серийна комуникация: 6 стъпки
Уеб-базиран SmartMirror, използващ серийна комуникация: Тази инструкция се доставя с целия код, готов за употреба. Разработката беше много сложна, но след като е настроена, наистина е лесно да се персонализира. Разгледайте и се насладете;)
Точка за достъп - Станция Комуникация между две ESP8266 MCU: 3 стъпки
Достъп до точка - комуникация между две ESP8266 MCU: Здравейте създатели! В предишните си инструкции направих WiFi комуникация между две ESP8266 MCU чрез домашен WiFi рутер. Както видях от коментарите, има производители, които биха искали да използват ESP8266 MCU, далеч от обхвата на рутер. Ето един бар