Control de dispositivos a través del módulo USB del PIC18F45/2550

Hola Angel
Si que estoy perdido, entre el trabajo y mi mujer, no tengo tiempo para nada.
Tranquilo, ya sabras lo que es esto cuando te cases. Disfruta ahora que estas soltero.
Ademas este problema lo tienen todos los amantes a la informatica y electronica.

Yo tambien estoy ansioso a que Moyano saque este manual.

Un saludo a todos
 
Buenas Evo x86 como has conseguido hacer funcionar el easyHID con windows 7? Yo tengo el VB 2008 y no se que hacer para que me funcione, la unica solucion que e encontrado seria cambiar mi sistema operativo :S
Un saludo
 
buen di papichulo92 aki esta el codigo que encontre en un foro, es la covnersion del codigo generado por easyHID a vsiual basic . net, funciona bien en visual 2010 en win 7 x32, no c como ahcerlo funcioanr en x64 si alguien sabe porfavor decriem como
nota(no lo converti yo)
////////////////////////////// el codigo de la form nombre Form1.vb
Option Strict Off
Option Explicit On

Public Class Form1
Inherits System.Windows.Forms.Form

' vendor and product IDs
Private Const VendorID As Short = 6017
Private Const ProductID As Short = 2000

' read and write buffers
Private Const BufferInSize As Short = 8
Private Const BufferOutSize As Short = 8
Dim BufferIn(BufferInSize) As Byte
Dim BufferOut(BufferOutSize) As Byte

' ****************************************************************
' when the form loads, connect to the HID controller - pass
' the form window handle so that you can receive notification
' events...
'*****************************************************************
Private Sub MainForm_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
' do not remove!
ConnectToHID(Me.Handle.ToInt32)
End Sub

'*****************************************************************
' disconnect from the HID controller...
'*****************************************************************
Private Sub MainForm_FormClosed(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
DisconnectFromHID()
End Sub

'*****************************************************************
' a HID device has been plugged in...
'*****************************************************************
Public Sub OnPlugged(ByVal pHandle As Integer)
If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then
' ** YOUR CODE HERE **
TextBox1.Text = "plugged"
End If
End Sub

'*****************************************************************
' a HID device has been unplugged...
'*****************************************************************
Public Sub OnUnplugged(ByVal pHandle As Integer)
If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then
hidSetReadNotify(hidGetHandle(VendorID, ProductID), False)
TextBox1.Text = "unplugged"
End If
End Sub

'*****************************************************************
' controller changed notification - called
' after ALL HID devices are plugged or unplugged
'*****************************************************************
Public Sub OnChanged()
' get the handle of the device we are interested in, then set
' its read notify flag to true - this ensures you get a read
' notification message when there is some data to read...
Dim pHandle As Integer
pHandle = hidGetHandle(VendorID, ProductID)
hidSetReadNotify(hidGetHandle(VendorID, ProductID), True)
End Sub

'*****************************************************************
' on read event...
'*****************************************************************
Public Sub OnRead(ByVal pHandle As Integer)
' read the data (don't forget, pass the whole array)...
If hidRead(pHandle, BufferIn(0)) Then
' ** YOUR CODE HERE **
' first byte is the report ID, e.g. BufferIn(0)
' the other bytes are the data from the microcontroller...
TextBox1.Text = BufferIn(1)
End If
End Sub
End Class


////////////////////////////////////////////////////////////el codigo del maneja de la dll nombre mcHIDInterface.vb


Option Strict Off
Option Explicit On
Imports System
Imports System.Threading
Imports System.Runtime.InteropServices


Module HIDDLLInterface
' this is the interface to the HID controller DLL - you should not
' normally need to change anything in this file.
'
' WinProc() calls your main form 'event' procedures - these are currently
' set to..
'
' MainForm.OnPlugged(ByVal pHandle as long)
' MainForm.OnUnplugged(ByVal pHandle as long)
' MainForm.OnChanged()
' MainForm.OnRead(ByVal pHandle as long)


' HID interface API declarations...
Declare Function hidConnect Lib "mcHID.dll" Alias "Connect"(ByVal pHostWin As Integer) As Boolean
Declare Function hidDisconnect Lib "mcHID.dll" Alias "Disconnect"() As Boolean
Declare Function hidGetItem Lib "mcHID.dll" Alias "GetItem"(ByVal pIndex As Integer) As Integer
Declare Function hidGetItemCount Lib "mcHID.dll" Alias "GetItemCount"() As Integer
Declare Function hidRead Lib "mcHID.dll" Alias "Read"(ByVal pHandle As Integer, ByRef pData As Byte) As Boolean
Declare Function hidWrite Lib "mcHID.dll" Alias "Write"(ByVal pHandle As Integer, ByRef pData As Byte) As Boolean
Declare Function hidReadEx Lib "mcHID.dll" Alias "ReadEx"(ByVal pVendorID As Integer, ByVal pProductID As Integer, ByRef pData As Byte) As Boolean
Declare Function hidWriteEx Lib "mcHID.dll" Alias "WriteEx"(ByVal pVendorID As Integer, ByVal pProductID As Integer, ByRef pData As Byte) As Boolean
Declare Function hidGetHandle Lib "mcHID.dll" Alias "GetHandle"(ByVal pVendoID As Integer, ByVal pProductID As Integer) As Integer
Declare Function hidGetVendorID Lib "mcHID.dll" Alias "GetVendorID"(ByVal pHandle As Integer) As Integer
Declare Function hidGetProductID Lib "mcHID.dll" Alias "GetProductID"(ByVal pHandle As Integer) As Integer
Declare Function hidGetVersion Lib "mcHID.dll" Alias "GetVersion"(ByVal pHandle As Integer) As Integer
Declare Function hidGetVendorName Lib "mcHID.dll" Alias "GetVendorName"(ByVal pHandle As Integer, ByVal pText As String, ByVal pLen As Integer) As Integer
Declare Function hidGetProductName Lib "mcHID.dll" Alias "GetProductName"(ByVal pHandle As Integer, ByVal pText As String, ByVal pLen As Integer) As Integer
Declare Function hidGetSerialNumber Lib "mcHID.dll" Alias "GetSerialNumber"(ByVal pHandle As Integer, ByVal pText As String, ByVal pLen As Integer) As Integer
Declare Function hidGetInputReportLength Lib "mcHID.dll" Alias "GetInputReportLength"(ByVal pHandle As Integer) As Integer
Declare Function hidGetOutputReportLength Lib "mcHID.dll" Alias "GetOutputReportLength"(ByVal pHandle As Integer) As Integer
Declare Sub hidSetReadNotify Lib "mcHID.dll" Alias "SetReadNotify"(ByVal pHandle As Integer, ByVal pValue As Boolean)
Declare Function hidIsReadNotifyEnabled Lib "mcHID.dll" Alias "IsReadNotifyEnabled"(ByVal pHandle As Integer) As Boolean
Declare Function hidIsAvailable Lib "mcHID.dll" Alias "IsAvailable"(ByVal pVendorID As Integer, ByVal pProductID As Integer) As Boolean

' windows API declarations - used to set up messaging...

Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Integer, ByVal hwnd As Integer, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Integer, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer

Delegate Function SubClassProcDelegate(ByVal hwnd As Integer, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Public Declare Function DelegateSetWindowLong Lib "USER32.DLL" Alias "SetWindowLongA" _
(ByVal hwnd As Integer, ByVal attr As Integer, ByVal lval As SubClassProcDelegate) As Integer


' windows API Constants
Public Const WM_APP As Integer = 32768
Public Const GWL_WNDPROC As Short = -4

' HID message constants
Private Const WM_HID_EVENT As Decimal = WM_APP + 200
Private Const NOTIFY_PLUGGED As Short = 1
Private Const NOTIFY_UNPLUGGED As Short = 2
Private Const NOTIFY_CHANGED As Short = 3
Private Const NOTIFY_READ As Short = 4

' local variables
Private FPrevWinProc As Integer ' Handle to previous window procedure
Private FWinHandle As Integer ' Handle to message window
Private Ref_WinProc As New SubClassProcDelegate(AddressOf WinProc)

' Set up a windows hook to receive notification
' messages from the HID controller DLL - then connect
' to the controller
Public Function ConnectToHID(ByVal pHostWin As Integer) As Boolean
FWinHandle = pHostWin
pHostWin = hidConnect(FWinHandle)
FPrevWinProc = DelegateSetWindowLong(FWinHandle, GWL_WNDPROC, Ref_WinProc)
End Function

' Unhook from the HID controller and disconnect...
Public Function DisconnectFromHID() As Boolean
DisconnectFromHID = hidDisconnect
SetWindowLong(FWinHandle, GWL_WNDPROC, FPrevWinProc)
End Function


' This is the procedure that intercepts the HID controller messages...

Private Function WinProc(ByVal pHWnd As Integer, ByVal pMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
If pMsg = WM_HID_EVENT Then
Select Case wParam

' HID device has been plugged message...
Case Is = NOTIFY_PLUGGED
MainForm.OnPlugged(lParam)

' HID device has been unplugged
Case Is = NOTIFY_UNPLUGGED
MainForm.OnUnplugged(lParam)

' controller has changed...
Case Is = NOTIFY_CHANGED
MainForm.OnChanged()

' read event...
Case Is = NOTIFY_READ
MainForm.OnRead(lParam)
End Select

End If

' next...
WinProc = CallWindowProc(FPrevWinProc, pHWnd, pMsg, wParam, lParam)

End Function
End Module
///////////////////////////////////////////////////////////////////////////////////////////////////////////

espero les sirva, solo copien y peguen estso 2 programas en block de notas, ponganle extension .vb , en visual studio vayanse a gerar elemento existente, agregan los 2,hagan su progrma y agreguen la dll del easyHID y listo

si alguien tiene idea de ocmo peudo hacer funcionar mi pic en win 7 de 64 bits c lo agradeceria mucho
saludos
 
Última edición:
Hola Moyano Jonathan, permíteme felicitarte por tus buenos alcances en USB, y sobre todo por compartirlos y enseñarlos, buena onda...

Es mi primer post, pero he seguido el tema desde hace tiempo ya, y he simulado varios de los ejemplos posteados y han sido fructíferos...

Pero he leído que el tiempo de adquisición es bajo con respecto a la primera impresi{on 1.5MB/S

Estoy trabajando en un proyectico donde necesito adquirir datos de una memoria de alta velocidad (60MSPS) y llevarlo a la PC por medio del protocolo USB utilizando Labview, ¿Crees que en modo BulK Transfer con 64 bytes de recepción sea suficiente para graficar datos? ó estaría desperdiciando la velocidad de trabajo de la memoria de almacenamiento que trabaja a altas velocidades? Puesto que la ideas es muestrear señales lo más rápido posible.

He leído un poco sobre el Puerto paléalo Streaming que trae el PIC18F4550 que es de alta velocidad de transferencia de datos, qué opinas acerca de esto? La verdad ni sé por dónde empezar, quisiera me dieras un impulso para ver si puedo avanzar en esto...

Se Aceptan sugerencia, por favor ayúdame...

Gracias por tu tiempo...
 
Hola el puerto paralelo Streaming que tiene el PIC18F4550 puede comunicar datos directamente con la USI (Interfaz serial universal), sin necesidad de ejecutar un programa que gestione la comunicación...ahora no hay ejemplos o personas que lo hayan hecho....fijate en el framework de C18..aparece una aplicación que permite la comunicación de datos a alta velocidad..pero desconozco totalmente su funcionamiento.

Usando el modo HID...conozco gente que ha configurado el PIC para transmitir de manera interruptiva 50 bytes / seg... pero no más de eso....

Las comunicaciones a alta velocidad usando el módulo USB del PIC no son mi fuerte...tendrías que estudiar profundamente los ejemplos del framework de microchip y el protocolo USB...el algo bastante complejo.
 
Hola Moyano Jonathan, gracias por responder me ha quedado claro, sin embargo buscaré donde has dicho a ver con que me encuentro...

Saludos

En cuanto alo del USB, es muy bueno y no lo voy a dejar...

Cualquier avance se los haré saber...
 
Última edición:
Hola, primero quiero agradecer por la ayuda que me a dado este foro y especialmente a Moyano Jonathan con sus ejemplos del bus USB, hace poco termine un proyecto usando el modulo USB del pic18f2550 y una interfaz gráfica en LABview, es un osciloscopio básico para el análisis de señales, les dejo la información para devolver el favor jajajajaja gracias

http://superelectronicaccosciloscopio.blogspot.com/

a el anciano le recomendaría almacenar los datos en una memoria serial EEPROM y sacarlos después de manera mas lenta por el bus USB, ya que este no teda toda la capacidad que necesitas, de esta manera la tendrías organizada, sin perdidas y almacenada de forma segura, espero les sirva.
 
Hola me estoy iniciando con los microcontroladores y queria saber si es posible que el micro se conecte a la pc via usb y a la ves trabajar con un periferico via rs 232. Disculpen la falta de conocimientos soy nuevo en esto jeje
 
Las dos están bien. Aquí las RS232.

http://electronica-pic.blogspot.com/2008/11/electrnica-pic.html
http://electronica-pic.blogspot.com/2009/03/manual-interfaz-vc-y-visual-basic.html

Prefiero las USB ya que es lo que se usan ahora. Están haciendo pruebas con el USB para hacer un manual pequeño de:

8 Entradas digitales.
8 Salidas digitales.
Entradas anlógicas.
etc para hacer los primeros pinitos sobre el PIC18F y USB. Ahora mismo no se si está descansando o lo dejará para más adelante.
 
hola ivanbv4

Con los PIC de la serie 18F, porejemplo el 18F2550 ó el el PIC18F4550, puedes trabajar un periferico emulando un puerto serie con conexion usb, esta es la clace CDC y trabajar con conexion USB ya sea en modo Bulk Transfer que utiliza una libreria DLL, o con conexion HID...en este mismo foro hay información muy buena para que te empalmes con el tema, empieza desde el principio para que no te enredes...

Con respecto a tu pregunta si lo puedes trabajar al mismo tiempo creo que si, teniendo en cuenta que no sobrepases el tamaño de la RAM, puesto que con estas comunicaciones se consume mucha de esta...

Saludos
 
Última edición:
Bueno, retomando un poco el tema del manual ( versión reducida a aplicaciones HID ) les dejo el hardware que utilizaremos. El mismo será usado para todos los ejercicios implicados en el control por USB - HID.

El diseño está hecho en Eagle ( Solo el PCB )...luego en cuanto tenga tiempo subiré el esquemático correspondiente a este diseño.

Absolutamente todos los proyectos serán desarrollados en C de CCS v4.118 pero cualquier compilador desde la versión 4.023 les servirá.

Para el lenguaje de programación de la PC usaremos VB.net 2008.
 

Adjuntos

  • Entrenador USB v0.1.zip
    62.5 KB · Visitas: 207
Muy muy bueno Jonathan, acabo de saltar a la línea 18F programando con CCS, así que el topic me viene bárbaro, ni hablar del manual y la placa entrenadora :aplauso:

Muchas gracias por el aporte (y)

Saludos!
 
Muy muy bueno Jonathan, acabo de saltar a la línea 18F programando con CCS, así que el topic me viene bárbaro, ni hablar del manual y la placa entrenadora :aplauso:

Muchas gracias por el aporte (y)

Saludos!

¿Cómo que ni hablar del manual y la placa entrenadora?

Llevo desde el 2008 y apollándolo para que saque un manual base y simple para todo el mundo. Al menos las 8 entradas, 8 salidas digitales y entradas analógicas me van bien.

Saludo.
 
Atrás
Arriba