תוכן עניינים:

PIC MCU ותקשורת סדרתית של פייתון: 5 שלבים
PIC MCU ותקשורת סדרתית של פייתון: 5 שלבים

וִידֵאוֹ: PIC MCU ותקשורת סדרתית של פייתון: 5 שלבים

וִידֵאוֹ: PIC MCU ותקשורת סדרתית של פייתון: 5 שלבים
וִידֵאוֹ: אפקטים מדהימים בתוכנת פוטושופ לעיצוב גרפי ותקשורת חזותית מדריכים חינם 2024, יולי
Anonim
PIC MCU ותקשורת סדרתית של פייתון
PIC MCU ותקשורת סדרתית של פייתון
PIC MCU ותקשורת סדרתית של פייתון
PIC MCU ותקשורת סדרתית של פייתון

היי ח'ברה! בפרויקט זה אנסה להסביר את הניסויים שלי בנושא PIC MCU ותקשורת טורית של פייתון. באינטרנט, יש הרבה הדרכות וסרטונים כיצד לתקשר עם PIC MCU דרך מסוף וירטואלי וזה מאוד שימושי. עם זאת, בפרויקט העיקרי שלי אחת הדרישות היא ליצור תקשורת טורית בין PIC MCU לפייתון שלא הצלחתי למצוא הדרכה טובה. אז בואו נתחיל:)

שלב 1: מה אנחנו צריכים?

מה אנחנו צריכים?
מה אנחנו צריכים?
מה אנחנו צריכים?
מה אנחנו צריכים?

אז קודם כל בוא נראה מה אנחנו צריכים. מבחינת חומרה:

  • אין ספק, PIC MCU שהוא במקרה שלי PIC16f877a (אתה לא צריך את הלוח הזה. זה על מנת לפשט כמה חיבורים מלוכלכים)
  • ממיר USB ל TTL על מנת לתקשר עם PIC MCU דרך יציאת USB באמצעות סיכות TX ו- RX.
  • מתכנת MCU שהוא במקרה שלי מתכנת K150, אבל אתה יכול להשתמש ב- PicKit 2, 3 או כל דבר אחר.
  • ולבסוף מחשב:)

מבחינת תוכנה:

  • IDE על מנת לכתוב קוד פייתון שהוא במקרה שלי Pycharm, אבל אתה יכול להשתמש גם ב- Python IDE רגיל.
  • סביבה לתכנות ה- MCU שהיא במקרה שלי MPLAB X IDE עם מהדר CCS C.

שלב 2: חיבורי חומרה

חיבורי חומרה
חיבורי חומרה

בתמונה ניתנים חיבורי חומרה מצורפים הנמצאים בין PIC MCU לממיר TTL USB כדלקמן:

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

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

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

אין צורך לחבר את סיכת VCC של ממיר ה- TTL USB (עם זאת, אם תרצה תוכל לעשות זאת). 3 החיבורים האלה מספיקים.

שלב 3: תוכנת פייתון

בואו נתחיל לכתוב תוכנות לצד Python שיהיו משדרים במקרה שלנו, כי זה ישלח את המחרוזת ל- MCU.

יבוא סידורי #ייבוא ספריית נתונים סידרית = '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 // אין אפס חום

#עיכוב שימוש (קריסטל = 6000000)

עכשיו בואו נראה את הקוד הראשי:

#לִכלוֹל

#לִכלוֹל

#שימוש rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, זוגיות = N, עצור = 1)

#הגדר 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') {buffer = inp; inp = getc (); putc (inp); i ++; }}

void main (void) {

set_tris_d (0x00); פלט_ד (0xFF); enable_interrupts (GLOBAL); בעוד (1) {enable_interrupts (int_rda); if (strcmp (buffer, cmp_) == 0) output_low (LED_RED); אחר output_high (LED_RED); }}

בהתחלה אנו כוללים ספריית מחרוזות אשר נועיל בפעולות מחרוזת אשר במקרה שלנו היא פעולת השוואת מחרוזות (strcmp). לכן, מטרתנו בקוד זה היא להדליק את הלייד המחובר לסיכה D0 אם הערך המועבר זהה לערך הנתון שלנו שהוא "cmp_" שווה ל- "24".

קודם כל אנו מאפשרים interrupt "rda" אשר יגרום להפרעה בעת העברת נתונים.

שנית, בואו נסתכל בתוך ISR (שגרת שירות קטיעה) הנקראת "סדרת_תקשורת_פרעה". בפנים אנו משביתים ראשית את דגל הפסיקה על מנת לקרוא את הערך שהתקבל ולגרום להפרעה נוספת. לאחר מכן אנו קוראים את המחרוזת תו אחר תו עד שמגיעים ל '\ 0'. בזמן קריאה בתוך מחרוזת אנו כותבים גם כל צ'אר למאגר על מנת לקבל מחרוזת שהתקבלה.

בסוף, אנחנו שוב נכנסים פנימה בזמן. כאן אנו משווים את מחרוזת החיץ שלנו המתקבלת מחרוזת ומחרוזת cmp_ על מנת לראות אם קיבלנו את המחרוזת בצורה נכונה. אם הם שווים אז אני מדליק לד, אחרת מכבה.*

*בקוד אכן הפכתי מכיוון שהלוח שלי הופך את ערכי סיכת יציאת ה- D. בקוד שלך שנה את זה ל:

if (strcmp (buffer, cmp_) == 0) output_high (LED_RED); אחרת output_low (LED_RED);

לבסוף, הידור זה והעלה ל- MCU שלך ולאחר מכן הפעל קוד ב- Python. אתה אמור לראות את הדלק מופעל.

שלב 5: מסקנה

סיימנו משימה אחת בהצלחה. אני מקווה שזה יהיה שימושי עבורך. אם יש לך שאלה, אנא אל תהסס לשאול:) עד הפרויקט הבא.

מוּמלָץ: