You are on page 1of 5

COMUNICACIN SERIAL ASINCRONICA

PRACTICA N_1
Miguel Calle Romero
Laboratorio de Maquinas Elctricas, Departamento de Energa Elctrica, Escuela Politcnica Nacional
Quito, Ecuador
calleromero_1993@hotmail.com

Resumen-. En la presente prctica, se van a aplicar los


conocimientos relacionados con la comunicacin
serial, entre un microcontrolador y nuestra PC, por
medio de un cable DB9. Para cumplir este propsito se
va a utilizar un microcontrolador ATmega164P ya que
este dispone de un USART con la capacidad de enviar
grupos de 5, 6, 7, 8 o de 9 bits y bit a bit. Tambin
dispone de un conversor anlogo digital, el cuan nos va
a servir para detectar el voltaje, y mediante software
realizar la conversin para enviarla serialmente.

fwrite (serial)
get (serial)
instrcallback
instrfind
instrfindall
isvalid (serial)
length (serial)
load (serial)
readasync
record
save (serial)
serial
serialbreak
set (serial)
size (serial)
stopasync

I. CONSULTA
A. Consultar los comandos que permiten manejar el
puerto de comunicacin serial asincrnica de un PC,
usando Visual C, Matlab y LabView.
Matlab
Esta 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(COM!,BauRate,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
%algunas instrucciones asociadas con este puero
en Matlab:
fgetl (serial)
fgets (serial)
fopen (serial)
fprintf (serial)
fread (serial)
fscanf (serial)

Labview
Para establecer una comunicacin serial en este programa
se hace uso de VISA serial, y los siguientes comandos:
VISA CONFIGURE SERIAL PORT
Inicializa las especificaciones del puerto serial.

VISA Write
Escribe el dato desde el buffer de escritura hacia el
dispositivo o interface especificado por VISA resource
name

VISA Read
Lee el nmero especificado de bytes desde el dispositivo
o interface especificado por VISA resource name y
retorna los datos en el buffer de escritura,

Inherits Component

VISA Close
Cierra una sesin con el dispositivo o un evento
especificado por VISA resource name

Propiedades del Nodo


Leer y/o escribe propiedades como una referencia. Use las
propiedades del nodo para obtener o configurar
propiedades y mtodos en aplicaciones locales o remotas.
Tambien s puede usar para acceder a datos en LabView.

VISA Serial Brake


Envia una parada en salida epecificada. Se puede
especificar su uso como automatico o de modo manual.

VISA Set I/O Buffer Size


Configura el tamao del buffer de entrada/salida. Ejecuta
Configure Seria Port VI primero si esta configurado el
tamao de un buffer de puerto serial.

VISA Flush I/O Buffer


Nivela el buffer de entrada/salida especificado por mask

Visual C
Espacio de nombres:
System.IO.Ports
Ensamblado:
System (en System.dll)
Sintaxis:
Public Class SerialPort

Nombre

Descripcin

SerialPort()

Inicializa una nueva instancia


de la clase SerialPort.

SerialPort(IContainer)

Inicializa una nueva instancia


de la clase SerialPort utilizando
el
objeto
IContainer
especificado.

SerialPort(String)

Inicializa una instancia nueva


de la clase SerialPort utilizando
el
nombre
de
puerto
especificado.

Inicializa una instancia nueva


de la clase SerialPort utilizando
SerialPort(String,Int32) el nombre de puerto y la
velocidad
en
baudios
especificados.

SerialPort(String,
Int32,Parity)

Inicializa una instancia nueva


de la clase SerialPort utilizando
el nombre del puerto, la
velocidad en baudios y el bit de
paridad especificados.

SerialPort(String,
Int32,Parity,Int32)

Inicializa una instancia nueva


de la clase SerialPort utilizando
el nombre del puerto, la
velocidad en baudios, el bit de
paridad y los bits de datos
especificados.

SerialPort(String,
Int32,Parity,Int32,
StopBits)

Inicializa una instancia nueva


de la clase SerialPort utilizando
el nombre del puerto, la
velocidad en baudios, el bit de
paridad, los bits de datos y el
bit de parada especificados.

B. Disear un sistema que funcione de la siguiente


manera; adquirir una seal analgica variable de 0V
a 5V usando el conversor AD del microcontrolador,
el valor de dicha seal se debe mostrar en 8 leds y en
una interfaz grfica en la PC. Adicionalmente el
sistema debe permitir ingresar un nmero en la
interfaz de la PC, el cual se enva por comunicacin
serial al microcontrolador y ser mostrado 3
displays 7 segmentos. El programa para el
microcontrolador debe ser desarrollado en

Assembler y el HMI en uno de los programas del


numeral 3.1.
Un esquema del circuito se puede presentar en la
siguiente simulacin.

ldi tempo,0b00001110
out porta,tempo ;salidas
ldi tempo,0b01111111
out ddrb,tempo
ldi tempo,0b10000000
out portb,tempo
ldi tempo,0b11111111
out ddrc,tempo
ldi tempo,0b00000000
out portc,tempo
ldi tempo,0b11111010
out ddrd,tempo
in tempo,mcucr
andi tempo,0b11101111
out mcucr,tempo
ldi tempo,high(ramend)
out sph,tempo
ldi tempo,low(ramend)
out spl,tempo

Programa para el circuito.


; Prepa1_Control_Micros_AD_Serial.asm
;
; Created: 26/10/2016 16:10:03
; Author : Miguel
;
.def tempo=r16
.def acumuladorl=r22
.def acumuladorh=r23
.def dato=r17
.def guardar=r18
.dseg
dato_recibido: .byte 1
adc0: .byte 1
adc1: .byte 1
num0: .byte 1
num1: .byte 1
BCD0: .BYTE 1 ; BCD Unidades
BCD1: .BYTE 1 ; BCD decenas
BCD2: .BYTE 1 ; BCD centenas
BCD3: .BYTE 1 ; BCD MILES
DIG0: .BYTE 1
; equivalente en 7 seg de las
UNIDADES
DIG1: .BYTE 1 ;equivalente en 7 seg de las decenas
DIG2: .BYTE 1
;equivalente en 7 seg de las
CENTENAS
DIG3: .BYTE 1 ;equivalente en 7 seg de las MILES
.cseg
.org 0x00
rjmp inicio
.org 0x28
rjmp recepcion
inicio:
ldi tempo,0b11110000
out ddra,tempo ;puerto como entrada

;configuracion correspondiente a la comunicacion serial


con un crixtal de 8MHz y calculamos 9600 baudios
ldi tempo,high(51)
sts ubrr0h,tempo
ldi tempo,low(51)
sts ubrr0l,tempo
ldi tempo,0b00000000
sts ucsr0a,tempo
ldi tempo,0b10011000
;habilito interrupcion
de recepcion, Habilito Rx y Tx ;ojo
sts ucsr0b,tempo
ldi tempo,0b00000110
;asincronico,
sin
paridad, 1 bit de parada, 8 bits
sts ucsr0c,tempo
verifico:
lds guardar,ucsr0a
sbrc guardar,5
rjmp verifico
;Convercion AD
ldi tempo,0b11000110; activo conversion;
comienzo conversion; trigger manual; no int de ADC, se
inicia la conversion con prescaler de 64
sts adcsra,tempo
esperar:
lds tempo,adcsra
sbrc tempo,6 ;mientras el bit 6 sea 1 sigue haciendo
conversion
rjmp esperar
lds tempo,adcl ;siempre se lee primer el valor bajo
lds tempo,adch
sts adc0,tempo
out portc,tempo
sts udr0,tempo

;configuracion ADC
ldi tempo,0b01100000
sts admux,tempo ;el adc tiene reerencia a avcc, 10 bits
justificacion a izquierda y elijo canal cero
ldi tempo,0b00000001
sts didr0,tempo ;se indica que pa0 tendra entrada
analogica
sei
lazo:
lds tempo,dato_recibido
call BIN_BCD
call BCD_SEGMENTOS
call BARRIDO
rjmp lazo
recepcion:
push tempo
in tempo,sreg
push tempo
lds dato,udr0
sts dato_recibido,dato
sts num0,dato
clr dato
sts num1,dato
lds tempo,adc0
sts udr0,tempo
espera2:
lds r20,ucsr0a
sbrs r18,5
rjmp espera2
pop tempo
out sreg,tempo
pop tempo
reti
C. Seudocdigo

Para iniciar empiezo definiendo las variables que voy a


utilizar, y reservo mis espacios de memoria, para guardar
los datos que envi y que recibo, as como los datos
necesarios para realizar el barrido de displays.
Luego configuro los vectores de las interrupciones para el
inicio, y el otro vector que se habilitara cuando la PC
haya enviado un dato al microprocesador. Luego de haber
ledo el dato se proceder a enviar el dato hacia la PC.
Configuro mis puertos dependiendo de la utilidad, como
salida para el control de los displays de 7 segmentos,
entrada los pines que estn conectados a los interruptores.
Habilito los pull-ups e inicializo el stack pointer.
Realizo la correspondiente inicializacin y configuracin
de las variables con las que trabaja la comunicacin
serial, considerando que tenemos que habilitar RX y Tx.
Tambin sobre la comunicacin serial se considera que es
una conexin asincrnica, sin paridad, con 1 bit de parada
y paquetes de 8 bits.
Luego configuro en conversor analgico digital, del cual
tenemos que considerar una justificacin a la izquierda y
que vamos a tomar solo los valoras ms altos porque
realizaremos un envi de datos de 8 bits como mximo.
Luego realizamos la conversin y almacenamos el dato en
el espacio de memoria asignado para el.
Cuando el PC envi un dato al microcontrolador, en este
va a estar activada la interrupcin, que al recibir el dato
leer este dato, y enviara el dato sacado de la conversin
analgica digital.
REFERENCIAS

[1]

Help de Labview

[2]

http://mecatronicaitz.blogspot.com/2010/09/
puerto-serial -con-matlab.html

[3]

https://msdn.microsoft.com/eses/library/system.io.ports.serialport(v=vs.11
0).aspx?cs-save-lang=1&cs-lang=vb#code-s
nippet-1

You might also like