Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
0
Cevap
995
Tıklama
0
Öne Çıkarma
Sanal seri port üzerinden PIC16F877A ile C# haberleşmesi
S
8 yıl
Onbaşı
Konu Sahibi

Bu projede sıvı seviyesi ölçmüştüm. Yani analog bir değeri c#' da bir formda yazdırdım. Sanal com port olarak https://www.eltima.com/products/vspdxp/ bunu indirebilirsiniz.

Peki bu programı nasıl kullanıcaz?
Şimdi proteusta RS232ye sağ tıklayıp hangi portta olduğunu kontrol edin. Örneğin COM2'de olsun bir sonraki portu COM3 olarak seçelim (yani C#'a veri aktaracağımız port) add pair butonuna bastığınızda hazır olmuş olacak.

Eğer gerçek hayatta denemek isterseniz bu programa gerek kalmıyor zaten tek ihtiyacınız rs232' yi usbye dönüştüren yada Prolific PL2303 USB-TTL almanız gerekiyor. rs 232 çok kullanılmadığı için ve bağlantısı kolay olduğu için usb ttl dönüştürücü almanızda fayda var. Bide bu aygıtları kullanırken hangi portta olduğunu aygıt yöneticisinden kontrol etmeyi unutmayın. Örneğin sizin portunuz COM3 de ama siz programda COM5 yazarsanız çalışmaz.

C# kodları
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
SerialPort picport = new SerialPort("COM5", 9600, Parity.None, 8, StopBits.One);

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)

{

}

private void timer1_Tick(object sender, EventArgs e)
{

label4.Text = picport.ReadExisting();

}

private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
picport.Open();
}

private void button2_Click(object sender, EventArgs e)
{
picport.Close();
}



}

}


Pic kodlarını xc8 formatında (eski adıyla hitech) yazdım.

#include <xc.h>
#include <pic16f877a.h>
#define _XTAL_FREQ 4000000
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = ON
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF

char UART_Init(const long int);
void UART_Write(char);
void UART_Write_Text(char*text);
void UART_numara(unsigned int num);

void main(void)
{
int digital=0;

ADCON0bits.ADCS0=0; // analog saat kaynak seçimi
ADCON0bits.ADCS1=1; // FOSC/8
ADCON1bits.ADCS2=0; //
ADCON0bits.ADON=1; // A/D on biti
ADCON1bits.PCFG0 =0; //Analog Digital konfigürasyon kontrol bitleri
ADCON1bits.PCFG1 =0; //Tüm analog pinler açıldı
ADCON1bits.PCFG2 =0;
ADCON1bits.PCFG3 =0;
ADCON1bits.ADFM =1; // Bitler sağa yaslandı
ADCON0bits.CHS2=0; // AN1 kanalı seçildi
ADCON0bits.CHS1=0;
ADCON0bits.CHS0=1;

UART_Init(9600);

while (1){

ADCON0bits.GO =1; // ADC Çevrimine başlandı
__delay_us(20);
while(ADCON0bits.GO_nDONE); //bitene kadar bekle

digital = ADRESH*256 + ADRESL;
digital = (digital/10)-25;
UART_numara(digital);
UART_Write_Text("mm");
UART_Write_Text("\n");
__delay_ms(200);

}
}

char UART_Init(const long int baudrate)
{
unsigned int x;

x = (_XTAL_FREQ - baudrate*16)/(baudrate*16); // Yüksek baudrate ayarı SPBRG için
BRGH = 1; //Yüksek baudrate ayarı seçildi

if(x<256)
{
SPBRG = x;
SYNC = 0; //Setting Asynchronous Mode, ie UART
SPEN = 1; //Seri portu açma
TRISC7 = 1; //TRISC7 portları ayarlandı
TRISC6 = 1; //TRISC6
CREN = 1; //Sürekli veri alma
TXEN = 1; //Göndermeyi aktif etme
return 1;
}
return 0;
}

void UART_Write(char data)
{
while(!TRMT); // veri gelene kadar bekle 1 olduğunda veri yollar
TXREG = data; // Gönderme bitine veriler aktarıldı
}

void UART_Write_Text(char *text)
{
int i;
for(i=0;text[i]!='\0';i++)
UART_Write(text[i]);
}

void UART_numara(unsigned int num)
{

UART_Write((num/10000)+0x30);
num=num%10000;

UART_Write((num/1000)+0x30);
num=num%1000;

UART_Write((num/100)+0x30);
num=num%100;

UART_Write((num/10)+0x30);

UART_Write((num%10)+0x30);
}


< Resime gitmek için tıklayın >< Resime gitmek için tıklayın >

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.