IES Los Viveros Dpto. Electrónica. Luis Modesto González Lucas PROYECTO: INTERFACE USB CON PIC 18F4550 Especificaciones. Dispone de 8 entradas digitales, 8 salidas digitales, 8 entradas analógicas(entre 0 y 5 voltios 10 bits ) y 2 salidas analógicas(entre 0 y 5 voltios). Attributos Attribute Type Attribute Value Family Name PIC18 Device Core PIC Data Bus Width 8Bit Function Microcontroller RAM Size 2kB Program Memory Size 32kB Program Memory Type Flash Interface Type I2C/SPI/USART/USB Instruction Set Architecture RISC Maximum Speed 48MHz Supplier Package PDIP Pin Count 40 Product Height 3.81mm Product Length 52.26mm Product Width 13.84mm Minimum Operating Temperature -40°C Mounting Through Hole Number of Programmable I/Os 35 Number of Timers 4 On-Chip ADC 13-chx10-bit Maximum Clock Rate 48MHz Maximum Expanded Memory Size 2MB Maximum Operating Temperature 85°C Typical Operating Supply Voltage 5V Minimum Operating Supply Voltage 4.2V SPI 1 I2C 1 IES Los Viveros Sevilla Dpto. Electrónica. 1 IES Los Viveros Dpto. Electrónica. Luis Modesto González Lucas Maximum Operating Supply Voltage 5.5V USB 1 USART 1 Esquema de partida Ejemplo de PCB Es una idea para el diseño, la placa no corresponde exactamente al esquema mostrado. IES Los Viveros Sevilla Dpto. Electrónica. 2 IES Los Viveros Dpto. Electrónica. Luis Modesto González Lucas INSTALACIÓN DEL DRIVER El primer paso será instalar el driver que proporciona el fabricante, Microchip. El dispositivo se instala como un elemento USB, y no como un puerto serie. FIRMWARE EN EL PIC También debemos cargar el PIC con el firmware adecuado al programa que usaremos en C++. En nuestro caso, usaremos la versión modificada por José Luis Rupérez, y que se encuentra en la página de la asignatura. IES Los Viveros Sevilla Dpto. Electrónica. 3 IES Los Viveros Dpto. Electrónica. Luis Modesto González Lucas La carga se realizará con un programador externo, y el software de programación WINPIC800 CODIGO EN VISUAL C++ Microchip facilita una librería para el acceso al microcontrolador, la librería viene en una dll, de nombre “mpusbapi.dll”. Al igual que en otros caso, será necesario un fichero de cabeceras, que contenga la declaración de las funciones, “mpusbapi.h”, y además también usaremos una API desarrollada por el autor del firmware para simplificar el acceso al micro. La API se encarga de agrupar las funciones necesarias y resumirlas. Por lo tanto, en el directorio principal, tendremos que colocar los ficheros: • • • mpusbapi.h mpusbapi.h TAD_API.cpp FUNCIONES EN LA API IES Los Viveros Sevilla Dpto. Electrónica. 4 IES Los Viveros Dpto. Electrónica. Luis Modesto González Lucas • VOID AbrirTAD(VOID): Abre el dispositivo USB y muestra un mensaje de error si no está conectado. • VOID CerrarTAD(VOID): Cierra el dispositivo USB • VOID SalidasDigitalesByteTAD(DWORD valor): Envía un valor a las 8 salidas digitales • VOID SalidasDigitalesBitTAD(DWORD numero_bit,DWORD valor_bit): Activa un bit de una salida digital. • DWORD EntradasDigitalesByteTAD(VOID) : Obtiene el valor de las entradas digitales • DWORD EntradasDigitalesBitTAD(DWORD numero_bit) : Obtiene el valor de un bit de la entrada digital. • VOID SalidasAnalogicasTAD(DWORD numero_salida,DWORD valor_salida). En vía un valor a la salida analógica. Hay 8 salidas y los valores varían entre 0 y 1023. • DWORD EntradasAnalogicasTAD(DWORD numero_entrada) instantáneo de la entrada analógica (0-1023): : Obtiene el valor EVENTOS ASOCIADOS. En este caso, la lectura de la tarjeta la haremos mediante un timer, y cada vez que dispare un tic, procederemos a la lectura/escritura de los puertos que nos interesen. Por qjmplo, podemos poner un tiempo de 100mS, con lo que tomaríamos 10 muestras por segundo. OPERATIVA La operativa será: - Abrir dispositivo Realizar operaciones de lectura/escritura Cerrar dispositivo CODIGO Tendremos que introducir las llamadas a los ficheros incluidos en el fichero principal del proyecto, el que tiene extensión cpp y la función main. Incluimos las llamadas: #include <Windows.h> #include "mpusbapi.h" IES Los Viveros Sevilla Dpto. Electrónica. 5 IES Los Viveros Dpto. Electrónica. Luis Modesto González Lucas #include "TAD_API.cpp" Nos quedará: En el formulario principal, incluimos la apertura del puerto, en el constructor, y el cierre, en el destructor: //TODO: Add the constructor code here // AbrirTAD(); CerrarTAD(); Nos quedará: IES Los Viveros Sevilla Dpto. Electrónica. 6 IES Los Viveros Dpto. Electrónica. Luis Modesto González Lucas En el evento principal, simplemente, leeremos el valor del puerto deseado y lo mostraremos private: : System::Void button1_Click(System::Object^ System::EventArgs^ e) { sender, +EntradasAnalogicasTAD(1); label1->Text=" "+EntradasAnalogicasTAD(1); } El autor del firmware, nos facilita una aplicación para comprobar el funcionamiento IES Los Viveros Sevilla Dpto. Electrónica. 7