![](/img/trans.png)
[英]Trying to understand Microchip PIC16LF15344 peripheral pin selection for I2C
[英]example code, documents on MCP23017 (16 pin IO extender, I2C) as an 7-segment LCD driver
Microchip的MCP23017是基於I2C的16引腳IO擴展器。 我已經能夠設置一次該設備(設置引腳方向和值),但是在那之后,除非重置/重啟設備,否則我無法按預期更改值。 這是我用來初始化並第一次設置引腳的代碼:
I2C_Start(); I2C_Write(0x40); // slave address I2C_Write(0x00); // address register ... (sequential mode so next 10 are set to I2C_Write(0x00); I2C_Write(0x08); // IOCON: HAEN=1 I2C_Write(0x08); // IOCON: HAEN=1 ... (sequential mode so next 6 are set to I2C_Write(0x00); I2C_Write(0xFEu); // GPIOA I2C_Write(0x01u); // GPIOB I2C_Stop();
之后,我希望能夠切換輸出值(0xFE <-> 0x01)。 我嘗試了這段代碼:
I2C_Start(); I2C_Write(0x40); // slave address I2C_Write(0x12); // address register I2C_Write(0x01u); // GPIOA I2C_Write(0xFEu); // GPIOB I2C_Stop();
此時似乎要吃午飯了,引腳的值似乎是隨機的(輸入與輸出,輸出高與低)。 如果有人使用過此I2C IO擴展器,請幫助我。 即使您不能完全確定您也歡迎發表評論。 注意:此處顯示的I2C API是位沖擊算法,所有時鍾周期都帶有aprox。 它們之間的權重為1ms。
有用的文件(種類): http : //ww1.microchip.com/downloads/en/DeviceDoc/21952b.pdf
嘗試使用示波器或邏輯分析儀查看SCL和SDA信號,以檢查時序和數據,以確保向I / O擴展器發送了您認為的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.