18F4550 USB Bağlantı Sorunu

_MeRKeZ_

Üye
Katılım
30 May 2011
Mesajlar
44
Puanları
1
Yaş
31
Merhaba arkadaşlar,

Bilgisayar ile pic arasında usb haberleşme gerçekleşecek bir uygulama geliştiriyorum. Uygulamanın benzetimi (simülasyonu) başarılı olsa da devre üzerinde çalışmıyor. USB'yi bilgisayara bağladığımda kendisi sürücüyü yüklüyor ve işlem başarılı iletisini gönderiyor ancak buna rağmen işlemler gerçekleştirilmiyor. Kabloyu çıkarıp taktığımda ise sürücüde sorun gözüküyor. Bu sefer cihazı hiçbir şekilde tanımıyor.

Kod:
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)

//20 Mhz'lik osilatör kullanıyorum

#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 <pic18_usb.h>    
#include <USB_Driver.h>  
#include <usb.c>

Bu konuda ne yapmamı tavsiye edersiniz?

Teşekkürler
 
Kodlarda aşağıdaki düzenlemeleri yaparak sorunu çözdüm

Kod:
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN 
#USE DELAY(CLOCK=20000000)
Şu an ise veri iletiminde sorun yaşıyorum

C# kodu

Kod:
void veriGonder()
{
if ((denetim== 1) && (usbHidPort1.SpecifiedDevice != null))
                {
                    denetim= 0;
                    int uzunluk= usbHidPort1.SpecifiedDevice.OutputReportLength;
                    byte[] gidenVeri = new byte[uzunluk+ 1];
                   
                    gidenVeri[0] = 0;
                    gidenVeri[1] = veri;
             
                    usbHidPort1.SpecifiedDevice.SendData(gidenVeri);
                }
}


private void usbHidPort1_OnDataRecieved(object sender, DataRecievedEventArgs args)
        {
           
                int uzunluk= usbHidPort1.SpecifiedDevice.OutputReportLength;
                byte[] gelenVeri= new byte[uzunluk + 1];
                gelenVeri = args.data;
                denetim= gelenVeri [2];  //Veri iletimi başarılıysa 1 verisi alınıyor
            }
        }


CCS C kodu

Kod:
#include <18F4550.h>

#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN 
#USE DELAY(CLOCK=20000000) 

#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 <pic18_usb.h>    
#include <USB_Driver.h>  
#include <usb.c>

void main()
{
     set_tris_d(0x00);
     output_d(0x00);

     usb_init();                      
     usb_task();                    
     usb_wait_for_enumeration();  
   while(1)
   {  
     while(usb_enumerated())
      {

          if (usb_kbhit(1))
          {
                usb_get_packet(1, gelenDizi, 64); // veri alınıyor
                gelenVeri= gelenDizi[0];
                output_d(gelenVeri);

                gidenVeri[0] = 1;  // işlem başarılı ve 1 verisi gönderiliyor.
                usb_put_packet(1, gidenVeri,64, USB_DTS_TOGGLE);
               
          }
      }
}


Yaptığım gözlemler sonucunda, sadece ilk verinin yollandığını diğerlerinin iletilmediğini fark ettim. Bu durumu düzeltmek için ne yapabilirim?
 
Bence gidenVeri[0] a 1 değeri vermenin doğru olup olmadığını kontrol etmelisin. Ayrıca C# kodunda denetim değeri geri dönüşte 1 degerini alıyor mu acaba ( denetim= gelenVeri [2]; )? Bunu bir kontrol etmek lazım. Bir de neden gelenVeri[2]?
 

Forum istatistikleri

Konular
128,185
Mesajlar
915,694
Kullanıcılar
449,956
Son üye
CharmanDear

Yeni konular

Geri
Üst