首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不返回转换值的ADC MCP3561

不返回转换值的ADC MCP3561
EN

Stack Overflow用户
提问于 2020-06-17 19:15:38
回答 2查看 1.1K关注 0票数 0

我来这里是最后一招。

我使用的MCP3561没有外部时钟(MCLK),也没有使用中断(Irq)(都是浮动的)。

数据表

我最初尝试运行fast命令来获取adcdata,但是它全部返回到0。

然后,我尝试相应地设置所有配置位,但是当读取adcdata时,它返回数据的所有0。但是在read的增量中,我可以看到配置中的数据很好。

代码语言:javascript
复制
  t_buf[0] = 0b01110110; //slaveaddr + lockregister + wr
  t_buf[1] = 0b10100101; // wr 0xa5 to unlock writing to registers
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, 0);
  HAL_SPI_Transmit(&hspi1, t_buf, 2, 1000); //unlock resgisters
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, 1);

  t_buf[0]  = 0b01000110; //slave address - reg address - write
  t_buf[1]  = 0b01100011; //config 0
  t_buf[2]  = 0b00011100; //config 1
  t_buf[3]  = 0b10101011; //config 2
  t_buf[4]  = 0b11000000; //config 3 - bit 4-5 is data_format[1:0]
  t_buf[5]  = 0b00100000; //irq register
  t_buf[6]  = 0b00000001; //mux
  t_buf[7]  = 0b00000000; //7-8-9 scan register
  t_buf[8]  = 0b00000000;
  t_buf[9]  = 0b00000000;
  t_buf[10] = 0b00000000; //10-11-12 timer delay value
  t_buf[11] = 0b00000000;
  t_buf[12] = 0b00000000;
  t_buf[13] = 0b00000000; //13-14-15 offset calibration
  t_buf[14] = 0b00000000;
  t_buf[15] = 0b00000000;
  t_buf[16] = 0b10000000; //16-17-18 gain calibration //0x80 is default 1x gain
  t_buf[17] = 0b00000000;
  t_buf[18] = 0b00000000;
  t_buf[19] = 0b10010000; //19-20-21 reserved should be set at 0x90
  t_buf[20] = 0b00000000;
  t_buf[21] = 0b00000000;
  t_buf[22] = 0b01010000; // reserved set at 0x50
  t_buf[23] = 0b00000000; // lock register 0xa5 unlock anything else lock


  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, 0);
  HAL_SPI_Transmit(&hspi1, t_buf, 23, 1000);
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, 1);

我的阅读功能:

代码语言:javascript
复制
float Get_ADC(void){
    float val;
    float sensor_val;

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, 0);    //pull down cs line on adc to enable spi on chip
    t_buf[0] = 0b01000011;
    t_buf[1] = 0b00010000;
    //HAL_SPI_TransmitReceive(&hspi1, t_buf, r_buf, 3, 1000);

    HAL_SPI_Transmit(&hspi1, t_buf, 1, 1000);
    HAL_SPI_Receive(&hspi1, r_buf, 28, 1000);

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, 1);    //return cs line to high to disable spi on chip



    return(sensor_val);

我读到的数据是:

代码语言:javascript
复制
r_buf[0]    uint8_t 0 '\0'  
r_buf[1]    uint8_t 0 '\0'  
r_buf[2]    uint8_t 0 '\0'  
r_buf[3]    uint8_t 99 'c'  
r_buf[4]    uint8_t 28 '\034'   
r_buf[5]    uint8_t 171 '«' 
r_buf[6]    uint8_t 192 'À' 
r_buf[7]    uint8_t 48 '0'  
r_buf[8]    uint8_t 1 '\001'    
r_buf[9]    uint8_t 0 '\0'  
r_buf[10]   uint8_t 0 '\0'  
r_buf[11]   uint8_t 0 '\0'  
r_buf[12]   uint8_t 0 '\0'  
r_buf[13]   uint8_t 0 '\0'  
r_buf[14]   uint8_t 0 '\0'  
r_buf[15]   uint8_t 0 '\0'  
r_buf[16]   uint8_t 0 '\0'  
r_buf[17]   uint8_t 0 '\0'  
r_buf[18]   uint8_t 128 '\200'  
r_buf[19]   uint8_t 0 '\0'  
r_buf[20]   uint8_t 0 '\0'  
r_buf[21]   uint8_t 144 '\220'  
r_buf[22]   uint8_t 0 '\0'  
r_buf[23]   uint8_t 0 '\0'  
r_buf[24]   uint8_t 80 'P'  
r_buf[25]   uint8_t 165 '¥' 
r_buf[26]   uint8_t 0 '\0'  
r_buf[27]   uint8_t 12 '\f' 
r_buf[28]   uint8_t 0 '\0'  

r_buf3返回写入的config0和..。以锁定寄存器r_buf28结束。r_buf,1,2应该返回我的24位数据,不管配置设置是什么组合,它总是返回0。我目前有一个光度二极管分别连接到ch0-ch1上。它是在印制板上与stm32l412芯片连接,spi_mode(1,1)。

我目前的假设是,adc从不离开关闭/休眠模式,也不会进行任何转换。

-Ross

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-28 15:42:10

看起来你使用的是STM32 HAL。我发现在HAL_SPI_Transmit()之后,我必须在下一个SPI操作之前调用HAL_SPIEx_FlushRxFifo(&hspi1);。这是STM32 HAL的一个怪癖。或者,HAL_SPI_TransmitReceive()不需要同花顺调用就可以工作。

另外,您的调用HAL_SPI_Transmit(&hspi1, t_buf, 1, 1000);使用缓冲区大小1,但是您以前初始化了两个字节的t_buf,因此我想您要发送两个字节。

若要分离ADC或SPI,则可以尝试读取ADC的内部温度;方法是在通道MCP3564_REGISTER_MUX_VIN_PLUS_TEMP_PMCP3564_REGISTER_MUX_VIN_MINUS_TEMP_M之间进行读取(然后根据数据表5.1.2节和图2-32或2-33进行转换)。

票数 0
EN

Stack Overflow用户

发布于 2022-02-23 12:13:12

我也有同样的问题,也是STM32与HAL。

结果,您必须将IRQ线拉到DVDD,或者通过将IRQ2寄存器位设置为1来打开内部拉出。

代码语言:javascript
复制
When the IRQ pin is in High-Z mode, an external
pull-up resistor must be connected between DVDD and
the IRQ pin.  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62436715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档