ዝርዝር ሁኔታ:

PIC MCU እና Python Serial Communication: 5 ደረጃዎች
PIC MCU እና Python Serial Communication: 5 ደረጃዎች

ቪዲዮ: PIC MCU እና Python Serial Communication: 5 ደረጃዎች

ቪዲዮ: PIC MCU እና Python Serial Communication: 5 ደረጃዎች
ቪዲዮ: Marlin Firmware - VScode PlatformIO Install - Build Basics 2024, ሀምሌ
Anonim
PIC MCU እና Python Serial Communication
PIC MCU እና Python Serial Communication
PIC MCU እና Python Serial Communication
PIC MCU እና Python Serial Communication

ሰላም ጓዶች! በዚህ ፕሮጀክት ውስጥ ሙከራዎቼን በ PIC MCU እና በ Python ተከታታይ ግንኙነት ላይ ለማብራራት እሞክራለሁ። በበይነመረብ ላይ ፣ በጣም ጠቃሚ በሆነው ምናባዊ ተርሚናል ላይ ከፒሲ ኤምሲዩ ጋር እንዴት መገናኘት እንደሚችሉ ብዙ ትምህርቶች እና ቪዲዮዎች አሉ። ሆኖም ፣ በእኔ ዋና ፕሮጀክት ውስጥ ከሚያስፈልጉት መስፈርቶች አንዱ ጥሩ መማሪያ ማግኘት ባልቻልኩበት በፒሲ MCU እና በ Python መካከል ተከታታይ ግንኙነት መመስረት ነው። ስለዚህ ፣ እንጀምር:)

ደረጃ 1: ምን ያስፈልገናል?

ምን ያስፈልገናል?
ምን ያስፈልገናል?
ምን ያስፈልገናል?
ምን ያስፈልገናል?

ስለዚህ በመጀመሪያ የሚያስፈልገንን እንመልከት። ከሃርድዌር አንፃር ፦

  • በእርግጥ በእኔ ሁኔታ PIC16F877a (ይህ ቦርድ አያስፈልግዎትም። ይህ አንዳንድ የቆሸሹ ግንኙነቶችን ለማቃለል ነው)
  • TX እና RX ፒኖችን በመጠቀም በዩኤስቢ ወደብ ላይ ከ PIC MCU ጋር ለመገናኘት ዩኤስቢ ወደ TTL መቀየሪያ።
  • በእኔ ሁኔታ K150 ፕሮግራም አድራጊ የሆነው የ MCU ፕሮግራም አድራጊ ፣ ግን PicKit 2 ፣ 3 ወይም ሌላ ማንኛውንም ነገር መጠቀም ይችላሉ።
  • እና በመጨረሻም ኮምፒተር:)

ከሶፍትዌር አንፃር -

  • በእኔ ሁኔታ Pycharm ውስጥ ያለውን የፓይዘን ኮድ ለመፃፍ አይዲኢ ፣ ግን እርስዎም መደበኛ የ Python IDE ን መጠቀም ይችላሉ።
  • በእኔ ሁኔታ MPLAB X IDE ከሲሲኤስ ሲ አጠናቃሪ ጋር ያለውን MCU ን ለማቀናበር አካባቢ።

ደረጃ 2 የሃርድዌር ግንኙነቶች

የሃርድዌር ግንኙነቶች
የሃርድዌር ግንኙነቶች

በስዕሉ ውስጥ ተያይዞ የሃርድዌር ግንኙነቶች በ PIC MCU እና በዩኤስቢ TTL መለወጫ መካከል እንደሚከተሉት ተሰጥተዋል።

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

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

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

የዩኤስቢ TTL መቀየሪያውን የ VCC ፒን ማገናኘት አያስፈልግዎትም (ሆኖም ፣ ከፈለጉ ማድረግ ይችላሉ)። እነዚህ 3 ግንኙነቶች በቂ ናቸው።

ደረጃ 3 የፓይዘን ሶፍትዌር

በእኛ ሁኔታ አስተላላፊ ለሆነው ለ Python ጎን ሶፍትዌር መፃፍ እንጀምር ፣ ምክንያቱም ሕብረቁምፊውን ወደ ኤም.ሲ.ኤ.

የውሂብ የምንልክበት ተከታታይ #አስመጪ ተከታታይ ቤተመፃህፍት ውሂብ = '24' #ውሂብ = a+'\ 0' ser = serial. Serial ('COM17' ፣ baudrate = 9600 ፣ timeout = 1) #ከወደቡ ser.write ጋር ይገናኙ (a.encode ()) #መረጃውን ይላኩ

የወደፊት ዕጣውን ለመጠቀም በመጀመሪያ ደረጃ ተከታታይ ቤተ -መጽሐፍት ከውጭ ይገባል። እኛ በ MCU ኮድ መቀበሉን ለማረጋገጥ የምሳሌ ሕብረቁምፊ ውሂብ መላክ እንፈልጋለን። እዚህ አንድ ነገር ልብ ማለት እፈልጋለሁ። ወደ ሕብረቁምፊው '\ 0' ያከልነው ለዚህ ነው። ምክንያቱም በ MCU በኩል ሕብረቁምፊውን ሙሉ በሙሉ ለማንበብ የማይቻል ስለሆነ ነው። በባህሪ ይነበባል። ስለዚህ ፣ ንባብን ለማቆም የሕብረቁምፊውን መጨረሻ ማወቅ እንፈልጋለን። ስለዚህ ፣ የሕብረቁምፊውን መጨረሻ ወደሚያመለክተው ሕብረቁምፊ ‹\ 0› ን እንጨምረዋለን። ከዚያ ከ MCU ጋር ከተገናኘው ወደብ ጋር እንገናኛለን። በ ‹የመሣሪያ አስተዳዳሪ› ውስጥ በመፈለግ ያንን ወደብ መወሰን ይችላሉ። ስለዚህ ፣ በተመሳሳይ ወደብ ላይ እንዳሉ ይጠንቀቁ። ከሁሉም በላይ ውሂቡን ለ MCU እንልካለን። ".ኮድ ()" ወደ ተቀባዩ መላክ እንዲችል ወደ ሕብረቁምፊ ውሂብ መታከል አለበት።

ደረጃ 4 ማይክሮ መቆጣጠሪያ ሶፍትዌር

ስለዚህ ፣ ለ MCU የእኛን ኮድ እንይ። በመጀመሪያ እኔ የማያስፈልገውን የ “config.h” ፋይል ውስጡን ላሳይዎት እፈልጋለሁ ፣ ግን ቀለል ለማድረግ አደረግሁት። እዚህ የእርስዎን የ MCU ድግግሞሽ ብቻ ይለውጡ።

#ከሆነ CONFIG_H#CONFIG_H ን ይገልፃል

#ያካትቱ

#መሣሪያ ADC = 16

#FUSES NOWDT // አይ Watch Dog Timer

#FUSES NOBROWNOUT // ምንም የቅንጦት ዳግም ማስጀመር የለም #FUSES NOLVP // ለ I/O ጥቅም ላይ ያልዋለ ዝቅተኛ ቮልቴጅ ፕሪሚንግ ፣ B3 (PIC16) ወይም B5 (PIC18)

#አጠቃቀም መዘግየት (ክሪስታል = 6000000)

አሁን ዋናውን ኮድ እንመልከት-

#ያካትቱ

#ያካትቱ

#ይጠቀሙ rs232 (ባውድ = 9600 ፣ xmit = pin_C6 ፣ rcv = pin_C7 ፣ እኩልነት = N ፣ ማቆሚያ = 1)

#የ LED_RED PIN_D0 ን ይግለጹ

የቻር ማስገቢያ; ቻር cmp _ = "24"; የቻር ቋት [3];

#ገና_ርዳ

ባዶ serial_communication_interrupt () {disable_interrupts (int_rda); ያልተፈረመ int i = 0; inp = getc (); putc (inp); ሳለ (inp! = '\ 0') {ቋት = inp; inp = getc (); putc (inp); i ++; }}

ባዶ ባዶ (ባዶ) {

set_tris_d (0x00); output_d (0xFF); ማንቃት_አቋራጭ (ግሎባል); (1) {enable_interrupts (int_rda); ከሆነ (strcmp (ቋት ፣ cmp_) == 0) output_low (LED_RED); ሌላ output_high (LED_RED); }}

መጀመሪያ ላይ በእኛ ሕብረቁምፊ አሠራር ውስጥ የምንረዳውን የሕብረቁምፊ ቤተ -መጽሐፍትን እናካትታለን ፣ በእኛ ሁኔታ ሕብረቁምፊ ማወዳደር (strcmp)። ስለዚህ ፣ በዚህ ኮድ ውስጥ ያለን ዓላማ የተላለፈው እሴት “cmp_” ከ “24” ጋር እኩል ከሆነ ከተሰጠው እሴት ጋር ተመሳሳይ ከሆነ ከፒን D0 ጋር የተገናኘውን መሪን ማብራት ነው።

በመጀመሪያ ደረጃ መረጃን በሚተላለፍበት ጊዜ መቋረጥን የሚያመጣውን “rda” ማቋረጥን እናነቃለን።

በሁለተኛ ደረጃ ፣ “serial_communication_interrupt” ተብሎ የሚጠራውን በ ISR (የአገልግሎት መቋረጥን) ውስጥ እንይ። የተቀበለውን እሴት ለማንበብ እና ተጨማሪ ማቋረጥን ለመፍጠር በውስጣችን መጀመሪያ የማቋረጫ ባንዲራ እናሰናክለዋለን። ከዚያ በኋላ ‹\ 0› እስኪደርስ ድረስ የሕብረቁምፊ ቁምፊውን በባህሪ እናነባለን። በሕብረቁምፊ ውስጥ እያነበብን የተቀበለውን ሕብረቁምፊ ለማግኘት እያንዳንዱን ቻርተር ወደ ቋት እንጽፋለን።

በመጨረሻ ፣ እኛ እንደገና ወደ ውስጥ እንገባለን። ሕብረቁምፊውን በትክክል ማግኘት አለመቻላችንን ለማየት እዚህ እኛ ሕብረቁምፊ እና የ cmp_ ሕብረቁምፊ የተቀበለውን የእኛን ቋት ሕብረቁምፊ እናነፃፅራለን። እነሱ እኩል ከሆኑ እኔ መሪን አብራለሁ ፣ አለበለዚያ አጥፋ።

*በኮድ ውስጥ እኔ ተገላግያለሁ ምክንያቱም የእኔ ቦርድ የ D ወደብ ፒን እሴቶችን ስለሚቀይር። በኮድዎ ውስጥ ወደሚከተለው ይለውጡት

ከሆነ (strcmp (ቋት ፣ cmp_) == 0) output_high (LED_RED) ፤ ሌላ output_low (LED_RED);

በመጨረሻም ያጠናቅሩት እና ወደ የእርስዎ MCU ይስቀሉ እና ከዚያ በ Python ውስጥ ኮድ ያሂዱ። መሪን ማብራት ማየት አለብዎት።

ደረጃ 5 መደምደሚያ

አንድ ሥራን በተሳካ ሁኔታ ጨርሰናል። ለእርስዎ ጠቃሚ እንደሚሆን ተስፋ አደርጋለሁ። ማንኛውም ጥያቄ ካለዎት እባክዎን ከመጠየቅ ወደኋላ አይበሉ:) እስከሚቀጥለው ፕሮጀክት ድረስ።

የሚመከር: