Musik spelas väckarklocka (22 / 24 steg)
Steg 22: Tillägg D: I2C / TWI buss grunderna
I2C står för Inter-Integrated krets. I2C bussar är även känd som TWI för två Wire Interface, eftersom den använder bara två trådar.http://en.wikipedia.org/wiki/I%C2%B2C
På en TWI buss är två signal ledningarna SDA och SCL, i princip data och klocka. Dessa signaler är öppna avlopp (betyder dess logik är antingen hög impedans eller låg, det någonsin kan inte vara hög), men det måste finnas en pull-up resistor på var och en av dessa signaler (vi använder AVR: s interna pull-up motstånd). Detta är viktigt för alla enheter på en TWI buss kan köra signalerna låg när som helst, så att signalen kan endast bli hög när alla enheter tillåter att bli hög. Detta gör att enheter kan upptäcka när bussen är ockuperade ("skiljeförfarande med SDA") och även tillåta en långsam enhet att diktera hastigheten på klockan eller ens pausa en överföring om långsammare enheten är upptagen (detta kallas "klocka stretching". Dessa fakta gör TWI bussen bra för kommunikation mellan en massa chips med bara två kablar.
Varje transaktion är mellan en master (den som kör klocksignalen) och en slav enhet. Varje transaktion startar med en "starta skick" och slutar med ett "slutet villkor". En start villkora är när bus master enheterna SDA låg först, sedan köra SCL låg näst. Ett slutet villkor är när befälhavaren släpper TWI bussen genom att släppa SCL och sedan släppa SDA.
Efter start villkora har befälhavaren att välja vilken enhet att prata med genom att skicka en 7 bitars adress byte. Den 8: e (senast som skickas) biten anger huruvida befälhavaren vill läsa (1) från eller skriva (0) till slav behandlas. Om befälhavaren skriver, skickas sedan mer data. Om befälhavaren läser, kommer att det släppa SDA linjen så slav skickar data (men befälhavaren fortfarande driver klockan). När upp
Alla byte skickas MSB först (mest signifikanta bit först). Varje byte avslutas eventuellt av en bekräftelse/nacknowledgement. Kontrollera enheten databladet för att se vad enheten kommer att förvänta sig eller kommer att skicka tillbaka. Vanligtvis, för att citera Wikipedia: "om befälhavaren vill skriva till slav då upprepade gånger skickar en byte med slav skicka en ACK bit. (I denna situation, är befälhavaren i master sändningsläge och slaven är i slav ta emot-läge.) Om befälhavaren vill läsa från slav sedan den upprepade gånger får en byte från slav, lite befälhavaren skickar en ACK efter varje byte men sist. (I denna situation, master är i ledar-ta emot-läge och slaven är i slav överför funktionsläge.) "
Mer intrikata detaljer är oftast specifika för en viss enhet, och sådan information kommer från dess datablad.
När jag använder I2C/TWI med AVR mikrokontroller, använder jag låg nivå lagret av "Tråd" bibliotek för Arduino. Wire biblioteket är ett C++-omslag för lägre nivå "twi.c" och "twi.h"-modulen, som jag ändra spenslig och sammanställa i min egen kod (eftersom jag inte brukar använda C++). Det hand tar om nästan allt.
För vissa logik analyzer vågformer, se steg om DS1307 RTC