Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PIC18F4550 i USB - pomoc/savet

[es] :: Elektronika :: Mikrokontroleri :: PIC18F4550 i USB - pomoc/savet

[ Pregleda: 2245 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

jumper2high
2High Jumper

Član broj: 39396
Poruke: 27
*.dynamic.sbb.rs.



+1 Profil

icon PIC18F4550 i USB - pomoc/savet25.05.2009. u 12:28 - pre 181 meseci
Pozdrav ljudi,
Vec neko vreme pokusavam da shvatim kako da od Mikrokontrolera 18F4550 napravim custom USB HID. Elektronika nije problem (dugmici, displeji, itd.) sa time vec imam iskustva. Takodje, programiranje samog PIC-a nije problem (ASM, C, Basic). Jedini problem je sto nikako da negde nadjem informacije KAKO zapravo da "pripremim" i "zapocnem" komunikaciju izmedju racunara i PIC-a. Sa interneta sam skinuo nekoliko (citaj 5-6) razlicitih "example" projekata i onaj veliki paket sa Microchip sajta koji u sebi ima gomilu primera. Nazalost, ni jedan od primera ne sadrzi ono sto je meni potrebno - informacije kako zapravo poceti program, i kako vrsiti komunikaciju sa racunarom.

Recimo, potrebno mi je da PIC primi 8 bajta (64 bit-a) od racunara (i nesto uradi sa njima) i potrebno je da sam PIC posalje (ili vrati?) isto ~64 bita nazad kao povratnu informaciju (pritisnuti dugmici, rezultat A/D konverzije, i slicno). Dakle, gde da stavim te podatke (u memoriji PICa), gde da trazim one bitove koje je PIC trebao da primi? Prosao sam nekoliko puta kroz Datasheet za P18F4550, al' tamo se nalaze samo tehnicki podatci. Nabavio sam i knjigu "USB Complete..." koju je napisao Jan Axelson i prosao kroz prvih 5-6 poglavlja, tako da manje-vise razumem kako USB radi. Takodje, kako (i gde) da podesim PIC da ga Windows zapravo prepozna kao HID device?



Unapred hvala za pomoc :)
 
Odgovor na temu

barum
Bojan Radosavljevic

Član broj: 52522
Poruke: 418
*.smin-1.sezampro.yu.



+1 Profil

icon Re: PIC18F4550 i USB - pomoc/savet25.05.2009. u 22:31 - pre 181 meseci
Imaš nekoliko kompajlera (wizarda) za HID zaglavlja na netu. Neki su čak urađeni u javi za online prevođenje.

Na sajtu USB organizacije ima nekoliko pdf dokumenata, sećam se da sam odlične primere za tastaturu i miša pronašao u jednom od njih. Tu jedino mogu da se pronađu šta tačno znače bitovi izveštaja, ostala dokumentacija iz drugih izvora je patetično površna. Najbolje bi bilo da sedneš i da razradiš primere za taj gotovi stek koji si skinuo sa mikročipovog sajta. Ta biblioteka se malo teže podešava ali je prilično dobro urađena. Vidi kako stojiš sa engleskim i idi na podforum za USB:
http://www.microchip.com/forums/tt.aspx?forumid=102

I obavezno skini najnoviji stek, "Microchip Application Libraries v2009-03-24.zip" imaš neke gotove primere za HID uređaje, recimo miš koji ide ukrug.
 
Odgovor na temu

jumper2high
2High Jumper

Član broj: 39396
Poruke: 27
*.dynamic.sbb.rs.



+1 Profil

icon Re: PIC18F4550 i USB - pomoc/savet25.05.2009. u 23:25 - pre 181 meseci
Hvala za odgovor, barum!
Probao sam dosta tih "HID" primera, sa misem u krug, sa razmenom podatka izmedju Host-a i Device-a, paljenja i gasenja LED dioda, i nazalost svaki "primer" na koji sam naisao je imao neki nedostatak. Nemoj me pogresno shvatiti, siguran sam da oni rade, samo nisu dovoljno dobro objasnjeni, dokumentovani ili organizovani. Recimo, primer sa misem koji sam preuzeo sa Microchip sajta mi je izgledao kao spansko selo, a onda sam isti taj primer (mis u krug) nasao i u nekom drugom paketu, gde je verovatno bio bolje objasnjen ili bolje sastavljen ili tako nesto, jer sam maltene sve razumeo - u principu.


I dalje se - nazalost - mis nije zavrteo na ekranu, ali makar razumem osnovne stvari. Sada jos samo kada bih uspeo da pohvatam sta sve tacno treba da "ukljucim" u svoj projekat da bih koristio Microchip USB Stack, i sta se od podesavanja, konstanti, prototipova funkcija i ostalih stvari nalaze u tim fajlovima :-)
 
Odgovor na temu

barum
Bojan Radosavljevic

Član broj: 52522
Poruke: 418
*.smin-1.sezampro.yu.



+1 Profil

icon Re: PIC18F4550 i USB - pomoc/savet26.05.2009. u 20:34 - pre 181 meseci
Verovatno si izabrao dobar projekat, "USB Device - HID - Mouse - C18 - PICDEM FSUSB.mcw"

U njemu je već podešeno na 18F4550 ali ako nisi ništa menjao od koda onda je podrazumevano da se koristi sa njihovim HID bootloadrom. Pronađi liniju

Code:

#define PROGRAMMABLE_WITH_USB_HID_BOOTLOADER


u fajlu "HardwareProfile - PICDEM FSUSB.h" i komentuj je a zatim izbaci .lkr fajl iz projekta i ubaci običan 18f4550.lkr koji je u direktorijumu kompajlera.


Tada bi trebalo da se pokrene...

Mogu da se pobrišu nepotrebni fajlovi da ne prave gužvu, bekapuj negde i zatim ostavi samo:

Code:

CleanUp.bat
HardwareProfile - PICDEM FSUSB.h
HardwareProfile.h
mouse.c
USB Device - HID - Mouse - C18 - PICDEM FSUSB.mcp
USB Device - HID - Mouse - C18 - PICDEM FSUSB.mcw
usb_config.h
usb_descriptors.c



Pozdrav
Bojan
 
Odgovor na temu

barum
Bojan Radosavljevic

Član broj: 52522
Poruke: 418
*.smin-1.sezampro.yu.



+1 Profil

icon Re: PIC18F4550 i USB - pomoc/savet26.05.2009. u 22:00 - pre 181 meseci
Ono što bi ti dalje bilo zanimljivo kada (i ako) prorade primeri su makroi

HIDRxPacket
HIDTxPacket

Kojima možeš da namestiš OUT end point 1 da primi tih osam bajtova u memorijski bafer i da namestiš IN endpoint 1 da vrati osam bajtova kompjuteru. Vidi help, i uradi greep pretraživanje da pronađeš u primerima gde se sve i kako konkretno koriste. Konkretno u primeru za miša je uključen EP1 samo u smeru IN veličine 3 bajta.

Da bi host znao da treba da ih koristi u komunikaciji treba ih opisati u deskriptorima.
Prvo, umesto linje u deskriptoru interfejsa, fajl "usb_descriptors.c"
Code:

1,                      // Number of endpoints in this intf

staviti da deskriptor interfejsa sadrži opise za dva endpointa
Code:

2,                      // Number of endpoints in this intf


i izmeniti postojeći:
Code:

    /* Endpoint Descriptor */
    0x07,/*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
    HID_EP | _EP_IN,            //EndpointAddress
    _INTERRUPT,                       //Attributes
    DESC_CONFIG_WORD(3),                  //size
    0x01                        //Interval


u

Code:

    /* Prvi Endpoint Descriptor */
    0x07,/*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT,    // EP1
    HID_EP | _EP_IN,            // IN, od mikrokontolera prema PC-u
    _INTERRUPT,                       // vrsta
    DESC_CONFIG_WORD(8),                  // veličina
    0x01,                        // interval u milisekundama u kojima host(PC) treba da pokušava interupt transfer
    /* Drugi Endpoint Descriptor */
    0x07,/*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT,    // EP1
    HID_EP | _EP_OUT,            // OUT, t.j. od hosta ka mikrokontroleru
    _INTERRUPT,                       // vrsta
    DESC_CONFIG_WORD(8),
    0x01


i naravno, treba ispraviti liniju koja govori o ukupnoj dužini konfiguracionog deskriptora od
Code:

    DESC_CONFIG_WORD(0x0022),   // Total length of data for this cfg

u vrednost za 7 bajtova veću
Code:

    DESC_CONFIG_WORD(0x0029),   // Total length of data for this cfg


Pored toga, treba skoro potpuno napisati kod za deskriptor izveštaja hid_rpt01 u zavisnosti šta tih 8 bajtova treba da predstavljaju u HID kontekstu.

Takođe možeš da ukloniš iz primera sav kod koji nije za PIC18 familiju ili je za neki drugi PIC koji nije 18F4550. Lociraš gde počinje sa #ifdef i nađeš gde se završava sa #elif ili #endif i ukloniš da olakšaš snalaženje, mada vrlo malo koda ima, uglavnom komentarisanje.

 
Odgovor na temu

jumper2high
2High Jumper

Član broj: 39396
Poruke: 27
*.dynamic.sbb.rs.



+1 Profil

icon Re: PIC18F4550 i USB - pomoc/savet26.05.2009. u 23:28 - pre 181 meseci
Ponovo hvala, Barum! Zapravo, najveci problem je bio kondenzator na Vusb koji nisam stavio u pocetku jer nisam uspeo da pronadjem nista u okolini preporucene vrednosti, a mislio sam da to nece preterano uticati na ovako jednostavne testove. Pogresio sam , to itekako utice jer cim sam ubacio dva bloka od po 100nF (u paraleli) sve je proradilo. Igrao sam se USBTrace-om, modifikovao neki obicni primer da uzima jedan bajt, vraca isti bajt uvecan za jedan, sve radi perfektno! Naravoucenije: Ni jedan detalj nije previse mali da bi ga mogli zanemariti!

Takodje sam, po savetu, modifikovao Microchip-ov MOUSE example, pa je i on radio kao zmaj!

Dakle, sve u svemu, najveci problem je prevazidjen - sada je samo stvar sitnih podesavanja, dodavanja vise bajtova, i slicno.


Mada, uskoro cu verovatno preci na "C++" odeljak istog ovog foruma, jer ce mi trebati CPP aplikacija koja ce da "salje i prima" pomenute bajtove
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: PIC18F4550 i USB - pomoc/savet

[ Pregleda: 2245 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.