Omdat de USB poort niet meer weg te denken is, wil ik een poging doen om een PIC direct te laten communiceren met de USB bus.
Hiervoor denk ik aan de PIC18F2455, omdat deze een USB poort heeft, en van het Flash type is.

Heeft iemand hier ervaring mee ?

Ben momenteel ook bezig met USB op die PIC. Microchip heeft een stuk voorbeeld code ontwikkeld dat gratis te downloaden is van hun site. Is echter alleen geschikt voor de C18 compiler.
De code is ontwikkeld voor een PIC met meer I/O, maar die worden toch alleen maar gebruikt voor wat schakelaartjes en ledjes. Dit zal je dus even moeten aanpassen in de code. Een aantal simpele taken zitten in de code, zoals het versturen van een string zodra er een ingang hoog gemaakt wordt, of het ontvangen van een string en afhankelijk daarvan een uitgang aansturen. Best wel eenvoudig en een goede manier om het te leren.
Voor de pc kant is het me nog niet helemaal duidelijk, maar er zit een systeemdriver bij (.inf geloof ik) die de link legt tussen je applicatie en de USB bus.

Download de USB spec en huiver......

De voorbeeld driver is in "C", maar dit is wel een HID device en dus niet geschikt voor hispeed data transfers. (Voor een paar honderd bytes per seconde OK, maar honderden kbytes kan je vergeten).

Je kan dus beter wachten tot iemand anders het gedaan heeft en de code op internet post. :)

D'r zijn wel wat mensen mee bezig maar ik heb al een paar maanden niet gekeken of ze verder zijn. Als ik het zelf zou doen zou het me ongeveer 2 maanden full-time kosten en zou ik een USB protocol analyser van minimaal een paar honderd Euro aan moeten schaffen. (En dat met flink wat jaren assembly ervaring voor het schrijven van drivers voor onze eigen hardware op verschillende platformen).

Op 6 maart 2006 15:14:44 schreef JoWi:
.... D'r zijn wel wat mensen mee bezig maar ik heb al een paar maanden niet gekeken of ze verder zijn. ....

Zou je eens willen informeren / kijken ?

Ik heb het gedaan en het is niet moeilijk hoor. Op het forum van microchip is veel informatie te vinden.

Wat wil je weten?

Ben m'n favorieten doorgelopen en zal een opzetje geven.

Hier een minimaal schema voor 18F4550 met USB, de 2455 heeft alleen andere pins: http://pic18fusb.online.fr/wiki/wikka.php?wakka=WikiHome
Je kristal moet een veelvoud van 4 Mhz zijn.

Leesbaar leesvoer: http://www.beyondlogic.org/usbnutshell/, minder leesbaar http://www.usb.org/developers/devclass_docs/

Hier kan je de verschillende firmware examples downloaden, je heb inderdaad wel de C18 compiler nodig, maar die is ook te downloaden.

Ik gebruik zelf de CDC firmware (RS232 emulatie), lekker makkelijk met HyperTerm of VB6 te gebruiken. Grote voordeel van USB is dat je een (kleine) power supply tot je beschikking heb.

Muis, joystick en keyboard zijn leuk om te proberen maar vind ik niet zo handig.

Als je nogal opziet tegen gebruik van USB kijk even op http://www.lvr.com/ Deze site van Jan Axelson. Deze heeft een ontzettend goed boek geschreven over USB: 'USB Complete'. IMHO het standaard werk dat je wilt hebben als je met USB wilt beginnen.

Daarnaast staat op de site voorbeeld code voor oa. PIC 18F4550 om een HID device te maken. Erg leerzaam. Het USB gedeelte van 4550 en 2550/2555 zijn allemaal identiek. Tja, wat die protocol analyser betreft, hoeft dus niet. Als je een beetje snapt hoe de enumeratie verloopt zie je al snel waar het fout gaat. Meestal pak je toch iets dat werkt en werkt dan vanuit daar verder om het te snappen denk ik.
Overigens is op usb.org ook een goed forum te vinden met een paar experts die erg behulpzaam zijn.

Microchip heeft een goedkoop USB board met daarop de 4550. Kost ca. 50 euro en is een goede manier om te beginnen, je hardware is tenminste al werkend ;)...

USB heeft een behoorlijke leercurve, maar als je gewoon het wilt gaan gebruiken dan zijn er genoeg voorbeelden waarmee je je communicatie gedeelte snel kunt realiseren. Tja, persoonlijke vind ik de productiviteit in C hoger dan in Assembly maar 'k wil hier niet weer een C vs. Assembly discussie uitlokken. Anyway, met behulp van de C code kun je wellicht sneller begrijpen hoe het in elkaar zit. Daarna ben je natuurlijk vrij om een eigen implementatie te maken in C of Assembly ;)

Pas op met code van Microchip. Uiteraard werkt het meestal perfect, echter ze doen soms zaken op een manier die het makkelijk maakt omdat het als voorbeeld dient; maar zodra je er meer meegaat doen dan moet je vaak erg veel wijzigen (voorbeeld is dat er vaak 1 grote while() loop wordt gebruikt ipv gebruik te maken van interrupts). Maar goed, suc6 is een keuze he :D:D:D:...

Wat HID devices betreft is al vermeld dat de datarate vrij laag is max. zo'n 64kbit/sec. Het grote voordeel (vind ik) je hebt geen drivers nodig of .INF file-tjes. Gewoon in je PC met Windows XP/2k/98(2) pluggen en je kunt hem gebruiken.

Op 10 maart 2006 11:09:06 schreef Brem:
Ik heb het gedaan en het is niet moeilijk hoor. Op het forum van microchip is veel informatie te vinden.

Wat wil je weten?

Ik zoek een stukje asm code, zodat ik kan kijken hoe het een en ander is opgezet / ingesteld....

Ik weet niet of dit helemaal de bedoeling is ,maar de firma elomax heeft kant en klare (geprogrameerde) controlers die je direct aan je usb poort kan hangen en dat werkt perfect. Kijk maar ff op (voor uitleg)
http://www.elomax.nl/site/usb/usbhardware.html
en dit is het IC
http://www.elomax.nl/site/usb/iosolution.html
Ik heb het zelf geprobeert en werkt goed xp herkent het ic meteen.

Op 14 maart 2006 22:22:34 schreef MMSoft:
[...]
Ik zoek een stukje asm code, zodat ik kan kijken hoe het een en ander is opgezet / ingesteld....

Een stukje? Noem het maar lappen lappen tekst.
De USB-chapter9 firmware is heftige shit..
Ben nu ook begonnen met de 18F, en heb ervaring met de 16C versie. Het heeft me veel moeite gekost om de boel te laten doen wat ik wilde.
Het was weliswaar HID waar ik mee bezig was, dus lekker afgebakend denk je, maar de descriptors...mijn god, wat heb ik ze vervloekt...

Op 15 maart 2006 10:17:41 schreef Ernst.p:
Ik weet niet of dit helemaal de bedoeling is ,maar de firma elomax heeft kant en klare (geprogrameerde) controlers die je .....

Dat is eigenlijk niet de bedoeling, het is de bedoeling om zelf een PIC18F2455 te proggen.
Maar ik ben mij ervan bewust dat dat een lastig stuk code is.
Het zou fijn zijn al iemand mij een beetje op weg zou willen helpen, door een stuk code te mailen....

De firmware examples van microchip zijn complete voorbeeld programma's waar je zelf op verder kan bouwen. Ze zijn echter wel geschreven in C. Als het ASM moet zijn zou je naar deze post op het microchip forum kunnen kijken http://forum.microchip.com/tm.aspx?m=89669, maar daar weet ik zelf niets van.

USB gebruik je niet door direkt de hardware registers registers aan te spreken (zoals bv USART), maar door API calls naar de firmware. Deze firmware is inderdaad een flinke lap complexe code, maar je hoeft het voorlopig alleen maar te gebruiken, niet te begrijpen.

Ik zou zeggen: Prik je PIC op een breadboard, download een example, programeer hem, en zeg ons waar je vast loop.

Op 16 maart 2006 08:21:35 schreef Brem:
Ik zou zeggen: Prik je PIC op een breadboard, download een example, programeer hem, en zeg ons waar je vast loop.

Hier sluit ik me bij aan.

In de handleiding van het development board van de 4550 staat een schema waardoor de pic zowel usb als extern gevoed kan worden.

Wat je ook nog kunt doen is effe hier kijken:
http://www.create.ucsb.edu/~dano/CUI/
Die jongen is echt goed bezig, ik heb een jaar met hem gewerkt en ik weet dat hij voor contact open staat.
Z'n mail adres is te vinden op die site, maar doe eerst maar eens wat hij daar beschrijft.

Ik ben nu bezig met: http://pe.ece.olin.edu/ece/projects/lab1_18F2455.zip

Als ik het Bestand 'lab1.asm' uit map 'lab1_pic' probeer te compileren met
MPLAB IDE v7.31 dan krijg ik 374 fout meldingen.
Wat is er aan de hand, is dit geen ASM ?
Ik heb natuurlijk het bestand P18F2455.INC toegevoegd.

Enkele regels die een fout meldingen geven:
config BORV = 21
config ICPRT = OFF
goto _if#v(_ifstack#v(_ifstackptr - 1))_#v(_ifclausecount + 1)

Dat lijkt meer op C ofzo...

Jammer, ik zoek dan nog steeds een stukje asm code, zodat ik kan kijken hoe het een en ander is opgezet/ingesteld....

Werkt perfect met MPLAB IDE v7.10 Geen enkele fout.

Ik heb het ook even getest, bij gebrek van een 18F2455 met een 18F2550 en de pc vraagt achter een driver: "ENGR 2210 PIC2455 USB Firmware". Geen idee wat de pic moet doen maar USB verbinding is er ;)

Helaas wat ik ook doe, ik krijg heel wat fout meldingen.
Hierbij de eerste fout meldingen die ik krijg:

Error[176] E:\LAB1_PIC\LAB1.ASM 67 : CONFIG Directive Error: (value "21" not valid for setting "BORV")
Error[176] E:\LAB1_PIC\LAB1.ASM 77 : CONFIG Directive Error: (setting "ICPRT" not found for the processor 18F2455)
Error[176] E:\LAB1_PIC\LAB1.ASM 83 : CONFIG Directive Error: (setting "CP3" not found for the processor 18F2455)
Error[176] E:\LAB1_PIC\LAB1.ASM 89 : CONFIG Directive Error: (setting "WRT3" not found for the processor 18F2455)
Error[176] E:\LAB1_PIC\LAB1.ASM 96 : CONFIG Directive Error: (setting "EBTR3" not found for the processor 18F2455)
Error[149] E:\LAB1_PIC\LAB1.ASM 104 : Directive only allowed when generating an object file
Error[149] E:\LAB1_PIC\LAB1.ASM 121 : Directive only allowed when generating an object file
Error[126] E:\LAB1_PIC\LAB1.ASM 122 : Argument out of range (0CA4 not between 0000 and 7FFF)

Op 19 maart 2006 18:43:15 schreef MMSoft:
Error[149] E:\LAB1_PIC\LAB1.ASM 104 : Directive only allowed when generating an object file

Deze komt denk ik omdat je geen Linker file (18f2455.lkr) in je project hebt?

Deze file '18f2455.lkr' staat in dezelfde directory, en is dus gewoon aanwezig.
Moet ik deze file nog ergens opgeven/instellen ?

Waarvoor dient een Linker file precies ?

Add files bij Linker scripts in je project.

Ik kan geen files toevoegen, deze keuze is niet actief.
Moet ik ergens iets instellen ?

Je hebt geen project aangemaakt!! Het snelste gaat dit onder het menu "Project" met de "Project Wizard...". Daar komt hij vragen waar de bestanden staan en kan je er eventueel toevoegen ;)