DESCRIPCIÓN DEL PROYECTO OBJETIVO: Poner en práctica lo aprendido en la materia sistemas micro procesados.
Enviado por sukita04 • 19 de Febrero de 2016 • Apuntes • 1.471 Palabras (6 Páginas) • 434 Visitas
[pic 1]
[pic 2][pic 3]
DESCRIPCIÓN DEL PROYECTO
OBJETIVO: Poner en práctica lo aprendido en la materia sistemas micro procesados.
DESCRIPCIÓN: A través del uso del micro controlador Atmega 164p realizar un barrido de un cubo de LED’s 3x3x3, dando una dinámica de encendido y apagado de los LED’s al dar una orden de encendido a través de un dip-switch.
INTRODUCCIÓN:
La matriz de LED’s se compone de 3x3x3 donde hay tres niveles de filas que son horizontales y tres niveles de filas verticales. Cada LED es activado en un nivel con un cátodo común y cada línea vertical está conectado con un ánodo común. De forma que si queremos iluminar un LED en particular, sólo hay que escoger el nivel de la línea de 0V y dar un voltaje positivo. Para generar un efecto de varios LEDs tienes que ser alimentado por lo que se conoce como multiplexación con una velocidad relativamente alta para que pueda ser intermitente. Para que todos los LEDs sean controlados con alguna secuencia se lo debe conectar directamente a los pines del Atmega164p. Dando una dinámica de encendido y apagado de los LED’s al dar una orden de encendido a través de un dip-switch.
GRAFICO ILUSTRATIVO:[pic 4]
MATERIALES:
- 18 LED’s
- Micro controlador atmega164p
- 9 resistencia de 150 ohm
- 3 resistencias de 3K ohm
- Transistores 3904
- Protoboard
- Cautín
- Estaño
- Un dip-switch
ELABORACIÓN DEL CÓDIGO:
Básicamente el programa está basado en la utilización del contador/timmer1 el cual es un timer de 16 bits el cual está configurado en modo CTC con un PRE-ESCALADOR de reloj/254, y usando la interrupción del TIMER 1 ubicado en la localidad .org 0x001A, con lo cual se logra un intervalo de tiempo de 5 seg, el cual es el tiempo que dura la forma de barrido del cubo, haciendo 6 formas de barrido diferente cada 5 seg.
[pic 5]
Fig2. Señal de reloj para las 6 formas de barrido cada 5 seg.
Usando el reloj de 8 MHz= 0.125 μ seg es un ciclo de máquina, entonces
0.125μ seg----------1CM
1 seg---------------8000000CM
Usando un pre escalador de 256, se tiene:
8000000CM------256-------31250 valor que será asignado al registro OCRIA.
Cada vez que el contador llegue a su valor límite este activara la interrupción, e irá aumentando un contador hasta cinco, para después cambiar la forma de barrido.
CODIGO DE PROGRAMA
.include "m164pdef.inc"
.def tempo=r16
.def aux=r17
.def cont=r18
.dseg
; espacios de memoria reservados
elemento: .byte 4
complemento: .byte 4
elemento1: .byte 8
complemento1: .byte 8
elemento2: .byte 10
complemento2: .byte 10
.cseg
.org 0x0
rjmp inicio
;dierccion para interrupcion de timmer1
.org 0x001A
rjmp cambio
inicio:
; configuracion de puertos
; configuracion de puerto a,b y d
ldi tempo,0b00000111
out ddra,tempo
ldi tempo,0b11111111
out ddrb,tempo
ldi tempo,0b11111000
out porta,tempo
out portb,tempo
ldi tempo,0b00000001
out ddrd,tempo
ldi tempo,0b00000001
out portd,tempo
;conficuracion de puerto para interrupcion
clr tempo
out ddrc,tempo
ser tempo
out portc,tempo
;habiliatcion del pull-up
in tempo,mcucr
andi tempo,0b11101111
out mcucr,tempo
;habilitacion de stack pointer
ldi tempo,low(ramend)
out spl,tempo
ldi tempo,high(ramend)
out sph,tempo
;configuracion del timmer1
ldi tempo,high(31250)
sts ocr1ah,tempo
ldi tempo,low(31250)
sts ocr1al,tempo
ldi tempo,0b00000000
sts tccr1a,tempo
;preescaler /8
;modo ctc
ldi tempo,0b00001011
sts tccr1b,tempo
ldi tempo,0
sts tccr1c,tempo
;habilitacion del la interrupcion del timmer1
ldi tempo,0b00000010
sts timsk1,tempo
out tifr1,tempo
;interrupcion global
sei
;programa principal
ldi cont,0b11111110
lazo:
sbrs cont,0
call mostrar0
sbrs cont,1
call mostrar1
sbrs cont,2
call mostrar2
sbrs cont,3
call mostrar3
sbrs cont,4
call mostrar4
sbrs cont,5
call mostrar5
sbrs cont,6
call mostrar6
sbrs cont,7
call mostrar7
rjmp lazo
;codigo de la interrupcion del la interrupcion cero
cambio:
push tempo
in tempo,sreg
push tempo
inc aux
cpi aux,2
breq desplegar
rjmp salir
desplegar:
sec
rol cont
ldi aux,0
rjmp salir
salir:
pop tempo
out sreg,tempo
pop tempo
reti
;barrido 1
...