Hur vet jag vilka register jag ska använda vid i2C -MCP23017
Postat: 29 oktober 2018, 21:03:02
Nu tänker jag använda MCP23017 och ett sådant chip använder sig av protokollet i2c. Jag har aldrig hållit på med i2c förut, förutom att använda färdiga bibliotek som gör jobbet åt mig. Men nu ska jag använda ett bibliotek som fungerar som en generell i2c läsare och skrivare.
Jag börjar först med att plocka fram chippet MCP23017. Det som är intressant här för mig är pinnarna: SCL, SDA, A0, A1, A2, Vss, Vdd, RESET. I/O pinnarna är allt från GPA0 -> GPB7.
När jag ska skriva till MCP23017 så är det viktigt att jag använder rätt opdevice adress. Addressen till chippet är: 0 | 1 | 0 | 0 | A2 | A1 | A0 , men opdevice är 0 | 1 | 0 | 0 | A2 | A1 | A0 | R/W
Så om A0 = A1 = A2 = 1 och där R = 0 , så skulle jag få ett hexvärde på 4E och om W = 1 så skulle jag få ett hexvärde på 4F. Notera att MCP23017 har 16-bit hexvärden. R står för read och W står för write. Allt detta kan ni se på sidan 15.
Frågor:
Då kommer vi till register. Vilken ska jag välja? Det verkar som att det finns en hel hög utav register. Därför tänkte jag fråga.
Visst är det GPIOA och GPIOB som jag skall använda om jag vill endast hålla mig digital, dvs ON eller OFF?
Måste jag inkludera startbit i min hex? Eller görs det automatiskt?
Enligt sida 14 så om jag ska läsa så måste jag först skicka Start Bit | Adress | Write bit | Restart bit | Adress | Read bit | och sedan ta emot det som läses in. Men vad är "Restart bit"?
http://ww1.microchip.com/downloads/en/D ... 01952C.pdf
Edit: Vi tar det om igen.
Om jag vill skriva så måste jag skicka följande hex: (se section 3.2.2.1)
1. Start bit 1 = 0x1
2. OP bit 0 | 1 | 0 | 0 | 1 | 1 | 1 = 0x27
3. Write bit 1 = 0x1
4. Sedan skickar jag register som hex t.ex. 0x20 som beskriver vilka utgångar som ska sättas hög eller låg.
Om jag vill läsa så måste jag skicka följande hex (se section 3.2.2.2)
1. Start bit 1 = 0x1
2. OP bit 0 | 1 | 0 | 0 | 1 | 1 | 1 = 0x27
3. Write bit 1 = 0x1
4. Reset bit = ? Vad kan det vara ??
5. OP bit 0 | 1 | 0 | 0 | 1 | 1 | 1 = 0x27
6. Read bit 1 = 0x1
7. Sedan tar jag emot det data som bjuds från MCP23017
Jag börjar först med att plocka fram chippet MCP23017. Det som är intressant här för mig är pinnarna: SCL, SDA, A0, A1, A2, Vss, Vdd, RESET. I/O pinnarna är allt från GPA0 -> GPB7.
När jag ska skriva till MCP23017 så är det viktigt att jag använder rätt opdevice adress. Addressen till chippet är: 0 | 1 | 0 | 0 | A2 | A1 | A0 , men opdevice är 0 | 1 | 0 | 0 | A2 | A1 | A0 | R/W
Så om A0 = A1 = A2 = 1 och där R = 0 , så skulle jag få ett hexvärde på 4E och om W = 1 så skulle jag få ett hexvärde på 4F. Notera att MCP23017 har 16-bit hexvärden. R står för read och W står för write. Allt detta kan ni se på sidan 15.
Frågor:
Då kommer vi till register. Vilken ska jag välja? Det verkar som att det finns en hel hög utav register. Därför tänkte jag fråga.
Visst är det GPIOA och GPIOB som jag skall använda om jag vill endast hålla mig digital, dvs ON eller OFF?
Måste jag inkludera startbit i min hex? Eller görs det automatiskt?
Enligt sida 14 så om jag ska läsa så måste jag först skicka Start Bit | Adress | Write bit | Restart bit | Adress | Read bit | och sedan ta emot det som läses in. Men vad är "Restart bit"?
http://ww1.microchip.com/downloads/en/D ... 01952C.pdf
Edit: Vi tar det om igen.
Om jag vill skriva så måste jag skicka följande hex: (se section 3.2.2.1)
1. Start bit 1 = 0x1
2. OP bit 0 | 1 | 0 | 0 | 1 | 1 | 1 = 0x27
3. Write bit 1 = 0x1
4. Sedan skickar jag register som hex t.ex. 0x20 som beskriver vilka utgångar som ska sättas hög eller låg.
Om jag vill läsa så måste jag skicka följande hex (se section 3.2.2.2)
1. Start bit 1 = 0x1
2. OP bit 0 | 1 | 0 | 0 | 1 | 1 | 1 = 0x27
3. Write bit 1 = 0x1
4. Reset bit = ? Vad kan det vara ??
5. OP bit 0 | 1 | 0 | 0 | 1 | 1 | 1 = 0x27
6. Read bit 1 = 0x1
7. Sedan tar jag emot det data som bjuds från MCP23017