Après mon premier post sur la liaison SPI, je bloque désormais sur l'utilisation du DAC pour émettre des sons avec une STM32L4.
Pour remettre un peu de contexte : J'ai un microphone MEMS, qui transmet des data 8bit en SPI. L'objectif est d'utiliser ces data 8 bit pour les retransmettre directement sur un haut parleur branché en série avec une résistance.
Le son obtenu s'apparente plus à du bruit qu'à l'enregistrement fait par les micros...
/* Infinite loop */
/* USER CODE BEGIN WHILE */
SpiData[0]=0x5555;
Data=0;
SPI_TypeDef *spi = hspi1.Instance; // Definition de *spi pour le spi1
spi->CR1|=SPI_CR1_SPE; // Activation module SPI
HAL_DAC_Start(&hdac1, DAC_CHANNEL_2);
while (1)
{
while ((spi -> SR & SPI_SR_RXNE) != SPI_SR_RXNE); // Attente
SpiData[1] = *(volatile uint16_t *)&spi->DR; // Lecture de 2 Data (16 bit)
Data = extraction8bits(SpiData[1]); // Extraction de 8bits
HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_2, DAC_ALIGN_8B_R, Data); // Envoie sur le DAC
HAL_Delay(50);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
Afin de m'assurer que mon système fonctionne j'ai tout de même fait une petite fonction mélodie, avec laquelle j'arrive à emettre un son un petit peu plus "musicale". Cette fonction marche bien.
Grace à cette fonction mélodie j'ai remarqué que l'utilisation d'un delay était indispensable pour entendre le son :
1ms --> son plutot aigu
15ms --> son plutot grave
Au dela de 15ms, le son saccade trop
J'ai donc tenté d'utiliser ce système de delay dans ma transmission DAC mais sans succès. J'ai lu que l'utilisation du TIM6 en trigger pouvait être utilisée, mais j'ai du mal à comprendre ce fonctionnement : lorsque j'active le trigger du TIM6 (via Cube MX) je n'entends plus aucun son, meme avec ma fonction Melodie (dans laquelle je met en commentaire le delay)
Voilà, si qqn à une idée du problème, je suis preneur.
Merci
N'hésitez pas à visiter mon site en construction et à donner des avis :) Merci !! Lien : http://foxwork.esy.es/