Se trata de diseñar una aplicación que permita verificar que se generan de forma
correcta, un tono de 1300 Hz, y otro de 2100 Hz utilizando la clase DDS16Bits
diseñada en la práctica 3.
Además se quiere verificar que el tiempo de bit corresponde con 1200 baudios.
Para ello se generará la modulación de la siguiente secuencia de bits:
Secuencia: 1 0 1 0 1 0 1 0 1 0
Duración bit: 1/1200 s = 833.33 us
Incluiremos estas funcionalidades en lab41():
/** * @brief Genera muestras de audio con modulación FSK controlada por pulsaciones. * * @details Esta función implementa el ejercicio 1 del laboratorio. Genera una señal * modulada en FSK donde la frecuencia de la portadora cambia según el estado * de pulsación del botón SW2. Utiliza DDS (Direct Digital Synthesis) para * generar las diferentes frecuencias correspondientes a bits '0' y '1'. * * Comportamiento según pulsación: * - **Pulsación corta**: Conmuta entre tonos de 1300 Hz y 2100 Hz * - **Pulsación larga**: Inicia o termina la modulación de la secuencia * alternante 101010101... a una velocidad de 1200 bps * - **Sin pulsación**: Mantiene el estado actual de transmisión * * Especificaciones FSK (estándar V.25): * - Frecuencia para bit '0': 2100 Hz (marca) * - Frecuencia para bit '1': 1300 Hz (espacio) * - Velocidad de transmisión: 1200 bps (bits por segundo) * - Muestras por bit: fs/1200 (ej: 48000/1200 = 40 muestras/bit) * * @param[in] pulsacion Estado de pulsación del botón SW2: * - 0: Sin pulsación detectada * - 1: Pulsación corta detectada * - 2: Pulsación larga detectada * * @return int16_t Muestra de audio de 16 bits con signo, lista para transmisión I2S. * El valor representa la amplitud instantánea de la señal FSK modulada * en el rango [-32768, 32767]. */int16_tlab41(uint8_tpulsacion);
lab41() Simulación
Configuración del proyecto.
Abre el proyecto lab4.
Selecciona el targetTest_lab4, que utiliza un simulador
para la depuración del código.
Tareas a realizar.
Escribe el código de la función lab41() en el archivo ejercicios.c.
Asegúrate de que el código compila correctamente y no genera errores.
Revisa los casos de prueba definidos en la función main(), ubicada
en el archivo test/test_lab4.c.
Herramientas de análisis.
Inicializa el debugger y abre la herramienta
Analyzer desde el menú:
View → Analysis Windows → Logic Analyzer.
Analyzer mostrará la evolución temporal de las variables:
g_pls: simula el resultado de una pulsación.
g_sample: muestra la muestra actual generada por el DDS.
..41\bit: indica el bit actual que se está transmitiendo.
time: muestra el tiempo actual de simulación.
Ejecuta la aplicación y corrige cualquier error funcional
hasta que la función lab41() cumpla con las especificaciones.
Test y Resultados esperados.
Utiliza la herramienta Logic Analyzer para verificar que:
La señal generada por el DDS corresponde con la frecuencia adecuada
para cada bit (1300 Hz para “1” y 2100 Hz para “0”).
La duración de cada bit es de 833.33 us (1200 baudios).
Nota
Para medir tiempos, se pueden utilizar el marcador y el cursor.
La variable time es la encargada de indicar el tiempo en la
simulación. En la figura siguiente se observa la medición del
periodo de un tono de 1330Hz (1300 Hz → 769 µs):
una vez validado el funcionamiento en simulación, puedes implementar la
misma funcionalidad en el hardware real utilizando el targetlab4.
lab41() Prueba en hardware
Configuración del proyecto.
Copia a shared/include y shared/src los archivos
necesarios para utilizar los módulos pulsaciones y dds.
Abre el proyecto lab4.
Selecciona el targetlab4.
Tareas a realizar.
Modifica el código de src/main.c:
Habilita la interrupción de I2S en NVIC.
Modifica el bucle principal, añade la tarea 4 que utilice la
función lab41(), y emplea un buffer circular para el intercambio de datos
entre el bucle y la ISR del códec (I2S). Las interrupciones deben estar
deshabilitadas mientras se accede al buffer circular desde el bucle
principal.
Completa el código de la rutina de interrupción en src/isr.c para
que extraiga muestras del buffer circular y las transmita al códec.
Test y Resultados esperados.
Utiliza el osciloscopio para verificar que las señales generadas son
las esperadas
Se trata de diseñar una aplicación que permita transmitir un _string_ de
caracteres utilizando modulación FSK según el estándar V23.
El sistema dispone de dos estados:
_Reposo_: Se transmite siempre un “1”.
_Transmisión_: Se transmiten los 8 bits de cada carácter del _string_,
los datos se transmiten con el formato mostrado en la figura:
1 bit de inicio (0)
8 bits de datos (LSB primero)
1 bit de parada (1)
/** * @brief Genera muestras de audio con modulación FSK para transmisión de texto. * * @details Esta función implementa el ejercicio 2 del laboratorio. Genera una señal * modulada en FSK que transmite un buffer de caracteres de texto. Cada carácter * se codifica en sus bits individuales (típicamente 8 bits por carácter ASCII) * y se transmite usando diferentes frecuencias para representar '0' y '1'. * Utiliza DDS (Direct Digital Synthesis) para la generación de las portadoras FSK. * * Comportamiento según pulsación: * - **Sin pulsación/Pulsación corta**: Genera tono continuo de 1300 Hz (bit '1') * - **Pulsación larga**: Inicia la modulación y transmisión del buffer de texto * a una velocidad de 1200 bps * - **Durante transmisión**: Continúa hasta finalizar el mensaje completo * * Proceso de transmisión: * 1. Al recibir pulsación larga, comienza la transmisión * 2. Para cada carácter se transmite una trama de 10 bits: * - **Bit de START**: 1 bit con valor '0' (2100 Hz) * - **Datos**: 8 bits del carácter ASCII (LSB primero) * - **Bit de STOP**: 1 bit con valor '1' (1300 Hz) * 3. Cada bit se transmite durante N muestras (fs/1200 para 1200 bps) * 4. Bit '0' → frecuencia de 2100 Hz (marca) * 5. Bit '1' → frecuencia de 1300 Hz (espacio) * 6. Al finalizar el mensaje, retorna al estado de reposo (tono de 1300 Hz) * * Formato de trama asíncrona (10 bits por carácter): * ``` * [START] [D0] [D1] [D2] [D3] [D4] [D5] [D6] [D7] [STOP] * 0 LSB MSB 1 * ``` * * Especificaciones FSK: * - Frecuencia para bit '0': 2100 Hz * - Frecuencia para bit '1': 1300 Hz * - Velocidad de transmisión: 1200 bps * - Codificación: ASCII estándar (8 bits por carácter) * * @param[in] pulsacion Estado de pulsación del botón SW2: * - 0: Sin pulsación * - 1: Pulsación corta (genera tono continuo 1300 Hz) * - 2: Pulsación larga (inicia transmisión del mensaje) * * @param[in] frase Puntero a cadena de caracteres terminada en '\0' que se transmitirá * mediante modulación FSK. El buffer debe permanecer válido y constante * durante toda la transmisión. * Ejemplo: "SEMP 30319" o "HOLA MUNDO" * * @return int16_t Muestra de audio de 16 bits con signo, lista para transmisión I2S. * Representa la amplitud instantánea de la señal FSK correspondiente * al bit actual que se está transmitiendo, en el rango [-32768, 32767]. * * @warning El puntero 'frase' debe apuntar a memoria válida durante toda la * ejecución del programa. No copiar en buffer local. */int16_tlab42(uint8_tpulsacion,charfrase[]);
lab42() Simulación
Configuración del proyecto.
Abre el proyecto lab4.
Selecciona el targetTest_lab4.
Tareas a realizar.
Escribe el código de la función lab42() en el archivo ejercicios.c.
Asegúrate de que el código compila correctamente y no genera errores.
Revisa los casos de prueba definidos en la función main(), ubicada
en el archivo test/test_lab4.c.
Herramientas de análisis.
Inicializa el debugger y abre la herramienta
Analyzer desde el menú:
View → Analysis Windows → Logic Analyzer.
Analyzer mostrará la evolución temporal de las variables:
g_pls: simula el resultado de una pulsación.
g_sample: muestra la muestra actual generada por el DDS.
..42\bit: indica el bit actual que se está transmitiendo.
time: muestra el tiempo actual de simulación.
Ejecuta la aplicación y corrige cualquier error funcional hasta que la
función lab42() cumpla con la especificación deseada. La figura
muestra la modulación del string "1" tras una pulsación larga.
una vez validado el funcionamiento en simulación, puedes implementar la
misma funcionalidad en el hardware real utilizando el targetlab4.
lab42() Prueba en hardware
Configuración del proyecto.
Selecciona el targetlab4.
Tareas a realizar.
Estudia el código incluido en src/main.c y modifícalo para que
utilice la función lab42() y un buffer circular para intercambiar
datos con la ISR del códec.
Test y Resultados esperados.
Utiliza el osciloscopio para verificar que las señales generadas son
las esperadas