In dit artikel zullen we kijken naar wat een I2C-interface (ay-tu-si, i-two-tse) is, wat de functies zijn en hoe ermee te werken.
Het is nodig
- -Arduino;
- - digitale potmeter AD5171;
- - Lichtgevende diode;
- - 220 ohm weerstand;
- - 2 weerstanden voor 4,7 kOhm;
- - aansluitdraden.
instructies:
Stap 1
Het IIC seriële communicatieprotocol (ook wel I2C - Inter-Integrated Circuits genoemd) gebruikt twee bidirectionele communicatielijnen om gegevens over te dragen, de SDA-bus (Serial Data) en de SCL-bus (Serial Clock). Er zijn ook twee hoogspanningslijnen. De SDA- en SCL-bussen worden via weerstanden naar de voedingsbus getrokken.
Er is ten minste één Master in het netwerk die de gegevensoverdracht initieert en synchronisatiesignalen genereert. Het netwerk heeft ook slaves die op verzoek van de master data doorsturen. Elk slave-apparaat heeft een uniek adres waarop de master het adresseert. Het apparaatadres staat vermeld in het paspoort (datasheet). Op één I2C-bus kunnen maximaal 127 apparaten worden aangesloten, waaronder meerdere masters. Apparaten kunnen tijdens bedrijf op de bus worden aangesloten, d.w.z. het ondersteunt hot-plugging.
Stap 2
Arduino gebruikt twee poorten om op de I2C-interface te werken. In Arduino UNO en Arduino Nano komt analoge poort A4 bijvoorbeeld overeen met SDA, analoge poort A5 komt overeen met SCL.
Voor andere bordmodellen:
Arduino Pro en Pro Mini - A4 (SDA), A5 (SCL)
Arduino Mega - 20 (SDA), 21 (SCL)
Arduino Leonardo - 2 (SDA), 3 (SCL)
Arduino Due - 20 (SDA), 21 (SCL), SDA1, SCL1
Stap 3
Om de uitwisseling van gegevens met apparaten via de I2C-bus te vergemakkelijken, is voor de Arduino een standaard "Wire"-bibliotheek geschreven. Het heeft de volgende functies:
begin (adres) - initialisatie van de bibliotheek en verbinding met de I2C-bus; als er geen adres is opgegeven, wordt het aangesloten apparaat als de master beschouwd; 7-bit adressering wordt gebruikt;
requestFrom () - gebruikt door de master om een bepaald aantal bytes van de slave op te vragen;
beginTransmission (adres) - het begin van de gegevensoverdracht naar het slave-apparaat op een specifiek adres;
endTransmission () - beëindiging van de gegevensoverdracht naar de slave;
schrijven () - schrijven van gegevens van de slaaf in antwoord op een verzoek;
available () - geeft het aantal bytes aan informatie terug dat beschikbaar is voor ontvangst van de slave;
read () - lees een byte die is overgedragen van de slave naar de master of van de master naar de slave;
onReceive () - geeft de functie aan die moet worden aangeroepen wanneer de slave een transmissie van de master ontvangt;
onRequest () - Geeft een functie aan die moet worden aangeroepen wanneer de master een transmissie van de slave ontvangt.
Stap 4
Laten we eens kijken hoe we met de I2C-bus kunnen werken met behulp van Arduino.
Eerst zullen we het circuit samenstellen, zoals weergegeven in de afbeelding. We zullen de helderheid van de LED regelen met behulp van de AD5171 64-positie digitale potentiometer, die wordt aangesloten op de I2C-bus. Het adres waarop we naar de potentiometer zullen verwijzen is 0x2c (44 in decimaal).
Stap 5
Laten we nu een schets openen uit de voorbeelden van de "Wire"-bibliotheek:
Bestand -> Monsters -> Draad -> digitale_potentiometer. Laten we het in het Arduino-geheugen laden. Laten we het aanzetten.
U ziet, de helderheid van de LED stijgt cyclisch en gaat dan plotseling uit. In dit geval sturen we de potentiometer aan met behulp van de Arduino via de I2C-bus.