Skocz do zawartości

STM32F411 regulacja poziomu na wyjściu DAC


wojttas

Pomocna odpowiedź

Witam wszystkich,

Realizuje właśnie projekt, którego celem jest generowanie tonu o zadanej częstotliwości i określonym poziomie głośności. Do tego wykorzystuje przetwornik dac CS43L22 znajdujący się na płytce a jako wyjście złącze jack. Poniżej mój kod odpowiadający za stworzenie dyskretnego sinusa:

void  Build_sin(float F_Out)
{
	float sample_dt = F_Out/F_SAMPLE;
	uint16_t sample_N = F_SAMPLE/F_Out;
	float sin_val; 
		for(uint16_t i=0; i<sample_N; i++)
		{
			sin_val = sinf(2*PI*sample_dt*i);
			dataI2S[i*2] = (sin_val );    //prawy tor
			dataI2S[i*2 + 1] =(sin_val ); //lewy tor
		}

Na wyjście przekazuję go za pomocą HAL_I2S_Transmit_DMA w następujący sposób:

HAL_I2S_Transmit_DMA(&hi2s3, (uint16_t *)dataI2S, sample_N*2);

Regulację głośności realizuję za pomocą funkcji SetVolume która wygląda w następujący sposób:

void CS43_SetVolume(uint8_t volume)
{
	int8_t tempVol = volume - 50;
	tempVol = tempVol*(127/50);
	uint8_t myVolume =  (uint8_t )tempVol;
	DataReg[1] = myVolume;
	write_register(PASSTHROUGH_VOLUME_A,&DataReg[1]);
	write_register(PASSTHROUGH_VOLUME_B,&DataReg[1]);
	
	DataReg[1] = VOLUME_CONVERT_D(volume);
	
	write_register(CS43L22_REG_MASTER_A_VOL,&DataReg[1]);
	write_register(CS43L22_REG_MASTER_B_VOL,&DataReg[1]);
}

Macro VOLUME_CONVERT_D(vol) wygląda tak:

(((volume) > 100)? 24:((uint8_t)((((volume) * 48) / 100) - 24)))

Moje pytania są następujące:

1) W jaki sposób przekłada się poziom sygnału, stworzonego w funkcji Build_sin(), podawany na wyjście przetwornika na poziom głośności uzyskany w słuchawkach? 

2) Czy w przypadku zmiany Master volume z powiedzmy 0 dB na -3 dB otrzymam na wyjściu sygnał audio pomniejszony o 3 dB względem wcześniejszego?

Z góry dziękuje za odpowiedź i pozdrawiam

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.