Professional Documents
Culture Documents
ESTUDIANTES:
CÓDIGO: 1313220516
CÓDIGO: 044229D
CÓDIGO: 1413220339
FECHA: 29/05/2017
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
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
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
main:
mov #_SP_init,W15 ;inicializa el SP
mov #_SPLIM_init,W0
mov W0,SPLIM
nop
;***********************************************************
; CONFIGURACION DE PUERTOS
;***********************************************************
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
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
;***************************************************************
;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
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
;***************************************************************
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
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
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
SWITCH ON?
TERMINA CUENTA?
LED ROJO ON
SWITCH ON?
TERMINA CUENTA?