Вы находитесь на странице: 1из 6

CONTROL DE PUERTOS LPT Y COM

Resumen.- El presente artculo contiene una breve introduccin sobre los puertos del PC: paralelo (LPT) y serial (COM) , as como los programas necesarios para su escritura y lectura desde MATLAB 7.1. Recomendamos para su ensayo tomar las medidas necesarias de seguridad para evitar daos innecesarios en el HW del PC.
CONTROL DEL PUERTO PARALELO LPT

En el command window ejecutamos:


>> out = daqhwinfo; >> out.InstalledAdaptors

Lo que dar como resultado en el caso de mi PC:


ans = 'parallel' 'winsound'

Una vez que Matlab ha reconocido el PP, ejecutamos:


>> daqhwinfo('parallel') ans = AdaptorDllName: [1x50 char] AdaptorDllVersion: '2.7 (R14SP3)' AdaptorName: 'parallel' BoardNames: {'PC Parallel Port Hardware'} InstalledBoardIds: {'LPT1'} ObjectConstructorName: {'' 'digitalio('parallel','LPT1')'}

''

La ltima lnea indica el nombre de la entrada digital: digitalio('parallel','LPT1'). Como sabemos, el PP puede ser de entrada y salida. La siguiente figura muestra la distribucin de pines del PP:

Numeracin de pines del PP. En este conector:

8 pines son para salida de datos (bits de DATOS), y van desde el pin 2 (bit menos significativo) hasta el pin 9 (bit ms significativo). 5 pines son de entrada de datos (bits de ESTADO). Estos pines son: 15, 13, 12, 10 y 11, del menos al ms significativo. 4 pines son de control (bits de CONTROL). Tienen la caracterstica de ser bidireccionales es decir que los puedes utilizar tanto de entrada como de salida. Estos pines son: 1, 14, 16 y 17, del menos al ms significativo.

Sin embargo, configurando en la BIOS del PC (accesible en unos PCs con la tecla F12, en otros con la tecla Del o Supr, y a veces con F10) el puerto paralelo (LPT1) como de entrada y salida, es posible usar los pines del 2 al 9 como de entrada. Para determinar cuantos pines podemos usar en el PP, ejecutamos:
>> parport = digitalio('parallel','LPT1'); >> hwinfo = daqhwinfo(parport) hwinfo = AdaptorName: 'parallel' DeviceName: 'PC Parallel Port Hardware' ID: 'LPT1' Port: [1x3 struct] SubsystemType: 'DigitalIO' TotalLines: 17 VendorDriverDescription: 'Win I/O' VendorDriverVersion: '1.3'

Como se puede ver en la informacin, 17 de los 25 pines del PP se los puede utilizar como I/O. Los restantes pines son tierra. Una vez creada la entrada digital del PP, lo que sigue es asignar que pines sern para entrada y cuales para salida. Usamos la funcin addline, cuya sintaxis es:
>> dato2= addline(parport,0:7,'in'); %Para valores de entrada >> dato = addline(parport,0:7,'out'); %Para valores de salida

Y se obtiene el dato de entrada con dato3=getvalue(dato2). Se asigna el dato al puerto con: putvalue(dato,255). Por ejemplo, con el siguiente script encendemos un led:
%Puerto paralelo parport = digitalio('parallel','LPT1'); dato = addline(parport,0:7,'out'); putvalue(dato,2)

Descarga este cdigo con un clic en el siguiente botn:

CONTROL DEL PUERTO SERIAL COM

A diferencia del puerto paralelo que lo pueden usar simultneamente dos o ms programas a la vez, el puerto serial ser de uso exclusivo de un solo programa, de tal modo que si por ejemplo Visual Basic lo est usando, ser imposible usarlo desde Matlab. Para usar este puerto es necesario establecer los parmetros de su funcionamiento, como por ejemplo baudrate, bits de datos, bit de parada, etc.
%ABRIR el puerto COM1 clc; disp('BEGIN') SerPIC = serial('COM1'); set(SerPIC,'BaudRate',2400); set(SerPIC,'DataBits',8); set(SerPIC,'Parity','none'); set(SerPIC,'StopBits',1); set(SerPIC,'FlowControl','none'); fopen(SerPIC); %*-*-*-*-*-*-

Para escribir datos usamos la funcin fprintf:


fprintf(SerPIC,'%c',char(100));%Enva en cdigo ASCII fprintf(SerPIC,'%s',100);%Enva un string

Para leer los datos del puerto se usa la funcin fscanf.


s1 = serial('COM1'); s1.BaudRate=9600; fopen(s1); fscanf(s1)

Luego de realizar la comunicacin, los pasos para cerrar el puerto son:


%CERRAR el puerto COM1 al finalizar fclose(SerPIC); delete(SerPIC) clear SerPIC disp('STOP')

PUERTO SERIAL CON MATLAB

Este es una forma bsica de conectarse al puerto serial utilizando matlab. %configurando puerto y dando de alta s como objeto asociado al com1 s=serial('COM1', 'BaudRate', 9600);

% abriendo el puerto fopen(s);

%lee una linea de texto y la almacena en "datos" no incluye terminador datos = fgetl(s);

%escribe datos en el puerto en binario fwrite (s,datos);

% cerrando el puerto fclose(s); % borrando el objeto de memoria delete(s) clear s %algunas instrucciones asociadas con este puerto en matlab
clear (serial) delete (serial) fgetl (serial) fgets (serial) fopen (serial) fprintf (serial) fread (serial)

fscanf (serial) fwrite (serial) get (serial) instrcallback instrfind instrfindall isvalid (serial) length (serial) load (serial) readasync record save (serial) serial serialbreak set (serial) size (serial) stopasync
sxxx = serial('COM1', 'BaudRate', 9600); fopen(sxxx); fwrite(sxxx, 5); fscanf(sxxx, 1); fclose(sxxx); % Abre el puerto % Escribe en el puerto el valor de '5' decimal % Lee un dato del buffer del puerto % Cierra el puerto % Crea una variable 'sxxx' asociada con el puerto serie COM1 % (en GNU/Linux es del tipo '/dev/tty0') con una velocidad de 9600 Bauds

SerPIC = serial('COM2'); %Crea objeto com2 set(SerPIC,'BaudRate',9600); %define velocidad set(SerPIC,'DataBits',8); %define numero de bits serPIC.Terminator='none'; %Comunicacion constante sin caracter de terminacion set(SerPIC,'Parity','none'); %Sin paridad set(SerPIC,'StopBits',1); %numero de bits de stop 1 set(SerPIC,'FlowControl','none');%Sin control de hardware, o software to %Send (RTS) and Clear to Send (CTS) pins to control data flow. fopen(SerPIC); %Abre objeto fprintf('presiona enter') pause i=1; %se mantiene leyendo el puerto durante un determinado tiempo for i=1:1:20 %para mas tiempo de lectura fprintf(SerPIC,'%s',4) %envia el 4 en byte al puerto serie A = fread(SerPIC,1)%lee el buffer de com (lee el puerto serie) pause(0.8) %pausa para que el puerto termine de llenar el buffer para la siguiente lectura end fclose(SerPIC); delete(SerPIC)

clear SerPIC fprintf('ok')

Вам также может понравиться