Სარჩევი:
- ნაბიჯი 1: რა გვჭირდება?
- ნაბიჯი 2: აპარატურის კავშირები
- ნაბიჯი 3: პითონის პროგრამული უზრუნველყოფა
- ნაბიჯი 4: მიკროკონტროლერის პროგრამა
- ნაბიჯი 5: დასკვნა
ვიდეო: PIC MCU და პითონის სერიული კომუნიკაცია: 5 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:18
Გამარჯობათ ბიჭებო! ამ პროექტში შევეცდები ავხსნა ჩემი ექსპერიმენტები PIC MCU და პითონის სერიული კომუნიკაციის შესახებ. ინტერნეტით, არსებობს მრავალი გაკვეთილი და ვიდეო იმის შესახებ, თუ როგორ უნდა დაუკავშირდეთ PIC MCU– ს ვირტუალურ ტერმინალზე, რაც ძალიან სასარგებლოა. თუმცა, ჩემს მთავარ პროექტში ერთ -ერთი მოთხოვნაა სერიული კომუნიკაციის დამყარება PIC MCU- სა და პითონს შორის, რომელიც მე ვერ ვიპოვე კარგი გაკვეთილი. მაშ, დავიწყოთ:)
ნაბიჯი 1: რა გვჭირდება?
ასე რომ, პირველ რიგში ვნახოთ რა გვჭირდება. ტექნიკის თვალსაზრისით:
- რა თქმა უნდა, PIC MCU, რომელიც არის ჩემს შემთხვევაში PIC16f877a (თქვენ არ გჭირდებათ ეს დაფა. ეს იმისთვის, რომ გაამარტივოთ ზოგიერთი ბინძური კავშირი)
- USB to TTL გადამყვანი, რათა დაუკავშირდეთ PIC MCU USB პორტს TX და RX ქინძისთავების გამოყენებით.
- MCU პროგრამისტი, რომელიც ჩემს შემთხვევაში არის K150 პროგრამისტი, მაგრამ თქვენ შეგიძლიათ გამოიყენოთ PicKit 2, 3 ან სხვა რამ.
- და ბოლოს კომპიუტერი:)
რაც შეეხება პროგრამულ უზრუნველყოფას:
- IDE პითონის კოდის დასაწერად, რაც ჩემს შემთხვევაში არის Pycharm, მაგრამ ასევე შეგიძლიათ გამოიყენოთ ჩვეულებრივი პითონის IDE.
- MCU პროგრამირების გარემო, რომელიც ჩემს შემთხვევაში არის MPLAB X IDE CCS C შემდგენელთან ერთად.
ნაბიჯი 2: აპარატურის კავშირები
სურათზე მოცემულია თანდართული აპარატურის კავშირები, რომლებიც არის PIC MCU და USB TTL გადამყვანებს შორის ქვემოთ:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
თქვენ არ გჭირდებათ USB TTL გადამყვანის VCC პინის დაკავშირება (თუმცა, თუ გინდათ, შეგიძლიათ). ეს 3 კავშირი საკმაოდ საკმარისია.
ნაბიჯი 3: პითონის პროგრამული უზრუნველყოფა
დავიწყოთ პითონის მხარისთვის პროგრამული უზრუნველყოფის წერა, რომელიც იქნება გადამცემი ჩვენს შემთხვევაში, რადგან ის სტრიქონს გაუგზავნის MCU- ს.
იმპორტი სერიული #იმპორტი სერიული ბიბლიოთეკა data = '24' #მონაცემები, რომელსაც ჩვენ გამოგიგზავნით მონაცემებს = a+'\ 0' ser = serial. სერიული ('COM17', baudrate = 9600, ვადა = 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 // Watch Dog Timer არ არის
#FUSES NOBROWNOUT // არ brownout reset #FUSES NOLVP // არ არის დაბალი ძაბვის prgming, B3 (PIC16) ან B5 (PIC18) გამოიყენება I/O
#გამოყენების დაგვიანებით (კრისტალი = 6000000)
ახლა ვნახოთ მთავარი კოდი:
#ჩართეთ
#ჩართეთ
#გამოყენება rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, პარიტეტი = N, გაჩერება = 1)
#განსაზღვრეთ LED_RED PIN_D0
char inp; char cmp _ = "24"; char buffer [3];
#არ_რიდა
void serial_communication_interrupt () {disable_interrupts (int_rda); ხელმოუწერელი int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {buffer = inp; inp = getc (); putc (inp); მე ++; }}
ბათილი მთავარი (ბათილი) {
set_tris_d (0x00); output_d (0xFF); enable_interrupts (GLOBAL); while (1) {enable_interrupts (int_rda); if (strcmp (ბუფერი, cmp_) == 0) output_low (LED_RED); სხვაგან გამომავალი_მაღალი (LED_RED); }}
დასაწყისში ჩვენ მოიცავს სტრიქონების ბიბლიოთეკას, რომელიც ჩვენ გამოგვადგება სიმების ოპერაციებში, რაც ჩვენს შემთხვევაში არის სიმების შედარების ოპერაცია (strcmp). ამრიგად, ჩვენი მიზანი ამ კოდში არის ჩართოთ led დაკავშირებული pin D0- თან, თუ გადაცემული მნიშვნელობა იგივეა, რაც ჩვენი მოცემული მნიშვნელობა, რომელიც არის "cmp_" უდრის "24" -ს.
უპირველეს ყოვლისა, ჩვენ ვააქტიურებთ "rda" შეწყვეტას, რაც გამოიწვევს შეწყვეტას მონაცემთა გადაცემისას.
მეორეც, მოდით შევხედოთ ISR- ს (სერვისის შეწყვეტის რუტინას), რომელსაც ეწოდება "სერიული_კომუნიკაციის_შეწყვეტა". შიგნით ჩვენ პირველ რიგში გავთიშავთ შეწყვეტის დროშას, რათა წავიკითხოთ მიღებული მნიშვნელობა და გამოიწვიოს შემდგომი შეფერხება. ამის შემდეგ ჩვენ ვკითხულობთ სტრიქონს სიმბოლოების მიხედვით, სანამ არ მივაღწევთ '\ 0' - ს. როდესაც ვკითხულობთ სტრიქონში, ჩვენ ასევე ვწერთ თითოეულ სიმბოლოს ბუფერზე, რათა მივიღოთ სტრიქონი.
დასასრულს, ჩვენ კვლავ შევდივართ შიგნით. აქ ჩვენ შევადარებთ ჩვენს ბუფერულ სტრიქონს, რომელიც არის მიღებული სტრიქონი და cmp_ სტრიქონი, რათა ვნახოთ სწორად ვიღებთ თუ არა სტრიქონს. თუ ისინი თანაბარია, მაშინ მე ვრთავ led- ს, წინააღმდეგ შემთხვევაში გამორთეთ.*
*კოდში მე შევცვალე, რადგან ჩემი დაფა ინვერსიულობს D პორტის პინის მნიშვნელობებს. თქვენს კოდში შეცვალეთ:
if (strcmp (ბუფერი, cmp_) == 0) output_high (LED_RED); სხვაგან output_low (LED_RED);
დაბოლოს, შეადგინეთ იგი და ატვირთეთ თქვენს MCU– ში და შემდეგ გაუშვით კოდი პითონში. თქვენ უნდა ნახოთ LED ჩართვა.
ნაბიჯი 5: დასკვნა
ჩვენ ერთი დავალება წარმატებით დავასრულეთ. ვიმედოვნებ, რომ ის თქვენთვის სასარგებლო იქნება. თუ თქვენ გაქვთ რაიმე შეკითხვა, გთხოვთ ნუ დააყოვნებთ დასვას:) შემდეგ პროექტამდე.
გირჩევთ:
Arduino სერიული კომუნიკაცია: 5 ნაბიჯი
Arduino სერიული კომუნიკაცია: Arduino– ს მრავალი პროექტი ემყარება მონაცემების გადაცემას რამოდენიმე Arduino– ს შორის. ხართ თუ არა მოყვარული, რომელიც აშენებს RC მანქანას, RC თვითმფრინავს, ან ამუშავებს ამინდის სადგურს დისტანციური ჩვენებით, თქვენ უნდა იცოდეთ როგორ საიმედოდ სერიის გადაცემა
Arduino და Python სერიული კომუნიკაცია - კლავიატურის ჩვენება: 4 ნაბიჯი
Arduino და Python სერიული კომუნიკაცია - კლავიატურის ჩვენება: ეს პროექტი შექმნილია mac მომხმარებლებისთვის, მაგრამ ის ასევე შეიძლება განხორციელდეს Linux და Windows– ისთვის, ერთადერთი ნაბიჯი, რომელიც განსხვავებული უნდა იყოს არის ინსტალაცია
ESP8266 და პითონის კომუნიკაცია Noobs– ისთვის: 6 ნაბიჯი
ESP8266 და Python Communication For Noobs: ეს სახელმძღვანელო საშუალებას გაძლევთ მიიღოთ ნებისმიერი მონაცემი ESP8266– დან და გააკონტროლოთ ის პითონზე AT ბრძანებების გარეშე. დამწყებთათვის ESP8266– ის გამოყენების შესახებ სახელმძღვანელოების უმეტესობა ძნელია, რადგან მათ უნდათ, რომ ააფეთქოთ „COMMANDS”ჩიპში, რომელიც არის: არასასურველი ნარჩენები
უკაბელო სერიული კომუნიკაცია Bluefruit– ის გამოყენებით: 4 ნაბიჯი
უკაბელო სერიული კომუნიკაცია Bluefruit– ის გამოყენებით: აქ არის მარტივი ნაბიჯ ნაბიჯ სახელმძღვანელო, რომ შეცვალოთ თქვენი მავთულები ბლუთუზის დაბალი ენერგიის კავშირით. როგორც ბლუფრუი
სერიული კომუნიკაცია ARM Cortex-M4– ის გამოყენებით: 4 ნაბიჯი
სერიული კომუნიკაცია ARM Cortex-M4– ის გამოყენებით: ეს არის დაფაზე დაფუძნებული პროექტი, რომელიც იყენებს ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) სერიული კომუნიკაციისთვის ვირტუალური ტერმინალის გამოყენებით. გამომავალი მიღება შესაძლებელია 16x2 LCD ეკრანზე და სერიული კომუნიკაციის შეყვანა შესაძლებელია სერიულ თვეში