İçindekiler:
- Adım 1: Neye İhtiyacımız Var?
- 2. Adım: Donanım Bağlantıları
- 3. Adım: Python Yazılımı
- Adım 4: Mikrodenetleyici Yazılımı
- Adım 5: Sonuç
Video: PIC MCU ve Python Seri Haberleşme: 5 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Selam beyler! Bu projemde PIC MCU ve Python seri haberleşme üzerine deneylerimi açıklamaya çalışacağım. İnternette, sanal terminal üzerinden PIC MCU ile nasıl iletişim kurulacağına dair çok faydalı olan birçok eğitim ve video var. Ancak ana projemde gereksinimlerden biri de PIC MCU ile Python arasında iyi bir öğretici bulamadığım seri iletişim kurmak. O halde başlayalım:)
Adım 1: Neye İhtiyacımız Var?
O halde, öncelikle neye ihtiyacımız olduğunu görelim. Donanım açısından:
- Elbette, benim durumumda olan PIC MCU PIC16f877a (Bu karta ihtiyacınız yok. Bu bazı kirli bağlantıları basitleştirmek için)
- TX ve RX pinlerini kullanarak USB portu üzerinden PIC MCU ile iletişim kurmak için USB'den TTL'ye dönüştürücü.
- Benim durumumda K150 programcısı olan MCU programcısı, ancak PicKit 2, 3 veya başka bir şey kullanabilirsiniz.
- Ve sonunda bir bilgisayar:)
Yazılım açısından:
- Benim durumumda Pycharm olan python kodunu yazmak için bir IDE, ancak normal Python IDE'yi de kullanabilirsiniz.
- CCS C derleyicisi ile benim durumumda MPLAB X IDE olan MCU'yu programlamak için bir ortam.
2. Adım: Donanım Bağlantıları
Resimde PIC MCU ve USB TTL dönüştürücü arasındaki donanım bağlantıları aşağıdaki gibi verilmiştir:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
USB TTL dönüştürücünün VCC pinini bağlamanıza gerek yoktur (Ancak dilerseniz yapabilirsiniz). Bu 3 bağlantı oldukça yeterli.
3. Adım: Python Yazılımı
Bizim durumumuzda verici olacak Python tarafı için bir yazılım yazmaya başlayalım çünkü stringi MCU'ya gönderecektir.
import serial #import serial librarydata = '24' #veri göndereceğimiz #data = a+'\0' ser = serial. Serial('COM17', baudrate=9600, timeout=1) #porta bağlan ser.write(a.encode()) #verileri gönder
Her şeyden önce, geleceklerini kullanmak için seri kütüphane ithal edilir. MCU kodunda kabul ettiğimizi doğrulamak için örnek bir dize verisi göndermek istiyoruz. Burada bir şeyi not etmek istiyorum. Bu yüzden dizgeye '\0' ekledik. Bunun nedeni, MCU tarafında dizeyi tamamen okumanın imkansız olmasıdır. Karakter karakter okunur. Bu nedenle, okumayı durdurmak için dizenin sonunu bilmek istiyoruz. Böylece, dizgenin sonunu gösteren dizgeye '\0' ekliyoruz. Ardından MCU'ya bağlı olan porta bağlanıyoruz. 'Aygıt Yöneticisi'nde arama yaparak bu bağlantı noktasını belirleyebilirsiniz. Bu nedenle, aynı limanda olduğunuza dikkat edin. Sonuçta, verileri MCU'ya gönderiyoruz. Alıcıya gönderebilmek için string verisine ".encode()" eklenmelidir.
Adım 4: Mikrodenetleyici Yazılımı
Şimdi MCU kodumuzu görelim. Öncelikle size gerekli olmayan "config.h" dosyasını göstermek istiyorum ama bunu basit olsun diye yaptım. Burada sadece MCU'nuzun frekansını değiştirin.
#ifndef CONFIG_H#CONFIG_H tanımla
#Dahil etmek
#cihaz ADC=16
#FUSES NOWDT // Watch Dog Timer Yok
#FUSES NOBROWNOUT //Karartma sıfırlaması yok #FUSES NOLVP //Düşük voltajlı çalıştırma yok, G/Ç için B3(PIC16) veya B5(PIC18) kullanılır
#gecikmeyi kullan(kristal=6000000)
Şimdi ana kodu görelim:
#Dahil etmek
#Dahil etmek
# rs232 kullan (baud=9600, xmit=pin_C6, rcv=pin_C7, parite=N, stop=1)
#define LED_RED PIN_D0
karakter girişi; char cmp_="24"; karakter arabelleği[3];
#int_rda
void serial_communication_interrupt() { disable_interrupts(int_rda); imzasız int i = 0; inp = getc(); putc(inp); while(inp != '\0') { arabellek = inp; inp = getc(); putc(inp); ben++; } }
void main(void) {
set_tris_d(0x00); çıktı_d(0xFF); enable_interrupts(GLOBAL); while(1) { enable_interrupts(int_rda); if(strcmp(tampon, cmp_) == 0) output_low(LED_RED); yoksa output_high(LED_RED); } }
Başlangıçta, bizim durumumuzda dize karşılaştırma işlemi (strcmp) olan dize işlemlerinde yardımcı olacağımız dize kitaplığını ekledik. Yani bu koddaki amacımız, iletilen değer verdiğimiz değerle aynı ise D0 pinine bağlı led'i açmaktır ki bu "cmp_" eşittir "24" olur.
Öncelikle, veri iletildiğinde kesintiye neden olacak "rda" kesmesini etkinleştiriyoruz.
İkinci olarak, "serial_communication_interrupt" olarak adlandırılan ISR'nin (interrupt service rutin) içine bakalım. İçeride, alınan değeri okumak ve daha fazla kesintiye neden olmak için önce kesme bayrağını devre dışı bırakıyoruz. Bundan sonra karakter dizisini '\0'a ulaşana kadar okuruz. Dize içini okurken, alınan dizeyi almak için her bir karakteri arabelleğe yazarız.
Sonunda, tekrar içeri girerken. Burada string'i doğru alıp almadığımızı görmek için alınan string ve cmp_ string'i karşılaştırıyoruz. Eşit ise led açarım yoksa kapatırım.*
*Kodda, kartım D bağlantı noktası pin değerlerini tersine çevirdiği için ters yaptım. Kodunuzda bunu şu şekilde değiştirin:
if(strcmp(tampon, cmp_) == 0) output_high(LED_RED);else output_low(LED_RED);
Son olarak, onu derleyin ve MCU'nuza yükleyin ve ardından Python'da kodu çalıştırın. Led'in açık olduğunu görmelisiniz.
Adım 5: Sonuç
Bir görevi başarıyla tamamladık. Umarım sizin için faydalı olur. Herhangi bir sorunuz varsa, lütfen sormaktan çekinmeyin:) Bir sonraki projeye kadar.
Önerilen:
Arduino Seri Haberleşme: 5 Adım
Arduino Seri İletişim: Birçok Arduino projesi, birkaç Arduino arasında veri aktarımına dayanır. İster bir RC araba, bir RC uçak inşa eden bir hobici olun, ister uzak ekranlı bir hava istasyonu tasarlayın, nasıl güvenilir bir şekilde yapılacağını bilmeniz gerekir. dizi transferi
Arduino Tabanlı Projeler için NRF24L01 Alıcı-Verici Modülü ile Kablosuz Haberleşme: 5 Adım (Resimli)
Arduino Tabanlı Projeler için NRF24L01 Alıcı-Verici Modülünü Kullanan Kablosuz İletişim: Bu, robotlar ve mikro denetleyiciler hakkında ikinci öğretici öğreticim. Robotunuzu canlı ve beklendiği gibi çalışıyor görmek gerçekten harika ve robotunuzu veya diğer şeyleri kablosuz olarak hızlı ve hızlı bir şekilde kontrol etmenizin daha eğlenceli olacağına inanıyorum
Arduino ve Python Seri Haberleşme - Tuş Takımı Ekranı: 4 Adım
Arduino ve Python Seri Haberleşme - Tuş Takımı Ekranı: Bu proje mac kullanıcıları için yapılmıştır ancak Linux ve Windows için de uygulanabilir, farklı olması gereken tek adım kurulumdur
Düşük Güç Tüketimi Çağında Kablosuz Haberleşme Modüllerinin Güç Tüketimi Nasıl Doğru Ölçülür?: 6 Adım
Düşük Güç Tüketimi Çağında Kablosuz Haberleşme Modüllerinin Güç Tüketimi Nasıl Doğru Ölçülür?: Düşük güç tüketimi, Nesnelerin İnterneti'nde son derece önemli bir kavramdır. Çoğu IoT düğümünün pillerle çalıştırılması gerekir. Yalnızca kablosuz modülün güç tüketimini doğru bir şekilde ölçerek ne kadar pil kullandığımı doğru bir şekilde tahmin edebiliriz
LED'lerin Doğru Seri Bağlanması - Seri Vs Paralel Bağlantı: 6 Adım
LED'leri Doğru Seri Vs Paralel Bağlantıya Bağlama: Bu talimatta, LED - Işık Yayan Diyotlardan ve birden fazla ünitemiz varsa bunları nasıl bağlayabileceğimizden bahsediyoruz. Bu, keşke en başından bilseydim dediğim bir ders çünkü elektronik devrelerle uğraşmaya başladığımda birkaç tane inşa ettim