USB i PIC18 serien
USB i PIC18 serien
Jag håller på att försöka göra så att en PIC kommunicerar via USB med PC. Men USB är ju ett riktigt idiotiskt protokoll, hur jobbigt som helst att lära sig.
Jag undrar om någon har erfarenhet av USB i PIC18 serien i Hitech C Compiler? Och kod som man kan få titta på. En internet sida med kod och förklaringar vore trevligt. Särskilt hur man använder endpoints.
Jag har bara lyckats få Windows att hitta att ett USB device har anslutits har inte lyckats göra så att PIC medelar ett ID och övrig information.
Jag undrar om någon har erfarenhet av USB i PIC18 serien i Hitech C Compiler? Och kod som man kan få titta på. En internet sida med kod och förklaringar vore trevligt. Särskilt hur man använder endpoints.
Jag har bara lyckats få Windows att hitta att ett USB device har anslutits har inte lyckats göra så att PIC medelar ett ID och övrig information.
Det är lite otydligt vad du menar med "idiotiskt", men hur som helst...
Vad har du läst ?
Vilka exempel har du studerat ?
Ska du köra en egen driver, eller bara HID (eller liknande) ?
Vilken PIC ?
Jag rekomenderar att du skaffar "USB Complete" av Jan Axelson.
Mycket bra läsning där ! Kom nyligen ut i 3'de upplagan.
Jan Axelson har också en USB sida : http://www.lvr.com/usb.htm .
Mycket bra info där...
Jag utgår från att du har laddat ner och studerat de exempel som
Microchip har...
Här är ett inlägg på PICLIST från en kille som har ett kit för assembler, men
du kanske kan hitta något som kan vara till nytta där...
Vad har du läst ?
Vilka exempel har du studerat ?
Ska du köra en egen driver, eller bara HID (eller liknande) ?
Vilken PIC ?
Jag rekomenderar att du skaffar "USB Complete" av Jan Axelson.
Mycket bra läsning där ! Kom nyligen ut i 3'de upplagan.
Jan Axelson har också en USB sida : http://www.lvr.com/usb.htm .
Mycket bra info där...
Jag utgår från att du har laddat ner och studerat de exempel som
Microchip har...
Här är ett inlägg på PICLIST från en kille som har ett kit för assembler, men
du kanske kan hitta något som kan vara till nytta där...
Here's the little project I've been working on lately. This is my first
18F project, a pressure sensitive (strain gage) based DDR dancepad
(basically a gamepad), with USB, Xbox (crippled USB), and PS2
interfaces. Mainly, I've modified Bradley A. Minch's driver, and made it
pure asm code (no structured macros, which were upsetting gpasm).
http://www.marcansoft.com/subidos/sdgp.zip
The project is unfinished, but I figured I'd release it since the USB
stuff is mostly done and working.
The whole bundle consists of:
- config.inc: some configuration #defines, only some USB stuff for now
- hd44780.[asm|inc]: driver for a character LCM based around the hd44780
module. Fairly simple.
- messages.inc: messages to show on the LCD screen. Also includes an
interpreter for them (prints stuff out in different ways according to
commands embedded withing the actual messages. Allows for vertical
scrolls, defining custom CGRAM characters, etc. Might be of use for some).
- stddefs.[asm|inc]: a set of definitions for common code. Contains ISR
handler (saves/restores context and calls actual handlers), vectors, and
a set of registers defined in the access bank for common usage.
- usb.[asm|inc]: the bulk of the usb driver. Mainly the same as Minch's
code, but with plain asm. I also used some slightly different names for
registers (the ones Microchip uses in the datasheets), and changed some
things here and there.
- usbdefs.inc: defines for constants and registers for USB
- usbdesc.inc: USB descriptors and the code to read them
- utils.[asm|inc]: some utility functions. Some from piclist.com, others
mine, others from Microchip datasheets, etc. Mostly straightforward
stuff. If you use this, regenerate the delay stuff for your own
clockspeed. I'm not even sure if they are accurate, since sometimes I
just hacked the constants to save time. Will be cleaned up once the code
gets close to complete.
- sgdp.pikprj: the project file for pikdev, in case anyone here uses that.
Things that do work:
- USB HID mode. At least input reports work. Haven't tested output. The
code passes the USBCV tests, although it does ignore a couple USB
requirements (specifically, I am currently ignoring any current draw
considerations right now, and the frequency of input reports is fixed
and does not follow the spec closely. Will be fixed eventually. Probably
many other details are not accurate too.)
- The LCD driver, and message code.
- interrupts, etc
- pretty much what I do in the main code and utils, namely EEPROM
handling, reading A/D, PWM, etc.
Things that do not work:
- Xbox mode. The Xbox uses basically a crippled usb HID mode, with no
report descriptor and nonstandard class/subclass. This works with Xbox
pad drivers on the PC, but the Xbox doesn't like my device. Maybe it
requires some extra vendor request, or maybe it doesn't like my USB hub
(Xbox pads have an internal hub and AFAIK the Xbox requires that the
actual pad device be on port 0 of it. Interestingly, it does work on the
Xbox while on the mod-chip menu, which I presume uses a different driver.)
- PSX/PS2 interface. Not implemented yet. I basically use SPI slave mode
which is very similar to the PS2 SIO bus, plus some extra control
signals. I've gotten it working on a 16F876, so it should be fairly easy
to get working here.
The code is a work-in-progress. It has some hacks etc right now (I've
had my share of oddities with interrupts, etc.). Keep in mind though
that I'm not a PIC expert, so some things may be utterly wrong or just
plain not the proper way of doing things. Constructive criticism is of
course appreciated.
Jag har läst PIC datablad och exempel från microchip men dessa är anpassade för deras C compiler vilket inte funkar med HT soft C compiler. Har även läst en del på http://www.beyondlogic.org/usbnutshell/usb1.htm
Jag hade tänkt börja med HID och sen försöka göra en egen driver.
PIC18F2455 hade jag tänkt använda.
Dina tips verkar bra, men jag undrar om du själv gjort något projekt med USB.
Jag hade tänkt börja med HID och sen försöka göra en egen driver.
PIC18F2455 hade jag tänkt använda.
Dina tips verkar bra, men jag undrar om du själv gjort något projekt med USB.
Hej!
Har själv gått en längre tid nu och funderar/läst det mesta som finns på nätet om hur jag skall göra för att kunna kommunicera via USB. Vill själv förmodligen använda mig av någon av 18F2550/4550. Skulle vilja använda mig av HID-klassen, DevC++ för att skriva applikationen i PCn.
Jag får väl sätta mig ner och studera sodjans tips och se om jag kan komma vidare.
Jag har även hittat några ex-jobb med USB-applikationer som jag ev tänkte gå vidare med.
Har själv gått en längre tid nu och funderar/läst det mesta som finns på nätet om hur jag skall göra för att kunna kommunicera via USB. Vill själv förmodligen använda mig av någon av 18F2550/4550. Skulle vilja använda mig av HID-klassen, DevC++ för att skriva applikationen i PCn.
Jag får väl sätta mig ner och studera sodjans tips och se om jag kan komma vidare.
Jag har även hittat några ex-jobb med USB-applikationer som jag ev tänkte gå vidare med.
- bengt-re
- EF Sponsor
- Inlägg: 4829
- Blev medlem: 4 april 2005, 16:18:59
- Skype: bengt-re
- Ort: Söder om söder
- Kontakt:
Lite feg lösning runt problemet, men FTDI ( http://www.ftdichip.com/ ) är annars en lysande lösning för att slippa en massa problem. Man får en stabil och bra seriell kommunikation på ett enkelt sätt och har ändå kvar lite mer avancerade möjligheter med att sätta ett EEPROM på kretsen så att man kan enumerera flera chip till samma dator, välja en annan drivrutin och så vidare.
PIC arnas USB stöd är säkert bra, men har man brått så går det oftare fortare att få något att fungera med FTDI´s chip.
PIC arnas USB stöd är säkert bra, men har man brått så går det oftare fortare att få något att fungera med FTDI´s chip.
Feglösning och feglösning. Alla lösningar är bra utom de dåliga. Dock är det så att jag har lite andra önskemål som jag vill att PIC-processorn skall göra. Så jag vill nog ändå gå på PIC-spåret. Fixar jag inte det så får jag väl titta närmare på FTDI-chipet.
På http://forum.microchip.com/ som sodjan föreslog så finns det förhoppningsvis en del info att hämta. Har bara kollat in det snabbt ännu.
På http://forum.microchip.com/ som sodjan föreslog så finns det förhoppningsvis en del info att hämta. Har bara kollat in det snabbt ännu.
Kod över USB och hitech
Ett bra ställe att leta saker till hitech är hitech:s forumt
här finns lite delad kod som folk har gjort, från detta ska det gå att göra om de andra sakerna som finns i microchips USB framework.
http://www.htsoft.com/forum/all/postlis ... code_share
och "CDC USB Serial Demo on 18F4550 port to Hitech"
här finns lite delad kod som folk har gjort, från detta ska det gå att göra om de andra sakerna som finns i microchips USB framework.
http://www.htsoft.com/forum/all/postlis ... code_share
och "CDC USB Serial Demo on 18F4550 port to Hitech"
- PHermansson
- EF Sponsor
- Inlägg: 4340
- Blev medlem: 22 december 2004, 00:46:38
- Ort: Särestad Grästorp
- Kontakt:
Själv tycker jag pic18Fusb Wiki (http://pic18fusb.online.fr/wiki/wikka.p ... a=WikiHome) är intressant, även om det inte är så mycket c-kod.
Själv har jag kommit så långt att jag byggt ett demokort med en led och fixat kod som får lysdioden att blinka. Ska bli kul att se om jag lyckas få igång usb'n oxå!
Själv har jag kommit så långt att jag byggt ett demokort med en led och fixat kod som får lysdioden att blinka. Ska bli kul att se om jag lyckas få igång usb'n oxå!
- PHermansson
- EF Sponsor
- Inlägg: 4340
- Blev medlem: 22 december 2004, 00:46:38
- Ort: Särestad Grästorp
- Kontakt:
Glömde nämna denna länk förut.
http://www.hobbypic.com/
Går man vidare under PicUSB hittar man kanske något användbart. Sidan är visserligen på spanska men kör man den genom
http://babelfish.altavista.com/babelfish/tr
och väljer spanska -> engelska kan man ju alltid få ut någonting.
http://www.hobbypic.com/
Går man vidare under PicUSB hittar man kanske något användbart. Sidan är visserligen på spanska men kör man den genom
http://babelfish.altavista.com/babelfish/tr
och väljer spanska -> engelska kan man ju alltid få ut någonting.
- PHermansson
- EF Sponsor
- Inlägg: 4340
- Blev medlem: 22 december 2004, 00:46:38
- Ort: Särestad Grästorp
- Kontakt:
Jag har nu följt guiden om usbbootloader på pic18Fusb Wiki och har nu fått upp min 4550 som en okänd enhet i Windows
Spännande!
Nästa steg - PC drivrutin installerad. 4550'n är nu installerad i Win Xp som en 'PIC18F4550 Family Device'.
Ska strax gå vidare och se om jag kan ladda in program i Pic'en via usb...
EDIT:
Har nu fortsatt guiden och laddat in Microchips demoprogram i Pic'en med hjälp av bootloadern och det PC-program som medföljer. Allt funkar, så nu ska vi se om HID-exemplet (HID Mouse moving (tutorial)) funkar.
Fungerar fint det här med! (Flyter ovanligt bra idag
.
Fixade till koden enligt instruktionerna, laddade in den med bootloadern och upp kom en ny HID-enhet i Windows. Muspekaren började röra sig i cirklar precis som den skulle.
Hmm blev ett långt inlägg... Kontentan kan väl vara att guiderna jag använt fungerar bra, och att man kan använda dem som en 'blackbox' för att komma igång. Det kan förvisso vara intressant att förstå exakt vad som händer, men med tanke på USB-protokollets komplexitet låter jag det vara tills vidare.

Nästa steg - PC drivrutin installerad. 4550'n är nu installerad i Win Xp som en 'PIC18F4550 Family Device'.
Ska strax gå vidare och se om jag kan ladda in program i Pic'en via usb...
EDIT:
Har nu fortsatt guiden och laddat in Microchips demoprogram i Pic'en med hjälp av bootloadern och det PC-program som medföljer. Allt funkar, så nu ska vi se om HID-exemplet (HID Mouse moving (tutorial)) funkar.
Fungerar fint det här med! (Flyter ovanligt bra idag

Fixade till koden enligt instruktionerna, laddade in den med bootloadern och upp kom en ny HID-enhet i Windows. Muspekaren började röra sig i cirklar precis som den skulle.
Hmm blev ett långt inlägg... Kontentan kan väl vara att guiderna jag använt fungerar bra, och att man kan använda dem som en 'blackbox' för att komma igång. Det kan förvisso vara intressant att förstå exakt vad som händer, men med tanke på USB-protokollets komplexitet låter jag det vara tills vidare.