ha ik ben inmiddels ook weer verder gegaan met de 18F2455 en USB. Ik heb alles al aan de gang met die Lab 1 ASM code. De PC zie de device als ik hem aansluit en hij komt mooi netjes in mn apparaatbeheer te staan. Via de bijgeleverde programma's "set_ra0.exe" en "clr_ra0.exe" kan ik ook daadwerkelijk de RA0 uitgang van de microcontroller sturen.
Nu komt het punt, ik wil zelf aan de PC kant een Delphi applicatie maken, maar ik heb geen idee welke usb DLL wordt gebruikt door die voorbeeld programmaatjes. De C code van de programmas is wel gegeven, daar wordt verwezen naar een "usb.h", maar dat bestand is dus niet aanwezig. Verder staat er in een ander mapje wel een "_usb.dll" maar hier staat verder geen interface informatie bij. Google laat het hier ook afweten...
Ik heb de code van die duitse site geprobeerd (winusb_test), die is al in delphi geschreven, maar die vindt mijn device weer niet.
Heeft iemand suggesties?
http://www.sprut.de/electronic/pic/8bit/18f/programm/usb2550/usb2550.h…
Bij dit voorbeeld kan ik met Delphi wel communiceren met de PIC.
Helaas krijg ik het hier (nog) niet voor elkaar om zelf een HEX file voor de PIC te maken...
Zie: http://www.circuitsonline.net/forum/view/33809/1/mmsoft
ymoona
voor hobby elektronica projecten => http://ymoona.com/wiki
Op 6 juni 2006 17:35:39 schreef MMSoft:
http://www.sprut.de/electronic/pic/8bit/18f/programm/usb2550/usb2550.h…Bij dit voorbeeld kan ik met Delphi wel communiceren met de PIC.
Helaas krijg ik het hier (nog) niet voor elkaar om zelf een HEX file voor de PIC te maken...
Zie: http://www.circuitsonline.net/forum/view/33809/1/mmsoft
wat is er mis de code van www.ymoona.com?
Daarmee kan ik niet communiceren met Delphi.
Met deze code wel !
Ik heb net mijn eerste Hex file gemaakt (van de demo versie op die site)...
Nu wordt de volgende stap het uitzoeken hoe ik zelf dingen kan aanmaken....
Edit:
Ik zie net dat er een update is van OpenK8055 (helaas is het Potmeter probleem er nog).
[Bericht gewijzigd door MMSoft op ]
ymoona
voor hobby elektronica projecten => http://ymoona.com/wiki
Op 6 juni 2006 20:55:06 schreef MMSoft:
Daarmee kan ik niet communiceren met Delphi.
Met deze code wel !Ik heb net mijn eerste Hex file gemaakt (van de demo versie op die site)...
Nu wordt de volgende stap het uitzoeken hoe ik zelf dingen kan aanmaken....
Edit:
Ik zie net dat er een update is van OpenK8055 (helaas is het Potmeter probleem er nog).
als jij met delphi een dll kan inporteren kan je daarmee ook communiceren. ik wil nu een port gaan maken voor borland c++ builder omdat ik daar prettiger mee kan werken.
in c# lukt het me niet eens op een #include <windows.h> te doen...
Ik heb al een poging gedaan om met die DLL te communiceren !
Maar omdat ik geen gegevens heb over die DLL gaat dat niet.
Heeft iemand gegevens, of voorbeelden over dze DLL ?
Switching Power
Hobby, maar sample met mate. | BumbleBee plus pack | Weerstand calculator voor je PSP
Ik ben ook bezig met de PIC18F2455 en de USB poort en dat gaat goed.
Ik gebruik Proton Basic ik heb nu de PIC geprogammerd als een CDC device, in windows is dat een gewone seriele poort en op de pic een hardware uart, dus de software voor de pic en pc kan dan lekker simpel blijven.
Enigste nadeel is dat het niet er snel gaat, maar wel erg makkelijk
.
ymoona, het project op je site lijkt me leuk om eens te proberen maar spijtig genoeg zal voor het meerendeel van ons de pic source niet echt bruikbaar zijn omdat ze voor de CCS compiler geschreven is en die kost toch al direct zo'n $175. De compiler demo laat het ook niet toe om de 18F2550 source te compileren.
Op 7 juni 2006 17:18:15 schreef Switching Power:
....
Enigste nadeel is dat het niet er snel gaat, maar wel erg makkelijk.
Wat snelheid betreft valt het voorbeeld waar ik mee bezig ben ook heel erg tegen.
Ik stuur 4 led's als een looplicht aan, maar dat gaat zo traag dat je ledje voor ledje aan ziet gaan....
[Bericht gewijzigd door MMSoft op ]
Woeha ik ben er ongeveer achter hoe de PC software in elkaar steekt
Het is nog een lang traject voor ik iets werkend heb, maar het begin is er.
Waar ik nu mee bezig ben:
- Lab 1 firmware assembler version draait op mn 18F2455
- Met Libusb (win32) inf-wizard maak ik de drivers voor de device
Nu ben ik erachter gekomen dat de voorbeeld programmas gebruik maken van libusb0.dll. Erg leuk en aardig, maar de interface beschrijving van de DLL komt alleen in rare formaten als gcc, mscv en bcc. Daar kan ik natuurlijk helemaal niks mee, ik wil gewoon delphi! 
Ik kwam er ook achter dat er een aantal proto's in de bijgeleverde usb.h file nergens heen verwezen. Heeee misschien staan die wel in de DLL? FF testen met delphi en ja hoor! Als een functie niet in een DLL bestaat krijg je normaal wel een rare foutmelding dat er geen entrypoint gevonden kan worden voor de functie. Deze melding kreeg ik niet, dus ik zat op het goede spoor.
Na wat C naar delphi vertalingen ben ik inmiddels in staat om een aantal functies van de DLL aan te spreken. Zo kan ik nu bijvoorbeeld uitlezen hoeveel bussen en devices er zijn aangesloten. Komt dit bekend voor? Jazeker, dat is hetzelfde wat je ziet met die testprogramma's 'set_ra0.exe' en 'clr_ra0.exe'.
Het blijkt dat de documentatie van de win32 DLL nogal slecht is, maar de originele Libusb (daar waar de win32 van af is geleid) staat wel weer goed beschreven:
Voor de geinteresseerden
Ik ga snel verder met het porten van de functies naar delphi en hoop snel wat usb communicatie werkend te krijgen.
Ik hou jullie op de hoogte...
- edit -
Screenshotje 
Inclusief mijn eigen device (04D8 - 0001) 
Ik ben alweer een stukje verder.
Mogelijkheden op dit moment:
-Versie nummer wijzigen (nu als test versie 1.2)
-4 Uitgangen aansturen (Aan/Uit/Toggle).
-PortA, PortB en PortC inlezen (dus ook ingangen inlezen).
-1 Potmeter inlezen.
-LED 1 laten knipperen
-Looplicht met 4 LED's
Dit alles met MPLAB-C18 / Delphi.
Nu ga ik een poging doen om een Register uit te lezen.
Zodat ik deze waarde in Delphi kan zien.
http://members.lycos.nl/mmsoft/Software/PIC_Project.zip
(Rechtermuis klik - Doel opslaan als)
Edit:
Project uitgebreid met:
Waarde naar Poort sturen.
Goed bezig MMSoft 
Je gebruikt nu die duitse code voor delphi zeker? Ik zou die ook wel willen gebruiken, alleen is die volgens mij niet in staat om een vendor-specific usb device te vinden, zoals de assembly firmware van Lab1.
Maare, als je de poorten kunt uitlezen, dan kun je toch ook de registers uitlezen? Aangezien een poort ook een register is?
Ik zit nu overigens een beetje vast met mijn delphi programma. Als ik namelijk het usb_open commando uitvoer, dan krijg ik een ongeldige device handle terug (altijd nil). Beetje raar omdat het een eenvoudige instructie is, er zal dus wel iets mis zijn met mijn vertaling van C naar delphi. Ik blijf voorlopig nog even verder puzzelen.
Op 9 juni 2006 11:07:42 schreef KillerB the Supreme:
...Je gebruikt nu die duitse code voor delphi zeker? ...
Inderdaad, Site: http://www.sprut.de/electronic/pic/8bit/18f/programm/usb2550/usb2550.h…
Het is inderdaad een heel gepuzzel 
[Maare, als je de poorten kunt uitlezen, dan kun je toch ook de registers uitlezen? Aangezien een poort ook een register is?
Dat is zo, maar nu heb ik nog een entrypoint nodig, en die moet ik waarschijnlijk maken (in de DLL ?)
Stukje uit 'user.h'
enum
{
READ_VERSION = 0x00,
LED_ONOFF = 0x31,
READ_SWITCH = 0x32,
RD_POT = 0x37,
RESET = 0xFF
}CMD;
byte len;
Stukje uit 'user.c'
case READ_VERSION:
//dataPacket._byte[1] is len
dataPacket._byte[2] = MINOR_VERSION;
dataPacket._byte[3] = MAJOR_VERSION;
counter=0x04;
break;
//LEDs ein und aus schalten
case LED_ONOFF:
counter = 0x01;
if(dataPacket.ID == 0)
{
mLED_1_On();
}
else if(dataPacket.ID == 1)
{
mLED_2_On();
}
else if(dataPacket.ID == 2)
{
mLED_3_On();
}
else if(dataPacket.ID == 3)
{
mLED_4_On();
}
else if(dataPacket.ID == 4)
{
mLED_1_Off();
}
else if(dataPacket.ID == 5)
{
mLED_2_Off();
}
else if(dataPacket.ID == 6)
{
mLED_3_Off();
}
else if(dataPacket.ID == 7)
{
mLED_4_Off();
}
else
counter = 0x00;
break;
//Potistellung auslesen
case RD_POT:
ReadPOT();
dataPacket._byte[1] = ADRESL;
dataPacket._byte[2] = ADRESH;
counter=0x03;
break;
case RESET:
Reset();
break;
Ik denk dat dit entrypoint zijn:
READ_VERSION
LED_ONOFF
READ_SWITCH
RD_POT
RESET
[Bericht gewijzigd door MMSoft op ]
In de DLL hoef je niks aan te passen, daar is het juist een DLL voor. Je gebruikt alleen de interface van de DLL om (lowlevel) usbroutines aan te spreken. Voor de duidelijkheid, in de interface van de DLL moet je dus ook niks gaan aanpassen (usbdll.pas).
Ik weet niet precies hoe je nu de poorten doorstuurt, maar als je nu zelf een mechanisme bedenkt van 2 bytes, de eerste geeft aan welk register je verstuurd, en de 2e geeft de inhoud van het register aan. Dan kun je dus alle registers, en ook poorten versturen.
Op 9 juni 2006 11:07:42 schreef KillerB the Supreme:
...Ik zit nu overigens een beetje vast met mijn delphi programma. Als ik namelijk het usb_open commando uitvoer, dan krijg ik een ongeldige device handle terug (altijd nil). Beetje raar omdat het een eenvoudige instructie is, er zal dus wel iets mis zijn met mijn vertaling van C naar delphi. Ik blijf voorlopig nog even verder puzzelen.
De VID & PID in het juiste format opgegeven ?
Zo heb ik het:
pVID_PID:PCHAR8='vid_04d8&pid_000c'; //VID & PID
Ik weet niet precies hoe je nu de poorten doorstuurt, maar als je nu zelf een mechanisme bedenkt van 2 bytes, de eerste geeft aan welk register je verstuurd, en de 2e geeft de inhoud van het register aan. Dan kun je dus alle registers, en ook poorten versturen.
Bedankt, ik ga hier mee aan de slag...
[Bericht gewijzigd door MMSoft op ]
Ok, als je nu eens het volgende doet:
in enumeration:
READ_REGISTER = 0x38
en dan in de case statement zoiets als:
case READ_REGISTER:
(indirect register pointer) = dataPacket.ID
dataPacket._byte[1] := (indirect register value)
counter = 1; //geen idee of dit nodig is?
break;
Op deze manier stuur je dus met de datapacket.ID het register nummer mee dat je wilt uitlezen, deze plaats je in het indirecte register van de PIC (je moet even kijken in de datasheet hoe dat precies gaat, iets met INDF assembly instructie d8 ik). De waarde van het indirecte register stuur je vervolgens weer terug, zelfde manier als je de potmeter waarde verstuurd. Eventueel geef je ook nog weer het adresnummer mee, voor controle.
Misschien kan dat indirecte adresseren wel veel makkelijker in C, met pointers oid. Moet je ff kijken.
Op 9 juni 2006 11:40:31 schreef MMSoft:
De VID & PID in het juiste format opgegeven ?
Ja die heb ik goed opgegeven, maar hij vind geen enkel apparaat. Ik denk dat ie alleen usb devices selecteert die bepaalde firmware hebben, iig geen vendor specific usb device.
Ik had al een poging gedaan met READ_IN = 0x38
En dan case READ_IN:
Maar dan geeft Delphi een fout melding, Undeclared identifier READ_IN.
Waar de andere gedeclareed worden zie in niet.
Ik vemoed dat dit in de DLL zit.
Zodoende had ik het over de DLL aanpassen...
Wil je perse dat project voor elkaar krijgen ?
Als je wilt, dan stuur ik je zo alles wat ik van mijn project heb en maken we er gewoon een gezamelijk project van 
In de usbdll.pas staat het volgende:
LED_ONOFF = $31;
READ_SWITCH = $32;
RD_POT = $37;
RESET = $FF;
Uiteraard staat dit helemaal niet op de goede plaats aangezien deze declaraties applicatie afhankelijk zijn en helemaal niks met de dll-interface te maken hebben. Beste kun je deze declaraties uit de usbdll.pas halen en ze in usb.pas zetten. Hier moet je dan ook je nieuwe type toevoegen:
LED_ONOFF = $31;
READ_SWITCH = $32;
RD_POT = $37;
RESET = $FF;
READ_IN = $38
Op 9 juni 2006 12:00:32 schreef MMSoft:
Wil je perse dat project voor elkaar krijgen ?
Als je wilt, dan stuur ik je zo alles wat ik van mijn project heb en maken we er gewoon een gezamelijk project van
Ik wil graag die assembly versie voor elkaar krijgen. Dit komt later enorm van pas bij mn tijdkritische interrupt routines. Ik weet ook verder niet hoe het zit met de code waarmee jij aan de gang bent, maar je gaf al aan dat ie nogal traag was met communicatie. Dat zou met die vendor specific code als het goed is niet zo zijn.
...komt later enorm van pas bij mn tijdkritische interrupt routines. Ik weet ...
Snelheid heb ik ook nodig !
Als ik een LED laat knipperen, dan wordt nu telkens
een Pipe geopend.
De actie wordt uitgevoerd (Led aan)
de Pipe wordt gesloten
Daarna wordt een Pipe geopend
De actie wordt uitgevoerd (Led Uit)
de Pipe wordt gesloten
etc. ect.
Dat openen en sluiten is dat telkens nodig vraag ik mij af ?
[Bericht gewijzigd door MMSoft op ]
Switching Power
Hobby, maar sample met mate. | BumbleBee plus pack | Weerstand calculator voor je PSP
Hier staat een programmatje waarmee je alle (echt alle) gegevens van alle USB apparaten kan bekijken ook als het apparaat nog niet is geinstallerd in windows, handig om fouten op te sporen
.