![]() |
Fig. 1.- WaveDAC8 |
En esta práctica fue necesaria la utilización de un convertidor de datos, el DAC (Digital to Analogue Converter) que es un dispositivo para convertir señales digitales con datos binarios en señales de corriente o de tensión analógica.
Generalidades
Resolución=n
Código=2^n
Voltaje de referencia
LSB= Vref/2^n
Escala de voltaje completa= Vref -1LSB
Función de transferencia= Vref * (Código/2^n)
Utilizando el componente WaveDAC8(Fig. 1) del PSoc 5LP y con ayuda del software PSoC Creator 3.2, este componente proporciona una solución rápida y fácil para generar señales periódicas como son la señal senoidal, cuadrada, triangular y diente de sierra. Cabe mencionar que este componente cuenta con dos formas de onda arbitrarias, una que es una onda que se carga desde un archivo y la otra es una onda que se puede ajustar (dibujar) en el componente.
Diseños
A continuación se muestra el diseño de la práctica pero utilizando el PWM (Pulse-Width Modulation) en este caso se tuvo que modificar el periodo del PWM, con ayuda de un temporizador o reloj, para poder obtener las notas que se deseaban (Fig. 2). Para obtener el periodo fue necesario hacer el siguiente cálculo:
Periodo=(1000000*)/(Frecuencia de la nota)
*Hace referencia al valor del reloj (Clock) del PWM, en este caso 1MHz.
En el siguiente enlace encontrarán el ejemplo para generar tonos en una octava especifica en el cual nos basamos para realizar este diseño:
![]() |
Fig. 2.- Diseño de Tema Musical con PWM |
En el diseño con el WaveDAC8 fue necesaria la modificación de la cantidad de muestras por segundo para obtener una frecuencia cercana a la de las notas que se necesitaban.
![]() |
Fig. 3.- Diseño de Tema Musical con WaveDAC8 |
Código WaveDAC8
#include <project.h>
int aumentar = 0;
CY_ISR(tempo)
{
if (aumentar==1)//Mi3
{
/*PWM_WritePeriod(6067);
PWM_WriteCompare(3033);*/
WaveDAC8_1_Wave1Setup(0,17);
}
if (aumentar==2)//La3
{
/*PWM_WritePeriod(4545);
PWM_WriteCompare(2272);*/
WaveDAC8_1_Wave1Setup(0,22);
}
if (aumentar==3)//Mi3
{
/* PWM_WritePeriod(6067);
PWM_WriteCompare(3033);*/
WaveDAC8_1_Wave1Setup(0,17);
}
if (aumentar==4)//Re1 and Sol3
{
/* PWM_WritePeriod(27240);
PWM_WriteCompare(13620);
PWM_WritePeriod(5102);
PWM_WriteCompare(2551);*/
WaveDAC8_1_Wave1Setup(0,4);
WaveDAC8_1_Wave1Setup(0,20);
}
if (aumentar==5)//Fa3
{
/* PWM_WritePeriod(5727);
PWM_WriteCompare(2863);*/
WaveDAC8_1_Wave1Setup(0,18);
}
if (aumentar==6)//Fa3
{
/*PWM_WritePeriod(5727);
PWM_WriteCompare(2863);*/
WaveDAC8_1_Wave1Setup(0,18);
}
if (aumentar==7)//Sol1
{
/*PWM_WritePeriod(20408);
PWM_WriteCompare(10204);*/
WaveDAC8_1_Wave1Setup(0,5);
}
if (aumentar==8)//Re3
{
/* PWM_WritePeriod(6809);
PWM_WriteCompare(3404);*/
WaveDAC8_1_Wave1Setup(0,15);
}
if (aumentar==9)//Sol3
{
/* PWM_WritePeriod(5102);
PWM_WriteCompare(2551);*/
WaveDAC8_1_Wave1Setup(0,20);
}
if (aumentar==10)//Re3
{
/*PWM_WritePeriod(6809);
PWM_WriteCompare(3404);*/
WaveDAC8_1_Wave1Setup(0,15);
}
if (aumentar==11)//La1 and Mi3
{
/*PWM_WritePeriod(18181);
PWM_WriteCompare(9090);
PWM_WritePeriod(6067);
PWM_WriteCompare(3033);*/
WaveDAC8_1_Wave1Setup(0,6);
WaveDAC8_1_Wave1Setup(0,17);
}
if (aumentar==12)//Mi3
{
/* PWM_WritePeriod(6067);
PWM_WriteCompare(3033);*/
WaveDAC8_1_Wave1Setup(0,17);
}
if (aumentar==13)//La3
{
/* PWM_WritePeriod(4545);
PWM_WriteCompare(2272);*/
WaveDAC8_1_Wave1Setup(0,22);
}
if (aumentar==14)//Mi3
{
/*PWM_WritePeriod(6067);
PWM_WriteCompare(3033);*/
WaveDAC8_1_Wave1Setup(0,17);
}
if (aumentar==15)//Re1 and Sol3
{
/*PWM_WritePeriod(27240);
PWM_WriteCompare(13620);
PWM_WritePeriod(5102);
PWM_WriteCompare(2551);*/
WaveDAC8_1_Wave1Setup(0,4);
WaveDAC8_1_Wave1Setup(0,20);
}
if (aumentar==16)//Fa3
{
/* PWM_WritePeriod(5727);
PWM_WriteCompare(2863);*/
WaveDAC8_1_Wave1Setup(0,18);
}
if (aumentar==17)//Fa3
{
/*PWM_WritePeriod(5727);
PWM_WriteCompare(2863);*/
WaveDAC8_1_Wave1Setup(0,18);
}
if (aumentar==18)//Sol1
{
/*PWM_WritePeriod(20408);
PWM_WriteCompare(10204);*/
WaveDAC8_1_Wave1Setup(0,5);
}
if (aumentar==19)//Re3
{
/*PWM_WritePeriod(6809);
PWM_WriteCompare(3404);*/
WaveDAC8_1_Wave1Setup(0,15);
}
if (aumentar==20)//Sol3
{
/*PWM_WritePeriod(5102);
PWM_WriteCompare(2551);*/
WaveDAC8_1_Wave1Setup(0,20);
}
if (aumentar==21)//Re3
{
/* PWM_WritePeriod(6809);
PWM_WriteCompare(3404);*/
WaveDAC8_1_Wave1Setup(0,15);
}
if (aumentar==22)//La1 and Mi3
{
/* PWM_WritePeriod(18181);
PWM_WriteCompare(9090);
PWM_WritePeriod(6067);
PWM_WriteCompare(3033);*/
WaveDAC8_1_Wave1Setup(0,6);
WaveDAC8_1_Wave1Setup(0,17);
}
if (aumentar==22)//Mi2
{
/*PWM_WritePeriod(12134);
PWM_WriteCompare(6067);*/
WaveDAC8_1_Wave1Setup(0,8);
}
if (aumentar==23)//La2
{
/*PWM_WritePeriod(9090);
PWM_WriteCompare(4545);*/
WaveDAC8_1_Wave1Setup(0,11);
}
if (aumentar==24)//Do3
{
/*PWM_WritePeriod(7644);
PWM_WriteCompare(3822);*/
WaveDAC8_1_Wave1Setup(0,13);
}
if (aumentar==25)//Re1 and Mi3
{
/* PWM_WritePeriod(27240);
PWM_WriteCompare(13620);
PWM_WritePeriod(6067);
PWM_WriteCompare(3033);*/
WaveDAC8_1_Wave1Setup(0,4);
WaveDAC8_1_Wave1Setup(0,17);
}
if (aumentar==26)//Re3
{
/*PWM_WritePeriod(6809);
PWM_WriteCompare(3404);*/
WaveDAC8_1_Wave1Setup(0,15);
}
if (aumentar==27)//Re3
{
/*PWM_WritePeriod(6809);
PWM_WriteCompare(3404);*/
WaveDAC8_1_Wave1Setup(0,15);
}
if (aumentar==28)//Sol1
{
/*PWM_WritePeriod(20408);
PWM_WriteCompare(10204);*/
WaveDAC8_1_Wave1Setup(0,5);
}
if (aumentar==27)//Re3
{
/*PWM_WritePeriod(6809);
PWM_WriteCompare(3404);*/
WaveDAC8_1_Wave1Setup(0,15);
}
if (aumentar==28)//Sol3
{
/* PWM_WritePeriod(5102);
PWM_WriteCompare(2551);*/
WaveDAC8_1_Wave1Setup(0,20);
}
if (aumentar==29)//Re3
{
/*PWM_WritePeriod(6809);
PWM_WriteCompare(3404);*/
WaveDAC8_1_Wave1Setup(0,15);
}
if (aumentar==30)//La1 and Mi3
{
/* PWM_WritePeriod(18181);
PWM_WriteCompare(9090);
PWM_WritePeriod(6067);
PWM_WriteCompare(3033);*/
WaveDAC8_1_Wave1Setup(0,6);
WaveDAC8_1_Wave1Setup(0,17);
}
if (aumentar==31)//Mi3
{
/*PWM_WritePeriod(6067);
PWM_WriteCompare(3033);*/
WaveDAC8_1_Wave1Setup(0,17);
}
if (aumentar==32)//La1 and La3
{
/*PWM_WritePeriod(18181);
PWM_WriteCompare(9090);
PWM_WritePeriod(4545);
PWM_WriteCompare(2272);*/
WaveDAC8_1_Wave1Setup(0,6);
WaveDAC8_1_Wave1Setup(0,22);
}
if (aumentar==33)//Sol3
{
/*PWM_WritePeriod(5102);
PWM_WriteCompare(2551);*/
WaveDAC8_1_Wave1Setup(0,20);
}
if (aumentar==34)//Fa3
{
/*PWM_WritePeriod(5727);
PWM_WriteCompare(2863);*/
WaveDAC8_1_Wave1Setup(0,18);
}
if (aumentar==35)//Mi3
{
/* PWM_WritePeriod(6067);
PWM_WriteCompare(3033);*/
WaveDAC8_1_Wave1Setup(0,17);
}
if (aumentar==36)//Re3
{
/*PWM_WritePeriod(6809);
PWM_WriteCompare(3404);*/
WaveDAC8_1_Wave1Setup(0,15);
}
if (aumentar==37)//Do3
{
/*PWM_WritePeriod(7644);
PWM_WriteCompare(3822);*/
WaveDAC8_1_Wave1Setup(0,13);
}
if (aumentar==38)//Si2
{
/*PWM_WritePeriod(8099);
PWM_WriteCompare(4049);*/
WaveDAC8_1_Wave1Setup(0,12);
}
if (aumentar==39)//La2
{
/*PWM_WritePeriod(9090);
PWM_WriteCompare(4545);*/
WaveDAC8_1_Wave1Setup(0,11);
}
if (aumentar==40)//Sol#2
{
/* PWM_WritePeriod(9631);
PWM_WriteCompare(4815);*/
WaveDAC8_1_Wave1Setup(0,10);
}
if (aumentar==41)//Fa2
{
/* PWM_WritePeriod(11453);
PWM_WriteCompare(5726);*/
WaveDAC8_1_Wave1Setup(0,9);
}
if (aumentar==42)//Fa2
{
/*PWM_WritePeriod(11453);
PWM_WriteCompare(5726);*/
WaveDAC8_1_Wave1Setup(0,9);
}
if (aumentar==43)//Mi2
{
/*PWM_WritePeriod(12134);
PWM_WriteCompare(6067);*/
WaveDAC8_1_Wave1Setup(0,8);
}
if (aumentar==44)//La1 and Mi2
{
/* PWM_WritePeriod(18181);
PWM_WriteCompare(9090);
PWM_WritePeriod(12134);
PWM_WriteCompare(6067);*/
WaveDAC8_1_Wave1Setup(0,6);
WaveDAC8_1_Wave1Setup(0,8);
aumentar=0;
}
aumentar++;
}
int main()
{
CyGlobalIntEnable; /* Enable global interrupts. */
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
WaveDAC8_1_Start();
timer_clock_Start();
Timer_1_Start();
Tempo_StartEx(tempo);
for(;;)
{
/* Place your application code here. */
}
/* [] END OF FILE */
>>En el código se comentan los cambios en el periodo del PWM.
Conclusiones
El diseño con WaveDAC8 necesitó una etapa de amplificación, ya que al final la señal obtenida era demasiado aguda para poder escucharla fácilmente, en comparación con la señal obtenida del diseño PWM.
Hola.
ResponderEliminar¿El código que hicieron genera una secuencia de notas?
Sería bueno que subieran un esquemático o una foto
Saludos
El código mostrado genera una secuencia de notas, las cuales completan el tema propuesto, y gracias por tu sugerencia.
Eliminar