cancel
Showing results for 
Search instead for 
Did you mean: 

Reading data ADC MCP3208 - STM32F103C8T6

FGRAMOY
Associate

Hola comunidad!

Estoy desarollando una etapa de un proyecto en la cual deseo adquirir los valores digitales de un ADC MCP3208 mediante comunicación SPI utilizando un STM32F103C8T6.

En primer lugar, comparto el código que realice:

/* Adquisición de datos MCP3208 */

uint16_t MCP3208_Read(uint8_t channel)

{

uint8_t b1_TX=MCP3208_START_BIT | MCP3208_MODE_SING | ((channel & 0x04) >> 2);

uint8_t b2_TX = (channel & 0x03) << 6;

uint8_t b3_TX = 0;

uint8_t b1_RX;

uint8_t b2_RX;

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_RESET);

HAL_SPI_Transmit(&hspi1, (uint8_t*)&b1_TX, 1, 1000);

HAL_SPI_TransmitReceive(&hspi1, (uint8_t*)&b2_TX, (uint8_t*)&b1_RX, 1, 1000);

HAL_SPI_TransmitReceive(&hspi1, (uint8_t*)&b3_TX, (uint8_t*)&b2_RX, 1, 1000);

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);

HAL_Delay(100);

uint16_t resultado = ((b1_RX & 0x0F) << 8 | b2_RX);

return resultado;

}

int main(void)

{

 while (1)

 {

uint16_t adcv[8] = {0};

for ( int i = 0; i < 8; i++)

{

adcv[i]=MCP3208_Read(i);

}

printf("CH0: %d\r\n", adcv[0]);

printf("CH1: %d\r\n", adcv[1]);

printf("CH2: %d\r\n", adcv[2]);

printf("CH3: %d\r\n", adcv[3]);

printf("CH4: %d\r\n", adcv[4]);

printf("CH5: %d\r\n", adcv[5]);

printf("CH6: %d\r\n", adcv[6]);

printf("CH7: %d\r\n", adcv[7]);

printf("-------------------\r\n");

}

Al parecer el código funciona bien, los datos Chip Select (CS) , SCK, MOSI se transmiten correctamente. El problema esta en los datos que recibo por el pin MISO, comparto imagen de mi analizador lógico. Por lo que observo, algunos datos se reciben pero no de la manera correcta.

0693W00000KcRtTQAV.png0693W00000KcRsbQAF.png0693W00000KcRubQAF.png0693W00000KcRugQAF.pngPor lo que veo, a veces parece que recibo bien los datos y otras veces no. Si alguien esta en el tema y me puede ayudar, podría brindarle mas información si necesita.

1 REPLY 1
TDK
Guru

How are they connected? Long jumper wires between the two systems? Does it work if you reduce the clock by 10x or more?

I see no errors on the STM32 side in the scope traces you've presented.

If you feel a post has answered your question, please click "Accept as Solution".