Şimdi Ara

Sanal seri port üzerinden PIC16F877A ile C# haberleşmesi

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
1
Cevap
0
Favori
901
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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);
    }


    Sanal seri port üzerinden  PIC16F877A ile C# haberleşmesiSanal seri port üzerinden  PIC16F877A ile C# haberleşmesi







  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.