Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual Basic .NET => Konuyu başlatan: kudretuzuner - 06 Aralık 2010, 00:42:05

Başlık: seri porttan (tx) data yollamak
Gönderen: kudretuzuner - 06 Aralık 2010, 00:42:05
Merhaba
Uzun bir süredir (1 yıla yakın) PIC ile uğraşmaktayım.Sanal olarak ta belli bir yere kadar geldiğimi zannediyorum.
Şimdi sıra PC'den PIC'e fiziksel olarak (tx) seri portu kullanarak PIC'e bir data yollamak istiyorum.VB.Net 2008 express edition kullanmaktayım.seriportun ayarlarını form üzerinde yapıyorum.Sorum şöyle olacak form içine koyduğum textbox1 içine yazdığım "1" değerini (ASCII  Hex31) seriport (tx) pininden çıkarmak için buton klik içine nasıl bir kod yazmalıyım?Şimdiden teşekkür ederim.
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: RcALTIN - 06 Aralık 2010, 02:15:10
Alıntı yapılan: kudretuzuner - 06 Aralık 2010, 00:42:05
Merhaba
Uzun bir süredir (1 yıla yakın) PIC ile uğraşmaktayım.Sanal olarak ta belli bir yere kadar geldiğimi zannediyorum.
Şimdi sıra PC'den PIC'e fiziksel olarak (tx) seri portu kullanarak PIC'e bir data yollamak istiyorum.VB.Net 2008 express edition kullanmaktayım.seriportun ayarlarını form üzerinde yapıyorum.Sorum şöyle olacak form içine koyduğum textbox1 içine yazdığım "1" değerini (ASCII  Hex31) seriport (tx) pininden çıkarmak için buton klik içine nasıl bir kod yazmalıyım?Şimdiden teşekkür ederim.

Öncelikle SerialPort nesnesini araştırın... Liseden beri VB yüzü görmedim, mantıksal olarak yaklaşırsak önce nesneyi configure edip(port, baudrate, databits v.s) açmalı(nesne.Open()) ardından da button click içinde textboxtaki bilgiyi hali hazırda açık olan seriport nesnemizin nesne.WriteLine(textBox.Text) metoduyla yazdırmamız gerekir. Geleni alma işlemi nesnemizin DataReceived olayı(event) içerisinde string s = nesne.ReadLine() şeklinde oluyor, biraz araştırın basit olduğunu göreceksiniz...
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: kudretuzuner - 09 Aralık 2010, 22:46:12
Merhaba
Aşağıdaki bu yazılım ile PC'nin Seriport TX çıkışını RX girişine vererek(kısa devre)yaparsak  text boxtan girilen data "GÖNDER"e bastıktan sonra mesaj boxta görebilir miyiz?Yanlış bir komut ile seriporta zarar vermek istemiyorum.Teşekkürler.

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'BAĞLAN
        SerialPort1.PortName = ComboBox1.Text
        SerialPort1.Open()
        Button1.Enabled = False
        Button3.Enabled = True
        Button2.Enabled = True
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'GÖNDER
        SerialPort1.Write(TextBox1.Text)
    End Sub
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        'BAĞLANTIYI KES
        SerialPort1.Close()
        Button1.Enabled = True
        Button3.Enabled = False
        Button2.Enabled = False
    End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ComboBox1.Text = "COM1"
        Button3.Enabled = False
        Button2.Enabled = False
    End Sub
    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
         'DATA ALINMASI
        Dim gelen_data As String = SerialPort1.ReadLine
        MsgBox(gelen_data)
    End Sub
End Class
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: justice_for_all - 09 Aralık 2010, 23:01:20
hocam bana kalirsa siz isinizi yazilimla halledin...

Eltima.Software.Virtual.Serial.Port.Driver programi var onu indirin daha sonra bi cift virtual seri port olusturun daha sonra hyper terminalden gorebilirsiniz gonderdiginiz datayi...

ama sizin programinizda bi sorun yok egerki seri portunuz pice bagliysa picin tx ve rx uclarini kisadevre yapsaniz bile olur...
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: kudretuzuner - 09 Aralık 2010, 23:31:34
Merhaba
Ben adım adım gideyim diyorum.Bu kod iş görürse araya MAX232 yi bağlayacağım ve Max232'den PC'ye döneceğim.Onu da halledersem MAX232'yi PIC'e girip PIC'te ASCII kodu'nu görmek istiyorum.Teşekkürler
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: justice_for_all - 09 Aralık 2010, 23:36:33
is gorur hocam yalniz BAUDRATE hizini ayarlamamissiniz sanirim oda etki yapabilir.

unutmayin sakin.

Iyi calismalar.
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: kudretuzuner - 09 Aralık 2010, 23:54:19
VB.Net'te projeyi tasarladım ve de özellikler bölümünden onları ayarladım.Çok Teşekkür ederim.
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: justice_for_all - 09 Aralık 2010, 23:59:24
anladim baudrate sabit diyosunuz yani...
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: kudretuzuner - 16 Aralık 2010, 12:42:05
Merhaba
Arkadaşlar basit bir VB Net ara yüz ile seri iletişim için demo yaptım.Prensip tasarımıdır.Dosya içindeki notta da yazdığım gibi framework2 yüklü olmalı ve de PC'nizde seri port bulunmalı ki program çalışsın.Tabii dir ki
PC kasasındaki seri port pinlerinden 2 ve 3 nolu pinlerin kısa devre edilmesi gerekir.RX+TX birleştirilmeli.(dikkatli bir şekilde kısa devre yapılmalı)Burada dikkat edilecek en önemli nokta 2 ve 3 nolu pinlerin PC kapalı iken kısa devre edilmesi.Diğer pinlere temas olmaması gerekir,emin olduktan sonra PC'nizi açabilirsiniz. Kolay gelsin.
http://www.4shared.com/file/nYu44nDx/USART_DEMO.html
Başlık: uygulama sorunu
Gönderen: Ali_54 - 12 Haziran 2011, 13:36:48
slm. Yukarıdaki kodlardan da esinlenerek pcb bastım. max232 li 16f877 li. usb seri dönüştürücü kullanarak pc ye bağladım. vb den de basit bi arayüz yazdım. ve pratik olarak denedim. sonuç:
     iletişim var ama pc ile pic sanki farkı dillerde konuşuyorlar. yani pc den mesela 2 sayısını yolluyorum lcd de pi sayısı yazıyor. vessayre
     pic ten pc ye metin yolluyorum.  türkçe bişiler pc de ise       ???3^3hb!'^^)/rgj   gibi saçma sapan ifedeler olarak çıkıyor.  bu sorunu günlerce uğraştım araştırdım ama çozemedim. bilgisi olan var mı??
     bir de benzer bişey şurda olmuştu proteuste seri iletişimi denerken advenced ayarlarından rx tx polariy kısmını inverted değilde normal olarak ayarlıysa virtual terminalde yazılar yine böyle saçma sapan çıkıyodu. ama inverted yapınca düzeeliyordu..  peki gerçekte nasıl olacak ki bu??     vb de iletişim ayarlarını serial port nesnesinin proterpies kısmında ayarlı. 9600 hızı. parity yok, stop 1 falan. ccs c de de böyle
vb  kodları kabaca şöyle:

Public Class Form1
    Dim s As String

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ComboBox1.Items.Add("COM1")
        ComboBox1.Items.Add("COM2")
        ComboBox1.Items.Add("COM3")
        ComboBox1.Items.Add("COM4")
        ComboBox1.Items.Add("COM5")
        ComboBox1.Items.Add("COM6")
        ComboBox1.Items.Add("COM7")
        ComboBox1.Items.Add("COM8")
        ComboBox1.Items.Add("COM9")
        ComboBox1.Items.Add("COM10")
        ComboBox1.Items.Add("COM11")
        ComboBox1.Items.Add("COM12")

    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        SerialPort1.WriteLine(TextBox1.Text)

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        s = SerialPort1.ReadLine()
    End Sub
    Private Sub serialport1_datareceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        s = SerialPort1.ReadLine()
        TextBox2.Text = s
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

        SerialPort1.Close()
        SerialPort1.PortName = ComboBox1.Text
        SerialPort1.Open()

    End Sub
End Class
(https://www.picproje.org/C:%5CUsers%5CAlirem%5CDesktop%5CEkran%20Al%C4%B1nt%C4%B1s%C4%B1.PNG)
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: kudretuzuner - 12 Haziran 2011, 20:02:04
Merhaba
USB to serial ara kablolu dönüştürücü ile ben de netice alamamıştım.Direk seri portu kullanmanızı öneririm.
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: Ali_54 - 13 Haziran 2011, 15:14:44
seri port girişli pc yok malesef. laptoptan mecbur dönüştürücü kullandım.  serisi olan bi masa üstünde denerim o halde yakında. ama bu işi leptoptan çözmeliyim.
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: smyomekatronik - 13 Haziran 2011, 23:13:41
Esselamu Aleyküm

Benzer bir sorunu, s7-200 için yapmış olduğum devreyi usb çevirici ile kullanırken yaşadım. Kullandığım programda hız ayarı 9600 fakat aygıt yöneticinden çeviricinin özelliklerini kontrol ettiğim zaman bu hızın farklı olduğunu gördüm. Hızı 9600 olarak ayarladığımda sorun çözülmüş oldu.
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: Ali_54 - 15 Haziran 2011, 10:10:18
Ve Aleykimselam. hyper terminaldende denedim seri portlu bir pc bulupta olmadı. çok gitmedim gerçi üstüne. agıt yöneticisnde basettiğiniz hız ayarı yerini bulamadım. iletişim hallolsa çağ atlamış olurum  :)(//)f
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: vitruvius - 15 Haziran 2011, 11:31:14
Alıntı yapılan: Ali_54 - 15 Haziran 2011, 10:10:18
Ve Aleykimselam. hyper terminaldende denedim seri portlu bir pc bulupta olmadı. çok gitmedim gerçi üstüne. agıt yöneticisnde basettiğiniz hız ayarı yerini bulamadım. iletişim hallolsa çağ atlamış olurum  :)()f

USB-Rs232 çeviriciniz Prolific entegreli mi ve Windows 7 mi kullanıyorsunuz? Çevirici cihazınızı bilgisayara taktığınızda aygıt yöneticisinde "Bağlantı Noktaları(COM veLTP)" başlığının altına "USB Serial Port(COMX)" olarak düşer. Çift tıklarsanız Port Settings/Gelişmiş Ayarlar gibi kısımda ilgili ayarları görürsünüz.

Laptopta simulasyon yaparken sanal port oluşturan programları kullanın. Aşağıdaki linkten indirebilirsiniz.

https://rapidshare.com/files/4142764373/Virtual_Seri_Port.zip (https://rapidshare.com/files/4142764373/Virtual_Seri_Port.zip)
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: Ali_54 - 15 Haziran 2011, 11:58:07
dönüştürücüm sanırım ftd232 işlemcili.
http://www.direnc.net/main/usb__rs232_cevirici__9_pin_erkek_-9881-0-575.html (http://www.direnc.net/main/usb__rs232_cevirici__9_pin_erkek_-9881-0-575.html)    dan almıştım. win 7 kullanıyorum.
Configure Virtual Serial Port Driver diye bi sanal port programı var bende. onunla comları sanal olarak bağlayabiliyordum. gerçek uygulamada sıkıntı oldu. aygıt yöneticide fiziksel coma (usbye) birşey bağlı iken görünüyor. dönüştürücüyü takmadan sanal comların üzerinde aramıştım o ayarları bulamamıştım. yani gerçek aygıtta bu ayarlar çıkıyo anladığım. dönüştürücüyü takıpta denemeliyim sanırım. bulur bulmaz deneyeceğim bugün. yanıtlarınız için teşekkür ederim  :)
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: vitruvius - 15 Haziran 2011, 12:58:28
Alıntı yapılan: Ali_54 - 15 Haziran 2011, 11:58:07
dönüştürücüm sanırım ftd232 işlemcili.
http://www.direnc.net/main/usb__rs232_cevirici__9_pin_erkek_-9881-0-575.html (http://www.direnc.net/main/usb__rs232_cevirici__9_pin_erkek_-9881-0-575.html)    dan almıştım. win 7 kullanıyorum.
Configure Virtual Serial Port Driver diye bi sanal port programı var bende. onunla comları sanal olarak bağlayabiliyordum. gerçek uygulamada sıkıntı oldu. aygıt yöneticide fiziksel coma (usbye) birşey bağlı iken görünüyor. dönüştürücüyü takmadan sanal comların üzerinde aramıştım o ayarları bulamamıştım. yani gerçek aygıtta bu ayarlar çıkıyo anladığım. dönüştürücüyü takıpta denemeliyim sanırım. bulur bulmaz deneyeceğim bugün. yanıtlarınız için teşekkür ederim  :)

Genelleyebilir miyiz bilmiyorum ama FTDI ürünleri siyah ve biraz daha pahalı oluyor.. Ben böyle gözlemledim  :) Bendeki de öyle, elinizdeki de internetten baktığımda Prolific ürünü gibi duruyor. Aygıt yöneticisinden Sürücü-Sürücü Sağlayacı kısmından bakarsanız firmayı görürsünüz. Bunu soruyorum çünkü ben de win7/64 bit kullanıyorum. Prolific entegreli dönüştürücüler hem driver yüklerken sorun çıkartıyor, bazen yüklüyor bazen yüklemiyor. Düzgün yüklese bile veri alışverişi yapamıyorum. FTDI entegreli dönüştürücümde henüz bir sorunla karşılaşmadım.

Evet gerçek aygıtta çıkar o ayarlar. CCS C kodlarınız nasıl?
Başlık: Ynt: seri porttan (tx) data yollamak
Gönderen: Ali_54 - 15 Haziran 2011, 14:50:07
sürücü sağlayıcısı WCH  yazıyor. bilmiyorum bu firmayi.
dönüştürücüyü takıp gelen com dan yöneticideki iletişim ayarlarına baktım. sorun yok orda. orası da aynı: 9600 veri 8 bit eşlik yok, stop 1
kodları bi kitaptan esinlendim biraz değiştirdim.
hataları azaltmak için yine com - özellikler - gelişmişten arabelleği küçülttüm. bakalım deniyoruz. sonucu yazacağım.  ccs c ise:

#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#define use_portb_lcd TRUE   // LCD B portuna bağlı

#include <lcd420.c> 
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)                                                                   // TX,RX uçlarının hangi pinler olacağını tanımlıyor
                                                                 
int i,a=8;
char   klavye[];  // klavye isminde 80 üyeli bir dizi tanımlanıyor

#int_rda   // RX ucuna veri gelince meydane gelen kesme
void serihaberlesme_kesmesi ()
{
    printf(lcd_putc,"\f-KESME-");
   klavye=getc(); // String ifadeyi al ve "klavye" adlı dizi değişkenine aktar.
  printf(lcd_putc,"\fYazdiginiz Metin:\ns = %s.",klavye);
    DELAY_MS(200);
  disable_interrupts(int_rda); // int_rda kesmesini pasif yap
}

/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);       
   setup_spi(SPI_SS_DISABLED);     
   setup_timer_1(T1_DISABLED);     
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS);   
   setup_adc(ADC_OFF);           
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

 
   lcd_init();   // LCD'yi hazırla
klavye="ali";
  printf(lcd_putc,"\fSelam genclik");
  delay_ms(300);
  klavye="projem";
   printf(lcd_putc,"\nklavye :%s",klavye);
   delay_ms(400);
  enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin ver
  for(i=1;i<5;i++)
  { output_toggle(pin_e2);
      delay_ms(100);}
   while(1) // Sonsuz döngü
   {
     
      output_toggle(pin_e0);
      delay_ms(50);
       output_toggle(pin_e1);
       delay_ms(50);
            output_toggle(pin_b5);
       delay_ms(50);
       printf(lcd_putc,"\fKESME BEKLENIYOR...");
        delay_ms(60);
         enable_interrupts(int_rda); // int_rda kesmesi aktif
       
        printf("2");
        putchar(a);
   }
}