18F4550 USB Bağlantı Sorunu

Başlatan _MeRKeZ_, 19 Aralık 2014, 14:01:36

_MeRKeZ_

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.


#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

_MeRKeZ_

#1
Kodlarda aşağıdaki düzenlemeleri yaparak sorunu çözdüm


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

Şu an ise veri iletiminde sorun yaşıyorum

C# kodu


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


#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?

karuslu

#2
merhaba

18f4550 ile c# dan pice yazı göndermek (2x16 lcd) ile ilgili geçen sene yaptığım projeyi senle paylaşayım.Hatanı bulursun umarım kardeşim başarılar....

Hatanı bulmak için fazla yoğunlaşamadım çünkü bu aralar başka projeler üzerinde çalışıyorum.kolay gelsin

Proje ve yazılım bizzat kendi tarafımdan geliştirilip devre haline getirilip çalıştırılmıştır sorun yok yani.

http://dosya.co/2fe542bb66809561/devam_cal_en_son.rar

_MeRKeZ_

Hocam, teşekkürler. Programın devamında SPI komutları vardı. Sorun oradan kaynaklanıyormuş

Powered by EzPortal