Paralel ve Seri İletişim Şekil1a: Paralel İletişim Şekil1b. Seri iletişim Şekil 2: İletişim Modları Asenkron/Senkron İletişim Yrd.Doç.Dr. Bülent Çobanoğlu – Görsel Programlama-Port Kontrolü-Sakarya Üniversitesi PROTEUS/ISIS SANAL SERİ PORT ile C# USART HABERLEŞMESİ Seri iletişimde, saniyedeki veri iletim/transfer oranı baud, birimi ise bps (bits per second) olarak adlandırılır. Bununla birlikte baud ile bps aynı şeyi /oranı ifade etmeyebilir. Baud, saniyedeki sinyal değişimi/sembol sayısını belirten bir modem terminolojisidir. Şekilde RS232 için DB9 konnektörü görülüyor. 9 pinden RXD (Receive Data) ve TXD (Transmit Data) ve tabii ki GND (Ground) yani ikinci, üçüncü ve beşinci pinler bizi ilgilendiriyor. Bu pinler Türkçe’ye sırasıyla alıcı, verici ve toprak olarak çevrilebilir. Diğer pinler modem veya benzeri uygulamalar için kullanılır. Bizim uygulamamızda bir DB9 konnektörün ikinci, üçüncü ve beşinci pinlere kablo bağlantısı yapacağız. Diğer uçlar boşta bırakılabilir. PIC mikro denetleyicilerde seri iletişim için iki pin / bacak kullanılmaktadır. Bunlar; TX ve RX uçlarıdır. Bu uçlar PIC16F877 ve PIC18FXXX serileri için RC6 ve RC7 pinleridir. 1. DCD (Carrier Detect) 2. RXD (Receive Data) 3. TXD (Transmit Data) 4. DTR (Data terminal Ready) 5. GND (Ground) 6. DSR (Data Set Ready) 7. RTS (Request To Send) 8. CTS (Clear To Send) 9. RI (Ring Indicator) Şekil 3:RS232 Seri port ve COMPIM Şimdi 16F877 ile yapacağımız devrelerimize bakalım. Uygulamamız PC den alınan bilgiye göre RB0 bağlı 8 LED’i yakıp /söndüreceğiz. Gerekli araçlar: 1. Proteus/ISIS: PIC16F877, COMPIM, LED(Aktif) Şekil 4: COMPIM (Sanal Seri Port) için seçilen ayarlar 2. C# Programı (Visual Studio 2010/2012) Yrd.Doç.Dr. Bülent Çobanoğlu – Görsel Programlama-Port Kontrolü-Sakarya Üniversitesi 3. Virtual Seri Port Driver (Eltima) 4. MicroC/MPLAB PIC C (PIC üzerinde çalışacak/koşacak kod) 1-Proteus Devre Şeması: 2-C# Arayüzü SerialPort için Detaylı bilgi (Türkçe): http://msdn.microsoft.com/tr-tr/library/system.io.ports.serialport(v=vs.110).aspx SerialPort için Detaylı bilgi (İngilizce) http://msdn.microsoft.com/en-us/library/system.io.ports.serialport(v=vs.110).aspx Şekil-5: Arayüz görünümü Yrd.Doç.Dr. Bülent Çobanoğlu – Görsel Programlama-Port Kontrolü-Sakarya Üniversitesi Bilgisayar ile PIC haberleşmesinde arayüzü Visual c# ile yaptık. Arayüzün görünümü aşağıda (Şekil 5) görülmektedir. Program Kodunun Tamamı: Açıklama: SerialPort portS= new SerialPort("COM1",9600,Parity.None,8,StopBits.One); Kod satırı ile SerialPort sınıfından portS isimli bir nesne üretiliyor ve verinin/datanın 9600 baud (bit per second), parity bitsiz (no parity) hızında, 8 bitlik data ve bir stop biti ile gönderildiğini veya alındığını gösteriyor. Ayrıca SerialPort’u kullanabilmek için; using System.IO.Ports; kütüphanesisinin projeye eklenmesi gerektiğini unutmayınız. Diğer kodlar: button1_click() olayı ile led yakma, button2_click() olayı ile led söndürme, button3_click() olayı ilede açık portları label1 üzerinde göstermiş oluyoruz. Yrd.Doç.Dr. Bülent Çobanoğlu – Görsel Programlama-Port Kontrolü-Sakarya Üniversitesi 3- Sanal Seri Port Sürücüsü(Virtual Serial Port Driver) Programımızı doğrudan Mikrodenetleyici (PIC/Arduino) ile haberleştirecek isek böyle bir programa ihtiyacımız yoktur. O takdirde SerialPort portS= new SerialPort("COM1",9600,Parity.None,8,StopBits.One); Yrd.Doç.Dr. Bülent Çobanoğlu – Görsel Programlama-Port Kontrolü-Sakarya Üniversitesi Kod satırındaki "COM1"portun mikrodenetleyiciyi bağladığımız port olduğundan emin olmalıyız. Fakat sanal port kullanarak bir ISIS uygulaması yapıyorsak; ISIS’deki COMPIM için "COM2", C# arayüzündeki seri port için "COM1" veya tam tersi seçilir. Gerek sanal/virtual gerekse gerçek/physical aktif portları Aygıt Yöneticisi ekranında görmeliyiz. Yrd.Doç.Dr. Bülent Çobanoğlu – Görsel Programlama-Port Kontrolü-Sakarya Üniversitesi 4- Mkrodenetleyiciye (PIC veya Arduino) yüklenecek kod. 4a. PIC için MicroC kodu: Detaylı bilgi için; http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic/help/mikro c_pro_hardware_libraries.htm UART Asenkron iletişim için MicroC fonksiyon açıklamaları: UARTx_Init : Seri iletişimi istenilen hız için başlangıç ayarlarını yapar. UART1_Init(9600); // 9.6 kbps hızı için modül ayarlanır. UARTx_Data_Ready : Okunacak verinin hazır olduğunu gösterir. 1: veri hazır, 0: veri hazır değil. // veri hazır ise okuma yapılır. if (UART1_Data_Ready() == 1) oku = UART1_Read(); UARTx_Tx_Idle: Gönderilmiş olan veri gittiyse yeni veri gönderimi için transmiter portunun(TX) meşgul olup olmadığını test edilir. 1: veri gönderildi, 0 : meşgul. if (UART1_Tx_Idle() == 1) { UART1_Write(_data); } UARTx_Read() : Seri porttan 1 byte lık veri okur. if (UART1_Data_Ready() == 1) { receive = UART1_Read(); } UARTx_Read_Text : Seri porttan karakter dizisi okur. UARTx_Write : Seri porta 1 byte lık veri yazar. UARTx_Write_Text : Seri portta karakter dizisi yazar. UART_Set_Active : Birden fazla UART kullanılıyorsa aktif modülü belirler. Uygulamanın MicroC Program Kodu: Yrd.Doç.Dr. Bülent Çobanoğlu – Görsel Programlama-Port Kontrolü-Sakarya Üniversitesi - Uygulama Görünümü: PIC16F877 –C# Yrd.Doç.Dr. Bülent Çobanoğlu – Görsel Programlama-Port Kontrolü-Sakarya Üniversitesi 4b. Arduino kodu : LED yakıp/Söndüren ve Servo motoru kontrol ettiren uygulama C# Arayüzü ve kodu: Servo Motor kontrolünü arayüzde trackBar1 nesnesini hareket ettirerek yapıyoruz. Led yakıp/söndürme kodları yukarıda anlatılmıştı. Yrd.Doç.Dr. Bülent Çobanoğlu – Görsel Programlama-Port Kontrolü-Sakarya Üniversitesi public void send(byte data) { if (portS.IsOpen) { byte[] dizi = {0}; dizi[0] = data; portS.Write(dizi,0,1) ; //portS.Write(data.ToString()); } } - Uygulama Görünümü: Arduino –C# Yrd.Doç.Dr. Bülent Çobanoğlu – Görsel Programlama-Port Kontrolü-Sakarya Üniversitesi
© Copyright 2024 Paperzz