%{
// Copyright (C) Junio 2009 <Ing. Gabriel Pool>
// Este programa es software libre. Puede redistribuirlo y/o modificarlo bajo
// los trminos de la Licencia Pblica General de GNU segn es publicada
// por la Free Software Foundation, bien de la versin 2 de dicha Licencia
// o bien segn su eleccin de cualquier versin posterior.
// Este programa se distribuye con la esperanza de que sea til,
// pero SIN NINGUNA GARANTA, incluso sin la garanta MERCANTIL implcita
// o sin garantizar la CONVENIENCIA PARA UN PROPSITO PARTICULAR. Para ms
// detalles, vase la Licencia Pblica General de GNU.
%}
% Este programa se limita a incrementar dato_out (0), enviar el vector
% de 64 Bytes al PIC y mostrar el vector que nos envia de vuelta el PIC
% especficamente dato_in(0) en la lnea de comandos de matlab
clear all;
close all;
loadlibrary mpusbapi _mpusbapi.h alias libreria
% Los archivos _mpusbapi.c y mpusbapi.dll deben de estar en la misma
% carpeta de trabajo y se obtienen de la descarga del driver en la
% pagina de microchip ("Microchip MCHPFSUSB v2.4 Installer.zip"),
% al instalarse queda ubicado en X:\Microchip Solutions\USB
% Tools\MCHPUSB Custom Driver\Mpusbapi\Dll\Borland_C, en caso de descargar
% una version de driver ms reciente, reemplace stos archivos por los ms
% nuevos.
%libisloaded libreria % Confirma que la librera ha sido
% cargada
%libfunctions('libreria', '-full') % Muestra en la lnea de comandos las
% funciones de la librera
%libfunctionsview libreria % Muestra en un cuadro lo mismo que la
% instruccin anterior
data_in = eye(1,64,'uint8'); % Se declara el vector de datos de entrada (el que se recibe del PIC)
data_out = eye(1,64,'uint8'); % Se declara el vector de datos de salida (el que se envia al PIC)
% TODOS LOS DATOS SE DECLARAN COMO
% UINT8 de lo contrario no hay
% comunicacin.
vid_pid_norm = libpointer('int8Ptr',[uint8('vid_04d8&pid_000b') 0]);
out_pipe = libpointer('int8Ptr',[uint8('\MCHP_EP1') 0]);
in_pipe = libpointer('int8Ptr',[uint8('\MCHP_EP1') 0]);
%calllib('libreria','MPUSBGetDLLVersion');
[conectado] = calllib('libreria','MPUSBGetDeviceCount',vid_pid_norm)
if conectado == 1 % Es importante seguir sta secuencia para comunicarse con el PIC:
% 1. Abrir tuneles, 2. Enviar/Recibir dato
% 3. Cerrar tuneles
[my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe, uint8(0), uint8 (0)); % Se abre el tunel de envio
[my_in_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, in_pipe, uint8 (1), uint8 (0)); % Se abre el tunel de recepcin
while (data_out (1) <= 254)
% En caso de tener problemas de transmisin y recepcin incremente
% Receive_delay_ms y SendDelay_ms (son los ltimos parmetros de
% MPUSBWrite y MPUSBRead) hasta obtener mejores resultados
calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(10)); % Se envia el dato al PIC
[aa,bb,data_in,dd] = calllib('libreria', 'MPUSBRead',my_in_pipe, data_in, uint8(64), uint8(64), uint8(10)); % Se recibe el dato que envia el PIC
data_out (1) = data_out (1)+ 1; % Se incrementa el primer dato del vector que se envia
data_in(1) % Se muestra el primer valor del vector recibido
%pause (0.1); % En caso de que se desee ver la operacin ms lenta
end
calllib('libreria', 'MPUSBClose', my_in_pipe); % Se cierra el tunel de recepcin
calllib('libreria', 'MPUSBClose', my_out_pipe); % Se cierra el tunel de envio
end
unloadlibrary libreria % Importante descargar la librera de memoria, de lo contrario genera errores
close all
clear all