Академический Документы
Профессиональный Документы
Культура Документы
PROFESOR:
HENRY ZEGARRA
Curso:
MECANICA COMPUTACIONAL II
Semestre:
IV
HECHO POR:
*PAUCA CUARITE CHRISTIAN YOVANNY
AREQUIPA-2014
set (serial)
size (serial)
stopasync
Para enviar datos por el puerto serial se debe tener claro cual
es el puerto al que esta conectado el perifrico con el cual se
quiere comunicar. En el ejemplo es COM3
ps = serial('COM3'); %se crea un objeto que representa el puerto
set(ps,'Baudrate',9600); % se fijan las caracteristicas del objeto (no
es necesario, estas estn por default)
set(ps,'DataBits',8);
set(ps,'Parity','none');
set(ps,'StopBits',1);
set(ps,'FlowControl','none');
fopen(ps);
% se abre el objeto para poder utilizarlo
fwrite(ps,dato,'uint8');
% se envia un dato de tipo entero sin
signo de 8 bits, por el objeto ps
fclose(ps);
% se cierra el objeto; si no se cierra y luego se intenta
abrir de nuevo, este puerto se bloquea
delete(ps);
clear ps
Para no tener que construir un circuito, se puede utilizar
arduino para que reciba los datos de MATLAB
la programacin en arduino es como sigue:
en este ejemplo se cambia la frecuencia de parpadeo del led segun el
dato que se recibe desde matlab
/////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
byte dato;
void setup(){
// initialize the serial communications:
Serial.begin(9600);
pinMode(13, OUTPUT);
// establece el pin digital como
salida
}
void loop()
{
if(dato==1){
digitalWrite(13, HIGH);
// enciende el LED
delay(1000);
// espera por un segundo
digitalWrite(13, LOW); // apaga el LED
delay(1000);
}else if(dato==2){
digitalWrite(13, HIGH); // enciende el LED
delay(2000);
// espera por un segundo
digitalWrite(13, LOW); // apaga el LED
delay(2000);
}else{
digitalWrite(13, HIGH); // enciende el LED
delay(400);
// espera por un segundo
digitalWrite(13, LOW); // apaga el LED
delay(400);
}
}
void serialEvent()
{
if (Serial.available()) {
dato=Serial.read();
// Serial.println(dato);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////Para configurar el
puerto serial, antes de enviar o recibir data, se debe copiar esto al
archivo .m :
clear all;
close all;
clc;
PS=serial('COM1');
set(PS,'Baudrate',9600); % se configura la velocidad a 9600 Baudios
set(PS,'StopBits',1); % se configura bit de parada a uno
set(PS,'DataBits',8); % se configura que el dato es de 8 bits, debe
estar entre 5 y 8
set(PS,'Parity','none'); % se configura sin paridad
set(PS,'Terminator','CR/LF');% c caracter con que finaliza el envo
set(PS,'OutputBufferSize',1); % n es el nmero de bytes a enviar
set(PS,'InputBufferSize' ,1); % n es el nmero de bytes a recibir
set(PS,'Timeout',5); % 5 segundos de tiempo de espera
fopen(PS);
El dispositivo que enva o recibe los datos (como un Pic o un DSP)
debe transmitir o recibir a la misma velocidad que el programa de
Matlab (o viceversa) en este caso: 9600 baudios, y enviando un bit a
la vez.
Con la instruccin "fopen" se abre el puerto.
Para leer datos binarios se usa la instruccin: variable =
fread(PS,1,'uint8');
Esto le dice al Matlab como qu tipo de datos se interpretan los bits
que se estn recibiendo. Los tipos de datos pueden ser enteros sin
signo, enteros con signo, de punto flotante, de 8 bits, de 16 bits, etc.
(para ms informacin consultar el archivo de Ayuda de Matlab).
Si el dispositivo, como un pic, est mandando cdigos Ascii, se debe
poner:
variable= fread(PS,1,'uchar');
"variable" almacenar un nmero que corresponde al cdigo Ascii del
caracter recibido. Si es la 'A', "variable" almacenar el nmero 65.
Para convertir a caracter se hace: variable= char(variable);
Una vez utilizado el puerto, ste se debe cerrar:
fclose(PS);
delete(PS);
clear PS;
Si no se hace esto, al querer correr nuevamente el programa, nos
botar error.
Y ahora, una funcin que yo hice y que me fue muy til:
function h=convertir(hh);
q=quantizer('fixed','max',0.9999998,'min',-1,'format',[16
15],'round','wrap');
hexh=num2hex(q,hh);
h=hex2dec(hexh);
Lo que hace esta funcin es convertir los bits de un dato con coma
flotante de 32 bits a uno de tipo entero sin signo de 16 bits (as tena
que hacerse porque as reciba los datos el dispositivo conectado al
puerto serial), la informacin de estos bits se mantiene, pero lo que
cambia es cmo lo interpreta el Matlab y cmo los transmite al puerto
condiciones eran que cada cuatro bytes hacan una muestra de una
seal capturada desde un sensor. Si el sensor registraba 2.03 el pic
enviaba los caracteres '2' '.' '0' '3' los que el Matlab lee como sus
respectivos cdigos Ascii: 50 46 48 51:
clear all;
close all;
clc;
PS=serial('COM1');
set(PS,'Baudrate',9600); % se configura la velocidad a 9600 Baudios
set(PS,'StopBits',1); % se configura bit de parada a uno
set(PS,'DataBits',8); % se configura que el dato es de 8 bits, debe
estar entre 5 y 8
set(PS,'Parity','none'); % se configura sin paridad
set(PS,'Terminator','CR/LF');% c caracter con que finaliza el envo
set(PS,'OutputBufferSize',1); % n es el nmero de bytes a enviar
set(PS,'InputBufferSize' ,1); % n es el nmero de bytes a recibir
set(PS,'Timeout',5); % 5 segundos de tiempo de espera
fopen(PS);
K1= [];
for j=1:4
K1 = [K1 fread(PS,1,'uchar')];
end;
K1=char(K1);
K1= str2num(K1);
fclose(PS);
delete(PS);
clear PS;
INSTRFIND
PS=serial('COM1');
set(PS,'Baudrate',9600); % se configura la velocidad a 9600 Baudios
set(PS,'StopBits',1); % se configura bit de parada a uno
set(PS,'DataBits',8); % se configura que el dato es de 8 bits, debe
estar entre 5 y 8
set(PS,'Parity','none'); % se configura sin paridad
set(PS,'Terminator','CR/LF');% c caracter con que finaliza el envo
set(PS,'OutputBufferSize',1); % n es el nmero de bytes a enviar
set(PS,'InputBufferSize' ,1); % n es el nmero de bytes a recibir
set(PS,'Timeout',5); % 5 segundos de tiempo de espera
fopen(PS);
K1= [];
K= [];
for i=1:lo_que_dure_el_muestreo
for j=1:4
K1 = [K1 fread(PS,1,'uchar')];
end;
K1=char(K1);
K=[K str2num(K1)];
K1=[];
end;
fclose(PS);
delete(PS);
clear PS;
INSTRFIND
La seal se va acumulando en el vector K. K1 slo recoge cada cuatro
caracteres (una muestra).