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.
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...
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
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...
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
is gorur hocam yalniz BAUDRATE hizini ayarlamamissiniz sanirim oda etki yapabilir.
unutmayin sakin.
Iyi calismalar.
VB.Net'te projeyi tasarladım ve de özellikler bölümünden onları ayarladım.Çok Teşekkür ederim.
anladim baudrate sabit diyosunuz yani...
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
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)
Merhaba
USB to serial ara kablolu dönüştürücü ile ben de netice alamamıştım.Direk seri portu kullanmanızı öneririm.
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.
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.
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
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)
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 :)
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?
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);
}
}