18f4550 HID USB -> Verzoek voor apparaatdescriptor is mislukt

Ik ben aan het proberen communicatie op gang te krijgen tussen mijn PIC18f4550 en mijn Windows 8.1 machine.

Hier mijn breadboard met aantekeningen:
http://i.imgur.com/lzvEzoV.jpg

Het programmeren van de PIC gaat perfect. Normale progjes zoals een blink led progje werken perfect. vusb op de pic geeft rond de 2,5 / 2,9 V aan.

Error die in Apparaatbeheer verschijnt:
http://i.imgur.com/0s6fbr1.png

Project code:

c code:


unsigned char readbuff[64] absolute 0x500;   // Buffers should be in USB RAM, please consult datasheet
unsigned char writebuff[64] absolute 0x540;

char count;

void interrupt(){
   USB_Interrupt_Proc();                   // USB servicing is done inside the interrupt
}

void main(void){
  ADCON1 |= 0x0F;                         // Configure all ports with analog function as digital
  CMCON  |= 7;                            // Disable comparators

  HID_Enable(&readbuff,&writebuff);       // Enable HID communication

  while(1){
    while(!HID_Read());


    for(count=0;count<64;count++)
      writebuff[count]=readbuff[count] + 1;

    while(!HID_Write(&writebuff,64))
      ;
  }
}

De descriptor die is toegevoegd is gegenereerd door MikroC:
http://pastebin.com/zqANnhZN

De configuratie settings in MikroC:
http://i.imgur.com/rWECd7F.png

USBlyzer geeft een lege descriptor aan:
http://i.imgur.com/hcr7gvc.png

Wat ik geprobeerd heb:

  • 100nF caps voor de pic i.p.v. 10
  • 470nF cap voor vusb
  • 8Mhz kristal i.p.v. 20 (met juiste config uiteraard)
  • Alle connecties doorgemeten op het breadboard, allemaal in orde
  • Usb kabel doorgemeten, perfect in orde (Kabel is wel ongeveer 1,5 meter lang!)

Het enige dat ik niet kan proberen is een andere PIC (niet op voorraad).

Is er iemand die mij kan helpen? Voor zover ik kan zien is alles in orde. Is mijn PIC misschien faulty? Op vusb hoort toch 3.3V te staan?

Alvast hartelijk bedankt.

[Bericht gewijzigd door Waijur op zaterdag 20 september 2014 02:26:02 (11%)

Ik mis een weerstandje op de foto...

Speed Identification

At the device end of the link a 1.5 kohm resistor pulls one of the lines up to a 3.3V supply derived from VBUS.

This is on D- for a low speed device, and on D+ for a full speed device.

(A high speed device will initially present itself as a full speed device with the pull-up resistor on D+.)

The host can determine the required speed by observing which line is pulled high.

http://www.usbmadesimple.co.uk/ums_3.htm

USB1.1 werkt op 6 Mhz (en kan werken zonder pullup) maar de PICusb staat op 48MHz(is goed!) dus USB 2.0, en daarom ziet ie je device niet.

[Bericht gewijzigd door Arabel op zaterdag 20 september 2014 05:09:19 (12%)

Re-integratiecoach uitgerangeerde en degoutante electronen
Arco

Special Member

Probeer er eerst eens een bestaande werkende file in te schieten. (er zijn er genoeg te vinden)
Dan weet je of het een hardware of software probleem is.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
marcob

Golden Member

Hier staat een voorbeeld van een PIC met USB, inclusief Software voor de PC. Kun je je opstelling testen. Het werkt voor een PIC18F2550 / 2458 / 2553 / 4455 / 4550 / 4458 / 4553. Deze gebruik ik ook altijd.

http://www.sprut.de/electronic/pic/projekte/usb4all/usb4all.htm

People tend to overestimate what can be done in one year and to underestimate what can be done in five or ten years

Bedankt voor de reacties.

De pull-up voor D+ zie ik voor het eerst. Geprobeerd, helaas zelfde effect.
De code die ik gebruik komt al van het werkende voorbeeld die met MikroC geleverd wordt, en komt op vele websites terug. Zou dus goed moeten zijn denk ik zo.

Jouw linkje ga ik maar eens proberen.

Bedankt.

Edit: usb4all geprobeerd, zelfde effect. Verzoek voor apparaatdescriptor is mislukt.
Er lijken dus 2 opties te zijn: De pic is kapot of er is toch iets mis met mijn circuitje. Nog ideeën iemand?

[Bericht gewijzigd door Waijur op zaterdag 20 september 2014 12:05:00 (24%)

Vergroot de c vann 220 nF naar 470 nF. Dat zal dit probleem niet oplossen, maar maakt eea wat stabieler. [edit]Ik zie nu pas dat je dat al had geprobeerd. Toch gewoon doen.[/edit]

Dit klinkt typisch naar een fout in de descriptor of in de opstartcode van de uC (enumeratie door de host).

Controleer eens of de zaken die in de descriptor staan (want die ziet er wel goed uit) ook in de .asm/.lst voorkokmen.

Je mag je .hex wel opsturen, ik heb hier meerdere boards met 4550 op 20MHz. Als je even vertelt wat het moet doen kan ik het voor je testen. (email adres in mijn profiel)

[Bericht gewijzigd door hadv op zondag 21 september 2014 12:35:58 (17%)

Just find out what you like and let it kill you

Super bedankt. Ik heb je een mailtje gestuurd hadv.