You are on page 1of 15

UNIVERSIDAD NACIONAL DEL CALLAO

FACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA


ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICA

CURSO: MICROCONTROLADORES Y SISTEMAS EMBEBIDOS


LABORATORIO: 4
PROFESOR: ASTOCONDOR VILLAR JACOB

ESTUDIANTES:

 Mari Salcedo Miguel

CÓDIGO: 1313220516

 Reynoso Silva Carlos Andres

CÓDIGO: 044229D

 Rios Molina Michael Edwin

CÓDIGO: 1413220339

FECHA: 29/05/2017

HORA: 9:40 p.m. - 11:20 p.m.

2017
MICROCONTROLADORES Y SISTEMAS EMBEBIDOS
LABORATORIO 01: CONTROL DE ENCENDIDO Y APAGADO DE LED

MATERIAL
 1 dsPIC3F4013
 1 Push-button.
 1 Resistencia de 1 kO.
 1 Diodo emisor de luz (LED).
 1 Resistencia de 10 kO.
 1 Cristal de 4 MHz.
 2 Capacitores de 30ρF (cerámicos).
 1 Capacitor de 4.7 µF (tantalio de preferencia).
 1 Protoboard.
 1 Fuente de CD de 5.0V para la familia DSPIC30f

DESARROLLO DEL PROGRAMA EN ASSEMBLER PARA CONTROLAR EL ENCENDIDO Y APAGADO


DE UN LED
;************************************************************
PROGRAMA:
;************************************************************
.equ __30F4013,1
.include "P30F4013.inc" ;SELECCIONAMOS LAS LIBRERIAS.
.global _main ;ESTABLECIENDO ETIQUETA "_main".
.global _ON ;ETIQUETA DE CONTROL "_ON".
.global _OFF ;ETIQUETA DE CONTROL "_OFF".
.text
;************************************************************
; PROGRAMA PRINCIPAL
;************************************************************
_main:
mov #0X03E8,W1 ;CARGAMOS DATO "#0X03E8" A W1.
mov #0X03E8,W2 ;CARGAMOS DATO "#0X03E8" A W2.
bclr TRISB,#RB0 ;RB0 SERA SALIDA.
;
;************************************************************
;ESTABLECIENDO SUBRUTINAS DE CONTROL
;************************************************************
_ON:
dec W1,W1 ;DECREMENTA W1 Y SE ALMACENA EN SI MISMO
bset PORTB,#RB0 ;LED ENCENDIDO
repeat #0x03E8 ;REPETIR SUBRUTINA 1000 veces
nop
bra NZ,_ON ;SI W1 ES DIFERENTE DE 0 REPITE SUB RUTINA "_ON".
goto _OFF
_OFF:
dec W2,W2 ;DECREMENTA W2 Y SE ALMACENA EN SI MISMO
bclr PORTB,#RB0 ;LED APAGADO
repeat #0x03E8 ;REPETIMOS SUB RUTINA 1000 VECES
nop
bra NZ,_OFF ;SI W2 ES DIFERENTE DE 0 REPITE SUBRUTINA "_OFF".
goto _main
;************************************************************
; PROGRAMA FINALIZADO
;************************************************************
.end

CIRCUITO ANALIZADO

C1
U1
19 21
RA0/CN2/VREF+/AN0 RB0/CN4/RP0/C2IN-/AN2/EMUD1/PGED1
22P 20 22
1

RA1/CN3/VREF-/AN1 RB1/CN5/RP1/C2IN+/AN3/EMUC1/PGEC1
30 23
RA2/CN30/CLKI/OSCI RB2/CN6/RP2/AN4
X1 31
RA3/CN29/CLKO/OSCO RB3/CN7/RP3/AN5
24
CRYSTAL 34
RA4/CN0/T1CK/SOSCO RB4/CN1/RP4/SOSCI
33 R2
13 41 330
RA7/TCK RB5/CN27/RP5/ASDA1/EMUD3/PGED3
2

C2 32 42
RA8/TDO RB6/CN24/RP6/ASCL1/EMUC3/PGEC3
35 43
RA9/TDI RB7/CN23/RP7/INT0
12 44
RA10/TMS RB8/CN22/RP8/SCL1
22P RB9/CN21/RP9/SDA1
1 D1
25 8 LED-YELLOW
RC0/CN8/RP16/AN6 RB10/CN16/RP10/PWM1H3/EMUD2/PGED2
+5v 26 9
RC1/CN9/RP17/AN7 RB11/CN15/RP11/PWM1L3/EMUC2/PGEC2
27 10
RC2/CN10/RP18/AN8 RB12/CN14/RP12/PWM1H2
36 11
RC3/CN28/RP19 RB13/CN13/RP13/PWM1L2
37 14
RC4/CN25/RP20 RB14/CN12/RP14/PWM1H1
R1 38
RC5/CN26/RP21 RB15/CN11/RP15/PWM1L1
15
2
RC6/CN18/RP22/PWM2H1
10k 3 17
RC7/CN17/RP23/PWM2L1 AVDD
4 16
RC8/CN20/RP24 AVSS
MCLR 5
RC9/CN19/RP25
7
VCAP/VDDCORE
18
MCLR MCLR
DSPIC33FJ16MC304

Fig1. Simulación del circuito de encendido y apagado de un led.


MICROCONTROLADORES Y SISTEMAS EMBEBIDOS
LABORATORIO 02: CONTROL DE GIRO DE MOTOR DC

MATERIALES

 01 dsPIC30F4013.
 01 Push-button.
 Resistencias de 1 k.
 08 Diodos emisor de luz (LED).
 01 Resistencia de 10 k.
 01 Cristal de 4 MHz.
 01 Protoboard.
 01 Fuente de CD 5.0V para la familia DSPIC30f
 Un driver de motor l293
 Un motor DC

DESARROLLO DEL PROGRAMA EN ASSEMBLER PARA CONTROLAR EL GIRO DEL MOTOR DC


;***********************************************************
; ENCABEZADO DE PROGRAMA
;***********************************************************
.equ __30f4013,1
.include "p30f4013.inc"
;***********************************************************
; CONFIGURACION DEL OSCILADOR, DEL RESET, STACK Y WATCHDOG
;***********************************************************
config __FOSC,CSW_FSCM_OFF&XT_PLL4 ;use cristal oscilador con el 4x PLL
config __FWDT,WDT_OFF ;Desabilitado Watchdog Timer
config __FBORPOR,PBOR_ON&MCLR_EN
config __FGS,CODE_PROT_OFF ;Desabilitado protecion de codigo
;***********************************************************
; GENERACION DE ETIQUETAS
.equ cont,#0x0810 ; VARIABLE cont en puntero #0x0810
.equ cont1,#0x0812 ; VARIABLE cont1 en puntero #0x0812
.global xx ; Etiqueta xx
.global yy ; Etiqueta yy
.global zz ; Etiqueta zz
.global __reset ; Activando función RESET
.text ; Inicio de programa
;***********************************************************
;PROGRAMA PRINCIPAL
;***********************************************************
__reset:
goto main ; Salta a main
.org 100 ; Inicia programa en registro de memoria 100

main:
mov #_SP_init,W15 ;inicializa el SP
mov #_SPLIM_init,W0
mov W0,SPLIM
nop
;***********************************************************
; CONFIGURACION DE PUERTOS
;***********************************************************

mov #0x0000,W0 ; Guardamos el literal #0x0000 en W0


mov W0,TRISB ; puerto B como salida
mov #0x0001,W0 ; Guardamos el literal #0x0001 en W0
mov W0,TRISD ; RD1 será entrada
;***********************************************
;RUTINAS PARA GIRO Y STOP
;***********************************************
bucle: ; verifica el estado del interruptor abierto o cerrado?
BTSC PORTD,#0 ; Revisa el bit 0 del puerto B
bra detener ; si no es 0 salta a “detener”
bra giro ; caso contrario salta a esta instruccion

detener:
call zz ; Llama a subrutina zz
bra bucle ; Regresa a bucle

giro:
call xx ; Llama a subrutina xx
call yy ; Llama a subrutina yy
bra bucle ; Regresa a bucle
;***********************************************
;RUTINAS PARA XX, YY Y ZZ
;***********************************************
xx:
mov #0x0001,W1 ; Guardamos el literal #0x0001 en W1
mov W1,PORTB ; Movemos W1 a PORTB
call delay ; Salta a Delay
return
yy:
mov #0x0002,W1 ; Guardamos el literal #0x0002 en W1
mov W1,PORTB ; Movemos W1 a PORTB
call delay ; Salta a Delay
return
zz:
mov #0x0000,W1 ; Guardamos el literal #0x0000 en W1
mov W1,PORTB ; Movemos W1 a PORTB
return
;***********************************************
;RUTINAS PARA RETARDOS
;***********************************************
delay: ;Subrutina de Retardo en dos lazos
mov # 0xffff ,W2
mov W2,cont
YY:
mov # 0x001F, W1
mov W1,cont1
XX:
dec cont1 ; cont1-1=cont1
bra NZ,XX
BTSC PORTD,#0 ; chequear interruptor salta si es cero o cerrado
bra bucle
dec cont ; cont-1=cont
bra NZ,YY
return
;****************************************************
.end

CIRCUITO ANALIZADO
+12V

+5V 16 8 U2
2 3
IN1 VSS VS OUT1
7 6
IN2 OUT2
1
EN1

R2
9
EN2
10k 10
IN3 OUT3
11
15 14
IN4 GND GND OUT4

U1 L293D
1 4
MCLR RB0/CN4/RP0/AN2/EMUD1/PGD1
5
20
VDDCORE
RB1/CN5/RP1/AN3/EMUC1/PGC1
RB2/CN6/RP2/AN4
6 +5V
7
RB3/CN7/RP3/AN5
11
RB4/CN1/RP4/SOSCI/EMUD3/PGD3
14
RB5/CN27/RP5/ASDA1
28 15
AVDD RB6/CN24/RP6/ASCL1
27 16
AVSS RB7/CN23/RP7/INT0
RB8/CN22/RP8/SDA1/TCK
17 R1
18
RB9/CN21/RP9/SCL1/TCK
RB10/CN16/RP10/TDI
21 10k
2 22
RA0/CN2/VREF+/AN0/EMUD2/PGD2 RB11/CN15/RP11/TMS
3 23
RA1/CN3/VREF-/AN1/EMUC2/PGC2 RB12/CN14/RP12/AN9
9 24
RA2/CN30/CLKI/OSCI RB13/CN13/RP13/AN8
10 25
RA3/CN29/CLKO/OSCO RB14/CN12/RP14/AN7
12 26
RA4/CN0/T1CK/SOSCO/EMUC3/PGC3 RB15/CN11/RP15/AN6
DSPIC33FJ12GP202
2

X1
CRYSTAL
1

Fig2. Simulación del circuito de control de giro de motor DC.


MICROCONTROLADORES Y SISTEMAS EMBEBIDOS
LABORATORIO 03: CONTROL DE MOTOR PASO A PASO

PROBLEMA:

MATERIALES

 01 dsPIC30F4013.
 01 Push-button.
 Resistencias de 1 k.
 08 Diodos emisor de luz (LED).
 01 Resistencia de 10 k.
 01 Cristal de 4 MHz.
 01 Protoboard.
 01 Fuente de CD 5.0V para la familia DSPIC30f
 Un driver de motor ULN2003
 Un motor paso a paso

DESARROLLO DEL PROGRAMA EN ASSEMBLER PARA CONTROLAR DE MOTOR PASO A PASO


;***************************************************************
;***************************************************************
;PROGRAMA: CONTROL DE GIRO DE MOTOR PASO A PASO
;***************************************************************
;***************************************************************
;SELECCION DE DSPIC
;***************************************************************
.equ __30f4013,1
.include "p30f4013.inc"
;***************************************************************
;CONFIGURANDO OSCILADOR, PERRO GUARDIAN Y RESET
;***************************************************************
config __FOSC, FRC ;Trabajar con el Osc Interno
config __FWDT, WDT_OFF ;deshabilitar el Perro guardian
config __FBORPOR, MCLR_EN ;Configuracion de reset
;***************************************************************
;ESTABLECIENDO VARIABES
;***************************************************************
.equ cont,#0x0810 ;Variable cont en dirección ,#0x0810
.equ cont1,#0x0812 ;Variable cont1 en dirección ,#0x0812
.equ nvuelta_H,#0x0814 ;Variable nvuelta_H en dirección ,#0x0814
.equ nvuelta_AH,#0x0816 ;Variable nvuelta_AH en dirección ,#0x0816
.global _main ;Etiqueta _main
.global __reset ;Etiqueta __reset
.text
;***************************************************************
;PROGRAMA PRINCIPAL
;***************************************************************
__reset:
goto _main ;Etiqueta _main
.org 100 ;Escribimos programa en registro 100

;***************************************************************
;CONFIGURANDO ENTRADAS Y SALIDAS
;***************************************************************
_main:
mov #0x0000, W0 ;Movemos #0x0000 a W0
mov W0,LATB ;para iniciar Puerto B apagado
mov W0,TRISB ;y configurarlo como salida
mov #0x0001, W1 ;Movemos #0x0001 a W1
mov W1,TRISD ;para configurar puerto D como entrada
;***************************************************************
;INICIALIZANDO SECUENCIA
;***************************************************************
mov #0x0000, W0 ;Inicio de secuencia
mov W0,PORTB
;***************************************************************
;SUBRUTINAS LOOP Y SWT (SWITCH)
;***************************************************************
loop :
BRA swt ;Salta a subrutina swt
BRA loop ;Regresa a subrutina loop
swt:
BTSS PORTD,#0 ;Salta instruccion si bit RD0 = 1
BRA DETENER ;De lo contrario salta a subrutina DETENER
BRA GIRO ;Salta a subrutina GIRO
;***************************************************************
;ESTABLECIENDO LA DETENCION Y ARRANQUE DE MOTOR
;***************************************************************
DETENER:
mov #0x0000,W0 ;Movemos #0x0000 a W0
mov W0,PORTB ;para detener motor
call delay ;Llama a subrutina delay
BRA swt ;Salta a subrutina swt
GIRO:
call GIRO_HORARIO ;Llama a subrutina GIRO_HORARIO
call pausa_H ;Llama a subrutina pausa_H
call GIRO_ANTIHORARIO ;Llama a subrutina GIRO_ANTIHORARIO
call pausa_AH ;Llama a subrutina pausa_AH
BRA swt
;***************************************************************
;SUBRUTINAS DE CANTIDAD DE VUELTAS Y SENTIDO DE GIRO
;***************************************************************
GIRO_HORARIO:
call NUMERO_DE_VUELTAS_H ;Llama a subrutina NUMERO_DE_VUELTAS_H
resta: dec nvuelta_H ;decrementa nvuelta_H
bra NZ, HORARIO ;Si no es cero salta a HORARIO
return ;de lo contrario regresa a la instruccion donde se quedo
GIRO_ANTIHORARIO:
call NUMERO_DE_VUELTAS_AH;Llama a subrutina NUMERO_DE_VUELTAS_H
resta1: dec nvuelta_AH ;decrementa nvuelta_AH
bra NZ, ANTIHORARIO ;Si no es cero salta a ANTIHORARIO
return ;de lo contrario regresa a la instruccion donde se
quedo

HORARIO: ;Giro en sentido horario


mov #0x0001, W0
mov W0, PORTB
call delay
mov #0x0002, W0
mov W0, PORTB
call delay
mov #0x0004, W0
mov W0, PORTB
call delay
mov #0x0008, W0
mov W0, PORTB
call delay
BRA resta
ANTIHORARIO: ;Giro en sentido antihorario
mov #0x0008, W0
mov W0, PORTB
call delay
mov #0x0004, W0
mov W0, PORTB
call delay
mov #0x0002, W0
mov W0, PORTB
call delay
mov #0x0001, W0
mov W0, PORTB
call delay
bra resta1
NUMERO_DE_VUELTAS_H:
mov #0x0014,W3
mov W3,nvuelta_H
return
NUMERO_DE_VUELTAS_AH:
mov #0x0014,W3
mov W3,nvuelta_AH
return
;***************************************************************
;PAUSA PARA CAMBIO DE GIRO
;***************************************************************
pausa_H: ;PAUSA PARA SENTIDO HORARIO
mov #0x0000,W0
mov W0,PORTB
return
call delay
BB: btss IFS0,#T1IF ;Seleccionamos Timer1 con el bit #T1IF
BRA BB
bclr IFS0,#T1IF
BCLR T1CON,#TON ;Habilitamos contador
clr TMR1 ;hacienda que inicie desde 0
return

pausa_AH: ; PAUSA PARA SENTIDO ANTIHORARIO


mov #0x0000,W0
mov W0,PORTB
call DELAY
AA: btss IFS0,#T1IF ;Seleccionamos Timer1 con el bit #T1IF
BRA AA
bclr IFS0,#T1IF
BCLR T1CON,#TON ;Habilitamos contador
clr TMR1; TMR1=0 ;hacienda que inicie desde 0
return ;retorna donde fue llamado

DELAY:
bclr T1CON,#TON
clr TMR1
MOV #0x4CAB,W0
MOV W0,PR1
mov #0x8030,W0
mov W0,T1CON
BCLR IFS0,#T1IF
return
;***************************************************************
;RETARDO EN 2 LAZOS ENTRE PASO Y PASO
;***************************************************************

delay: ;Subrutina de Retardo en dos lazos


mov # 0x5000 ,W2
mov W2,cont
YY: mov # 0x0005, W1
mov W1,cont1
BTSS PORTD,#0
BRA loop
XX: dec cont1
bra NZ,XX
dec cont
bra NZ,YY
return
;***************************************************************
;FIN DE PROGRAMA
;***************************************************************
.end

CIRCUITO ANALIZADO
C1

LED4

LED3

LED2

LED1
OSC0 U1
22P 19 21
RA0/CN2/VREF+/AN0 RB0/CN4/RP0/C2IN-/AN2/EMUD1/PGED1
20 22
RA1/CN3/VREF-/AN1 RB1/CN5/RP1/C2IN+/AN3/EMUC1/PGEC1
X1 OSC1
30
RA2/CN30/CLKI/OSCI RB2/CN6/RP2/AN4
23
CRYSTAL OSC0
31
RA3/CN29/CLKO/OSCO RB3/CN7/RP3/AN5
24 R7 R6 R5 R4
34 33 330 330 330 330
RA4/CN0/T1CK/SOSCO RB4/CN1/RP4/SOSCI
C2 13 41
RA7/TCK RB5/CN27/RP5/ASDA1/EMUD3/PGED3
32 42
RA8/TDO RB6/CN24/RP6/ASCL1/EMUC3/PGEC3
35 43
OSC1 RA9/TDI RB7/CN23/RP7/INT0
22P
12
RA10/TMS RB8/CN22/RP8/SCL1
44 D5 D4 D3 D2
1 LED-YELLOW
LED-YELLOW
LED-YELLOW
LED-YELLOW
RB9/CN21/RP9/SDA1
25 8
LED1 RC0/CN8/RP16/AN6 RB10/CN16/RP10/PWM1H3/EMUD2/PGED2
26 9
LED2 RC1/CN9/RP17/AN7 RB11/CN15/RP11/PWM1L3/EMUC2/PGEC2
27 10
LED3 RC2/CN10/RP18/AN8 RB12/CN14/RP12/PWM1H2
36 11
LED4 RC3/CN28/RP19 RB13/CN13/RP13/PWM1L2
37 14
RC4/CN25/RP20 RB14/CN12/RP14/PWM1H1
38 15
0 B1
B1
2
RC5/CN26/RP21
RC6/CN18/RP22/PWM2H1
RB15/CN11/RP15/PWM1L1 +5v

3 17
RC7/CN17/RP23/PWM2L1 AVDD
4 16
RC8/CN20/RP24 AVSS
5
RC9/CN19/RP25
R1
7
VCAP/VDDCORE
18 10k
MCLR MCLR
DSPIC33FJ16MC304 MCLR

U2
9
COM
1 16
LED1 1B 1C A1
2 15
LED2 2B 2C A2 A4 A1
LED3
3
3B 3C
14
A3 C6
4 13 1000uF+12V
LED4 4B 4C A4 A3 A2
5 12
5B 5C
6 11 +88.8
6B 6C
7 10
7B 7C
ULN2003A

Fig4. Simulación del circuito de motor paso a paso.


PROGRAMACION SEMAFORO

PROBLEMA
Implementar un semáforo CON EL dsPIC30F4013 configurando el temporizador para encender
un led verde durante un tiempo determinado y luego un led rojo durante otro tiempo
FUNDAMENTO
El led rojo estará encendido durante 10 segundos, luego debe encenderse el led verde durante
10 segundos y así sucesivamente Estos leds debe estar ubicado en los pines RD0 (rojo) y RD1
(verde)
Realizar el programa comentando cada instrucción para encender 10 segundos el led verde y
luego durante 10 segundos el led rojo y asi constantemente incluya los cálculos para cargar el
valor en el registro PR1 ( configurar el TIMER1 )
Se recomienda utilizar interrupción interna del timer para realizar el programa, en el control de
tiempo de 10seg con timer de 32 bits ( TMR2 yTMR3)
Nota: Adjuntar cálculos para temporizar 10seg
Realizar los cambios en el programa comentando cada instrucción del paso 2, para que el peatón
accione el interruptor conectado al pin 17 O RA11/INT0 y solicite que se ponga en verde.
Se recomienda utilizar interrupción externa INTO
En cada caso realizar un diagrama de flujo del programa

DIAGRAMA DE CIRCUITO
DESARROLLO DE PROGRAMACION

.title "SEMAFORO CON INTERRUPCION"


.include "p30f4013.inc"
.equ __30f4013,1
.global _main
.global __INT0Interrupt
.text
;*************PALABARA DE CONFIGURACION******************************
config __FOSC, FRC
config __FWDT, WDT_OFF
config __FBORPOR, MCLR_EN
;*************PROGRAMA PRINCIPAL ************************************
_main:
.org 100
;**************CONFIGURACION DE PUERTOS******************************
mov #0x0000, W0
mov W0,LATD ;ponemos a cero el puerto D
mov W0, TRISD ;configuramos los pines del puerto D como salida
mov #0x0001, W0
mov W0, IEC0 ;habilitamos el permiso de interrupcion

;*********************ESCIRTURA EN LOS PUERTOS***********************


bset PORTD,#0
;*********************CONFIGURACION DEL TIMER*************************
bclr T1CON,#TON ;desabilito el timer
clr TMR1 ;borramos el timer 1 para que empieze de nuevo
mov #0x9897,W0
mov W0,PR1 ;se carga el registro periodico1
mov #0x8030,W0
mov W0,T1CON ;reloj interno, preescaler 1:256, inciar temporizador
bclr IFS0,#T1IF ;no se solicita interrupcion
bset IEC0,#0 ;permiso de interrupcion habilitado

MainLoop:
btss IFS0,#T1IF ;se teste el flag de interrupcion1
bra MainLoop
bclr IFS0,#T1IF ;no se solicita interrupcion
bset IEC0,#0 ;permiso de interrupcion habilitado
btg LATD,#0 ;conmuta el bit RD0
btg LATD,#1 ;conmuta el bit RD1
clr TMR1
bra MainLoop

__INT0Interrupt:
disi #3 ;deshabilitamos interrupciones
mov #0x0002, W0
mov W0,PORTD ;se activa RD1(led verde)
bclr IFS0,#0 ;no se solicita interrupcion externa
clr TMR1 ;borramos el timer 1 para que empieze de nuevo
retfie ;retorno a la interrupcion
.end
ESQUEMA DE CIRCUITO
DIAGRAMA DE FLUJO

INICIO

CONFIGURA PUERTOS

SWITCH ON?

INICIA SECUENCIA

LED VERDE ON

CUENTA 10 SEG SE MANTIENE EN

SWITCH ON?

TERMINA CUENTA?

LED ROJO ON

CUENTA 10 SEG SE MANTIENE EN

SWITCH ON?

TERMINA CUENTA?

You might also like