Você está na página 1de 9

Casa de Muecas automatizada

Jorge E. Correa

ResumenLa Casita de Muecas es el proyecto final


desarrollado, en grupo, para la materia de Sistemas
Microprocesados la cual se la realiza haciendo uso de los
conocimientos adquiridos de la materia durante el presente
semestre. Es un proyecto piloto que se basa en la
construccin de un mini departamento el cual consta de
diferentes habitaciones vacas dando la facilidad a las nias
de llenarlos, decorarlos a su gusto. Consta de varios leds los
cuales servirn para iluminar cada habitacin y pasillo de
la misma, cuenta tambin con dos pulsadores, de los cuales
uno es utilizado como bocina y el otro reproduce una
cancin programada, por ultimo cuenta tambin con un
reloj para ver la hora as como un pequeo Garage.

Al poseer una memoria interna, permite grabar los diferentes


programas que se utilizaron para el desarrollo de la casa, pues
registra y ejecuta las distintas instrucciones planteadas y las
respuestas a las instrucciones se obtendrn en los prticos
programados en el microcontrolador.
En la memoria del microprocesador, configuramos el programa
que permite encender las luces de la casa, la cancin, el reloj y
el timbre, estos siguen un algoritmo que le es designado y el
dispositivo realiza la funcin que le fue asignada.
Los microcontroladores ATmega164P son de los ms usados
debido a su facilidad de programacin y diseo sencillo.
(Figura 1).

Se utiliz este microprocesador debido a que optimiza la


velocidad de procesamiento y el consumo de energa,
tambin porque es muy acogida en el mercado debido a la
facilidad de programacin y un diseo sencillo, permitiendo
la realizacin de diversas aplicaciones.
I. INTRODUCCIN
Durante el presente curso de Sistemas Microprocesados, se
decidi la realizacin de un proyecto para final de semestre, el
cual involucre el cumplimiento de los objetivos dentro de la
materia, como son el conocer los fundamentos de los sistemas
Microprocesados y aplicarlos en el diseo de circuitos, as
como el desarrollo de aplicaciones que no sern tiles en el
transcurso de nuestra carrera. Dentro de este proyecto, se busca
tambin la utilizacin e integracin de los contenidos de la
materia, por ejemplo: el uso de circuitos temporizadores e
interrupciones, diversas subrutinas, memorias, registros, el uso
de prticos de entrada y salida, modos de direccionamiento,
instrucciones para la programacin del microcontrolador, etc.
[1]

Figura 1. Microprocesador ATmega164P

II. DISEO DE LA CASA


A. Elementos que se utilizaron
Para la construccin de la casa, en primera instancia se pensaba
utilizar un modelo de casa ya elaborado, pero este era muy
pequeo para poder realizar el cableado respectivo de las
nuevas implementaciones que se realizaron.

Para el desarrollo de la misma, se utiliz un microprocesador


ATmega 164P, que son microcontroladores del tipo RISC, los
mismos que fueron diseados para el desarrollo eficiente del
cdigo C, estos microcontroladores cuentan con dos etapas que
son cargar y ejecutar, que permite realizar las instrucciones en
un ciclo de reloj.

Durante los ltimos aos el crecimiento de la tecnologa y la necesidad de la


automatizacin, se crearon los microcontroladores que, haciendo uso de su
arquitectura y dems funcionalidades, proveen la capacidad para los
programadores y personas aficionadas a la misma, la facilidad para crear e
inventar nuevos servicios haciendo uso de los ATmega164P.
Este documento fue realizado en la Escuela Politcnica Nacional, en la Facultad
de Ingeniera Elctrica y Electrnica.
J. E. Correa particip en el la elaboracin del presente documento por la
Facultad de Ingeniera Elctrica y Electrnica en la Carrera de Electrnica y
Redes De Informacin (e-mail: jorge.correa@epn.edu.ec)

Figura 2. Casa modelo

C. Circuitos Simulados
LS1

SOUNDER

R2(2)

1k

R2

Q1

2N3904

R1

100

C8

1uF

Una forma de solucionar aquel inconveniente fue duplicar las


dimensiones de la casa haciendo uso de impresin 3D pero las
piezas que conforman la casa no se pegaron entre s de modo
que esta opcin tambin fue descartada.
Por ltimo se realiz la casa utilizando palos de helado, de
pincho, silicona y una base de madera para poder guardar el
proto y los dems cables que se usarn as como los pulsadores
y el pequeo parlante.

C9

1uF
40

41

42

43

44

10

11

12

13

14

15

16

29

27

PD1/TXD0/PCINT25

PD0/RXD0/PCINT24

PB7/SCK/PCINT15

PB6/MISO/PCINT14

PB5/MOSI/PCINT13

PB4/SS/OC0B/PCINT12

PB3/AIN1/OC0A/PCINT11

PB2/AIN0/INT2/PCINT10

PB1/T1/CLKO/PCINT9

PB0/XCK0/T0/PCINT8

PC4/TDO/PCINT20

PC3/TMS/PCINT19

PC2/TCK/PCINT18

PC1/SDA/PCINT17

PC0/SCL/PCINT16

PA7/ADC7/PCINT7

PA6/ADC6/PCINT6

PA5/ADC5/PCINT5

PA4/ADC4/PCINT4

PA3/ADC3/PCINT3

PA2/ADC2/PCINT2

PA1/ADC1/PCINT1

PA0/ADC0/PCINT0

U2

PD2/INT0/RXD1/PCINT26

PC5/TDI/PCINT21

PD3/INT1/TXD1/PCINT27

PC6/TOSC1/PCINT22

PD4/OC1B/XCK1/PCINT28

PD5/OC1A/PCINT29

PD6/ICP/OC2B/PCINT30

XTAL1

PC7/TOSC2/PCINT23

XTAL2

PD7/OC2A/PCINT31

AREF

AVCC

RESET

ATMEGA164P

37

36

35

34

33

32

31

30

19

20

21

22

23

24

25

26

R8

330

R9

330

R10

D8

330

LED-BLUE

R7

D7

330

LED-BLUE

R6

D6

330

D5

R5

D4

330

D3

R4

D2

330

D1

R3

LED-BLUE
LED-BLUELED-BLUELED-BLUE
LED-BLUE
LED-BLUE

330

Figura 5. Simulacin en proteus de luces y msica


En el siguiente grafico se puede apreciar el reloj simulado
Figura 3. Diseo de casa finalizada.
B. Diseo de los programas
Para el desarrollo del proyecto, se realizaron diferentes
programas que nos sirvieron para la implementacin dentro de
la casa, como son el reloj, la cancin de piano, el timbre y los
focos que se encendern en cada habitacin.
Ponemos a continuacin un ejemplo de cdigo que se utiliz:

Figura 6. Simulacin del Reloj


Por ltimo se implement un pequeo garaje que utiliza un
motor con batera.
El diseo del mismo se lo presenta a continuacin:

Figura 4. Ejemplo de codificacin del Reloj

Lo que el grupo busc fue una manera sencilla de implementar


una casa de modo que las nias no tuviesen inconvenientes al
usarla, as como la opcin de adornarla a su gusto, teniendo
espacios grandes para que pueda adornar a su gusto.
Por ltimo presentamos, en la siguiente figura, la casa
finalizada.

Figura 7. Diseo para establecer la puerta del Garaje

III. FUNCIONAMIENTO
La casa tiene un funcionamiento sencillo, pues la nia no tendr
ningn inconveniente en manejarlo ni jugar con la misma,
debido a que tiene un panel con interruptores y pulsadores los
mismos que le permite controlar la casa, siendo este sencillo de
comprender.
La casa necesita de un cargador para energizar el circuito, el
mismo que ayudara a encender los 6 focos, uno para cada
cuarto, que estn controlados por interruptores y se pueden
encender o apagar en cualquier instante, con ayuda de los
pulsadores, sonar la cancin.

Figura 9. Casa de muecas en funcionamiento


En los anexos, se presentara la codificacin de algunos
programas.

En la siguiente figura, se puede observar la implementacin y


funcionamiento del reloj.

IV. CONCLUSIONES

Por medio de la construccin del proyecto, se puso en


prctica los conocimientos adquiridos durante el
semestre.
Se utiliz el microcontrolador ATmega 164P debido a
su accesibilidad y facilidad de implementacin.
Se estableci una estructura fuerte para el desarrollo
de la casa, de modo que esta evita que algn cable se
desconecte dejando inservible el resto de la circuitera.
Por medio de
la
programacin
en
un
microcontrolador, reducimos en gran medida el uso de
elementos electrnicos.
REFERENCIA

[1]

Figura 8. Implementacin del reloj.

M.Yacelga, Sistemas Microprocesados. Octubre 2015.

ANEXO 1

Programa luces y msica

.include "m164pdef.inc"
.def aux=r16
//.def aux1=r17
.def aux2=r18
.def nota=r19
.def tempo=r17
.cseg
.org 0x00
rjmp inicio
inicio:
ser aux
out ddrc,aux
out ddrd,aux
clr aux
out ddrb,aux
out ddra,aux
com aux
out portb,aux
out porta,aux
ldi aux, mcucrsolo
andi aux,0b11101111
out mcucr, aux
ldi r21,High(Ramend)
out SPH,r21
ldi r21,low(Ramend)
out SPL,r21
ldi aux,0b00110011
sts TCCR1A,aux
ldi aux,0b00011100
sts TCCR1B,aux
ldi aux,0
sts OCR1AL,aux
ldi aux,20
sts OCR1BL,aux
ldi aux,0
sts OCR1AL,aux
main:
sbis PINB,0
rjmp re
sbis PINB,1
rjmp cancion
clr
clr
clr
clr
clr
clr

r20
r21
r22
r23
r24
r25

clr r26
clr r27
continuar:
sbic PINA,0
ldi r20,0b00000001
sbic PINA,1
ldi r21,0b00000010
sbic PINA,2
ldi r22,0b00000100
sbic PINA,3
ldi r23,0b00001000
sbic PINA,4
ldi r24,0b00010000
sbic PINA,5
ldi r25,0b00100000
sbic PINA,6
ldi r26,0b01000000
sbic PINA,7
ldi r27,0b10000000
rjmp mostrar
//*********************
mostrar:
clr tempo
add tempo,r20
add tempo,r21
add tempo,r22
add tempo,r23
add tempo,r24
add tempo,r25
add tempo,r26
add tempo,r27
OUT PortC,tempo
rjmp inicio
do:
ldi aux,118
sts OCR1AL,aux
rjmp main
re:
ldi aux,105
sts OCR1AL,aux
rjmp main
mi:
ldi aux,93
sts OCR1AL,aux
rjmp main
fa:
ldi aux,88
sts OCR1AL,aux
rjmp main
sol:
ldi aux,78
sts OCR1AL,aux
rjmp main

la:
ldi aux,70
sts OCR1AL,aux
rjmp main
si:
ldi aux,62
sts OCR1AL,aux
rjmp main
cancion:
ldi r22,2
lazo1:
// Suena tres veces do
ldi aux,118
sts OCR1AL,aux
call retardo1
ldi aux,0
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
ldi aux,0
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
ldi aux,0
//Suena una sola ves FA
ldi aux,88
sts OCR1AL,aux
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
ldi aux,0
//Suena una sola ves LA
ldi aux,70
sts OCR1AL,aux
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo
dec r22
brne lazo1
//Suena una sola ves FA
ldi aux,88
sts OCR1AL,aux
call retardo1
ldi aux,0
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux

call retardo1
//Suena dos veces MI
ldi aux,93
sts OCR1AL,aux
call retardo1
ldi aux,0
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
// Suena dos veces RE
ldi aux,105
sts OCR1AL,aux
call retardo1
ldi aux,0
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
//Suena una sola ves DO
ldi aux,118
sts OCR1AL,aux
call retardo1
ldi aux,0
out DDRD,aux
call retardo2
lazo2:
// Suena tres veces DO
ldi aux,118
sts OCR1AL,aux
call retardo1
ldi aux,0
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
ldi aux,0
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
ldi aux,0
//Suena una sola ves MI
ldi aux,93
sts OCR1AL,aux
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
ldi aux,0
//Suena una sola ves SOL
ldi aux,78
sts OCR1AL,aux
out DDRD,aux
call retardo2

ldi aux,255
out DDRD,aux
call retardo1
ldi aux,0
ret
brne lazo2
ldi aux,111
sts OCR1AL,aux
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
ldi aux,0
ldi aux,99
sts OCR1AL,aux
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
ldi aux,0

ldi aux,88
sts OCR1AL,aux
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
ldi aux,0
rjmp main
retardo:
WGLOOP0:
WGLOOP1:
WGLOOP2:

ldi
ldi
ldi
dec
brne
dec
brne
dec
brne

R17, $38
R18, $BC
R19, $C4
R19
WGLOOP2
R18
WGLOOP1
R17
WGLOOP0

ldi R17, $02


dec R17
brne WGLOOP3
nop
nop
; ===================
ret
retardo1:
ldi R17, $22
WGLOOP01: ldi R18, $BC
WGLOOP11: ldi R19, $C4
WGLOOP21: dec R19
brne WGLOOP21
dec R18
brne WGLOOP11
dec R17
brne WGLOOP01
ldi R17, $01
WGLOOP31: dec R17
brne WGLOOP31
nop
; =============================
ret
retardo2:
WGLOOP3:

ldi aux,111
sts OCR1AL,aux
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
ldi aux,0
ldi aux,66
sts OCR1AL,aux
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
ldi aux,0
ldi aux,70
sts OCR1AL,aux
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
ldi aux,0
ldi aux,78
sts OCR1AL,aux
out DDRD,aux
call retardo2
ldi aux,255
out DDRD,aux
call retardo1
ldi aux,0

ldi R17, $86


ldi R18, $C6
dec R18
brne WGLOOP12
dec R17
brne WGLOOP02
nop
nop
; =============================
WGLOOP02:
WGLOOP12:

ret
retardo3:
ldi

R17, $60

WGLOOP03:
WGLOOP13:
WGLOOP23:

ldi R18, $06


ldi R19, $92
dec R19
brne WGLOOP23
dec R18
brne WGLOOP13

;***********************************************
******************

Programa reloj
.include"m164pdef.inc"
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def

tempo=r16
aux1=r17
hord=r18 ; Asignacion horas
horu=r19 ;
mind=r20 ; Asigancion minutos
minu=r21 ;
segu=r22 ; Asignacion segundos
segd=r23 ;
aux2=r24
led=r25

.dseg ;Segmento de datos


BCD: .byte 4 ; Asignacion Para respuesta
entregada en BCD
DIG: .byte 4
.cseg
.org 0x00
clr tempo

; inicio de codigo
; inicializacion stak pointer
; Limpieza de registro(cero logico)

out ddrb,tempo
; Definicion y asignacion del
puerto b para entrada o salida
out ddrd,tempo
; Definicion y asignacion del
puerto b para entrada o salida
ser tempo
; Colocamos en 1 para definir
como salida un puerto
out portb,tempo ; Envio de datos de salida al
puerto b
out portd,tempo ; Envio de datos de salida al
puerto d
out ddra,tempo
; Envio de datos de salida al
puerto a
out ddrc,tempo
; Envio de datos de salida al
puerto c

dec R17
brne WGLOOP03
nop
; =============================
ret
out sph,tempo ; Cargo en el stack pointer
ldi tempo,low(RAMEND);
out spl,tempo ;
// Cero en todos los registros
clr led
clr horu
clr hord
clr minu
clr mind
clr segu
clr segd
ldi xl,low(BCD) ;Apuntamiento de memoria a BCD
ldi xh,high(BCD)
st x+,minu ; Por medio de un puntero guardo los
registros en la memoria
st x+,mind
st x+,horu
st x+,hord
HORA:
call bcda7seg

;Rutina de transformacion

retardo:
ldi tempo,1
;Cargar con un 1 al registro
delay_1:
;retardo
ldi aux1,1 ; ;Cargando con valor de 35

delay_2:
;retardo2
ldi aux2,1 ; ;Cargando con valor de 9

delay_3:
;retardo 3
call barrido
nop ;
dec aux2
brne delay_3
a retardo

;llamado a barrido
;empiezo a decrementar valores
;salto en caso de que llegue a 0

nop
in tempo,MCUCR
; Control general de registro,
habilitacion en 1 para las resistencias Pull-up
andi tempo,0b11101111 ; Division de puertos
segun lo indicado
out MCUCR,tempo ; De vuelta al control general
de registro
ldi tempo,high(RAMEND); Ultima localizacion de
la SRAM

dec aux1
;decremento
brne delay_2
;salto en caso de
cumplimiento de condicion
nop
dec tempo
;decremento de registro
brne delay_1
;salta en caso de que este
llegue a cero
;
inc segu
; Incremento registro comparado a
los segundos

cpi segu,10 ; Comparacion de registro con


numero 10
brlo guardar ;en caso de que llegue el
segundero a 10,genera carry, dirijirse a guardar
ldi segu,0
; cargo el registro con 0
inc segd
; empieza el incremento
cpi segd,6
; comparacion con 6, en caso de
que llegue a 6
brlo guardar ;salto a guardar para inicializar
en caso de carry
ldi segd,0
;Cargo registro de los segundos
inc minu
; se incrementan los minutos que
son dependientes de los segundos
cpi minu,10 ; compara si llega a 10 ejecute la
siguiente instruccion
brlo guardar ; salata a guardar, llega hasta
diez,prodcuce carry y debe volver
ldi minu,0
;carga muinutos con 0
inc mind
;incrementa los minutos las
decenas
cpi mind,6
; comparacion hasta 6
brlo guardar ; si produce carry vaya a guardar
ldi mind,0
; carga minutos las decenas con 0
inc horu
;se incrementan las horas, pues
dependen de minutos
cpi hord,2
;compara hasta 2(24 horas)
brsh hora_24 ;en caso de no haber carry salte
cpi horu,10 ;compare con 10
brlo guardar ;si llega a 10 hay carry y salte
ldi horu,0
; cargar las horas nuevamente
desde 0
inc hord
; Incremente el valor de las
decenas con 0
rjmp guardar ;salto incondicional a guardar
//reinicio total, nuevo dia
hora_24:
cpi horu,4
brlo guardar
ldi horu,0
ldi hord,0
guardar: ; con los bits introducidos, se
genera la alarma
clr led
; en cero el registro
cpi hord,1 ;compare con 1
brne display ;si el resultado es 0 vaya a
display para indicar resultado
cpi horu,2
;compare con 2
brne display ; Salte a display
cpi mind,0
;comparar con 0 las decenas del
minutero
brne display ;salte a display
cpi minu,0
brne display
ldi led,1
//datos de hora guardados en la SRAM por medio
de punteros

display:
ldi xl,low(BCD)
ldi xh,high(BCD)
st x+,minu
st x+,mind
st x+,horu
st x,hord
rjmp HORA
;
//subrtutina para pasar de BCD a los siete
segementos necesarios
bcda7seg:
ldi xl,low(BCD)
ldi xh,high(BCD)
ldi yl,low(DIG)
ldi yh,high(DIG)
ldi tempo,4
;
//cargar datos generados desde la tabla
traer:
ldi zl,low(Tabla<<1)
ldi zh,high(Tabla<<1)
ld aux1,x+ ;
add zl,aux1 ;
clr aux1
adc zh,aux1
lpm aux1,z
st y+,aux1
dec tempo
brne traer
ret ;
barrido:
push tempo ; Guardar valores en la STACK
push aux1 ;Guardar valores en la STACK
push aux2 ;Guardar valores en la STACK
in tempo,sreg ;
push tempo
;Guardar el valor de registro en
la STACK
ldi tempo,4
;cargar con valor 4
ldi aux1,0b11111110
ldi yl,low(DIG) ;valores cargados por medio de
punteros
ldi yh,high(DIG)
//procediimiento de barrido
barrido_1:
ldi aux2,0b11111111
out porta,aux2
ld aux2,y+
sbrc led,0 ; Utilizacion para verificar estado
binario de la alarma
ori aux2,0b10000000
out portc,aux2 ;Puertos C como salidas
out porta,aux1 ;Puerto A como salidas

call retardo_1
sec
; Seteo de Carry
rol aux1 ; Desplazo hacia la izqueirda
dec tempo ;decrementa el registro
brne barrido_1 ;salto si llega a cero
ldi aux2,0b11111111
out porta,aux2
pop tempo ; Sacar valores de la STACK
out sreg,tempo
pop aux2 ;Sacar valores de la STACK
pop aux1
pop tempo
ret
//retardo de encendido
retardo_1:
ldi aux2,0xff
;para el lazo
ret1:
dec aux2
brne ret1
ret
// valores para display en catodo comun.
Tabla:
.db 0b00111111,0b00000110
.db 0b01011011,0b01001111
.db 0b01100110,0b01101101
.db 0b01111101,0b00000111
.db 0b01111111,0b01101111
.db 0b01110111,0b01111100
.db 0b00111001,0b01011110
.db 0b01111001,0b01110001

Você também pode gostar