Mündəricat:
- Addım 1: Nə lazımdır?
- Addım 2: Avadanlıq Bağlantıları
- Addım 3: Python Proqramı
- Addım 4: Mikrokontrolör Proqramı
- Addım 5: Nəticə
Video: PIC MCU və Python Serial Rabitəsi: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
Salam uşaqlar! Bu layihədə PIC MCU və Python serial ünsiyyətləri ilə bağlı təcrübələrimi izah etməyə çalışacağam. İnternetdə, çox faydalı olan virtual terminal üzərindən PIC MCU ilə necə əlaqə quracağınıza dair bir çox dərslər və videolar var. Ancaq əsas layihəmdə tələblərdən biri, yaxşı bir dərs tapa bilmədiyim PIC MCU və Python arasında serial rabitə qurmaqdır. Beləliklə, başlayaq:)
Addım 1: Nə lazımdır?
Beləliklə, əvvəlcə nəyə ehtiyacımız olduğunu görək. Avadanlıq baxımından:
- Şübhəsiz ki, mənim vəziyyətimdə PIC16f877a olan PIC MCU (Bu lövhəyə ehtiyacınız yoxdur. Bu, bəzi çirkli əlaqələri asanlaşdırmaq üçündür)
- TX və RX pinlərindən istifadə edərək USB portu vasitəsilə PIC MCU ilə əlaqə qurmaq üçün USB -dən TTL -ə çevirici.
- Mənim vəziyyətimdə K150 proqramçısı olan MCU proqramçısı, ancaq PicKit 2, 3 və ya başqa bir şeydən istifadə edə bilərsiniz.
- Və nəhayət kompüter:)
Proqram təminatı baxımından:
- Mənim vəziyyətim Pycharm olan python kodu yazmaq üçün bir IDE, ancaq adi Python IDE -dən də istifadə edə bilərsiniz.
- Mənim vəziyyətimdə MPLAB X IDE olan MCS -ni CCS C tərtibçisi ilə proqramlaşdırmaq üçün bir mühit.
Addım 2: Avadanlıq Bağlantıları
Şəkildə PIC MCU və USB TTL çeviricisi arasında olan əlavə edilmiş bağlantılar aşağıda verilmişdir:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
USB TTL çeviricisinin VCC pinini bağlamanıza ehtiyac yoxdur (Ancaq istəsəniz edə bilərsiniz). Bu 3 əlaqə kifayət qədərdir.
Addım 3: Python Proqramı
Python tərəfi üçün, bizim vəziyyətimizdə ötürücü olacaq bir proqram yazmağa başlayaq, çünki bu sətri MCU -ya göndərəcək.
import serial #import serial librarydata = '24' #data göndərəcəyimiz data = a+'\ 0' ser = serial. Serial ('COM17', baudrate = 9600, zaman aşımı = 1) #port.reite yazın (a.encode ()) #məlumatları göndərin
Gələcəkdən istifadə etmək üçün ilk növbədə serial kitabxana idxal olunur. MCU kodunda qəbul etdiyimizi təsdiqləmək üçün bir nümunə simli məlumat göndərmək istəyirik. Burada bir şeyi qeyd etmək istəyirəm. Bu səbəbdən sətirə '\ 0' əlavə etdik. Bunun səbəbi, MCU tərəfində sətri tamamilə oxumaq mümkün deyil. Xarakterə görə oxunur. Beləliklə, oxumağı dayandırmaq üçün sətrin sonunu bilmək istəyirik. Beləliklə, sətrin sonunu göstərən sətirə '\ 0' əlavə edirik. Sonra MCU -ya qoşulmuş porta qoşuluruq. 'Cihaz Meneceri' ndə axtarış edərək bu limanı təyin edə bilərsiniz. Beləliklə, eyni limanda olduğunuza diqqət yetirin. Axı, məlumatları MCU -ya göndəririk. Alıcıya göndərə bilmək üçün ".encode ()" simli məlumatlara əlavə edilməlidir.
Addım 4: Mikrokontrolör Proqramı
Beləliklə, MCU kodumuzu görək. Əvvəlcə sizə lazım olmayan "config.h" faylını göstərmək istəyirəm, amma bunu sadəlik üçün etdim. Burada MCU'nun tezliyini dəyişdirin.
#ifndef CONFIG_H#CONFIG_H təyin edin
#daxil edin
#cihaz ADC = 16
#FUSES NOWDT // Watch Dog Timer yoxdur
#FUSES NOBROWNOUT // Brownout reset yoxdur #FUSES NOLVP // I/O üçün B3 (PIC16) və ya B5 (PIC18) aşağı gərginlikli prgming yoxdur.
#istifadə gecikməsi (kristal = 6000000)
İndi əsas kodu görək:
#daxil edin
#daxil edin
#rs232 istifadə edin (baud = 9600, xmit = pin_C6, rcv = pin_C7, parite = N, stop = 1)
#LED_RED PIN_D0 təyin edin
char inp; sim cmp _ = "24"; char tamponu [3];
#int_rda
boş serial_communication_interrupt () {disable_interrupts (int_rda); işarəsiz int i = 0; inp = getc (); putc (giriş); while (inp! = '\ 0') {bufer = inp; inp = getc (); putc (giriş); i ++; }}
void main (void) {
set_tris_d (0x00); çıxış_d (0xFF); enable_interrupts (QLOBAL); while (1) {enable_interrupts (int_rda); əgər (strcmp (tampon, cmp_) == 0) output_low (LED_RED); başqa çıxış_yüksək (LED_RED); }}
Başlanğıcda, simli əməliyyatlar üçün faydalı olacağımız simli kitabxana daxildir ki, bu da bizim vəziyyətimizdə simli müqayisə əməliyyatıdır (strcmp). Beləliklə, bu koddakı məqsədimiz, ötürülən dəyər "cmp_" "24" ə bərabər olan verdiyimiz dəyərlə eyni olarsa, D0 pininə bağlı olan led'i açmaqdır.
Hər şeydən əvvəl, məlumat ötürüldükdə kəsilməyə səbəb olacaq "rda" kəsilməsini təmin edirik.
İkincisi, "serial_communication_interrupt" adlanan ISR (fasilə xidməti rutini) daxilinə baxaq. Daxilində alınan dəyəri oxumaq və daha da kəsilməyə səbəb olmaq üçün əvvəlcə kəsmə bayrağını deaktiv edirik. Bundan sonra '\ 0' çatana qədər simvol xarakterini oxuyuruq. String daxilində oxuyarkən alınan simli əldə etmək üçün hər bir tamponu buferə yazırıq.
Sonda yenə içəri giririk. Burada simli düzgün əldə edib -etmədiyimizi görmək üçün string və cmp_ string alınan tampon simimizi müqayisə edirik. Əgər onlar bərabərdirsə, onda led'i yandırıram, əks halda söndürürəm.
*Lövhəm D port pin dəyərlərini dəyişdirdiyi üçün kodu tərsinə çevirdim. Kodunuzda bunu dəyişdirin:
if (strcmp (buffer, cmp_) == 0) output_high (LED_RED); başqa output_low (LED_RED);
Nəhayət, onu tərtib edin və MCU -ya yükləyin və sonra Python -da kod işləyin. Ledin açıldığını görməlisiniz.
Addım 5: Nəticə
Bir işi uğurla başa vurduq. Ümid edirəm sizin üçün faydalı olacaq. Hər hansı bir sualınız varsa, xahiş edirik soruşmaqdan çəkinməyin:) Növbəti layihəyə qədər.
Tövsiyə:
Mac Lilypad USB Serial Portu/Sürücü Problemini Düzəltmək: 10 Addım (Şəkillərlə birlikdə)
Mac Lilypad USB Serial Portu/Sürücü Məsələsinin həlli: 2016 -cı ildən etibarən Mac -iniz 2 yaşdan kiçikdir? Bu yaxınlarda ən yeni OS -yə (Yosemite və ya daha yeni bir şey) yüksəltmisiniz? Lilypad USB/MP3 -ləriniz artıq işləmirmi? Təlimat sizə Lilypad USB -ni necə düzəltdiyimi göstərəcək. Qarşılaşdığım səhv əlaqəli idi
Paketləri Serial Göndərərək Dynamixel 12A -ya nəzarət: 5 addım
Paketləri Serial Göndərərək Dynamixel 12A -ya nəzarət: DYNAMIXEL 12A
Bir Çörək Paneli istifadə edərək PICkit Proqramçısı ilə PIC MCU -nu necə proqramlaşdırmaq olar: 3 addım
Bir Çörək Paneli istifadə edərək PICkit Proqramçısı ilə PIC MCU -nu Necə Proqramlaşdırmaq olar: PIC (və ya digər) mikrokontrolörlərlə oynamaq üçün bahalı və mürəkkəb vasitələrə ehtiyacınız yoxdur. Lazım olan tək şey, dövrə və proqramlaşdırma sınadığınız bir çörək taxtasıdır. Əlbəttə ki, bir növ proqramçı və IDE lazımdır. Bu təlimatda
Arduino və Python Serial Rabitəsi - Klaviatura Ekranı: 4 Addım
Arduino və Python Serial Rabitə - Klaviatura Ekranı: Bu layihə mac istifadəçiləri üçün hazırlanmışdır, lakin Linux və Windows üçün də tətbiq oluna bilər, fərqli olması lazım olan yeganə addım quraşdırmadır
Sensorlu Xalça/ Arduino Micro ilə RF Rabitəsi: 4 addım (şəkillərlə)
Sensorlu Xalça/ Arduino Micro ilə RF Əlaqəsi: Bu yaxınlarda eyni dərəcədə müxtəlif qurğunu bitirdim, lampaların altındakı bir xalça içərisinə yerləşdirilmiş sensorlara reaksiya verən lampalardan ibarətdir.Burada təzyiq sensörləri ilə xalçanı necə hazırladım. Ümid edirəm faydalı olacaq