Stap 5: Code
Er valt niet te rond dat het toewijzen van elke pin van de I/O expander en LED-display met een werkelijke numerieke cijfer is vervelend werk. Dit is te zien op de bovenkant van het bestand i2c_2dig_7seg.c in de bijgevoegde code. Ik aangesloten de code op mijn digitale thermometer die de I2C zeven segment display voor uw referentie drijft.
De I/O apparaat is Microchip technologie MCP23017-E/SP of Digikey onderdeelnummer MCP23017-E/SP-ND.
De fundamentele I2C-opdracht voor het maken van alle de uitgangen van het pinnen
{adres, IODIR, 0, 0}, of {0x40, 0, 0, 0}
of meer in het bijzonder:
messageBuf [0] = 0x40;
messageBuf [1] = 0;
messageBuf [2] = 0;
messageBuf [3] = 0;
USI_TWI_Start_Read_Write (messageBuf, 4)
De fundamentele I2C-opdracht voor het schrijven van de output pinnen is {adres, GPIO reg, poort een val, poort B val}. Bijvoorbeeld als u wilde schrijven de waarden 0x45 en 0x67 naar de A en B poort stiften het zou worden {0x40, 0x12, 0x45, 0x67}
of meer in het bijzonder:
messageBuf [0] = 0x40;
messageBuf [1] = 0x12;
messageBuf [2] = 0x45;
messageBuf [3] = 0x67;
USI_TWI_Start_Read_Write (messageBuf, 4)
Merk op dat de I2C adres voor dit specifieke apparaat 0x20 is maar u shift-links het een beetje moet omdat het minst significante bit van de eerste byte het stukje lezen/schrijven is. Zie I2C Bus voor ATtiny en ATmega voor details.