C# ile byte gönderme sorunu

Başlatan ehliseyf, 04 Kasım 2014, 15:02:22

ehliseyf

         c# ile çalışmaya başlayınca 18F4550 denetleyicisi kullanmaya başladım.Cihazın bilgisayar tarafından görülmesini sağladım.Anlayamadığım bir nokta ise şu.Ben byte olarak gönderdiğim bilgiyi usb porttan string olarak alan mikro denetleyici nasıl anlaşacaklar.Bir türlü bu sorunu çözemiyorum.
         Ascii karşılıklarına baktım direk char göndermek istedim c# kısmını ayarlayamadım. Byte olarak göndermek işime geliyor.ilerideki çalışmalarda data gönderme alma kısmında takip kolay olması açısından.Belkide sorunum bu değildir ben buna takılı kalmışımdır bilemiyorum.
        Yardımlarınızı bekliyorum. c# kodu ile ccs c kodunu ekliyorum.Yapılmak istenen ledi 1 butonla yakıp diğeri ile söndürmek istiyorum.




#include <18F4550.h>
#FUSES HSPLL, PLL5, NOWDT, NOPROTECT, NOLVP, NODEBUG, USBDIV, CPUDIV1, VREGEN 
#USE DELAY(CLOCK=48000000)                 //ICPRT enabled


#define USB_HID_DEVICE     TRUE      
#define USB_EP1_TX_ENABLE  USB_ENABLE_INTERRUPT //Uçnokta1'de Kesme transferi aktif
#define USB_EP1_RX_ENABLE  USB_ENABLE_INTERRUPT    
#define USB_EP1_TX_SIZE    64                 //Uçnokta1 için maksimum alınacak ve gonderilecek
#define USB_EP1_RX_SIZE    64                 //veri boyutu (64 byte)


#include <pic18_usb.h>   //Microchip 18Fxx5x hardware layer for usb.c	
#include <USB_konfigurasyon.h>   //USB Configuration and Device descriptors for this UBS device
#include <usb.c>        //handles usb setup tokens and get descriptor reports


#define UcNokta1       1 
//Yazılım (Firmware) Sürüm no
#define surum_no1      0x00            //surum_no2.surum_no1 ornek: 1.0
#define surum_no2      0x01 
#define usb_durum      paket[0]
#define hata           paket[1]
//#define port_durum     paket[2]
//#define kontrol        paket[3]
/////////////
unsigned int8 paket[64];

void main()
{    
   usb_init();                      
   usb_task();                      
   usb_wait_for_enumeration();         //Cihaz, hazır olana kadar bekle
   
   if(usb_enumerated())    
      output_high(pin_d1);
   for (;;)
   {
      while(usb_enumerated())
      {
  
         if (usb_kbhit(1))             //Eğer pc'den yeni bir paket geldiyse
         {         
            usb_get_packet(UcNokta1, paket, 2); //paketi oku    
output_toggle(pin_d1);       
            switch(hata)              // Paketin ilk elemanındaki komutu oku ve ilgili göreve git
               {
                  case 65:  // 66 ve 65 in ascii karşılıkları bunları desimal olarak ta denedim

                    output_high(pin_d0);
               		delay_ms(1000);
					
                  break;
                           
                 case 66: 
                    output_low(pin_d0);
					delay_ms(1000);		
               
                  break;
                         

                   default:
					break;
               }
         }
      }
   }
}


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

namespace stepmotor
{
    public partial class Form1 : Form
    {

        byte[] RecievedData = new byte[65];
       
        bool durum = false;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.usbHidPort1.ProductId = Int32.Parse("1111", System.Globalization.NumberStyles.HexNumber);
            this.usbHidPort1.VendorId = Int32.Parse("1111", System.Globalization.NumberStyles.HexNumber);
            usbHidPort1.CheckDevicePresent();
            if (durum)
            {   
                toolStripStatusLabel1.ForeColor = Color.Green;
                toolStripStatusLabel1.Text = "USB Bağlantısı Kuruldu";
            }
            else
            {
                toolStripStatusLabel1.ForeColor = Color.Red;
                toolStripStatusLabel1.Text = "USB Bağlantısı Bekleniyor";
            }
        }

        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 usbHidPort1_OnDataSend(object sender, EventArgs e)
        {

        }

        private void usbHidPort1_OnDeviceArrived(object sender, EventArgs e)
        {

        }

        private void usbHidPort1_OnSpecifiedDeviceArrived(object sender, EventArgs e)
        {
            toolStripStatusLabel1.ForeColor = Color.Green;
            toolStripStatusLabel1.Text = "USB Bağlantısı Kuruldu";
            durum = true;
        }

        private void usbHidPort1_OnSpecifiedDeviceRemoved(object sender, EventArgs e)
        {
            toolStripStatusLabel1.ForeColor = Color.Red;
            toolStripStatusLabel1.Text = "USB Bağlantısı kesildi";
       
            durum = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                byte[] dizi = new byte[usbHidPort1.SpecifiedDevice.OutputReportLength + 1];
                dizi[0] = 66;
                dizi[1] = 65;
                if (usbHidPort1.SpecifiedDevice != null)
                {
                    usbHidPort1.SpecifiedDevice.SendData(dizi);
                }

                else
                    MessageBox.Show("Gönderilecek özel aygıt bulunamadı!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void button2_Click(object sender, EventArgs e)
        { 
            try
            {
                byte[] dizi = new byte[usbHidPort1.SpecifiedDevice.OutputReportLength + 1];
                  dizi[0] = 65;
                  dizi[1] = 66;
                if (usbHidPort1.SpecifiedDevice != null)
                {
                    usbHidPort1.SpecifiedDevice.SendData(dizi);
                }
           
            else
                    MessageBox.Show("Gönderilecek özel aygıt bulunamadı!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void usbHidPort1_OnDataRecieved(object sender, DataRecievedEventArgs args)
        {

        }
    }
}
Code'm mu oturturum !

justice_for_all

HID Haberleşiyorsun sanırım.O haberleşmede şöyle bir durum var gönderdiğin dizinin 0. elemanına ulaşamıyorsun HID kendisi kullanıyor.Mesela 64 byte lık bir veri gönderdin bilgisayar proramın 65 byte olarak almak zorunda ve senin datan dizinin 1. elemanından başlar.
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

ehliseyf

Alıntı yapılan: justice_for_all - 04 Kasım 2014, 16:07:06
HID Haberleşiyorsun sanırım.O haberleşmede şöyle bir durum var gönderdiğin dizinin 0. elemanına ulaşamıyorsun HID kendisi kullanıyor.Mesela 64 byte lık bir veri gönderdin bilgisayar proramın 65 byte olarak almak zorunda ve senin datan dizinin 1. elemanından başlar.
Hocam sorunu çözdüm teşekkürler.İlk byte yutulduğu için ona göre hareket etmek gerekiyor.
Code'm mu oturturum !