Estoy tratando de construir un circuito de audio simple. El objetivo es almacenar archivos .wav en forma de archivos hexadecimales en la memoria flash del ATMEGA328P y emitir el audio a través de un pequeño altavoz utilizando un DAC MCP4921 y un amplificador operacional LM386N-1.
Subí una parte de mi esquema de EAGLE. El valor de AMP_FIL_R es en realidad 0.05uF, en lugar de los 100uF indicados en el Esquema Eagle, y esto es por la hoja de datos LM386. Además, el código que estoy ejecutando está adjunto. Comencé con el código de aquí y Agregué algo de código para reproducir mi archivo hexadecimal.
El problema: Aunque soy capaz de emitir un maullido, está saliendo con mucho ruido. Por lo tanto, parece que el sonido final que realmente deseo está totalmente allí, pero se agrega un ruido de alta frecuencia por encima de él.
La pregunta: ¿Qué podría estar causando este ruido? He leído una serie de cosas que podrían causar esto. Primero, el regulador de potencia LTC1514-5 que estoy usando está en el rango de frecuencia de conmutación de 650 kHz, ¿no está seguro si está afectando el audio? En segundo lugar, el amplificador operacional LM386, ¿debería estar más alejado del altavoz? ¿Conexiones poco confiables en el tablero? ¿La proximidad al equipo de banco, como la fuente de alimentación del osciloscopio / metro / CC?
//"meow.h" file is stored as PROGMEM, char type variable
#include "avr/io.h"
#include "util/delay.h"
#include "HRL_SPI.h"
#include "HRL_MCP492x.h"
#include "meow.h"
void setup() {
Serial.begin(9600);
// Initiate SPI in Mode 0 with MSB first, NO interrupts and a clock of F_CPU/4
setupSPI(SPI_MODE_0, SPI_MSB, SPI_NO_INTERRUPT, SPI_MASTER_CLK4);
SETUP_DAC;
_delay_us(100);
}
int config = 0x30; //Mono, unbuffered, 1xGain, SHDN off
word output = 0;
word a=0; //index for meow array
void loop() {
if(a==sizeof(meow)) {Serial.print("again!"); delay(2000); a=0;}
output = pgm_read_byte(&(meow[a++]))*16; //Multiplied by 16 to go from 8 to 12 bits
// Serial.print("index:");
// Serial.print(a,DEC);
// Serial.print('\n');
// Serial.print("output:");
// Serial.print(output,DEC);
// Serial.print('\n');
// Serial.print('\n');
writeMCP492x(output,config);
_delay_us(125);
}