Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Ynt: CCS USB Problemi

Başlatan Mucit23, 26 Mart 2016, 10:07:23

Mucit23

CCS'de usb ile uzun zamandır uğraşmamıştım. Şimdi USB HID ufak bir uygulama yapmam gerekti

18F2550 ile deneme yapıyorum. Daha önce 4550'de termometre yapıp sıcaklığı bilgisayara aktarmıştım.

2550 için yazdığım kodlar bunlar.
#include <18F2550.h>
#device ADC=10

#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL2,CPUDIV1,VREGEN,NOBROWNOUT // 8MHZ
#use delay(clock=48000000)

#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    63                 //Uçnokta1 için maksimum alınacak ve gonderilecek
#define USB_EP1_RX_SIZE    63 

#include <pic18_usb.h>     
#include <USB_Driver.h>               
#include <usb.c>
#include <lcd_driver.c>
#include <sht75.c>

#use fast_io(a)
#use fast_io(b)
#use fast_io(c)

#define UcNokta1       1 

unsigned int8 paket[64];


void main()
{
   setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
   
   set_tris_a(0x00);
   set_tris_b(0x00);
   set_tris_c(0x00);

   output_a(0x00);
   output_b(0x00);
   output_c(0x00);
   
   lcd_init();
   
   printf(lcd_putc,"\f");
   printf(lcd_putc,"USB Baglantisi");
   lcd_gotoxy(1,2);
   printf(lcd_putc,"Bekleniyor");
   delay_ms(100);
   
   usb_init();                      
   usb_task();           
   usb_wait_for_enumeration();         //Cihaz, hazır olana kadar bekle
   
   if(usb_enumerated()==1) 
   {
      printf(lcd_putc,"\f");
      printf(lcd_putc,"Baglanti Kuruldu");
   }
   delay_ms(1000);
   printf(lcd_putc,"\f");
   
   
   while(TRUE)
   {
       usb_task();
      
       paket[1]=25;
       paket[2]=1;
       paket[3]=38;
       paket[4]=4;
       
       usb_put_packet(UcNokta1, paket,64, USB_DTS_TOGGLE); // Datayı Gönder..
       
       delay_ms(100);       
   }
}


Kristal olarak da 8Mhz bağladım. Cihazı USB üzerinden bilgisayara takınca Aygıt tanınıyor driver kuruluyor. Buraya kadar problem yok.

c# tarafında ise Bilgisayara cihazı taktığımda yazdığım program tarafından algılanıp usbHidPort1_OnSpecifiedDeviceArrived olayları oluşuyor.
Kodlarım aşağıdaki gibi
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 UsbLibrary;

namespace Program
{
    public partial class Form1 : Form
    {
        byte[] RecievedData = new byte[65];
        byte[] Tx_Data = new byte[65];
        bool durum = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.usbHidPort1.ProductId = Int32.Parse("5CB2", System.Globalization.NumberStyles.HexNumber);
            this.usbHidPort1.VendorId = Int32.Parse("4A12", 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_OnDataRecieved(object sender, UsbLibrary.DataRecievedEventArgs args)
        {
            
            if (InvokeRequired)
            {
                try
                {
                    Invoke(new DataRecievedEventHandler(usbHidPort1_OnDataRecieved), new object[] { sender, args });
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }
            //
            else
            {
                RecievedData = args.data;
                label3.Text = "Veri Geldi";
            }
        }

        private void usbHidPort1_OnDeviceArrived(object sender, EventArgs e)
        {

        }

        private void usbHidPort1_OnDeviceRemoved(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;
    }
    }
}


Aynı şekilde bağlantıyı kestiğimde usbHidPort1_OnSpecifiedDeviceRemoved olayı oluşuyor.
Fakat ne yaptıysam gönderdiğim verileri bilgisayara ulaştıramadım. Event oluşmuyor.

Sorun ne olabilir sizce? Basitçe USB den PC ye veriler göndermeye çalışıyorum.

mesaj birleştirme:: 26 Mart 2016, 11:01:35

Ekleme: Sorun çözüldü. Buffer boyutu ile gönderilecek olan dizinin boyutu aynı olması gerekiyormuş.

sayangku

hocam c sharp ve usbhid ccs c de led yakma muhabbetinde yardımcı olurmusunuz bana kendi evim için basit bir kart yapıcam işlevsel olmasına gerek yok butona basınca röle çeksin bida basınca kapansın yeter bana

Benzer Konular (5)