USB'den 18F4550'e bilgi gönderme

Başlatan cengav4r, 26 Ağustos 2014, 15:57:14

cengav4r

merhabalar,
USB'den 18F4550'ye packet bilgisi göndermeye çalışıyorum. Şu anlık çalıştıramadım. Nerde hata yaptığımı da anlayamadım. C# Timer ile ilgili hata veriyor. İlgili hata "usbHidPort1.SpecifiedDevice.SendData(my_buffer);" satırı ile. USBLibrary kullanılarak c# üzerinden pic'e packet bilgisi nasıl gönderebilirim?
Çalıştığım kaynak;
http://webcache.googleusercontent.com/search?q=cache:gJhYIIsUXfUJ:www.emreerol.net/usb-ile-18f4550-port-kontrol/+&cd=1&hl=tr&ct=clnk&gl=tr


CCS KODLARI
#include <18F4550.h>
#device ADC=10
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOBROWNOUT

#use delay(clock=48000000)

#define USB_HID_DEVICE     TRUE
#define USB_EP1_TX_ENABLE  USB_ENABLE_INTERRUPT
#define USB_EP1_RX_ENABLE  USB_ENABLE_INTERRUPT
#define USB_EP1_TX_SIZE    64
#define USB_EP1_RX_SIZE    64

#include 
#include
#include
#define UcNokta1       1

void main()
{

   unsigned int8 Paket[64];

   usb_init();
   usb_task();
   usb_wait_for_enumeration();

   while (1)
   {
      while(usb_enumerated())
      {

         if (usb_kbhit(1))
         {
            usb_get_packet(UcNokta1, Paket, 64);
            output_a(Paket[2]);
            output_b(Paket[3]);
            //output_c(Paket[4]);
            output_d(Paket[5]);
            output_e(Paket[6]);
         }

      }

   }

}


C# Port Class Kodları

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace UsbKontrol
{
    class Port
    {

        public int Index ;
        PictureBox[] Ledler = new PictureBox[8];
        ImageList Img = new ImageList();
        public bool[] Cıkıslar = new bool[8];

        public Port(PictureBox[] ledler, ImageList img,int index)
        {
            Ledler = ledler;
            Img = img;
            Index = index;
        }

        public byte PortSet(int index)
        {
            Ledler[index].Image = Img.Images[1];
            Cıkıslar[index] = true;
            return ConvertToByte(Cıkıslar);
        }
        public byte Clear()
        {
            for (int i = 0; i < Index; i++)
            {
                Ledler[i].Image = Img.Images[0];
                Cıkıslar[i] = false;
            }

            return ConvertToByte(Cıkıslar);
        }
        public byte ConvertToByte(bool[] bits)
        {

            byte b = 0;
            if (bits[0]) b++;
            if (bits[1]) b += 2;
            if (bits[2]) b += 4;
            if (bits[3]) b += 8;
            if (bits[4]) b += 16;
            if (bits[5]) b += 32;
            if (bits[6]) b += 64;
            if (bits[7]) b += 128;
            return b;
        }

    }
}


C# Main Kodları

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace UsbKontrol
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        bool State = false;

        byte[] my_buffer = new byte[65];
        //PortA için
        PictureBox[] ResimlerA = new PictureBox[8];
        Port PortA;
        //PortB için
        PictureBox[] ResimlerB = new PictureBox[8];
        Port PortB;

        //PortD için
        PictureBox[] ResimlerD = new PictureBox[8];
        Port PortD;

        //PortE için
        PictureBox[] ResimlerE = new PictureBox[8];
        Port PortE;

        private void Form1_Load(object sender, EventArgs e)
        {
            this.usbHidPort1.ProductId = short.Parse("1111", System.Globalization.NumberStyles.HexNumber);
            this.usbHidPort1.VendorId = short.Parse("1111", System.Globalization.NumberStyles.HexNumber);

            usbHidPort1.CheckDevicePresent();

            if (State)
            {
                toolStripStatusLabel1.Text = "Usb Bağlantısı kuruldu.";
                statusStrip1.ForeColor = Color.Green;
            }
            else
            {
                toolStripStatusLabel1.Text = "Bağlantı bekleniyor...";
            }
            //Port A için tanımlamalar
            ResimlerA[0] = a0;
            ResimlerA[1] = a1;
            ResimlerA[2] = a2;
            ResimlerA[3] = a3;
            ResimlerA[4] = a4;
            ResimlerA[5] = a5;

            PortA = new Port(ResimlerA, imgList,6);
            //Port B için tanımlamalar
            ResimlerB[0] = b0;
            ResimlerB[1] = b1;
            ResimlerB[2] = b2;
            ResimlerB[3] = b3;
            ResimlerB[4] = b4;
            ResimlerB[5] = b5;
            ResimlerB[6] = b6;
            ResimlerB[7] = b7;

            PortB = new Port(ResimlerB, imgList,8);

            //Port D için tanımlamalar
            ResimlerD[0] = d0;
            ResimlerD[1] = d1;
            ResimlerD[2] = d2;
            ResimlerD[3] = d3;
            ResimlerD[4] = d4;
            ResimlerD[5] = d5;
            ResimlerD[6] = d6;
            ResimlerD[7] = d7;

            PortD = new Port(ResimlerD, imgList,8);

            //Port E için tanımlamalar
            ResimlerE[0] = e0;
            ResimlerE[1] = e1;
            ResimlerE[2] = e2;

            PortE = new Port(ResimlerE, imgList, 3);
            //grupbax enable
            groupBox1.Enabled = false;
            groupBox2.Enabled = false;
            groupBox3.Enabled = false;
            groupBox4.Enabled = false;

        }

        private void usbHidPort1_OnDeviceArrived(object sender, EventArgs e)
        {
            toolStripStatusLabel1.Text = "Usb Bağlantısı kuruldu.";
            statusStrip1.ForeColor = Color.Green;
            State = true;
            timer1.Enabled = true;
            groupBox1.Enabled = true;
            groupBox2.Enabled = true;
            groupBox3.Enabled = true;
            groupBox4.Enabled = true;
        }

        private void usbHidPort1_OnDeviceRemoved(object sender, EventArgs e)
        {
            toolStripStatusLabel1.Text = "Bağlantı Kesildi.";
            statusStrip1.ForeColor = Color.Red;
            State = false;
            timer1.Stop();
            timer1.Enabled = false;
            groupBox1.Enabled = false;
            groupBox2.Enabled = false;
            groupBox3.Enabled = false;
            groupBox4.Enabled = false;
        }

        private void usbHidPort1_OnSpecifiedDeviceArrived(object sender, EventArgs e)
        {
            toolStripStatusLabel1.Text = "Usb Bağlantısı kuruldu.";
            statusStrip1.ForeColor = Color.Green;
            State = true;
            timer1.Enabled = true;
            groupBox1.Enabled = true;
            groupBox2.Enabled = true;
            groupBox3.Enabled = true;
            groupBox4.Enabled = true;
        }

        private void usbHidPort1_OnSpecifiedDeviceRemoved(object sender, EventArgs e)
        {
            toolStripStatusLabel1.Text = "Bağlantı Kesildi.";
            statusStrip1.ForeColor = Color.Red;
            State = false;
            timer1.Stop();
            timer1.Enabled = false;
            groupBox1.Enabled = false;
            groupBox2.Enabled = false;
            groupBox3.Enabled = false;
            groupBox4.Enabled = false;
        }
        protected override void OnHandleCreated(EventArgs e)
        {
            base.OnHandleCreated(e);
            usbHidPort1.RegisterHandle(Handle);
        }

        protected override void WndProc(ref Message m)
        {
            usbHidPort1.ParseMessages(ref m);
            base.WndProc(ref m);
        }

        private void a0_Click(object sender, EventArgs e)
        {
            my_buffer[3] = PortA.PortSet(0);

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            usbHidPort1.SpecifiedDevice.SendData(my_buffer);
        }

        private void a1_Click(object sender, EventArgs e)
        {
            my_buffer[3] = PortA.PortSet(1);

        }

        private void a2_Click(object sender, EventArgs e)
        {
            my_buffer[3] = PortA.PortSet(2);

        }

        private void a3_Click(object sender, EventArgs e)
        {
            my_buffer[3] = PortA.PortSet(3);
        }

        private void a4_Click(object sender, EventArgs e)
        {
            my_buffer[3] = PortA.PortSet(4);
        }

        private void a5_Click(object sender, EventArgs e)
        {
            my_buffer[3] = PortA.PortSet(5);
        }

        private void PortAClear_Click(object sender, EventArgs e)
        {
            my_buffer[3] = PortA.Clear();
        }

        private void b0_Click(object sender, EventArgs e)
        {
            my_buffer[4] = PortB.PortSet(0);

        }

        private void b1_Click(object sender, EventArgs e)
        {
            my_buffer[4] = PortB.PortSet(1);

        }

        private void b2_Click(object sender, EventArgs e)
        {
            my_buffer[4] = PortB.PortSet(2);

        }

        private void b3_Click(object sender, EventArgs e)
        {
            my_buffer[4] = PortB.PortSet(3);

        }

        private void b4_Click(object sender, EventArgs e)
        {
            my_buffer[4] = PortB.PortSet(4);
        }

        private void b5_Click(object sender, EventArgs e)
        {
            my_buffer[4] = PortB.PortSet(5);

        }

        private void b6_Click(object sender, EventArgs e)
        {
            my_buffer[4] = PortB.PortSet(6);

        }

        private void b7_Click(object sender, EventArgs e)
        {
            my_buffer[4] = PortB.PortSet(7);
        }

        private void pictureBox3_Click(object sender, EventArgs e)
        {
            my_buffer[4] = PortB.Clear();

        }

        private void d0_Click(object sender, EventArgs e)
        {
            my_buffer[6] = PortD.PortSet(0);

        }

        private void d1_Click(object sender, EventArgs e)
        {
            my_buffer[6] = PortD.PortSet(1);

        }

        private void d2_Click(object sender, EventArgs e)
        {
            my_buffer[6] = PortD.PortSet(2);

        }

        private void d3_Click(object sender, EventArgs e)
        {
            my_buffer[6] = PortD.PortSet(3);

        }

        private void d4_Click(object sender, EventArgs e)
        {
            my_buffer[6] = PortD.PortSet(4);

        }

        private void d5_Click(object sender, EventArgs e)
        {
            my_buffer[6] = PortD.PortSet(5);

        }

        private void d6_Click(object sender, EventArgs e)
        {
            my_buffer[6] = PortD.PortSet(6);

        }

        private void d7_Click(object sender, EventArgs e)
        {
            my_buffer[6] = PortD.PortSet(7);

        }

        private void pictureBox4_Click(object sender, EventArgs e)
        {
            my_buffer[6] = PortD.Clear();

        }

        private void e0_Click(object sender, EventArgs e)
        {
            my_buffer[7] = PortE.PortSet(0);
        }

        private void e1_Click(object sender, EventArgs e)
        {
            my_buffer[7] = PortE.PortSet(1);
        }

        private void e2_Click(object sender, EventArgs e)
        {
            my_buffer[7] = PortE.PortSet(2);
        }

        private void pictureBox5_Click(object sender, EventArgs e)
        {
            my_buffer[7] = PortE.Clear();
        }

    }
}

t2

Bir çok detay verilmiş fakat nasıl bir hata veriyor bu verilmemiş.

Belki de sorunu çözmeye yarayacak en önemli bilgi o verdiği hatadır.

baran123

C#kısmında biraz daha detay lazım gördüğüm kadarıyla using kısmına Usb dosyan include edlimemiş ? USB library mi kullanıyorsun ?

cengav4r

#3
Alıntı yapılan: t2 - 26 Ağustos 2014, 16:03:22
Bir çok detay verilmiş fakat nasıl bir hata veriyor bu verilmemiş.

Belki de sorunu çözmeye yarayacak en önemli bilgi o verdiği hatadır.

Hatanın verdiği kısım;
--Eğer visual studio üzeriden çalıştırılsa

Verdiği hata : Nesne başvurusu bir nesnenin örneğine ayarlanmadı.
private void timer1_Tick(object sender, EventArgs e)
        {
           usbHidPort1.SpecifiedDevice.SendData(my_buffer);
        }

--Eğer sadece exe dosyası çalıştırılsa

************** Özel Durum Metni **************
System.NullReferenceException: Nesne başvurusu bir nesnenin örneğine ayarlanmadı.
   konum: PortControlver0.Form1.timer1_Tick(Object sender, EventArgs e) C:\Users\user\...\PortControlver0\PortControlver0\Form1.cs içinde: satır 298
   konum: System.Windows.Forms.Timer.OnTick(EventArgs e)
   konum: System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
   konum: System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

298 satır Timer içindeki "usbHidPort1.SpecifiedDevice.SendData(my_buffer);" satırı.

Ayrıca C# cihaza doğru bir şekilde bağlanıyor. Ancak timer üzerinden (veya buton üzerinden) veri göndermeye kalktığımda program donuyor ve hata veriyor.

mesaj birleştirme:: 27 Ağustos 2014, 06:20:25

Alıntı yapılan: baranekrem9 - 26 Ağustos 2014, 16:12:52
C#kısmında biraz daha detay lazım gördüğüm kadarıyla using kısmına Usb dosyan include edlimemiş ? USB library mi kullanıyorsun ?

usbhidport için toolbox'dan ekledim.Refernce'da UsbLibrary var. Yine de başa using UsbLibrary; ekledim. Yine aynı hata ;(.


mesaj birleştirme:: 26 Ağustos 2014, 16:30:57

İlgili projenin dosyasını aşağıdaki linklerden indirebilirsiniz.

http://uploaded.net/file/8ogd5h75
http://fileserving.com/files/37YfMEfkyq/UsbKontrolProjesi_MultiUpload.biz.rar
http://fileserving.com/files/37YfMEfkyq/UsbKontrolProjesi_MultiUpload.biz.rar
http://rapidgator.net/file/9a5d0fbc877c9c2fb0d362fdd23f9db1/UsbKontrolProjesi_MultiUpload.biz.rar.html
http://netload.in/dateiMK1bqvJWZY.htm
http://www.firedrive.com/file/FD445341DC413FD3

baran123

#4
bende bir ara timer ile yaptım çok sorunlu oluyor zaten usb library içinde timer var mıymıymış neymiş araştırdığım sorduğum kadarıyla o yüzden gerek yok şu projeye bir bak işine yarayabilir

CCS C
#include <18F4550.h>
#device ADC=10
#fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,PLL1,CPUDIV1,VREGEN,NOPBADEN //4 MHZ
#use delay(clock=48000000)

#define USB_HID_DEVICE     TRUE             
#define USB_EP1_TX_ENABLE  USB_ENABLE_INTERRUPT  
#define USB_EP1_RX_ENABLE  USB_ENABLE_INTERRUPT    
#define USB_EP1_TX_SIZE    64                    //Ucnokta1 için maksimum alinacak ve gonderilecek
#define USB_EP1_RX_SIZE    64                    //veri boyutu (64 byte)

#include "flex_lcd.c"
#include <pic18_usb.h>     
#include <USB_Konfigurasyon.h>
#include <usb.c>    

#use fast_io(b)
#use fast_io(d)

#define use_portb_lcd true

#define UcNokta1       1 
#define kactane        gelen_paket[0]
#define isaret         gelen_paket[1]
#define kontrol        gelen_paket[2]
#define giden          giden_paket[3]

int8 x;
int8 gelen_paket[64];
int8 giden_paket[32];

void main(void)
{     
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);   
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_ccp1(CCP_OFF);     
   setup_vref(FALSE);
   setup_CCP1(CCP_OFF);        
   setup_CCP2(CCP_OFF);  
   
   set_tris_b(0x00);
   set_tris_d(0x00);
   output_b(0x00);
   output_d(0x00);
   
   lcd_init();
   usb_init();  
   usb_task();
   
   printf(lcd_putc,"USB BAGLANTISI");  //USB baglantisi kurulduysa LCD'de göster
   lcd_gotoxy(1,2);
   printf(lcd_putc,"KURULUYOR...");    //USB baglantisi kurulduysa LCD'de göster
   
   usb_wait_for_enumeration();         //Cihaz, hazir olana kadar bekle
   if(usb_enumerated())    
   lcd_gotoxy(1,1);
   printf(lcd_putc,"\fUSB BAGLANTISI");//USB bağlantisi kurulduysa LCD'de göster
   lcd_gotoxy(1,2);
   printf(lcd_putc,"KURULDU !");       //USB baglantisi kurulduysa LCD'de göster
     
   for (;;)
   {
      while(usb_enumerated())
      {
         if(usb_kbhit(1))             //Eger pc'den yeni bir paket geldiyse
         {         
            usb_get_packet(UcNokta1, gelen_paket, 64); //paketi oku  
            
            if(isaret == 'Q')
            {
               switch(kontrol)    // Paketin ilk elemanindaki komutu oku ve ilgili göreve git
               {
                  case 'a': 
                  printf(lcd_putc,"\fPROGRAM BAGLANDI !");//PC deki program baglandiginda LCD'ye yaziliyor...
                  break;
                  
                  case 'b':
                  printf(lcd_putc,"\fPROGRAM AYRILDI !");
                  break; 
                  
                  case 'c':
                  output_high(pin_b6);
                  printf(lcd_putc,"\fLED AKTIV !");
                  giden=1;
                  usb_put_packet(1, giden_paket, 64, USB_DTS_TOGGLE); // Geri veri gönderiliyor...
                  break; 
                  
                  case 'd':
                  output_low(pin_b6);
                  printf(lcd_putc,"\fLED PASIV !");
                  giden=0;
                  usb_put_packet(1, giden_paket, 64, USB_DTS_TOGGLE); // Geri veri gönderiliyor...
                  break;             
               }
           }
           
            if(isaret=='W')
            {
               lcd_gotoxy(1,1);
               printf(lcd_putc,"\f");
               for(x = 2; x <= kactane; x++) {printf(lcd_putc,"%c",gelen_paket[x]);}
            }
        
            if(isaret=='Y')
            {
               lcd_gotoxy(1,2);
               printf(lcd_putc,"\f");
               for(x = 2; x <= kactane; x++) {printf(lcd_putc,"%c",gelen_paket[x]);}
            }
            if(isaret=='Z') {printf(lcd_putc,"\f");}
         }
      }
   } 
}


C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
using USBManagement;
using System.Threading;
using System.Diagnostics;

namespace USB
{
    public partial class Main : Form
    {  
        UsbHidDevice my_hid = new UsbHidDevice();
        short VendorID = short.Parse("1111", NumberStyles.HexNumber);
        short ProductID = short.Parse("1111", NumberStyles.HexNumber);

        byte[] giden_buffer = new byte[64];
        byte[] gelen_buffer = new byte[64];
        
        public Main()
        {
            InitializeComponent();
            my_hid.DeviceStateChanged += new DeviceStateChangeEventHandler(OnChangeDeviceState);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            CheckForIllegalCrossThreadCalls = false;
        }
   
        private void btn_basla_Click(object sender, EventArgs e)
        {
            try
            {
                giden_buffer[1] = (byte)'Q';
                giden_buffer[2] = (byte)'a';

                if (!my_hid.IsOpen)
                {
                    if (my_hid.OpenPipe(VendorID, ProductID))
                    {
                        my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                        my_hid.DeviceArrived += new HidDeviceArrivedEventHandler(OnDeviceAttached);
                        my_hid.DeviceRemoved += new HidDeviceRemovedEventHandler(OnDeviceDetached);
                    }

                    else
                    {
                        label1.Text = "No Devices Found !";
                    }
                }
            }

            catch
            {
                return;
            }
        }
        public delegate void OkuHandler();
        private void btn_kapat_Click(object sender, EventArgs e)
        {
            try
            {
                if (my_hid.IsOpen)
                {
                    giden_buffer[1] = (byte)'Q';
                    giden_buffer[2] = (byte)'s';
                    my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                    my_hid.ClosePipe();
                }

                else
                {
                    label1.Text = "Disconnect !";
                }
            }

            catch
            {
                return;
            }
        }
        private void OnChangeDeviceState(object sender, DeviceStateChangeEventArgs e)
        {
            if (e.CurrentState == DeviceState.Opened)
            {
                label1.Text = "Connection Status: On";
            }
            else if (e.CurrentState == DeviceState.Closed)
            {
                label1.Text = "Connection Status: Off";
            }
            else if (e.CurrentState == DeviceState.Waiting)
            {
                label1.Text = "Connection Status: ...";
            }
            else if (e.CurrentState == DeviceState.Ready)
            {
                label1.Text = "Connection Status: ...";
            }
            else
            {
                label1.Text = "Device State Changed!! Curren State : None";
            }
        }
        private void OnDeviceAttached(object sender, EventArgs e)
        {
            bool Success;

            label1.Text = "Atached Device";
            Success = my_hid.OpenPipe(VendorID, ProductID);
            if (Success)
            {
                label1.Text = "Connected";
            }
        }
        private void OnDeviceDetached(object sender, EventArgs e)
        {
            label1.Text = "Detached Device";
            if (my_hid.IsOpen) my_hid.ClosePipe();

            label1.Text = "Device Disconnected";
            this.Text = "Device Waiting...";
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (my_hid.IsOpen)
            {
                label1.Text = "";
                giden_buffer[1] = (byte)'Q';
                giden_buffer[2] = (byte)'d';

                if (my_hid.IsWindowsXpOrLater)
                    my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                else
                    my_hid.WritePipe(giden_buffer, TransactionType.Control);

                if (my_hid.IsWindowsXpOrLater)
                    my_hid.ReadPipe(ref gelen_buffer, 64, TransactionType.Control);
                else
                    my_hid.ReadPipe(ref gelen_buffer, 64, TransactionType.Control);

                label1.Text = "Led = " + gelen_buffer[4].ToString();
            }

            else
            {
                label1.Text = "Disconnect !";
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            label1.Text = "";

            if (my_hid.IsOpen)
            {

                giden_buffer[1] = (byte)'Q';
                giden_buffer[2] = (byte)'c';

                if (my_hid.IsWindowsXpOrLater)
                    my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                else
                    my_hid.WritePipe(giden_buffer, TransactionType.Control);

                if (my_hid.IsWindowsXpOrLater)
                    my_hid.ReadPipe(ref gelen_buffer, 64, TransactionType.Interrupt);
                else
                    my_hid.ReadPipe(ref gelen_buffer, 64, TransactionType.Control);

                label1.Text = "Led = " + gelen_buffer[4].ToString();
            }

            else
            {
                label1.Text = "Disconnect !";
            }
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {

            if (my_hid.IsOpen)
            {
                giden_buffer[1] = (byte)'Q';
                giden_buffer[2] = (byte)'b';
                my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                my_hid.ClosePipe();
            }
        }
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {

            if (my_hid.IsOpen)
            {
                giden_buffer[1] = (byte)'Q';
                giden_buffer[2] = (byte)'s';
                my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                my_hid.ClosePipe();
            }
        }
        private void button4_Click(object sender, EventArgs e)
        {
            Environment.Exit(1);
        }
    }
}


NOT : pic 4 mhz kristale göre ayarlı vusb bacağınada 470nF unutma :) kolay gelsin yardımcı olabileceğim başka bir husu varsa elimden geleni yaparım.

mesaj birleştirme:: 27 Ağustos 2014, 06:46:51

buradada umng.dll var usbmanagement varya using kısmında ki o import edersin :)

http://dosya.co/t08sflmz0klm/library.rar.html

mesaj birleştirme:: 26 Ağustos 2014, 16:48:25

he usb konfigurasyon .h de burada unutkanlık işte :D  ;D

http://dosya.co/ypbptf1eflcn/library.rar.html 2 dosyada var burada

cengav4r

@baranekrem9 umng.dll'ye önceden bakmıştım. O veri göndermek için WritePipe kullanıyor. Ben UsbLibrary.dll kullanarak veri göndermek istiyorum. Oda usbHidPort1.SpecifiedDevice.SendData(my_buffer); kullanıyor ama ben kullanamadım.

mur@t

Alıntı yapılan: cengav4r - 26 Ağustos 2014, 18:26:53
@baranekrem9 umng.dll'ye önceden bakmıştım. O veri göndermek için WritePipe kullanıyor. Ben UsbLibrary.dll kullanarak veri göndermek istiyorum. Oda usbHidPort1.SpecifiedDevice.SendData(my_buffer); kullanıyor ama ben kullanamadım.

Timer içinde denemedim, size fikir verebilir belki...

http://skyblg.wordpress.com/2013/08/28/c-hid-usb-ornegi/

bybik

CCS nin usb kutuphanesinde buglar mevcut.Çalıştırsan bile stabil çalışmaz(Bir bilgisayarda çalışıp diğerinde calişmayabiliyor.Usb aygıtı tanımıya bilir.Veriler gelir gelmez.).Ama hi tech in usb  kutuphanesi mükemmel çalışıyor.Ve bu söylediğimin üstüne söz söyleyecek adam tanımam.Usb varsa ccs'den uzak dur.

t2

Son versiyonlarda düzeltilmiş olabilir mi?

cengav4r

tekrar merhabalar,
Sorunumu hala çözemedim, yeni bakan arkadaşlar varsa hem hatırlatma hem de bazı yeni sorularımı sormak istiyorum. PIC'den gelenpaket verisi C# tarafından alınmasına rağmen C#'dan herhangi bir data gönderemedim(usbLibrary.dll kullanarak).
1. olarak CCS C'de ve C# product ve vendor id aşağıdaki gibi tanımladım.   
//CCS C
0x11,0x11, //vendor id 
 0x11,0x11, //product id


//C#
  usbHidPort1.ProductId = Int32.Parse("1111", System.Globalization.NumberStyles.HexNumber);
            usbHidPort1.VendorId = Int32.Parse("1111", System.Globalization.NumberStyles.HexNumber);
            usbHidPort1.CheckDevicePresent();



Bana ilginç gelen C#'da bir textbox tanımladım ve acaba takılan cihaz benim cihazım(vendor ve product id' sine bakarak) mı değil mi diye. Bunun için aşağıdaki gibi sorgulama yaptım. Textbox yazılan ifadeye göre takılan cihaz benim cihaz değil. Ancak C#'a aktarılan veri benim cihazdan geliyor. Hatta CCS 'de vendor ve product id değiştirip denediğimde yine textbox benim cihazım olmadığını söylemesine rağmen C#'da akan veriler product ve vendor id'si değişmiş PIC'den geliyor.(Normal de C#, vendor ve product id'si değişmiş PIC'i hiç tanımaması gerekmez mi?)

//C# product ve vendor id sorulama
if (((usbHidPort1.ProductId == Int32.Parse("1111", System.Globalization.NumberStyles.HexNumber)) && (usbHidPort1.VendorId == Int32.Parse("1111", System.Globalization.NumberStyles.HexNumber))))
            {
                textBox3.Text = durum.ToString();
            }



2. olarak C#'dan button ile veri gönderme;

  //C#
private void button3_Click(object sender, EventArgs e)
        {
            byte[] my_buffer = new byte[32];
            my_buffer[1] = (byte)0x01;
            usbHidPort1.SpecifiedDevice.SendData(my_buffer);
        }


Şeklinde denediğimde C# usbHidPort1.SpecifiedDevice değerini null olarak hata veriyor.Product ve vendor id CCS C ve C#'de aynı olmasına rağmen. Bu sorunu nasıl çözebilirim?

Mucit23

#10
Aynı problemi yaşıyorum. UsbHidPort.dll kullanarak Pic18F4550'ye nasıl veri gönderebilirim. Veri almada problemim yok. Veri almada hangi sınıfı nasıl kullanacağımı bilmiyorum.

Aslında şuradaki örnekte veri göndermeyi göstermiş
http://www.codeforge.com/read/144385/Sniffer.cs__html

Böyle bir yapıyı bende programıma ekledim

            if (this.usbHidPort1.SpecifiedDevice != null)
            {
                this.usbHidPort1.SpecifiedDevice.DataSend(TransmitData);
            }

Ama DataSend kısmının altı kırmızı ile çizilerek aşağıdaki hatayı aldım.

Alıntı YapError   2   The event 'UsbLibrary.SpecifiedDevice.DataSend' can only appear on the left hand side of += or -=   C:\Users\My\Desktop\Test_Program\PC Program\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs   77   50   WindowsFormsApplication1

Ne demek istiyor olabilir? Hatayı nerde yapıyorum?
           

ziyaretci

#11
Alıntı yapılan: cengav4r - 26 Ağustos 2014, 16:14:50
Hatanın verdiği kısım;
--Eğer visual studio üzeriden çalıştırılsa

Verdiği hata : Nesne başvurusu bir nesnenin örneğine ayarlanmadı.
private void timer1_Tick(object sender, EventArgs e)
        {
           usbHidPort1.SpecifiedDevice.SendData(my_buffer);
        }

--Eğer sadece exe dosyası çalıştırılsa

************** Özel Durum Metni **************
System.NullReferenceException: Nesne başvurusu bir nesnenin örneğine ayarlanmadı.
   konum: PortControlver0.Form1.timer1_Tick(Object sender, EventArgs e) C:\Users\user\...\PortControlver0\PortControlver0\Form1.cs içinde: satır 298
   konum: System.Windows.Forms.Timer.OnTick(EventArgs e)
   konum: System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
   konum: System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

298 satır Timer içindeki "usbHidPort1.SpecifiedDevice.SendData(my_buffer);" satırı.

Ayrıca C# cihaza doğru bir şekilde bağlanıyor. Ancak timer üzerinden (veya buton üzerinden) veri göndermeye kalktığımda program donuyor ve hata veriyor.

mesaj birleştirme:: 27 Ağustos 2014, 06:20:25

usbhidport için toolbox'dan ekledim.Refernce'da UsbLibrary var. Yine de başa using UsbLibrary; ekledim. Yine aynı hata ;(.


mesaj birleştirme:: 26 Ağustos 2014, 16:30:57

İlgili projenin dosyasını aşağıdaki linklerden indirebilirsiniz.

http://uploaded.net/file/8ogd5h75
http://fileserving.com/files/37YfMEfkyq/UsbKontrolProjesi_MultiUpload.biz.rar
http://fileserving.com/files/37YfMEfkyq/UsbKontrolProjesi_MultiUpload.biz.rar
http://rapidgator.net/file/9a5d0fbc877c9c2fb0d362fdd23f9db1/UsbKontrolProjesi_MultiUpload.biz.rar.html
http://netload.in/dateiMK1bqvJWZY.htm
http://www.firedrive.com/file/FD445341DC413FD3

  Timer üzerinden veri göndermek için en önemli etken timer süresidir. USB donanım birimi sadece sizin göndermek istediğiniz veriyi göndermez. Yani siz herhangi bir veri gönderiminizde cihazınızı ve iletişim bilgilerini tanımlayan birden fazla paket gönderebilir.

  Eğer timer süreniz çok kısa ise usb hattı meşgul iken tekrar tekrar istek göndermenizde derleyici hata verebilir. Tabi bu doğrudan usb kütüphanesiyle alakalı bir durum. Timer içerisindeki veri gönderme fonksiyonunu try catch içine alıp hat meşgul gibi uyarı verebilirsiniz. Daha başka hata durumlarıda olabilir.
 
  Bilmiyorum indirilen kütüphanede olması lazımdır mutlaka; hat meşgul fonk.-veri hatalı gibi diğer fonksiyonlarında kullanılması gerekir.

Alıntı yapılan: cengav4r - 04 Eylül 2014, 12:27:09

2. olarak C#'dan button ile veri gönderme;

  //C#
private void button3_Click(object sender, EventArgs e)
        {
            byte[] my_buffer = new byte[32];
            my_buffer[1] = (byte)0x01;
            usbHidPort1.SpecifiedDevice.SendData(my_buffer);
        }


Şeklinde denediğimde C# usbHidPort1.SpecifiedDevice değerini null olarak hata veriyor.Product ve vendor id CCS C ve C#'de aynı olmasına rağmen. Bu sorunu nasıl çözebilirim?

  Hocam indirdiğiniz kütüphane 64byte'lık buffer kullanıyor olabilir. Sizde 32 byte' olarak tanımladığınızdan diğer 32 byte null durumuna düşebilir. Birde 64 byte'lık tampon kullanarak deneyin.

Mucit23

Bende verdiği hatayi çözebilen varmı.  Ben 64 byte lık buffer ile deniyorum.

ziyaretci

Alıntı yapılan: Mucit23 - 26 Mayıs 2015, 08:27:34
Bende verdiği hatayi çözebilen varmı.  Ben 64 byte lık buffer ile deniyorum.

Hocam UsbLibrary.dll kullanıyorsanız, şu tanımlamalar programınızda dahil mi diye kontrol edebilir misiniz?
   protected override void OnHandleCreated(EventArgs e)
        {
            base.OnHandleCreated(e);
            usbHidPort1.RegisterHandle(Handle);
        }

        protected override void WndProc(ref Message m)
        {
            usbHidPort1.ParseMessages(ref m);
            base.WndProc(ref m);
        }

Recep METE

Alıntı yapılan: Baran Ekrem - 26 Ağustos 2014, 16:45:07
bende bir ara timer ile yaptım çok sorunlu oluyor zaten usb library içinde timer var mıymıymış neymiş araştırdığım sorduğum kadarıyla o yüzden gerek yok şu projeye bir bak işine yarayabilir

CCS C
#include <18F4550.h>
#device ADC=10
#fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,PLL1,CPUDIV1,VREGEN,NOPBADEN //4 MHZ
#use delay(clock=48000000)

#define USB_HID_DEVICE     TRUE             
#define USB_EP1_TX_ENABLE  USB_ENABLE_INTERRUPT  
#define USB_EP1_RX_ENABLE  USB_ENABLE_INTERRUPT    
#define USB_EP1_TX_SIZE    64                    //Ucnokta1 için maksimum alinacak ve gonderilecek
#define USB_EP1_RX_SIZE    64                    //veri boyutu (64 byte)

#include "flex_lcd.c"
#include <pic18_usb.h>     
#include <USB_Konfigurasyon.h>
#include <usb.c>    

#use fast_io(b)
#use fast_io(d)

#define use_portb_lcd true

#define UcNokta1       1 
#define kactane        gelen_paket[0]
#define isaret         gelen_paket[1]
#define kontrol        gelen_paket[2]
#define giden          giden_paket[3]

int8 x;
int8 gelen_paket[64];
int8 giden_paket[32];

void main(void)
{     
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);   
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_ccp1(CCP_OFF);     
   setup_vref(FALSE);
   setup_CCP1(CCP_OFF);        
   setup_CCP2(CCP_OFF);  
   
   set_tris_b(0x00);
   set_tris_d(0x00);
   output_b(0x00);
   output_d(0x00);
   
   lcd_init();
   usb_init();  
   usb_task();
   
   printf(lcd_putc,"USB BAGLANTISI");  //USB baglantisi kurulduysa LCD'de göster
   lcd_gotoxy(1,2);
   printf(lcd_putc,"KURULUYOR...");    //USB baglantisi kurulduysa LCD'de göster
   
   usb_wait_for_enumeration();         //Cihaz, hazir olana kadar bekle
   if(usb_enumerated())    
   lcd_gotoxy(1,1);
   printf(lcd_putc,"\fUSB BAGLANTISI");//USB bağlantisi kurulduysa LCD'de göster
   lcd_gotoxy(1,2);
   printf(lcd_putc,"KURULDU !");       //USB baglantisi kurulduysa LCD'de göster
     
   for (;;)
   {
      while(usb_enumerated())
      {
         if(usb_kbhit(1))             //Eger pc'den yeni bir paket geldiyse
         {         
            usb_get_packet(UcNokta1, gelen_paket, 64); //paketi oku  
            
            if(isaret == 'Q')
            {
               switch(kontrol)    // Paketin ilk elemanindaki komutu oku ve ilgili göreve git
               {
                  case 'a': 
                  printf(lcd_putc,"\fPROGRAM BAGLANDI !");//PC deki program baglandiginda LCD'ye yaziliyor...
                  break;
                  
                  case 'b':
                  printf(lcd_putc,"\fPROGRAM AYRILDI !");
                  break; 
                  
                  case 'c':
                  output_high(pin_b6);
                  printf(lcd_putc,"\fLED AKTIV !");
                  giden=1;
                  usb_put_packet(1, giden_paket, 64, USB_DTS_TOGGLE); // Geri veri gönderiliyor...
                  break; 
                  
                  case 'd':
                  output_low(pin_b6);
                  printf(lcd_putc,"\fLED PASIV !");
                  giden=0;
                  usb_put_packet(1, giden_paket, 64, USB_DTS_TOGGLE); // Geri veri gönderiliyor...
                  break;             
               }
           }
           
            if(isaret=='W')
            {
               lcd_gotoxy(1,1);
               printf(lcd_putc,"\f");
               for(x = 2; x <= kactane; x++) {printf(lcd_putc,"%c",gelen_paket[x]);}
            }
        
            if(isaret=='Y')
            {
               lcd_gotoxy(1,2);
               printf(lcd_putc,"\f");
               for(x = 2; x <= kactane; x++) {printf(lcd_putc,"%c",gelen_paket[x]);}
            }
            if(isaret=='Z') {printf(lcd_putc,"\f");}
         }
      }
   } 
}


C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
using USBManagement;
using System.Threading;
using System.Diagnostics;

namespace USB
{
    public partial class Main : Form
    {  
        UsbHidDevice my_hid = new UsbHidDevice();
        short VendorID = short.Parse("1111", NumberStyles.HexNumber);
        short ProductID = short.Parse("1111", NumberStyles.HexNumber);

        byte[] giden_buffer = new byte[64];
        byte[] gelen_buffer = new byte[64];
        
        public Main()
        {
            InitializeComponent();
            my_hid.DeviceStateChanged += new DeviceStateChangeEventHandler(OnChangeDeviceState);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            CheckForIllegalCrossThreadCalls = false;
        }
   
        private void btn_basla_Click(object sender, EventArgs e)
        {
            try
            {
                giden_buffer[1] = (byte)'Q';
                giden_buffer[2] = (byte)'a';

                if (!my_hid.IsOpen)
                {
                    if (my_hid.OpenPipe(VendorID, ProductID))
                    {
                        my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                        my_hid.DeviceArrived += new HidDeviceArrivedEventHandler(OnDeviceAttached);
                        my_hid.DeviceRemoved += new HidDeviceRemovedEventHandler(OnDeviceDetached);
                    }

                    else
                    {
                        label1.Text = "No Devices Found !";
                    }
                }
            }

            catch
            {
                return;
            }
        }
        public delegate void OkuHandler();
        private void btn_kapat_Click(object sender, EventArgs e)
        {
            try
            {
                if (my_hid.IsOpen)
                {
                    giden_buffer[1] = (byte)'Q';
                    giden_buffer[2] = (byte)'s';
                    my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                    my_hid.ClosePipe();
                }

                else
                {
                    label1.Text = "Disconnect !";
                }
            }

            catch
            {
                return;
            }
        }
        private void OnChangeDeviceState(object sender, DeviceStateChangeEventArgs e)
        {
            if (e.CurrentState == DeviceState.Opened)
            {
                label1.Text = "Connection Status: On";
            }
            else if (e.CurrentState == DeviceState.Closed)
            {
                label1.Text = "Connection Status: Off";
            }
            else if (e.CurrentState == DeviceState.Waiting)
            {
                label1.Text = "Connection Status: ...";
            }
            else if (e.CurrentState == DeviceState.Ready)
            {
                label1.Text = "Connection Status: ...";
            }
            else
            {
                label1.Text = "Device State Changed!! Curren State : None";
            }
        }
        private void OnDeviceAttached(object sender, EventArgs e)
        {
            bool Success;

            label1.Text = "Atached Device";
            Success = my_hid.OpenPipe(VendorID, ProductID);
            if (Success)
            {
                label1.Text = "Connected";
            }
        }
        private void OnDeviceDetached(object sender, EventArgs e)
        {
            label1.Text = "Detached Device";
            if (my_hid.IsOpen) my_hid.ClosePipe();

            label1.Text = "Device Disconnected";
            this.Text = "Device Waiting...";
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (my_hid.IsOpen)
            {
                label1.Text = "";
                giden_buffer[1] = (byte)'Q';
                giden_buffer[2] = (byte)'d';

                if (my_hid.IsWindowsXpOrLater)
                    my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                else
                    my_hid.WritePipe(giden_buffer, TransactionType.Control);

                if (my_hid.IsWindowsXpOrLater)
                    my_hid.ReadPipe(ref gelen_buffer, 64, TransactionType.Control);
                else
                    my_hid.ReadPipe(ref gelen_buffer, 64, TransactionType.Control);

                label1.Text = "Led = " + gelen_buffer[4].ToString();
            }

            else
            {
                label1.Text = "Disconnect !";
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            label1.Text = "";

            if (my_hid.IsOpen)
            {

                giden_buffer[1] = (byte)'Q';
                giden_buffer[2] = (byte)'c';

                if (my_hid.IsWindowsXpOrLater)
                    my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                else
                    my_hid.WritePipe(giden_buffer, TransactionType.Control);

                if (my_hid.IsWindowsXpOrLater)
                    my_hid.ReadPipe(ref gelen_buffer, 64, TransactionType.Interrupt);
                else
                    my_hid.ReadPipe(ref gelen_buffer, 64, TransactionType.Control);

                label1.Text = "Led = " + gelen_buffer[4].ToString();
            }

            else
            {
                label1.Text = "Disconnect !";
            }
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {

            if (my_hid.IsOpen)
            {
                giden_buffer[1] = (byte)'Q';
                giden_buffer[2] = (byte)'b';
                my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                my_hid.ClosePipe();
            }
        }
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {

            if (my_hid.IsOpen)
            {
                giden_buffer[1] = (byte)'Q';
                giden_buffer[2] = (byte)'s';
                my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                my_hid.ClosePipe();
            }
        }
        private void button4_Click(object sender, EventArgs e)
        {
            Environment.Exit(1);
        }
    }
}


NOT : pic 4 mhz kristale göre ayarlı vusb bacağınada 470nF unutma :) kolay gelsin yardımcı olabileceğim başka bir husu varsa elimden geleni yaparım.

mesaj birleştirme:: 27 Ağustos 2014, 06:46:51

buradada umng.dll var usbmanagement varya using kısmında ki o import edersin :)

http://dosya.co/t08sflmz0klm/library.rar.html

mesaj birleştirme:: 27 Ağustos 2014, 06:48:25

he usb konfigurasyon .h de burada unutkanlık işte :D  ;D

http://dosya.co/ypbptf1eflcn/library.rar.html 2 dosyada var burada

@Baran,  dosyaları yeniden yükler misin. Dosyalar sistem silinmiş görünmüyor.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d