Paralel ve Seri İletişim

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