Академический Документы
Профессиональный Документы
Культура Документы
COMUNICACIN SERIAL
6.1. Introduccin a la comunicacin serial
6.1.1. Qu es Comunicacin
6.1.2. Estndar de interfaz de Comunicacin Serial (RS232)
6.1.3. Asignacin de Pines y Seales
6.1.3.1. Pines de Datos
6.1.3.2. Pines de Datos
6.1.4. Parmetros de Transmisin y Trama Serial
6.1.4.1. Bytes de Transmisin
6.1.4.2. Comunicacin Serial Sncrona y Asncrona
6.1.5. Cmo se Transmiten los Bits
6.1.5.1. Orden de transmisin
6.1.5.2. Bits de inicio y fin
6.1.5.3. Bits de datos
6.1.5.4. Bits de paridad
6.2. Configuracin de Comunicacin Serial en MATLAB
6.2.1. Sesin de Puerto Serial
6.2.2. Creacin Objeto Puerto Serial y Propiedades
6.2.3. Conectando al Dispositivo
6.2.4. Configuracin de Parmetros de Comunicacin
6.2.5 Escritura de datos
6.2.5.1. Buffer de Salida y Flujo de Datos
6.2.5.2. Funcin fprintf
6.2.5 Lectura de datos
6.2.5.1. Buffer de Entrada y Flujo de Datos
6.2.5.2. Funcin fscanf
6.3. Aplicaciones de Comunicacin Serial con Arduino
6.3.1. Comunicacin Serial va HyperTerminal
6.3.2. Instalacin del Toolkit ArduinoIO para adquirir datos
6.3.3. Adquisicin de datos de potencimetro
6.3.4. Adquisicin de datos de sensor temperatura
6.3.5. Adquisicin de datos sensor Ultrasonido
6. COMUNICACIN SERIAL
6.1. Introduccin a la Comunicacin Serial
A continuacin se presentarn los conceptos bsicos que estn detrs de lo
referente a la comunicacin serial.
6.1.1. Qu es Comunicacin Serial
Es un protocolo de bajo nivel que sirve para establecer las pautas de comunicacin
entre dos o ms dispositivos (computadoras, microcontroladores, celulares, etc.)
Como indica el nombre, el puerto serial recibe y enva bytes de informacin un bit a
la vez en una trama. Estos bits se transmiten mediante el formato binario o el de
tipo carcter (ASCII).
Conexin Cruzada
Usado para conectar DTE con DTE y DCE con DCE.
Nombre de
Abreviatura Tipo seal
Seal
Detector
CD
Control
Portadora
Dato Recibido
RD
Datos
Dato Transmitido
TD
Datos
Dato terminal
DTR
Control
listo
Referencia
GND
Tierra
Dato establecido
DSR
Control
listo
Solicitar para
RTS
Control
envo
Borrar para
CTS
Control
enviar
Indicador de
RI
Control
Ring
1. El DTE pone en alta RTS pin para indicar que el DCE est listo para recibir
datos
2. El DCE indica que al CTS pin de que est listo para enviar datos a travs
del pin TD. Si el dato no puede ser enviado el pin CTS es puesto en baja.
3. El dato es transmitido al DTE mediante el pin TD. Si el dato no puede ser
aceptado, el RTS pin es puesto a baja por el DTE y la transmisin de datos
se finaliza.
Muchos dispositivos usan los pines DSR y el DTR para darse cuenta de que estn
conectados y energizados. La sealizacin de presencia de dispositivos
conectados usando DTR y DSR sigue los siguientes pasos:
1. El DTE pone en alta el DTR pin para solicitar que el DCE se conecte a la
lnea de comunicacin.
2. El DCE pone en alta el pin DSR para indicar que est conectado
3. DCE desactiva el pin DSR cuando se desconecta de la lnea de
comunicacin
Los pines DTR y DSR fueron originalmente diseados para proveer un mtodo
alternativo de handshaking. Sin embarbo, el RTS y el CTS son usados para este
fin y no los DSR y DTR.
Los pines CD y RI son usados tpicamente para indicar la presencia de ciertas
seales en conexiones MODEM-MODEM. CD es usado por un MODEM para
indicar que se ha realizado una conexin con otro MODEM o que se ha detectado
un tono portador. CD es activado cuando el DCE recibe una seal de frecuencia
permitida. CD es desactivado si la DCE no recibe una seal permitida.
RI se usa para indicar la presencia de una seal audible, RI se activa cuando la
DCE recibe una seal de este tipo. RI se desactiva cuando el DCE no recibe
seales de este tipo.
Los bits de datos usualmente son denominados caracteres debido a que estos bits
usualmente representan un carcter ASCII. A los bits restantes se les llama bits de
trama.
Descripcin
Even (par)
Mark (marca)
Odd (impar)
Space (espacio)
Paridad siempre 1
Los bits de datos ms el
de paridad producen un
nmero impar de 1's
Paridad siempre es 0
Descripcin
Name
Port
Type
Indica en nombre de
puerto que se ha
escogido
Indica el tipo de objeto
Para mostrar los parmetros y estado de un puerto se puede hace una de estas
tres acciones:
Descripcin
BaudRate
Configura la tasa de
transmisin de bits
DataBits
Parity
StopBits
Terminator
Configura el nmero de
bits de datos
Configura el tipo de
paridad
Especifica el nmero de
bits usados para final de
envo de un byte
Especifica el carcter de
trmino de transmisin
stopasync
Descripcin
Escribe texto al
dispositivo
Escribe dato
binario al
dispositivo
Termina
operaciones de
lectura y
escritura
asncrona
Por otro lado, la siguiente tabla muestra las propiedades asociadas a la escritura
de datos:
Propiedad
Descripcin
Nmero de bytes
BytesToOutput
actualmente en el
buffer de salida
Tamao del buffer de
OutputBufferSize
salida en bytes
Timeout
Tiempo de espera
para que se complete
una operacin de
lectura y escritura
TransferStatus
Indica si una
operacin de lectura
o escritura est en
progreso
ValuesSent
Total de nmero de
valores escritos al
dispositivo
[0]
fgets
fread
fscanf
readasync
stopasync
Descripcin
Lee una lnea de
texto del dispositivo y
descarta el carcter
terminador
Lee una lnea de
texto del dispositivo e
incluye el carcter
terminador
Lee dato binario del
dispositivo
Lee datos del
dispositivo y le da
formato de texto
Lee datos
asncronamente
desde el dispositivo
Termina operaciones
de lectura y escritura
Descripcin
Nmero de bytes
disponibles en el
buffer de entrada
Timeout
Tiempo de espera a
que se complete un
operacin de lectura
o escritura
TransferStatus
Indica si una
operacin de lectura
o escritura est en
progreso
ValuesReceived
Nmero total de
valores ledos del
dispositivo
s.ValuesReceived
ans =
56
Al igual que el caso de escritura, se puede especificar si es que las lecturas
que se van a realizar son sncronas o asncronas con la propiedad
ReadAsyncMode. Si ReadAsyncMode est en modo continuous (activado por
defecto) el objeto de puerto serial continuamente verifica si es que el dispositivo
est listo para ser ledo, si es que hay dato disponible, se almacena
asncronamente en el buffer de entrada. Si es que ReadAsyncMode est en
modo manual el objeto de puerto serial no verifica continuamente el dispositivo
para determinar si es que se puede leer datos.
s.ReadAsyncMode = 'continuous';
fprintf(s,'*IDN?')
s.BytesAvailable
ans =
56
out = fscanf(s);
Operaciones asncronas no bloquean acceso a la lnea de comandos de
MATLAB, es ms, se pueden ejecutar al mismo tiempo las siguientes acciones:
En este caso escogeremos el par COM2 y COM3 pero pueden ser otros. Hacer
click en finalizar.
Vemos que se ha creado el par o enlace COM2 COM3
stop y sin paridad, hay que recalcar que esta configuracin de parmetros debe
coincidir con la de MATLAB.
Resultado en HyperTerminal:
Ahora vamos a realizar otro ejemplo en el que MATLAB va a recibir datos que
se digiten va HyperTerminal; en este caso hay que mantener la configuracin
del HyperTerminal y configurar solamente MATLAB para que reciba datos:
http://www.mathworks.com/hardware-support/arduino-matlab.html
2) Nos debe aparecer la siguiente pgina:
3) Luego, en la parte inferior de la misma pgina debemos seguir el siguiente enlace (Matlab
Support for Arduino):
Debemos hacer click en el link de descarga (Download Submission) del archivo que contiene
el ToolKit.
5) Luego nos aparecer la ventana para guardar el archivo llamado ArduinoIO, debemos
descargarlo en una carpeta conocida para poder instalar
6) Debemos guardar el archivo y descomprimir todos sus archivos en una misma carpeta,
sobre todas las cosas debemos asegurarnos de que los archivos arduino.m e
install_arduino.m deben encontrarse en la misma carpeta:
7) Luego debemos ir al Seth Path de MATLAB para agregar la carpeta en donde se haya
descomprimido los archivos:
El paso final antes de utilizar MATLAB para controlar la tarjeta Arduino, es grabar en la tarjeta
Arduino el programa que lo convierte en tarjeta de adquisicin de datos UNA SOLA VEZ.
Debemos seguir los siguientes pasos:
1) Abrir el IDE de Arduino:
A continuacin se presenta la lista de comandos que se pueden ordenar desde MATLAB para
que la tarjeta Arduino lo ejecute:
Comando
Descripcin
Conecta el Arduino al
a=arduino('COM5')
puerto COM5
Configura pin 4 como
a.pinMode(4,'input');
entrada
Configura pin 5 como
a.pinMode(5,'output');
salida
Lee entrada digital en
dv=a.digitalRead(4);
el pin 4
Escritura digital en el
a.digitalWrite(13,dv);
pin 13
Lectura analgica en
av=a.analogRead(5);
el pin 5
Salida tipo PWM por
a.analogWrite(5,round(av))
el puerto 5
Cambia la referencia
a.analogReference('external'); de voltaje a tipo
externo
Referencia por
a.analogReference('default');
defecto
Borra el buffer de
a.flush;
entrada
Anexa servomotor a
a.servoAttach(9);
la entrada 9
Muestra el estado de
a.servoStatus;
todos los servos
aderidos
a.servoWrite(9,100);
val=a.servoRead(9)
a.servoDetach(9);
a.encoderAttach(0,3,2)
a.encoderRead(0)
a.encoderDebounce(2,17)
a.encoderReset(2)
a.encoderStatus;
a.encoderDetach(0);
delete(a)
6.3.3. Adquisicin de datos de potencimetro
Vamos a realizar una experiencia con el potencimetro, tarjeta Arduino y Matlab, la experiencia
consistir en adquirir los datos de naturaleza analgica y procesarlo en Matlab.
Experiencia
Adquisin de datos de voltaje de un potencimetro
Materiales
Arduino UNO
Potencimetro
Protoboard
Diagrama de conexiones
Tal como se mencion, el primer paso para realizar este ejercicio es grabar el programa Adiosrv
de la carpeta pde, este procedimiento se hace solo una vez. Luego solamente debemos
enfocarnos en MATLAB, es decir, todos los cambios que queramos realizar, se harn desde el
entorno de MATLAB y ya no es necesario re-grabar la tarjeta Arduino, solo se debe usar para
montar los componentes que usemos, en este caso el potencimetro.
Programacin en MATLAB
Vamos a realizar una experiencia con el sensor de temperatura LM35, tarjeta Arduino y Matlab,
la experiencia consistir en adquirir los datos de naturaleza analgica y procesarlo en Matlab.
Experiencia
Adquisicin de datos de temperatura mediante un sensor LM35
Materiales
Arduino UNO
Protoboard
Diagrama de conexiones
Programacin en MATLAB
Vamos a realizar una experiencia con servomotor, en esta oportunidad, vamos a realizar
un barrido que cubra el rango angular del servomotor cada 10 grados.
Experiencia
Control de posicin angular del servomotor en todo el rango angular.
Materiales
Arduino UNO
Protoboard
Diagrama de Conexiones
Programacin en MATLAB