Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ Arduino. ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со скСтчами». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 26

Автор Монк Π‘Π°ΠΉΠΌΠΎΠ½

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Wire, Π΅Π΅ сначала Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ

#include <Wire.h>

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ I2C

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΏΠ»Π°Ρ‚Π° Arduino ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΡŒ Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ устройства Π½Π° любой шинС I2C. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Arduino ΠΊΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‰Π΅Π΅ устройство, Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ begin Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setup, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅:

void setup()

{

Β Β Wire.begin();

}

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΠ»Π°Ρ‚Π° Arduino дСйствуСт ΠΊΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‰Π΅Π΅ устройство, Π΅ΠΉ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ адрСс. Если Π±Ρ‹ ΠΏΠ»Π°Ρ‚Π° Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π»Π°ΡΡŒ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π²Π΅Π΄ΠΎΠΌΠΎΠ³ΠΎ устройства, Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ адрСс Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 127, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Ρ‚Ρƒ Π½Π° шинС I2C.

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π²Π΅Π΄ΡƒΡ‰ΠΈΠΌ устройством

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ устройству Π½Π° шинС I2C, сначала Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ beginTransmission ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅ΠΉ адрСс устройства-получатСля:

Wire.beginTransmission(4);

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… устройствам Π½Π° шинС I2C ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ±Π°ΠΉΡ‚Π½ΠΎ ΠΈΠ»ΠΈ Ρ†Π΅Π»Ρ‹ΠΌΠΈ массивами Ρ‚ΠΈΠΏΠ° char, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄Π²ΡƒΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…:

Wire.send(123); // ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π±Π°ΠΉΡ‚Π° со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 123

Wire.send("ABC"); // ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° строки символов "ABC"

По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ функция endTransmission:

Wire.endTransmission();

ΠŸΡ€ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π²Π΅Π΄ΡƒΡ‰ΠΈΠΌ устройством

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ Π²Π΅Π΄ΠΎΠΌΠΎΠ³ΠΎ устройства, сначала Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ количСство ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Ρ… Π±Π°ΠΉΡ‚ΠΎΠ² Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ requestFrom:

Wire.requestFrom(4, 6); // Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ 6 Π±Π°ΠΉΡ‚ Ρƒ устройства с адрСсом 4

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пСрСдаСтся адрСс Π²Π΅Π΄ΠΎΠΌΠΎΠ³ΠΎ устройства, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Π΅Π΄ΡƒΡ‰Π΅Π΅ устройство ΠΆΠ΅Π»Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ β€” количСство Π±Π°ΠΉΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ оТидаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ. Π’Π΅Π΄ΠΎΠΌΠΎΠ΅ устройство ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ мСньшСС количСство Π±Π°ΠΉΡ‚ΠΎΠ², поэтому, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π±Ρ‹Π»ΠΈ Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ сколько Π±Π°ΠΉΡ‚ΠΎΠ² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ available. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (взят ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², входящих Π² состав Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Wire) дСмонстрируСт, ΠΊΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‰Π΅Π΅ устройство ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ всС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΡ… Π² ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°:

#include <Wire.h>

void setup() {

Β Β Wire.begin();Β Β Β Β Β Β Β Β // ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ шинС i2c (для Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β // устройства адрСс Π½Π΅ указываСтся)

Β Β Serial.begin(9600);Β Β // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°

}

void loop() {

Β Β Wire.requestFrom(8, 6);Β Β Β Β // Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ 6 Π±Π°ΠΉΡ‚ Ρƒ Π²Π΅Π΄ΠΎΠΌΠΎΠ³ΠΎ устройства #8

Β Β while (Wire.available()) { // Π²Π΅Π΄ΠΎΠΌΠΎΠ΅ устройство ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΠ»Π°Ρ‚ΡŒ мСньшС

Β Β Β Β char c = Wire.read();Β Β Β Β // ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ ΠΊΠ°ΠΊ символ

Β Β Β Β Serial.print(c);Β Β Β Β Β Β Β Β Β // вывСсти символ

Β Β }

Β Β delay(500);

}

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Wire автоматичСски Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ входящиС Π΄Π°Π½Π½Ρ‹Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования I2C

Π›ΡŽΠ±ΠΎΠ΅ устройство I2C Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ тСхничСскоС описаниС, Π³Π΄Π΅ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΈΠΌ сообщСния. Π’Π°ΠΊΠΈΠ΅ описания Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСния для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π²Π΅Π΄ΠΎΠΌΡ‹ΠΌ устройствам ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΡ‚Π²Π΅Ρ‚Ρ‹. Однако для ΠΌΠ½ΠΎΠ³ΠΈΡ… устройств I2C, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊ ΠΏΠ»Π°Ρ‚Π΅ Arduino, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ спСциализированныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΎΠ±Π΅Ρ€Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ сообщСния I2C Π² простыС ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ЀактичСски, Ссли Π²Π°ΠΌ придСтся Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ устройством, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ отсутствуСт спСциализированная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для всСобщСго использования ΠΈ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ сСбС нСсколько ΠΎΡ‡ΠΊΠΎΠ² Π² ΠΊΠ°Ρ€ΠΌΡƒ.

Π”Π°ΠΆΠ΅ Ссли полноцСнная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ устройства отсутствуСт, часто Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π°, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ с устройством.

Π£ΠšΠ’-Ρ€Π°Π΄ΠΈΠΎΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ TEA5767

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ взаимодСйствиС с устройством I2C, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Π—Π΄Π΅ΡΡŒ осущСствляСтся ΠΎΠ±ΠΌΠ΅Π½ фактичСскими сообщСниями ΠΌΠ΅ΠΆΠ΄Ρƒ Arduino ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ TEA5767. Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΡƒΠΏΠΈΡ‚ΡŒ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅Π΄ΠΎΡ€ΠΎΠ³ΠΎ, ΠΎΠ½ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ ΠΏΠ»Π°Ρ‚Π΅ Arduino ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π£ΠšΠ’-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ, управляСмый Arduino.

Π‘Π°ΠΌΡ‹ΠΉ слоТный этап β€” ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ устройства. ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹Π΅ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠΈ ΠΎΡ‡Π΅Π½ΡŒ малСнькиС ΠΈ располоТСны ΠΎΡ‡Π΅Π½ΡŒ Π±Π»ΠΈΠ·ΠΊΠΎ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ, поэтому ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΡΠΌΠ°ΡΡ‚Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΊΡƒΠΏΠΈΡ‚ΡŒ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ ΠΏΠ»Π°Ρ‚Π΅.

На рис. 7.5 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° схСма ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ модуля ΠΊ Arduino.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ Arduino. ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со скСтчами - _55.jpg

Рис. 7.5. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ модуля TEA5767 ΠΊ ΠΏΠ»Π°Ρ‚Π΅ Arduino Uno Ρ‡Π΅Ρ€Π΅Π· интСрфСйс I2C

ВСхничСскоС описаниС модуля TEA5767 ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ адрСсу www.sparkfun.com/datasheets/Wireless/General/TEA5767.pdf. ОписаниС содСрТит массу тСхничСской ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½ΠΎ, Ссли ΠΏΡ€ΠΎΠ±Π΅ΠΆΠ°Ρ‚ΡŒ взглядом ΠΏΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π» с ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌ описаниСм сообщСний, распознаваСмых устройством. Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ указываСтся, Ρ‡Ρ‚ΠΎ TEA5767 ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ сообщСния Π΄Π»ΠΈΠ½ΠΎΠΉ 5 Π±Π°ΠΉΡ‚. Π”Π°Π»Π΅Π΅ приводится ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ работоспособный ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ настройку частоты сразу послС запуска. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ трСбуСтся нСсколько ΠΈΠ½ΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ настройки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° основС ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΈ ТидкокристалличСского дисплСя.

// sketch_07_01_I2C_TEA5767

#include <Wire.h>

void setup()

{

Β Β Wire.begin();

Β Β setFrequency(93.0); // ΠœΠ“Ρ†

}

void loop()

{

}

void setFrequency(float frequency)

{

Β Β unsigned int frequencyB = 4 * (frequency * 1000000 + 225000) / 32768;

Β Β byte frequencyH = frequencyB >> 8;

Β Β byte frequencyL = frequencyB & 0XFF;

Β Β Wire.beginTransmission(0x60);

Β Β Wire.write(frequencyH);

Β Β Wire.write(frequencyL);

Β Β Wire.write(0xB0);

Β Β Wire.write(0x10);

Β Β Wire.write(0x00);

Β Β Wire.endTransmission();

Β Β delay(100);

}

Π’Π΅ΡΡŒ ΠΊΠΎΠ΄, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ для нас интСрСс Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, находится Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setFrequency. Она ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ вСщСствСнноС число β€” частоту Π² ΠΌΠ΅Π³Π°Π³Π΅Ρ€Ρ†Π°Ρ…. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли Π²Ρ‹ ΠΏΠΎΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΡƒΠ·Π½Π°ΠΉΡ‚Π΅ частоту, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Π΅Ρ‰Π°Π΅Ρ‚ мСстная радиостанция с Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌ сигналом, ΠΈ Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π²Ρ‹Π·ΠΎΠ² setFrequency Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setup.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ вСщСствСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ частоты Π² Π΄Π²ΡƒΡ…Π±Π°ΠΉΡ‚Π½ΠΎΠ΅ прСдставлСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ Π² составС пятибайтного сообщСния, Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚:

unsigned int frequencyB = 4 * (frequency * 1000000 + 225000) / 32768;

byte frequencyH = frequencyB >> 8;

byte frequencyL = frequencyB & 0XFF;

Команда >> сдвигаСт Π±ΠΈΡ‚Ρ‹ Π²ΠΏΡ€Π°Π²ΠΎ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ опСрация >> 8 сдвинСт ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ 8 Π±ΠΈΡ‚ Π² сторону ΠΌΠ»Π°Π΄ΡˆΠΈΡ… Π½Π° 8 Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… разрядов. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ & выполняСт ΠΏΠΎΡ€Π°Π·Ρ€ΡΠ΄Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ И (AND), которая Π² Π΄Π°Π½Π½ΠΎΠΌ случаС сбросит ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ 8 Π±ΠΈΡ‚ ΠΈ оставит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ младшиС. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ обсуТдСниС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Π±ΠΈΡ‚Π°ΠΌΠΈ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² Π³Π»Π°Π²Π΅ 9.

ΠžΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ΄ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setFrequency ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ сообщСния I2C Π²Π΅Π΄ΠΎΠΌΠΎΠΌΡƒ устройству с адрСсом 0x60, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ Π·Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠΌ TEA5767. Π—Π°Ρ‚Π΅ΠΌ осущСствляСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° 5 Π±Π°ΠΉΡ‚, начиная с 2 Π±Π°ΠΉΡ‚ частоты.

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ мноТСствС Π΄Ρ€ΡƒΠ³ΠΈΡ… возмоТностСй, доступных посрСдством Ρ€Π°Π·Π½Ρ‹Ρ… сообщСний, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎ сканировании Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π΄Π²ΡƒΡ… ΠΊΠ°Π½Π°Π»ΠΎΠ² Π²Ρ‹Π²ΠΎΠ΄Π° Π·Π²ΡƒΠΊΠ° ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΌΠΎΠ½ΠΎ/стСрСо.

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΡ‹ Π΅Ρ‰Π΅ вСрнСмся ΠΊ этому ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΈ создадим Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для Arduino, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ TEA5767.

ВзаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠ»Π°Ρ‚Π°ΠΌΠΈ Arduino

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²Π΅ ΠΏΠ»Π°Ρ‚Ρ‹ Arduino, ΠΎΠ΄Π½Π° дСйствуСт ΠΊΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‰Π΅Π΅ устройство I2C, Π° другая β€” ΠΊΠ°ΠΊ Π²Π΅Π΄ΠΎΠΌΠΎΠ΅. Π’Π΅Π΄ΡƒΡ‰Π΅Π΅ устройство Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ сообщСния Π²Π΅Π΄ΠΎΠΌΠΎΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… Π² ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ наглядно ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ схСма Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.