I2C сканер на Arduino
В этой статье расскажу как с помощью Arduino сделать I2C сканер, в качестве примера определю адрес LCD1602 дисплей, работающего по интерфейсу I2C.
I2C сканер на Arduino
Немного теории, I2C — это протокол, который позволяет различным устройствам взаимодействовать друг с другом используя одну шину данных SDA и SCL (всего два проводника), так же, для каждого устройства присваивается свой уникальный адрес (максим 127 устройств). Поменять адрес устройства нельзя, он намертво вшит в микросхему, но некоторые производитель предоставил возможность изменять адрес в небольшом диапазоне, это дает возможность подключить несколько одинаковых устройств (с одинаковым чипом) к одной шине.
Иногда, нет возможности найти документацию на микросхему или микросхема не имеет адрес схожий от документации (такое то же бывало), тогда поможет данный скетч. В примере используется Arduino UNO и LCD модуль I2C (который имеет брак и другой адрес, не 0x27), так-же, интерфейс I2C работает только на определенные выводах (в arduino UNO это A4 и A5), приведу таблицу подключения для различных платформ Arduino.
Собираем принципиальную схему
Открываем среду разработки IDE Arduino, копируем скетч и загружаем его в платформу Arduino.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
/* Тестировалось на Arduino IDE 1.8.5 Дата тестирования 26.10.2017г. */ #include <Wire.h> void setup(){ Wire.begin(); Serial.begin(9600); while (!Serial); Serial.println("\nI2C Scanner"); } void loop(){ byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 8; address < 127; address++ ){ Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0){ Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); } |
Открываем «Монитор порта», выставляем скорость 9600 и если все правильно подключено, программа покажет адрес устройства, в моем случаи LCD с адресом 0x3F
Вот, и все.
Благодарю!)) нашёлся на 0х27..
Я использувал этот скетч но в меня адрес не показывался . Думал может это дело в I2c ,но не знаю .Еще может быть плохо припаяно I2c к ЛСД .Может вы подскажете .
Спасибо! нашел по адресу 0х27
I2C Сканер
Сканирование……..
I2C устройство найдено по адресу 0x27 !
Закончено
Сделал текст на русском языке )
как читать данные с адресов
redefinition of ‘void setup()’
Что с этим делать??
доброго времени суток.
где можно использовать сканер..??? для вывода на дисплей значений с разных датчиков?
Здравствуйте, подойдет если не знаете адрес подключенного устройства.
выдает ошибку когда запускаю, что делать?
avrdude: ser_open(): can’t open device «\\.\COM5»: �� ������� ����� ��������� ����.
Failed uploading: uploading error: exit status 1
Здравствуйте, ком порт занят.