USB mit Procedure auslesen Pic-controller 2550
Verfasst: 28.05.2008 12:11
Hallo Leute, ich versuche über Usb einen PIC zu beschreiben und auszulesen, ich sende immer 64Byte hin und her .. das klappt ganz wunderbar bis auf eine Sache..
Das beschreiben und auslesen des PICs geht nur in der Hauptschleife, es soll aber in eine Procedure verpackt werden.. Eine Procedure zum lesen und eine zum schreiben
Und genau dort geht es nicht mehr.
Ich bekomme dann immer die Fehlermeldungen in beiden Proceduren => invalid memory access (read error at address 64)
Ich habe hier mal den Code.. ich selber vermute das ein Parameter nicht übergeben wird.. aber welcher.. ich finde den Fehler einfach nicht und nun brauche ich Hilfe von Profis..
Ich bedanke mich schon mal von allen, die sich meinen problem annehmen..
gruß Günni

Das beschreiben und auslesen des PICs geht nur in der Hauptschleife, es soll aber in eine Procedure verpackt werden.. Eine Procedure zum lesen und eine zum schreiben
Und genau dort geht es nicht mehr.

Ich bekomme dann immer die Fehlermeldungen in beiden Proceduren => invalid memory access (read error at address 64)
Ich habe hier mal den Code.. ich selber vermute das ein Parameter nicht übergeben wird.. aber welcher.. ich finde den Fehler einfach nicht und nun brauche ich Hilfe von Profis..
Code: Alles auswählen
hDLLINST.l = LoadLibrary_(@"usb.dll")
Prototype.l _MPUSBGetDLLVersion()
Prototype.l _MPUSBGetDeviceCount(pVID_PID.s)
Prototype.l _MPUSBOpen(instance,pVID_PID.s,pEP.s,dwDir,dwReserved)
Prototype.l _MPUSBWrite(handle,pData,dwLen,pLength,dwMilliseconds)
Prototype.l _MPUSBRead(handle,pData,dwLen,pLength,dwMilliseconds)
Prototype.l _MPUSBClose(handle)
Global _MPUSBGetDLLVersion._MPUSBGetDLLVersion = GetProcAddress_(hDLLINST.l , "_MPUSBGetDLLVersion")
Global _MPUSBGetDeviceCount._MPUSBGetDeviceCount = GetProcAddress_(hDLLINST.l , "_MPUSBGetDeviceCount")
Global _MPUSBOpen._MPUSBOpen = GetProcAddress_(hDLLINST.l , "_MPUSBOpen")
Global _MPUSBWrite._MPUSBWrite = GetProcAddress_(hDLLINST.l , "_MPUSBWrite")
Global _MPUSBRead._MPUSBRead = GetProcAddress_(hDLLINST.l , "_MPUSBRead")
Global _MPUSBClose._MPUSBClose = GetProcAddress_(hDLLINST.l , "_MPUSBClose")
Global Dim USB_In. c (64)
Global Dim USB_Out.c (64)
#VID = "vid"
If Usbgeraete = _MPUSBGetDeviceCount(#VID)
MessageRequester("Info", "Kein Device gefunden", 0)
;End
EndIf
;----------------------------------------------------------------------------------
Procedure USB_Schreiben()
S = _MPUSBOpen (0, #VID, "\MCHP_EP1" , 0 , 0)
_MPUSBWrite(S, @USB_Out(0), 64, 0, 50)
_MPUSBClose(S)
EndProcedure
Procedure USB_Lesen()
L = _MPUSBOpen (0, #VID, "\MCHP_EP1" , 1 , 0)
_MPUSBRead (L , @USB_In(0) , 64 ,64 + @USB_In(0) , 100)
_MPUSBClose(L)
EndProcedure
;---------------------------------------------------------------------------------
If OpenWindow(0, 246, 185, 850, 311, "USB-Test", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
CreateGadgetList(WindowID(0))
StringGadget(1, 20, 10, 810, 90, "")
StringGadget(2, 20, 160, 810, 90, "")
ButtonGadget(3, 380, 120, 130, 20, "ok")
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case 3
For Q = 0 To 64
USB_Out(Q) = Val(StringField(GetGadgetText(1), Q + 1, ",") )
Next Q
;USB_Schreiben()
USB_Lesen()
;---------------------------------------------------------------------------------
;{ USB_Schreiben
S = _MPUSBOpen (0, #VID, "\MCHP_EP1" , 0 , 0); diese beiden sollen als
_MPUSBWrite(S, @USB_Out(0), 64, 0, 100) ; Proceduren ausgelagert
_MPUSBClose(S) ; werden.. siehe oben..
;}
;{ USB_Lesen
Dim USB_In.c(64)
L = _MPUSBOpen (0, #VID, "\MCHP_EP1" , 1 , 0)
_MPUSBRead (L, @USB_In (0) , 64 , 64 + @USB_In(0), 100)
_MPUSBClose(L)
;}
;---------------------------------------------------------------------------------
Text.s = ""
For I = 0 To 63
Text + Str(USB_In(I))+", "
Next i
SetGadgetText(2, Text)
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
End
gruß Günni