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

TEMA COMUNICACIN SERIAL ASINCRNICA

OBJETIVOS

Familiarizar al estudiante con el uso del prtico de comunicacin


serial (USART) del microcontrolador Atmega164P y el puerto serial un
computador.

TRABAJO PREPARATORIO
1. Consultar los comandos que permiten manejar el puerto de
comunicacin serial asincrnico de un PC, usando Visual
Studio, Matlab y LabView.
Visual Studio:
Asncrono significa que no una seal de sincronizacin o de reloj. Cada
carcter est enmarcado entre seales de inicio y parada. Un solo bit 0,
denominado bit de inicio, precede a cada carcter para indicar al sistema
que los siguientes 8 bits constituyen un byte de datos. Uno o dos bits en
alto siguen al carcter para sealar que dicho carcter ha sido enviado.
Trama en una transmisin asncrona:
Para escribir datos en visual studio se usa:
Sub SendSerialData(ByVal data As String)
' Send strings to a serial port.
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
com1.WriteLine(data)
com1.Close()
End Using
End Sub
Para leer datos en visual studio se usa:
Function ReceiveSerialData() As String
' Receive strings from a serial port.
Dim returnStr As String = ""
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
Do
Dim Incoming As String = com1.ReadLine()
If Incoming Is Nothing Then
Exit Do
Else
returnStr &= Incoming & vbCrLf
End If
Loop
com1.Close()
End Using
Return returnStr
End Function

Los comandos que se presentaron sirven para la comunicacin serial para


leer y escribir los datos a enviar y recibir.
Matlab:
Mediante la ayuda de mathworks que provee informacin con respecto a
Matlab, para la comunicacin seral asincrnica. Para leer datos:
readasync(obj) inicia una operacin de lectura asncrona en el objeto de
puerto serie, obj . Ejm:
s = serial('COM1');
fopen(s)
s.ReadAsyncMode = 'manual';
fprintf(s,'Measurement:Meas1:Source CH1')
fprintf(s,'Measurement:Meas1:Type Pk2Pk')
fprintf(s,'Measurement:Meas1:Value?')
Para escribir los datos se puede usar: TransID = writeasync(GObj,Values)
escribe de forma asncrona valores a todos los artculos contenidos en el
objeto dagroup GObj. Valores es un conjunto de clulas de los valores y es
del mismo tamao que el nmero de artculos en GObj. TransID es un ID de
transaccin nica para la solicitud asncrona.
Para enviar datos por el puerto serial Com2 por ejemplo se utilizara el
siguiente cdigo.
ps = serial('COM2'); %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 enva 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

Labview:
Para el caso de LabView se usa librera Visa con el fin de realizar la
comunicacin serial, posee muchas opciones para enviar y recibir datos.
Para leer datos:

Se debe iniciar una sesin VISA. La configuracin del tipo de comunicacin


serial se hace con VISA configure serial port, que se encuentra en
Functions >> Instrument I/O >> Serial >> VISA configure serial port.
Ya con la VISA, se configura la lectura y se utiliza VISA Read
Para escribir datos:
Se abre una sesin VISA como se lo hizo para leer datos. Se pone VISA
Write que se encuentra en Functions >> Programming >> Instrument I/O
>> VISA Write.
Siguiente se cierra la sesin VISA con VISA close y un Simple Error
Handler. El VI de escritura en puerto serial puede quedar como se muestra a
continuacin.
La velocidad de transferencia es muy importante
Se debe sincronizar las tareas de escritura y lectura respectivamente, para
que el microcontrolador o la computadora estn listos para enviar o recibir
un dato en el puerto serial. Para ello se puede programar un lazo(loop) para
que no permita que el programa avance hasta que no se reciba cierto texto.

2. Se
desea
implementar
dos
contadores
de
8
bits
ascendente/descendente, el primer contador se visualizara en
displays 7 segmentos conectados al microcontrolador, el
modo de funcionamiento (ascendente/ descendente) ser
controlado desde el HMI mediante comunicacin serial; el
segundo contador se visualizara en el HMI y su modo de
funcionamiento se controlara desde un interruptor conectado
al microcontrolador. El programa para el microcontrolador
debe ser desarrollado en Assembler y para el HMI emplear
uno de los softwares del numeral anterior.

Entradas, salidas y justificacin del microprocesador

Se usar el micro Atmega 164P, ya que posee todos los pines que necesito,
e inclusive sobran pines:
Entradas:
1 Pin:

Puerto D: Ascendente a descendente: PD0 (pin 1)

Salidas:
11 pines:
pin 34 al 40

Puerto A: 7 Pines( Habilitacion de cada segmento del display)


Puerto C: 3 Pines(Habilitacion de cada display) pin 22 al 24

Usart:
Comunicacin serial Rx pin 14 (PD0)

Se usaron 3 pines para la polarizacin del microcontrolador


Diagrama de flujo

inicio

Inicializa puertos y configuro el


stack pointer
Configurar stack pointer y
parmetros de comunicacin
Almacenar el valor del registro
que se usa como contador
Lazo While

Verifico el valor de los switch del


micro y de labview

Si el valor del switch est en


cero el contador desciende,
caso contrario es ascendente

Inicializa el contador para


ambos(pc y micro) Con barrido

fin

Cdigo

/*
* Preparatorio1.asm
*
* Created: 02/10/2015 9:59:10
* Author: Bryan
*/

.include "m164pdef.inc"
.equ F_c=8000000
.equ bauds=9600

.def tempo=r21
.def contar=r22
.dseg

ldi tempo,0b0000_0110
sts ucsr0c,tempo
sei

BINARIO: .byte 1
BCD0: .byte 1
BCD1: .byte 1
BCD2: .byte 1
DIG0: .byte 1
DIG1: .byte 1
DIG2: .byte 1

//Programa
.cseg

call espero
in tempo, pinb
sts udr0,tempo
ldi r19,0
ldi r23,0
lazo:
cp contar,r19
brne descendente
//call barrido_retardo1
inc r23
//ldi r23,222
sts BINARIO,r23
call BIN_BCD
call BCD_7SEG
call barrido

.org 0x00
rjmp inicio
.org 0x28
rjmp comunica
inicio:
//configuracion de puertos
ldi tempo,0b00000111
out ddrc,tempo
ldi tempo,0b11111000
out portc,tempo
ldi tempo,255
out ddra,tempo
ldi tempo,0
out porta,tempo
ldi tempo,0
out ddrb,tempo
ldi tempo,1
out portb,tempo
//Habilito el MCRUCR
in tempo,mcucr
andi tempo,0b11101111
out mcucr,tempo
// Configuro el stack:
ldi tempo, high(ramend)
out sph,tempo
ldi tempo, low(ramend)
out spl,tempo

rjmp lazo
descendente:
//call barrido_retardo1
dec r23
sts BINARIO,r23
call BIN_BCD
call BCD_7SEG
call barrido
rjmp lazo
espero:
lds tempo,ucsr0a
sbrs tempo,5
rjmp espero
ret
comunica:
push tempo
in tempo,sreg
push tempo

//Configuro la comunicacion serial

lds contar,udr0

ldi tempo, high((F_c/(16*bauds)))


sts ubrr0h,tempo
ldi tempo, low((F_c/(16*bauds)))
sts ubrr0l,tempo

call espero
in tempo,pinb
sts udr0,tempo

//serial
clr tempo
sts ucsr0a,tempo
ldi tempo,0b1001_1000
sts ucsr0b,tempo

pop tempo
out sreg,tempo
pop tempo
reti
BIN_BCD:

ldi r17,3
push r16
in r16,sreg
push r16
push r17
push xh
push xl

BCD_7SEG_1:
ldi
zh,high(tabla_7seg<<1)
ldi
zl,low(tabla_7seg<<1)

lds r16,BINARIO
clr r17

ld r16,x+
add zl,r16
clr r16
adc zh,r16
lpm r16,z
st y+,r16

BIN_BCD_CENTENAS:
subi r16,100
brcs BIN_BCD_DECENAS
inc r17
rjmp BIN_BCD_CENTENAS

dec r17
brne BCD_7SEG_1

BIN_BCD_DECENAS:
sts BCD2,r17
subi r16,-100
clr r17

pop yl
pop yh
pop xl
pop xh
pop r17
pop zl
pop zh
pop r16
out sreg,r16
pop r16

BIN_BCD_DECENAS1:
subi r16,10
brcs BIN_BCD_UNIDADES
inc r17
rjmp BIN_BCD_DECENAS1
BIN_BCD_UNIDADES:
sts BCD1,r17
subi r16,-10
sts BCD0,R16

ret
barrido:
push r16
in r16,sreg
push r16
push r17
push xh
push xl
push r18

pop xl
pop xh
pop r17
pop r16
out sreg,r16
pop r16

ldi
ldi
ldi
ldi

ret

BCD_7SEG:
push r16
in r16,sreg
push r16
push zh
push zl
push r17
push xh
push xl
push yh
push yl
ldi
ldi
ldi
ldi

xh,high(BCD0)
xl,low(BCD0)
yh,high(DIG0)
yl,low(DIG0)

r18,0b00000001
xh,high(dig0)
xl,low(dig0)
r17,3

barrido_salto1:
ldi
r16,0b00000000
out portc,r16
ld r16,x+
out porta,r16
out portc,r18
call
barrido_retardo1

clc
rol

r18

dec

r17
brne barrido_salto1

ldi
r16,0b00000000

out portc,r16

pop r18
pop xl
pop xh
pop r17
pop r16
out sreg,r16
pop r16
ret
barrido_retardo:
push r16
ldi r16,255
retardo:
dec r16
brne retardo
pop r16
ret
barrido_retardo1:
push r16
push r17
push r18

push r19
ldi R17, $97
WGLOOP0: ldi R18, $06
WGLOOP1: ldi R19, $92
WGLOOP2: dec R19
brne WGLOOP2
dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; ----------------------------; delaying 1 cycle:
nop
pop
pop
pop
pop

r19
r18
r17
r16

ret
Tabla_7seg:
.db 0b11000000,0b11111001
.db 0b10100100,0b10110000
.db 0b10011001,0b10010010
.db 0b10000010,0b11111000
.db 0b10000000,0b10011000

3. Presentar la simulacin de lo solicitado en el numeral anterior

Simulacin en Proteus:

U1
40
41
42
43
44
1
2
3

P1
1
6
2
7
3
8
4
9

DCD
DSR
RXD
RTS
TXD
CTS
DTR
RI

9
10
11
12
13
14
15
16
29
27
4

PB0/XCK0/T0/PCINT8
PB1/T1/CLKO/PCINT9
PB2/AIN0/INT2/PCINT10
PB3/AIN1/OC0A/PCINT11
PB4/SS/OC0B/PCINT12
PB5/MOSI/PCINT13
PB6/MISO/PCINT14
PB7/SCK/PCINT15
PD0/RXD0/PCINT24
PD1/TXD0/PCINT25
PD2/INT0/RXD1/PCINT26
PD3/INT1/TXD1/PCINT27
PD4/OC1B/XCK1/PCINT28
PD5/OC1A/PCINT29
PD6/ICP/OC2B/PCINT30
PD7/OC2A/PCINT31
AREF
AVCC
RESET
ATMEGA164P

ERROR
COMPIM

Simulacin en LabVIew:

PA0/ADC0/PCINT0
PA1/ADC1/PCINT1
PA2/ADC2/PCINT2
PA3/ADC3/PCINT3
PA4/ADC4/PCINT4
PA5/ADC5/PCINT5
PA6/ADC6/PCINT6
PA7/ADC7/PCINT7
PC0/SCL/PCINT16
PC1/SDA/PCINT17
PC2/TCK/PCINT18
PC3/TMS/PCINT19
PC4/TDO/PCINT20
PC5/TDI/PCINT21
PC6/TOSC1/PCINT22
PC7/TOSC2/PCINT23
XTAL1
XTAL2

37
36
35
34
33
32
31
30
19
20
21
22
23
24
25
26
8
7

Bibliografa:

[1 MathWorks, MathWorks Readasync, [En lnea]. Available:


] http://www.mathworks.com/help/matlab/ref/readasync.html. [ltimo
acceso: 06 10 2015].
[2 Mathworks, Mathworks, [En lnea]. Available:
] http://www.mathworks.com/help/opc/ug/writeasync.html. [ltimo acceso:
06 10 2015].
[3 UDB, UDB: interfaes y perifricos, [En lnea]. Available:
] http://www.udb.edu.sv/udb/archivo/guia/electronica-ingenieria/interfacesy-perifericos/2015/ii/guia-3.pdf. [ltimo acceso: 07 10 2015].
[4 youtube, Youtube: Curso de Labview, [En lnea]. Available:
] https://www.youtube.com/watch?v=TjLOOzvDlsg . [ltimo acceso: 06 10
2015].
[5 Mathlabudi, Mathlabudi: Transmision de datos por serial, [En lnea].
] Available: http://matlabudi.blogspot.com/2013/05/transmision-de-datospor-el-puert.html. [ltimo acceso: 06 10 2015].
[6 Microsoft support, Microsoft support: Comunicacion serial con visual
] Studio, [En lnea]. Available: https://support.microsoft.com/eses/kb/904795. [ltimo acceso: 06 10 2015].
[7 National Instruments, National Instruments: Comunicacion serial con
] Labview, [En lnea]. Available: http://www.ni.com/white-paper/7907/es/.
[ltimo acceso: 06 10 2015].

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