Академический Документы
Профессиональный Документы
Культура Документы
2.
A d q ui er a
una matriz de led de 7x5 (de bajo costo). 3. Disee un circuito decodificador con el microcontrolador MEGA16 y los circuitos que considere necesarios para manejar una matriz de led. (tomar en cuenta la capacidad de corriente de salida de los pines del microcontrolador para no excederla) Para el diseo se toma en cuenta que no se debe exceder el mximo de corriente que puede soportar el micro controlador en general para los puertos entrada-salida que de acuerdo al fabricante nos dice que es de 200mA, y que por cada pin no se exceda los 20 mA, entonces dado que la matriz de leds no se puede conectar directamente al micro porque la
corriente que necesita la matriz es superior a la que soporta como mximo el microcontrolador, se procede con el siguiente diseo para evitar quemar el atmega 16 Dado que la matriz de leds adquirida es de ctodo comn en la columna y de nodo comn en la fila, se tiene: -Con transistores NPN se controlar las columnas, y la resistencia de base calcula de la siguiente manera:
-Con transistores PNP se controlar las filas, y la resistencia de base calcula de la siguiente manera:
4. Escriba un programa que permita mostrar una de 6 letras de acuerdo a la tabla siguiente, que sern seleccionadas mediante un dip switch de 3 posiciones, Las letras se deben formar con la tcnica de barrido). Cada una de las letras est almacenada como una tabla separada en la memoria FLASH y con los interruptores se selecciona cual tabla se debe mostrar en la matriz.
LUNES: las tres primeras letras de los primeros nombres de dos de los integrantes del grupo
.include"m16def.inc" .def .def .def .def .def .def .def tempo1=R16 tempo2=R17 aux=R18 aux2=R19 aux3=R20 aux4=R21 aux5=R22
.org 0x0 clr tempo1 out DDRB,tempo1 out DDRD,tempo1 ; pongo en cero la entrada que no voy a utilizar ldi tempo1,0x1f out DDRA,tempo1 ldi tempo1,0x7f out DDRC,tempo1 clr tempo1 ; activar el pull-up interno de la entrada in tempo1,sfior andi tempo1,0b11111011 out sfior,tempo1 ser tempo1 out PORTB,tempo1 out PORTD,tempo1 ; desactivar la matriz de leds clr tempo1 out PORTA,tempo1 out PORTC,tempo1 ; inicializo el stack ldi tempo1,high(ramend) out sph,tempo1 ldi tempo1,low(ramend) out spl,tempo1 ; entrada de datos: lazo: in tempo1,PINB andi tempo1,0x7 ldi aux,0x5 clr aux3 clr aux4 clr zl clr zh ;compara con los numeros que tengo para las tablas subi tempo1,0x0 breq lazo mov tempo2,tempo1 subi tempo1,0x1 breq letra_C mov aux2,tempo2 subi tempo2,0x2 breq letra_E mov aux3,aux2 subi aux2,0x3 breq let_S
mov aux4,aux3 subi aux3,0x4 breq let_M mov aux5,aux4 subi aux4,0x5 breq let_A subi aux5,0x6 breq let_U clr tempo1 rjmp lazo letra_C: ldi aux4,0x80 ldi aux5,0x40 clr tempo1 ;cargo la columna correspondiente rep: ldi zl,low(tabla1*2) ldi zh,high(tabla1*2) add zl,tempo1 clr aux3 adc zh,aux3 lpm aux3,z out PORTC,aux3 clr zl clr zh ;activo la columna n cpse aux4,aux5 lsl aux4 rol aux4 lsl aux5 cpse aux4,aux5 rol aux5 cpse aux4,aux5 rol aux5 out PORTA,aux4 clc ;barrido rcall retardo ;apagado de la columna n clr aux2 out PORTA,aux2 inc tempo1 cpse tempo1,aux rjmp rep rjmp lazo let_S: rjmp letra_S let_M: rjmp letra_M let_A: rjmp letra_A ; salto relativo
; salto relativo
letra_E: ldi aux4,0x80 ldi aux5,0x40 clr tempo1 ;cargo la columna correspondiente rep2: ldi zl,low(tabla2*2) ldi zh,high(tabla2*2) add zl,tempo1 clr aux3 adc zh,aux3 lpm aux3,z out PORTC,aux3 clr zl
clr zh ;activo la columna n cpse aux4,aux5 lsl aux4 rol aux4 lsl aux5 cpse aux4,aux5 rol aux5 cpse aux4,aux5 rol aux5 out PORTA,aux4 clc ;barrido rcall retardo ;apagado de la columna n clr aux2 out PORTA,aux2 inc tempo1 cpse tempo1,aux rjmp rep2 rjmp lazo ; salto relativo let_U: rjmp letra_U ; salto relativo letra_S: ldi aux4,0x80 ldi aux5,0x40 clr tempo1 ;cargo la columna correspondiente rep3: ldi zl,low(tabla3*2) ldi zh,high(tabla3*2) add zl,tempo1 clr aux3 adc zh,aux3 lpm aux3,z out PORTC,aux3 clr zl clr zh ;activo la columna n cpse aux4,aux5 lsl aux4 rol aux4 lsl aux5 cpse aux4,aux5 rol aux5 cpse aux4,aux5 rol aux5 out PORTA,aux4 clc ;barrido rcall retardo ;apagado de la columna n clr aux2 out PORTA,aux2 inc tempo1 cpse tempo1,aux rjmp rep3 rjmp lazo letra_M: ldi aux4,0x80 ldi aux5,0x40 clr tempo1 ;cargo la columna correspondiente rep4: ldi zl,low(tabla4*2) ldi zh,high(tabla4*2)
add zl,tempo1 clr aux3 adc zh,aux3 lpm aux3,z out PORTC,aux3 clr zl clr zh ;activo la columna n cpse aux4,aux5 lsl aux4 rol aux4 lsl aux5 cpse aux4,aux5 rol aux5 cpse aux4,aux5 rol aux5 out PORTA,aux4 clc ;barrido rcall retardo ;apagado de la columna n clr aux2 out PORTA,aux2 inc tempo1 cpse tempo1,aux rjmp rep4 rjmp lazo letra_A: ldi aux4,0x80 ldi aux5,0x40 clr tempo1 ;cargo la columna correspondiente rep5: ldi zl,low(tabla5*2) ldi zh,high(tabla5*2) add zl,tempo1 clr aux3 adc zh,aux3 lpm aux3,z out PORTC,aux3 clr zl clr zh ;activo la columna n cpse aux4,aux5 lsl aux4 rol aux4 lsl aux5 cpse aux4,aux5 rol aux5 cpse aux4,aux5 rol aux5 out PORTA,aux4 clc ;barrido rcall retardo ;apagado de la columna n clr aux2 out PORTA,aux2 inc tempo1 cpse tempo1,aux rjmp rep5 rjmp lazo letra_U: ldi aux4,0x80 ldi aux5,0x40 clr tempo1 ;cargo la columna correspondiente
rep6: ldi zl,low(tabla6*2) ldi zh,high(tabla6*2) add zl,tempo1 clr aux3 adc zh,aux3 lpm aux3,z out PORTC,aux3 clr zl clr zh ;activo la columna n cpse aux4,aux5 lsl aux4 rol aux4 lsl aux5 cpse aux4,aux5 rol aux5 cpse aux4,aux5 rol aux5 out PORTA,aux4 clc ;barrido rcall retardo ;apagado de la columna n clr aux2 out PORTA,aux2 inc tempo1 cpse tempo1,aux rjmp rep6 rjmp lazo retardo: ldi tempo2,15 lazo_ret: nop dec tempo2 brne lazo_ret ret tabla1: .db 0b01000001,0b00111110 .db 0b00111110,0b00111110 .db 0b01011101,0b00000000 tabla2: .db 0b00000000,0b00110110 .db 0b00110110,0b00110110 .db 0b00110110,0b00000000 tabla3: .db 0b00000110,0b00110110 .db 0b00110110,0b00110110 .db 0b00110000,0b00000000 tabla4: .db 0b00000000,0b01011111 .db 0b01101111,0b01011111 .db 0b00000000,0b00000000 tabla5: .db 0b01100000,0b01010111 .db 0b00110111,0b01010111 .db 0b01100000,0b00000000 tabla6: .db 0b00000001,0b01111110 .db 0b01111110,0b01111110 .db 0b00000001,0b00000000
5. 6.
Construya el circuito diseado, el mismo que deber ser llevado al laboratorio el da de la prctica. Realice un modelo de simulacin en proteus del circuito pedido y pruebe el funcionamiento.
Q6 C1
27pF
Q7
2N3906
Q8
2N3906
Q9
2N3906
Q10
2N3906
Q11
2N3906
Q12
2N3906
C2
27pF
C3
10nF
2N3906
X1
R1
4.7k
U1
CRYSTAL 12MHz 9 13 12 40 39 38 37 36 35 34 33 1 2 3 1 2 3 4 5 6 7 8 RESET XTAL1 XTAL2 PA0/ADC0 PA1/ADC1 PA2/ADC2 PA3/ADC3 PA4/ADC4 PA5/ADC5 PA6/ADC6 PA7/ADC7 PB0/XCK/T0 PB1/T1 PB2/INT2/AIN0 PB3/OC0/AIN1 PB4/SS PB5/MOSI PB6/MISO PB7/SCK ATMEGA16 PC0/SCL PC1/SDA PC2/TCK PC3/TMS PC4/TDO PC5/TDI PC6/TOSC1 PC7/TOSC2 PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4/OC1B PD5/OC1A PD6/ICP PD7/OC2 22 23 24 25 26 27 28 29 14 15 16 17 18 19 20 21
R12 R13 R14 6.2k R15 6.2k R16 6.2k R17 6.2k R18 6.2k
6.2k 6.2k
R19 39
R20
39
R21
39
R22
39
R23
39
R24
39
R25
39
DSW1
6 5 4
OFF ON
DIPSW_3
R3
820
R4
820
R5
820
R6
820
R2
820
AVCC AREF
30 32
Q1
2N3904
Q2
2N3904
Q3
2N3904
Q4
2N3904
Q5
2N3904