Autor Tema: generador de notas musicales activado con teclado matricial  (Leído 5371 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado diegodiazotero

  • PIC10
  • *
  • Mensajes: 1
generador de notas musicales activado con teclado matricial
« 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:

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: generador de notas musicales activado con teclado matricial
« Respuesta #1 en: 03 de Abril de 2010, 15:08:22 »
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
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: generador de notas musicales activado con teclado matricial
« Respuesta #2 en: 04 de Abril de 2010, 00:12:06 »

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 .......... )?
Un saludo desde Pereira - Colombia

Desconectado brunomozzi

  • PIC10
  • *
  • Mensajes: 9
Re: generador de notas musicales activado con teclado matricial
« Respuesta #3 en: 11 de Junio de 2010, 04:10:20 »
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