Programacion De Organeta En Assembler Para Pic16F87
E
l uso de microcontroladores hoy en día se ha incrementado de manera significativa, debido a que son dispositivos que en base a una programación interna ofrecen gran variedad de funciones que permiten la creación de dispositivos que faciliten o mejoren ciertas aspectos que se encuentran en el diario vivir. En este caso se hará uso de la programación de un microcontroladorpara diseñar un dispositivo de entretenimiento musical, como lo es una organeta electrónica básica, la cual reproducirá las notas de la escala musical y reproducirá una melodía previamente almacenada en la memoria del programa. Para el desarrollo de esta práctica se hará uso de un microcontrolador PIC16F87 y se programara la rutina en lenguaje assembler con la ayuda del software MPLAB, a su vez sehará uso del software de simulación PROTEUS para verificar el correcto funcionamiento del dispositivo.
II. DISEÑO DEL ALGORITMO
Se tendrán como entradas del sistema un teclado compuesto por 8 pulsadores los cuales activaran cada una de las entradas del puerto 2 del microcontrolador y corresponderán a las 7 notas de la escala musical (do, re, mi, fa, sol, la, si) + un pulsador que reproducirá unamelodía previamente almacenada en la memoria de programa del PIC.
Como salidas se tendrá un Buzzer, que es un dispositivo capaz de reproducir sonidos de determinada frecuencia provenientes del microcontrolador.
Como se observa en el diagrama de Flujo en el Anexo 1, se tendrá 4 etapas básicas en el algoritmo las cuales son:
1. Testeo de la entrada activa
2. Calculo del Periodo oFrecuencia de la Nota Musical Seleccionada
3. Rutina de retardo TIMER para generar la señal de salida
4. Generación de la Señal de Salida
Para el testeo de la señal seleccionada se realiza un bucle en el cual se verifique el estado de cada entrada de la siguiente manera:
BTFSS P1,0 ;Verificar estado del Puerto1,Bit 0
;Saltar si es igual a uno
GOTO SIG1 ;Si es igual a ceroverificar ;siguiente entrada SIG1
BSF P2,0 ;Si es igual a 1 Poner en alto el bit ;0 del Puerto 2
CALL DO ;Rutina de Elección de Frecuencia
BCF P2,0 ;Pone en bajo el bit 0, Puerto 2
CALL DO ;Rutina de Elección de Frecuencia
SIG1:BTFSS P1,1
GOTO SIG2
BSF P2,0
CALL RE
BCF P2,0
CALL RE
SIG2:BTFSS P1,2
……..
……..
Como se ve anteriormente se realiza un testeosecuencial de las entradas, si se detecta en estado activo cualquiera de los pulsadores del dispositivo, se realiza una conmutación del bit 0 del puerto 2, teniendo en cuenta un tiempo de retardo que depende de la frecuencia de la nota seleccionada y un timer.
Para determinar que tiempo de retardo necesita cada nota musical, tenemos en cuenta la frecuencia de cada nota, por ejemplo la nota DOtiene una frecuencia de 261Hz, que corresponde a un periodo de 3.8ms, dado que se realiza la conmutación de la salida teniendo en cuenta esta frecuencia y periodo, se tiene que el tiempo en alto de la onda será igual al tiempo en bajo que a su vez será igual a la mitad del periodo.
F = 1/(T) ; T = TH + TL
En donde TH es el tiempo de encendido y TL es el tiempo de apagado del la salida delmicrocontrolador.
TH = TL = Tiempo de Retardo
, por lo tanto
Tiempo de Retardo = T/2
Para calcular Tr en el modulo TIMER0 del microcontrolador con una frecuencia de reloj Fosc dada y un valor del preescalador 1/M,para un ciclo de N incrementos del timer 0 tendremos que la duración (Tciclo) del ciclo será
Tr = N*M*(4/Fosc)
De esta manera para la Nota Do el tiempo de retardo seráTr = 3.8ms/2 = 1.9ms
Elegiremos un Presscaler M de 16 con un Oscilador de 4Mhz para determinar que el numero de ciclos que debemos elegir en el modulo Timer del microcontrolador es
N = 4*Tr*Fosc/M
Donde N (DO) = 119
Dado que el microcontrolador calcula el tiempo de retardo en incrementos del registro TMR0 hasta 0xFF, para obtener 119 ciclos debemos inicializar el registro TMR0 en...
Regístrate para leer el documento completo.