C# ile usb den pic konrol etme projesi üzerinde çalışmaktayım.Pic18f4550 kullanmaktayım.İsis simülasyonunda çok güzel çalışıyor.Devreyi breadboarda kurdum.Usb yi pc'ye takınca pc usb yi görmüyor.Başka bilgisayarlarda denedim ama sonuç alamadım.Bu sorunun çözümü sizce nasıl olmalı.
sentilyar tane sebep olabilir. :) Şema, kodlar yaptığınız aşamalar olmadan zor.Tabi forumumuz da müneccim var ise o başka. :)
Şekil ve sema gerekir.usb nin d+d- uclarini kontrol et dogrumu
Ben sadece olması muhtemel veya başında aynı olay geçenlerin çözüm önerilerini öğrenmek istediğim için böyle kısaca yazdım.
Breadborda kurduğum devrede lcd ekran çok güzel çalışıyor.Kodlarda bir sorun olduğunu zannetmiyorum.Çözüm önerilerinizi merakla/sabırla/sabırsızlıkla bekliyorum.
#include <18F4550.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 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> //USB konfigurasyon bilgileri bu dosyadadir.
#include <usb.c>
//////////////
#use fast_io(b)
#use fast_io(d)
/////////////
#define use_portb_lcd true
#define low output_low(PIN_B0)
#define high output_high(PIN_B0)
#define UcNokta1 1
#define kactane paket[0]
#define isaret paket[1]
#define port_durum paket[2]
#define kontrol paket[3]
#define mystatus send_buffer[0]
#define adcbyte0 send_buffer[1]
#define adcbyte1 send_buffer[2]
#define sws send_buffer[3]
/////////////
int8 paket[64];
int8 send_buffer[32];
int8 x;
////////////
void main(void)
{
set_tris_b(0x00);
output_b(0x00);
set_tris_d(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, hazır olana kadar bekle
if(usb_enumerated())
output_high(pin_d0);
output_high(pin_d1);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fUSB BAGLANTISI");//USB bağlantısı kurulduysa LCD'de göster
lcd_gotoxy(1,2);
printf(lcd_putc,"KURULDU !");//USB bağlantısı kurulduysa LCD'de göster
for (;;)
{
while(usb_enumerated())
{
if (usb_kbhit(1)) //Eğer pc'den yeni bir paket geldiyse
{
usb_get_packet(UcNokta1, paket, 64); //paketi oku
if(isaret == 'Q')
{
switch(kontrol) // Paketin ilk elemanındaki komutu oku ve ilgili göreve git
{
case 'a':
printf(lcd_putc,"\fPROGRAM BAGLANDI !");//PC deki program baglandiginda LCD'ye yaziliyor...
break;
case 's':
printf(lcd_putc,"\fPROGRAM AYRILDI !");//LCD'ye yaziliyor...
break;
case 'y':
output_high(pin_d0);
output_high(pin_d1);
printf(lcd_putc,"\fLED AKTIV !");// LCD'ye yaziliyor...
sws=1;
usb_put_packet(1, send_buffer, 64, USB_DTS_TOGGLE); // Geri veri gönderiliyor...
break;
case 'u':
output_low(pin_d0);
output_low(pin_d1);
printf(lcd_putc,"\fLED PASIV !");// LCD'ye yaziliyor...
sws=0;
usb_put_packet(1, send_buffer, 64, USB_DTS_TOGGLE); // Geri veri gönderiliyor...
break;
case 'x':
printf(lcd_putc,"\fBAGLANTI KESILDI !");// LCD'ye yaziliyor...
break;
}
}
If(isaret=='W')
{
printf(lcd_putc,"\f");
for( x=2;x<=kactane;x++)
{
printf(lcd_putc,"%c",paket[x]);// LCD'ye yaziliyor...
}
}
}
}
}
}
mesaj birleştirme:: 05 Haziran 2015, 14:04:51
usb bağlantısını pic 18f4550 ye bu şekilde yaptım.
(http://i.hizliresim.com/7k1blL.jpg) (http://hizliresim.com/7k1blL)
mesaj birleştirme:: 05 Haziran 2015, 00:06:19
Bu da usb_konfigurasyon.h
#IFNDEF __USB_DESCRIPTORS__
#DEFINE __USB_DESCRIPTORS__
#include <usb.h>
const char USB_CLASS_SPECIFIC_DESC[] = {
6, 0, 255, // Usage Page = Vendor Defined
9, 1, // Usage = IO device
0xa1, 1, // Collection = Application
0x19, 0, // Usage minimum
0x29, 800, // Usage maximum
0x15, 0x00, // Logical minimum (-128)
0x25, 0xFF, // Logical maximum (127)
0x75, 8, // Report size = 8 (bits)
0x95, 64, // Report count = 16 bits (2 bytes)
0x81, 2, // Input (Data, Var, Abs)
0x19, 0, // Usage minimum
0x29, 800, // Usage maximum
0x75, 8, // Report size = 8 (bits)
0x95, 64, // Report count = 16 bits (2 bytes)
0x91, 2, // Output (Data, Var, Abs)
0xc0 // End Collection
};
//if a class has an extra descriptor not part of the config descriptor,
// this lookup table defines where to look for it in the const
// USB_CLASS_SPECIFIC_DESC[] array.
//first element is the config number (if your device has more than one config)
//second element is which interface number
//set element to 0xFFFF if this config/interface combo doesn't exist
const int16 USB_CLASS_SPECIFIC_DESC_LOOKUP[USB_NUM_CONFIGURATIONS][1] =
{
//config 1
//interface 0
0
};
//if a class has an extra descriptor not part of the config descriptor,
// this lookup table defines the size of that descriptor.
//first element is the config number (if your device has more than one config)
//second element is which interface number
//set element to 0xFFFF if this config/interface combo doesn't exist
const int16 USB_CLASS_SPECIFIC_DESC_LOOKUP_SIZE[USB_NUM_CONFIGURATIONS][1] =
{
//config 1
//interface 0
32
};
//////////////////////////////////////////////////////////////////
///
/// start config descriptor
/// right now we only support one configuration descriptor.
/// the config, interface, class, and endpoint goes into this array.
///
//////////////////////////////////////////////////////////////////
#DEFINE USB_TOTAL_CONFIG_LEN 41 //config+interface+class+endpoint+endpoint (2 endpoints)
const char USB_CONFIG_DESC[] = {
//IN ORDER TO COMPLY WITH WINDOWS HOSTS, THE ORDER OF THIS ARRAY MUST BE:
// config(s)
// interface(s)
// class(es)
// endpoint(s)
//config_descriptor for config index 1
USB_DESC_CONFIG_LEN, //length of descriptor size ==1
USB_DESC_CONFIG_TYPE, //constant CONFIGURATION (CONFIGURATION 0x02) ==2
USB_TOTAL_CONFIG_LEN,0, //size of all data returned for this config ==3,4
1, //number of interfaces this device supports ==5
0x01, //identifier for this configuration. (IF we had more than one configurations) ==6
0x00, //index of string descriptor for this configuration ==7
0x80, //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 unused and bit7=1 ==8
50, //maximum bus power required (maximum milliamperes/2) (100mA)
//interface descriptor 1
USB_DESC_INTERFACE_LEN, //length of descriptor =10
USB_DESC_INTERFACE_TYPE, //constant INTERFACE (INTERFACE 0x04) =11
0x00, //number defining this interface (IF we had more than one interface) ==12
0x00, //alternate setting ==13
2, //number of endpoins, except 0 (pic167xx has 3, but we dont have to use all). ==14
0x03, //class code, 03 = HID ==15
0x00, //subclass code //boot ==16
0x00, //protocol code ==17
0x00, //index of string descriptor for interface ==18
//class descriptor 1 (HID)
USB_DESC_CLASS_LEN, //length of descriptor ==19
USB_DESC_CLASS_TYPE, //dscriptor type (0x21 == HID) ==20
0x11,0x01, //hid class release number (1.0) (try 1.10) ==21,22
0x00, //localized country code (0 = none) ==23
0x01, //number of hid class descrptors that follow (1) ==24
0x22, //report descriptor type (0x22 == HID) ==25
USB_CLASS_SPECIFIC_DESC_LOOKUP_SIZE[0][0], 0x00, //length of report descriptor ==26,27
//endpoint descriptor
USB_DESC_ENDPOINT_LEN, //length of descriptor ==28
USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (ENDPOINT 0x05) ==29
0x81, //endpoint number and direction (0x81 = EP1 IN) ==30
0x03, //transfer type supported (0x03 is interrupt) ==31
USB_EP1_TX_SIZE,0x00, //maximum packet size supported ==32,33
10, //polling interval, in ms. (cant be smaller than 10) ==34
//endpoint descriptor
USB_DESC_ENDPOINT_LEN, //length of descriptor ==35
USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (ENDPOINT 0x05) ==36
0x01, //endpoint number and direction (0x01 = EP1 OUT) ==37
0x03, //transfer type supported (0x03 is interrupt) ==38
USB_EP1_RX_SIZE,0x00, //maximum packet size supported ==39,40
10 //polling interval, in ms. (cant be smaller than 10) ==41
};
//****** BEGIN CONFIG DESCRIPTOR LOOKUP TABLES ********
//since we can't make pointers to constants in certain pic16s, this is an offset table to find
// a specific descriptor in the above table.
//NOTE: DO TO A LIMITATION OF THE CCS CODE, ALL HID INTERFACES MUST START AT 0 AND BE SEQUENTIAL
// FOR EXAMPLE, IF YOU HAVE 2 HID INTERFACES THEY MUST BE INTERFACE 0 AND INTERFACE 1
#define USB_NUM_HID_INTERFACES 1
//the maximum number of interfaces seen on any config
//for example, if config 1 has 1 interface and config 2 has 2 interfaces you must define this as 2
#define USB_MAX_NUM_INTERFACES 1
//define how many interfaces there are per config. [0] is the first config, etc.
const char USB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS]={1};
//define where to find class descriptors
//first dimension is the config number
//second dimension specifies which interface
//last dimension specifies which class in this interface to get, but most will only have 1 class per interface
//if a class descriptor is not valid, set the value to 0xFFFF
const int16 USB_CLASS_DESCRIPTORS[USB_NUM_CONFIGURATIONS][1][1]=
{
//config 1
//interface 0
//class 1
18
};
#if (sizeof(USB_CONFIG_DESC) != USB_TOTAL_CONFIG_LEN)
#error USB_TOTAL_CONFIG_LEN not defined correctly
#endif
//////////////////////////////////////////////////////////////////
///
/// start device descriptors
///
//////////////////////////////////////////////////////////////////
const char USB_DEVICE_DESC[USB_DESC_DEVICE_LEN] ={
//starts of with device configuration. only one possible
USB_DESC_DEVICE_LEN, //the length of this report ==1
0x01, //the constant DEVICE (DEVICE 0x01) ==2
0x00,0x02, //usb version in bcd
0x00, //class code ==5
0x00, //subclass code ==6
0x00, //protocol code ==7
USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8) ==8
0x11,0x11, //vendor id (0x04D8 is Microchip, or is it 0x0461 ??)
0x11,0x11, //product id ==11,12 //don't use ffff says usb-by-example guy. oops
0x00,0x01, //device release number ==13,14
0x01, //index of string description of manufacturer. therefore we point to string_1 array (see below) ==15
0x02, //index of string descriptor of the product ==16
0x00, //index of string descriptor of serial number ==17
USB_NUM_CONFIGURATIONS //number of possible configurations ==18
};
//////////////////////////////////////////////////////////////////
///
/// start string descriptors
/// String 0 is a special language string, and must be defined. People in U.S.A. can leave this alone.
///
/// You must define the length else get_next_string_character() will not see the string
/// Current code only supports 10 strings (0 thru 9)
///
//////////////////////////////////////////////////////////////////
//the offset of the starting location of each string. offset[0] is the start of string 0, offset[1] is the start of string 1, etc.
char USB_STRING_DESC_OFFSET[]={0,4,12};
char const USB_STRING_DESC[]={
//string 0
4, //length of string index
USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
0x09,0x04, //Microsoft Defined for US-English
//string 1
8, //length of string index
USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
't',0,
'm',0,
'c',0,
//string 2
58, //length of string index
USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
'U',0,
'g',0,
'u',0,
'r',0,
' ',0,
'Y',0,
'a',0,
'l',0,
'c',0,
'i',0,
'n',0,
' ',0,
'w',0,
'w',0,
'w',0,
'.',0,
'u',0,
'g',0,
'u',0,
'r',0,
'y',0,
'a',0,
'l',0,
'c',0,
'i',0,
'n',0,
'.',0,
'd',0,
'e',0,
' ',0
};
#ENDIF
D+,D- dikkat et kısa devre falan olur hemen bozulur.VUSB bacağında 470nF cap olamlı GND ye bağlı diğer ucu(kutupsuz)
MCLR ye ve taktığın kristale dikkat et programda 8 belirtmişsin.
Bilgisayara bağladığında Hiçbir tepki vermiyor mu ?
Yada tanımlanamayan aygıt gibi bir şey mi diyor ?
Usb'yi pc takınca takıldığını gösteren ses geliyor ve "usb aygıtı tanımadı" yazısı sağ alt köşede beliriyor.
D+,D- uçlarını yer değiştirin.Ters bağlanmış olabilir.Yada kısa devre var her şeyi sökün sadece minumum usb bağlantısı kalsın sonra eklersınız dıger elmanları.
Step by step. :)
18 nolu Vusb bacağını gnd bağlamak gerekiyor mu? Ben bağlamamışım da.
(http://i.hizliresim.com/vEN5ND.jpg) (http://hizliresim.com/vEN5ND)
Doğrudan gnd ye baglamayacaksınız. 0.47uf kondansator ile gnd ye baglıyacaksınız.
S.A.
Sn. Recep METE en az 220nf-470nf Kullanın
Tüm yorumlar için çok teşekkür ederim. Akşam deneyip sonucu paylasirim.
yeni konu açmak istemedim. aynı sorun bende de var. simülasyonda çalışıyor ama gerçekte kurup pc ye taktığımda takıldığına dair uyarı sesi
bile gelmiyor. kondansatörü de bağladım. hatta emin olmak için pice başka program attım sıkıntı yok. başka püf noktası var mı bu usb bağlantısının?
Merhaba,
PIC ile PC arasında USB ile haberleştirmede hangi çeviriciyi kullanıyorsunuz?
https://www.google.com.tr/#q=pl2303
https://www.google.com.tr/#q=ft232r+usb+uart
sürücülerini PC'nize yüklemeniz gerekir.Ayrıca
Bu bilgisayar+sağtıkla+Yönet+sol tıkla+sistem araçları çift tıkla+aygıt yöneticis+ çift tıkla+evrensel veri yolu denetleyicisi çıkacaktır.Sarı renkli soru işaretini tıkla problemi okuyun ya sürücüyü yükleyin varsa güncelleyin.Düzgün çalıştığından emin olun.FT232RL benim favorimdir.Diğerlerini de kullandım ama FT232 den daha sağlıklı verim aldım.Arkadaşların da yazdığı gibi fiziksel bağlantılar önemlidir.Kolay gelsin.
http://www.erhanulman.com/pic18f4550-ile-usb-hid-haberlesme.html (http://www.erhanulman.com/pic18f4550-ile-usb-hid-haberlesme.html)
bu sitedeki örneği yaptım. simülasyon sıkıntısız çalışıyor. usb hid olarak çalışıyor. pc programını açmasanız bile simülasyonu çalıştırdığınızda usb takıldı sesi geliyor. gerçekte de gelmesi lazım. tanınmama gibi bir durum yok . usb yi hiç görmüyor. farklı pc lerde de denedim olmadı.
D- ve D+ uçlarına 3.3V zener diyot bağlayıp
deneyiniz. Ayrıca vid, pid değerlerini doğru olarak
görebiliyor musunuz?
arkadaşın sitede yayınladığı kodlar ile rar olarak indirilen hex deki kodlar farklı sanırım. (kristal vs). o yüzden çalıştıramadım.
http://elektronark.org/index.php?topic=211.0 (http://elektronark.org/index.php?topic=211.0)
bu sitedeki uygulamayı kendime göre değiştirdim. gerçekte de simülasyonda da çalıştı.
proteus da usb de sıkıntı var. (versiyon 8.5) formda ıd leri göndermeden de çalışıyor.
yardımlarınız için tşk.
belki faydalanan olur diye buraya yükleyecektim ama nasıl yüklendiğini bilemedim.
Düzgün çalışan usb hid dll var mı?
ben usblibrary.dll ile yaptım. gayet güzel çalışıyor.