Агуулгын хүснэгт:

PIC MCU ба Python цуваа холбоо: 5 алхам
PIC MCU ба Python цуваа холбоо: 5 алхам

Видео: PIC MCU ба Python цуваа холбоо: 5 алхам

Видео: PIC MCU ба Python цуваа холбоо: 5 алхам
Видео: SKR Pro v1.x - установка Klipper 2024, Арваннэгдүгээр
Anonim
PIC MCU ба Python цуваа харилцаа холбоо
PIC MCU ба Python цуваа харилцаа холбоо
PIC MCU ба Python цуваа харилцаа холбоо
PIC MCU ба Python цуваа харилцаа холбоо

Сайн уу залуусаа! Энэ төсөлд би PIC MCU болон Python цуваа холбооны туршилтуудаа тайлбарлахыг хичээх болно. Интернет дээр PIC MCU -тай виртуал терминалаар хэрхэн холбогдох талаар олон заавар, видео байдаг бөгөөд энэ нь маш хэрэгтэй юм. Гэсэн хэдий ч миний гол төсөлд тавигдах шаардлагуудын нэг бол PIC MCU ба Python -ийн хооронд цуврал харилцаа холбоо тогтоох явдал юм. За ингээд эхэлцгээе:)

Алхам 1: Бидэнд юу хэрэгтэй вэ?

Бидэнд юу хэрэгтэй вэ?
Бидэнд юу хэрэгтэй вэ?
Бидэнд юу хэрэгтэй вэ?
Бидэнд юу хэрэгтэй вэ?

Тиймээс эхлээд бидэнд юу хэрэгтэй байгааг харцгаая. Тоног төхөөрөмжийн хувьд:

  • Мэдээжийн хэрэг, миний хувьд PIC16f877a PIC MCU (танд энэ самбар хэрэггүй. Энэ нь зарим бохир холболтыг хялбарчлах зорилгоор хийгдсэн болно)
  • TX ба RX тээглүүр ашиглан USB портоор PIC MCU -тай холбогдохын тулд USB -ийг TTL хөрвүүлэгч.
  • Миний хувьд K150 програмист MCU програмист боловч та PicKit 2, 3 эсвэл өөр зүйлийг ашиглаж болно.
  • Эцэст нь компьютер:)

Програм хангамжийн хувьд:

  • Миний хувьд Pycharm -д байдаг python кодыг бичихийн тулд IDE, гэхдээ та ердийн Python IDE -г бас ашиглаж болно.
  • Миний хувьд MPLAB X IDE -ийг CCS C хөрвүүлэгчтэй MCU програмчлах орчин.

Алхам 2: Тоног төхөөрөмжийн холболт

Тоног төхөөрөмжийн холболт
Тоног төхөөрөмжийн холболт

Зураг дээр PIC MCU ба USB TTL хөрвүүлэгч хоёрын хооронд байгаа тоног төхөөрөмжийн холболтыг доор харуулав.

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

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

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

Та USB TTL хөрвүүлэгчийн VCC зүү холбох шаардлагагүй (Гэсэн хэдий ч хэрэв хүсвэл үүнийг хийж болно). Эдгээр 3 холболт хангалттай.

Алхам 3: Python програм хангамж

Python -ийн хувьд бидний хувьд дамжуулагч болох програмыг бичиж эхэлье, учир нь энэ нь мөрийг MCU руу илгээх болно.

цуваа импорт серийн #импорт серийн номын санdata = '24' #өгөгдөл илгээх болно = 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 -ийг тодорхойлно уу

#оруулах

#төхөөрөмжийн ADC = 16

#FUSES NOWDT // Харуулын нохой таймер байхгүй

#FUSES NOBROWNOUT // brownout reset байхгүй #FUSES NOLVP // Бага хүчдэлийн эргэлт байхгүй, I/O -д B3 (PIC16) эсвэл B5 (PIC18) ашиглагддаггүй.

#ашиглах саатал (болор = 6000000)

Одоо үндсэн кодыг харцгаая.

#оруулах

#оруулах

#ашиглах rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, parity = N, stop = 1)

#LED_RED PIN_D0 -ийг тодорхойлох

char inp; char cmp _ = "24"; char буфер [3];

#ин_рда

хүчингүй serial_communication_interrupt () {disable_interrupts (int_rda); тэмдэггүй int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {buffer = inp; inp = getc (); putc (inp); би ++; }}

void main (хүчингүй) {

set_tris_d (0x00); output_d (0xFF); enable_interrupts (Глобал); while (1) {enable_interrupts (int_rda); if (strcmp (buffer, cmp_) == 0) output_low (LED_RED); өөр output_high (LED_RED); }}

Эхэндээ бид тэмдэгт мөрийн номын санг агуулдаг бөгөөд энэ нь мөр харьцуулах үйлдэл (strcmp) юм. Тиймээс, энэ код дахь бидний зорилго бол дамжуулсан утга нь бидний өгсөн утгатай "cmp_" нь "24" -тэй тэнцүү бол D0 зүүтэй холбогдсон гэрлийг асаах явдал юм.

Юуны өмнө бид өгөгдөл дамжуулах үед тасалдал үүсгэх "rda" тасалдлыг идэвхжүүлдэг.

Хоёрдугаарт, "serial_communication_interrupt" гэж нэрлэгддэг ISR (тасалдлын үйлчилгээний горим) -ыг авч үзье. Дотор нь бид хүлээн авсан утгыг уншиж, тасалдал үүсгэхийн тулд тасалдлын тугийг идэвхгүй болгодог. Үүний дараа бид '\ 0' хүрэх хүртэл тэмдэгт мөрийг тэмдэгтээр нь уншдаг. Мөрийг уншиж байхдаа хүлээн авсан мөрийг авахын тулд char бүрийг буферт бичдэг.

Эцэст нь бид дахиад л хэсэг хугацаанд орж ирнэ. Энд бид мөрийг зөв авсан эсэхийг шалгахын тулд хүлээн авсан string болон cmp_ string -ийг буфер мөрийг харьцуулж үздэг. Хэрэв тэд тэнцүү бол би LED асаагаарай, эс бөгөөс унтраа.

*Миний самбар D порт зүүний утгыг өөрчилдөг тул би кодоо буцааж хийсэн. Таны кодонд үүнийг дараах байдлаар өөрчилнө үү.

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

Эцэст нь үүнийг эмхэтгээд MCU дээрээ байршуулаад дараа нь Python дээр код ажиллуулна уу. Та LED асаалтыг харах ёстой.

Алхам 5: Дүгнэлт

Бид нэг ажлыг амжилттай дуусгалаа. Энэ нь танд ашигтай байх болно гэж найдаж байна. Асуух зүйл байвал асуухаас бүү эргэлзээрэй:) Дараагийн төсөл хүртэл.

Зөвлөмж болгож буй: