Vb 2010 kullanırken seri iletişimde veri aktarma problemi yaşıyorum

Başlatan yldzelektronik, 27 Nisan 2012, 15:20:34

yldzelektronik

İyi çalışmalar.Visual basic 2010 kullanıyorum.Seri port ile led tabele kontrolü gerçekleştirmek istiyorum.Yazdığım kodların pc tarafında sorun yok.Sadece pic karta veri aktarırken sorun yaşıyorum.Ledleri açıp kapatmak için "a1","a0" gibi kodlar gönderiyorum.Ancak bunun seri porttan çıkarken ascii kodlar şeklinde çıktığını okumuştum.Ben pic tarafında veriyi alırken hex şeklinde okumak istiyorum ama nasıl yapacağımı bilmiyorum.Veri vb tarafında nasıl göndermeliyim bilmiyorum.Yardımcı olabilir misiniz?Kod örnekleri c# ta olması da sorun değil.Yeterki olayı biri açıklasın.Teşekkürler.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

kudretuzuner

Merhaba
Aşağıdaki dosyada tüm bilgiler var.Anlaşılmayan yer olursa yazın lütfen.Not,dosyaların hepsini C:\   'ye indirin,VB kodlar ona göre derlenmiştir.Kolay gelsin.
https://rapidshare.com/files/3196736720/yldzelektronik.rar
Amatör

yldzelektronik

Öncelikle ilginiz için teşekkür ederim.Yardımınız ve hassasiyetiniz içinde ayrıca teşekkür ederim.(Klasör ismindeki jest cabası...).Hocam şimdi 1 verisinin hex kodu 0x31 ancak siz asmdeki kodunuzda bunu nerede sorguluyorsunuz ben o satırları göremedim?Birde ben aynı yapıda program yazdım ccs c de ancak lcd saçma karakterler aldım.Veriyi alan değişkenimi char[] yaptım olmadı char yaptım olmadı int olmadı unsigned int yaptım olmadı..Pic tarafında sanırım sorunum yada donanımsal bir problem var.Aslında benim anlamadığım veri seri porttan çıkarken karkter olarak mı ascii olarak mı nasıl çıkar ve karşıda gelen veriyi nasıl soorgulamalıyız?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

kudretuzuner

Merhaba
Seri iletişimde PC'den gelen hex datasının ne olduğu önemli değil.PC ne yolluyorsa onu alıyor.Aşağıdaki kod ile de RCREG değerini "W" geçici değişkenine atıyor return ile "MOVWF PORTA"nın üst satırına atlıyor(return dönüşü dolayısı ile)ve de "W" değişkeni PORTA'ya verilip gösteriliyor.Özetle sizin PC'den gönderdiğiniz hex ne olursa olsun PIC'te ASCII kodun ilk dört bitini görebilirsiniz.Arzu ederseniz,gerekli konfigürasyonları yaparak da diğer üst dört bit için örneğin PORTB nin pinlerinde göstermeniz olasıdır.Yanlız burada işin bir "püf"noktası sizin PC'den yolladığınız hex kodunu işlemek veya portlardaki data ile karşılaştırıp işlem yapabilmeniz için yazılımda değişiklik yapmak gerekir.O zaman gelen hex değerini XOR komutu ile karşılaştırmanız ve ona göre bir operasyon yapmanız gerekir.
VERI_AL
BTFSS PIR1,RCIF;  RCIF BAYRAĞI  (1) Mİ?
GOTO VERI_AL
BCF PIR1,RCIF;---ÇOK ÖNEMLİ  KODDDD
MOVF RCREG,W
RETURN
Amatör

yldzelektronik

#include <16F877A.H>
#fuses HS, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
#use delay(clock=20000000) 
#use rs232(baud=2400,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1)
#include <exlcd.c>

char gelen=0;     //burayı ilk etapta gelen[]; şeklinde yapmıştım.

void main()
{
   lcd_init();delay_ms(250);
   while (true)
   {
   
   
   printf(lcd_putc,"Gelen:\n%x",gelen);  //bu kısımda %x değilde %s ve %c şeklinde denedim.gerçi x  de denedim.

   gelen=getc();
   }
}


sorunum ise arayüzden gönderdiğim a1 verisini hex fe yada benzeri şekilde alıyorum.string göstersemde aynı karakterleri alıyorum.Değişen birşey olmuyor yani...Ancak sorunumun ne olduğunu bilmiyorum.Acaba invert ile alakalı olabilir mi?Yazılımla invert nasıl yapılır?Veriyi gönderirken tektek mi göndermeliyim yoksa string de gönderebilirmiyim?Birde pc tarafıda veri gönderimi sonlandığında nasıl bildiriliyor?Yani pic tarafında printf("selam \r"); şeklinde yaptığımızı pcde nasıl yapıyoruz?


Bunlar benim nette yada forumda arayıp cevap bulamadığım sorular.Gözümden kaçmış olabilir.Kaynak belirtmenizde yeterli.Teşekkürler.!
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

yldzelektronik

İyi çalışmalar.Tekrar başlık açmak istemedim.Burada belirttiğim sorunumu aştım.Ancak şimdiki sorunum porttan veri dinleme.Porttan sağlıklı bir şekilde veri dinleyemiyorum.

    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        okunan = SerialPort1.ReadLine
        textbox1.Text = okunan
    End Sub



Bu kodlarla text box içinde ilk başta gönderdiğim veriyi görüyorum ancak hemen program çöktüğüne dair hata mesajı alıyorum.Şu windowsun hata mesajı gönderilsin mi uyarısını alıyorum.:



Sağlıklı bir şekilde nasıl veriyi dinleyebilirim?Teşekkürler.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

fgokcegoz

Data Received olayı, seri port tan herhangi bir data geldiğinde oluşan kesmedir. ReadLine komutu ise, '\n' yani 0x0A hexadecimal değeri gelene kadar portu dinler. Senin yazdığın kodlara göre, ilk data geldiği anda olay oluşuyor ve kesmeye gidiyor. Ve kesme içerisinde '\n' gelmesini bekliyor... Burada mantık hatası var. Çünkü kesme içerisinde \n gelmesini beklerken, yeni data geliyor ve tekrar olay oluşuyor. Kesmeye gitmesi gerekirken, hala bir önce gelen data nedeniyle girdiği kesmeden çıkamadığı için hata veriyor... ReadLine komutu yerine, alternatif metodlar mevcut. Onları kullanabilirsin. ReadByte, ReadChar gibi.
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

yldzelektronik

Bu cevabınız hemen bir ışık yanmasına neden oldu ve pic tarafında printf("%s\n",göndermek istediğim veri); şeklinde kodumu değiştirince sorun düzeldi.Teşekkürler.Şimdi son aşamadayım.Formun boyutlarını değiştirmek istiyorum ancak msdn.com da verilen örnek kodlar bende çalışmıyor.Form1 sub altında yapıyorum olmuyor.Buton olayları içinde de olmuyor.Form1 bunu referans alamaz me kullanın gibi bişey diyordu.Acaba bu konuda yardım edebilirmisiniz?Teşekkürler.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

fgokcegoz

Formun boyutlarını değiştirmek istiyorsanız, üzerinde çalıştığınız formun köşesinden tutup istediğiniz boyuta getirebilirsiniz. Kod içerisine birşey eklemenize gerek yok. Formun boyutlarınada özellikler penceresinden bakıp manuel olarakta girebilirsiniz. Max. ve Min. boyutlarını belirleyebilirsiniz.
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

yldzelektronik

Ben programın içinde yani programım çalışırken değiştirmek istiyorum.Boyutları seri porttan aldığım verilere değiştirmek istiyorum.Acaba mümkün mü?Aslında en çok anlam veremediğim şey msdn de yayınlanan kodların neden çalışmadığı.

form1.size= new system.drawing.size (300,200) satırını form1 olayına yada herhangi  bir yere yazıyorum ama
serialio.form1 cannot refer to itsel through its default instance; use 'Me' instead.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

yldzelektronik

Var mı ilgilenebilecek arkadaş?Microsoftun yayınladığı kodları da denedim ancak bir problem var ve ne tür bir problem olduğunu bilmiyorum.Yapmak istediğim şey formun boyutlarını program çalışırken değiştirebilmek.Örneğin 3 buton olsun ve buton 1 genişliği arttırsın buton iki yüksekliği arttırsın.buton 3 default ayarları yüklesin.Yardımcı olursanız sevinirim.İyi çalışmalar.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.


yldzelektronik

@the_gariban ilgine teşekkürler ama ben bunu daha evvel denedim ve çalışıyor.Yine denedim yine çalışmıyor.Anlamıyorum.Sorun nedir?Burdaki kodlarla hata almıyorum ama formum standart büyüklükte geliyor.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

The Gariban

Visual Basic i çok iyi bilmiyorum ama bildiğim kadarı ile form load olayındaki seçeneklerinde ekranın ortasında başla ,vb gibi seçenekler vardı.Belki o ayarları değiştirmeniz gerekiyordur.

yldzelektronik

yeni proje açıp denedim onda oluyo istediğim gibi ancak benim eski çalışmada olmuyor.anlamıyorum nedenini.hata falanda vermiyor.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.