TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: diegodiazotero en 02 de Abril de 2010, 18:37:02
-
Hola amigos, estoy entrando en el mundo del pic, tengo un proyecto el cual no he podido resolver, consiste en activar por medio de un teclado matricial, un generador de notas musicales con el pic 16f84a; en proyectos pasados he utilizado un teclado matricial para visualizar números binarios en un siete segmentos con el 16f84a; también hemos trabajado con un diseño que nos permite, por medio de una frecuencia un tono musical.
Ahora mi proyecto es combinar los dos proyectos anteriores, pero no se como, asi que solicito una mano.
Este es mi asm para obtener una nota musical
PROGRAMA.
#INCLUDE <P16F84A.INC>
LIST P=16F84A
Tecla EQU 0X0C
BSF STATUS,RP0
MOVLW B'11110000'
MOVWF TRISB
MOVLW B'00010000'
MOVWF TRISA
BCF STATUS,RP0
MOVLW B'00000000'
MOVWF PORTA
INICIO CLRF Tecla
MOVLW B'00001110'
MOVWF PORTB
Cheq_Col MOVF PORTB,W
XORLW B'11111111'
BTFSC STATUS,Z
GOTO INICIO
BTFSS PORTB,4
GOTO antirebotes
INCF Tecla,F
BTFSS PORTB,5
GOTO antirebotes
INCF Tecla,F
BTFSS PORTB,6
GOTO antirebotes
INCF Tecla,F
BTFSS PORTB,7
GOTO antirebotes
INCF Tecla,F
Ult_Tecla
MOVLW .17
SUBWF Tecla,W
BTFSC STATUS,Z
CALL NTeclas
BSF STATUS,C
RLF PORTB,F
BTFSC STATUS,DC
GOTO Cheq_Col
GOTO INICIO
NTeclas CLRF Tecla
RETURN
antirebotes
Espera1 BTFSS PORTB,4
GOTO Espera1
Espera2 BTFSS PORTB,5
GOTO Espera2
Espera3 BTFSS PORTB,6
GOTO Espera3
Espera4 BTFSS PORTB,7
GOTO Espera4
MOVF Tecla,W
CALL Principal
MOVWF PORTA
GOTO Cheq_Col
MOVWF OPTION_REG ; PRESCALER DE 2 ASIGNADO AL TMR0
BCF STATUS,RP0 ; Acceso al Banco 0.
Principal
BSF PORTA,0 ; La salida pasa a nivel alto
CALL Timer0_500us ; durante este tiempo.
BCF PORTA,0 ; La salida pasa a nivel bajo
CALL Timer0_500us ; durante este tiempo.
GOTO Principal
; Subrutina "Timer0_500us" -------------------------------------------------------
; Como el PIC trabaja a una frecuencia de 4 MHz, el TMR0 evoluciona cada microsegundo.
; Para conseguir un retardo de 500 µs con un prescaler de 2 el TMR0 debe contar 250
; impulsos. Efectivamente: 1 µs x 250 x 2 = 500 µs.
TMR0_Carga500us EQU d'256'-d'250'
Timer0_500us
movlw TMR0_Carga500us ; Carga el Timer 0.
movwf TMR0
bcf INTCON,T0IF ; Resetea el flag de desbordamiento del TMR0.
Timer0_Rebosamiento
btfss INTCON,T0IF ; ¿Se ha producido desbordamiento?
goto Timer0_Rebosamiento ; Todavía no. Repite.
return
END
en este asm solo intento sacar una nota musical para poder guiarme, adjunto el hardware en el cual deseo simular mi proyecto; agradezco cual quier aporte, muchas gracias!!!!!!!! :shock:
-
Hola, una consulta?
en el teclado, que ingresas? el valor de la frecuencia? o del periodo?
porque en el codigo no veo que sea ninguna de las dos....
Si es periodo, con el "numero" obtenido, tendras que realizar el retardo...
si es frecuencia, tendras que realizar una division (1/frec) para obtener el periodo... por ejemplo 10000/frec
Saludos
Norberto
-
Saludos
Tengo una preguntica, en que frecuencias estás trabajando y además, como vas a manejar los armónicos (La segunda frecuencias fundamental, tercera, cuarta .......... )?
-
Alguien podría ayudarme a hacer que mi circuito responda de la siguiente manera?
Posee un teclado matricial, el cual se encuentra ubicado desde RBO a RB7, es un teclado de 4*3.
El micro debería responder de la siguiente manera, al presionar un numero del teclado, debería enviar una cantidad de pulsos igual a el numero apretado, atraves de RA0, (o sea si se presiona el 6, debería enviar 6 pulsos por la salida RA0, en caso de apretar el 2 deberían salir 2 pulsos por RA0), para excitar el clock de un cd4026.
Luego el segundo numero apretado deberia dsalir por RA1
El tercer numero apretado saldria por RA2
El cuarto numero, por RA3.
Por ejemplo:
1er numero a configurar -Presionamos en el teclao nº 2 ----- saldrian 2 pulsos por RA0
2do numero a configurar -Presionamos en el teclado nº 6 ----- saldrian 6 pulsos por RA1
3er numero a configurar -Presionamos en el teclado nº 8 ----- saldrian 8 pulsos por RA2
4to numero a configurar -Presionamos en el teclado nº7 ----- saldrian 7 pulsos por RA3.
El primer numero presionado envio 2 pulsos al clock del primer 4026 y mostro en un display el numer "2"
El segundo numero presionado envio 6 pulsos al clock del 2º 4026 y mostro en otro display el numero "6"
El tercer numero presionado envio 8 pulsos al clock del 3º 4026 y mostro en otro display el numero "8"
El cuarto numero presionado envio 7 pulsos al clock del 4º 4026 y mostro en otro display el numero "7"
En caso de apretar el numero 0 en el teclado no debería enviar ningun pulso y prepararse para el siguiente numero en la siguiente salida
En caso de presionar la tecla numeral, deberia enviarse un pulso por RA4/ para un raseteo de todos los 4026