在使用ADS1015傳感器時出現了一些問題,記錄下,方便將來查看使用。javascript
ADS1015引腳功能,以及電路圖如圖所示。我使用的是右邊那個。
ADS1015也能夠同時使用多片,接線方式如圖,地址爲下方講到。
java
在數據手冊中能夠看到,由管腳ADDR進行選擇,默認懸空時由內部下拉電阻控制,即地址位1001000,可是實際上咱們一般會後面加一位0。(後面會講到)至於其餘地址相似與此。
web
因爲在實際使用中,ADS1015常切換通道,因此常在配置寄存器和數據寄存器中切換,因此分紅兩種方式,一種是須要切換的,每次須要寫入要讀取的寄存器才能讀取到數據寄存器,一種是固定的配置後,一直是讀取數據寄存器,則無需寫入,少去步驟1,2。svg
具體寫入數據波形如上圖, 其中D393爲配置寄存器值。
ui
在調試過程當中,起先不曉得爲啥子,數據讀出來的總是亂碼那種,起先個人iic協議也是隨便找的一個修改的。出現了以下問題,在讀取數據時,90H00H91H時都很正常,芯片也正常應答了,可是到讀取數據時莫名其妙的異常了。在查找一番後。修改了接收部分程序,加入一延時,在程序中的註釋後加入那個延時,程序正常。
spa
/** * @brief IIC讀取1byte數據 * @param None * @retval None * @note */ uint8_t iic_readbyte(unsigned char ack) { uint8_t i; uint8_t recv_value = 0; IIC1_SDA(GPIO_PIN_SET); iic_delay(2); SDA_IN();//SDA設置爲輸入 for (i = 0; i < 8; i++) { IIC1_SCL(GPIO_PIN_SET); iic_delay(10); recv_value <<= 1; if (IIC1_SDA_IS_HIGH()) { recv_value |= 0x01; } else { recv_value &= ~0x01; } iic_delay(2); IIC1_SCL(GPIO_PIN_RESET); ************************************************************************ iic_delay(10);//後加入 ************************************************************************ } SDA_OUT(); //sda線輸出 if (!ack) iic_nack();//發送nACK else iic_ack(); //發送ACK return recv_value; }
修改程序後,波形正常,數據正常。
3d