Подключение по IIC

PeterS
Offline
Зарегистрирован: 25.10.2018

Приветствую всех!

Пытаюсь общаться по IIC с м/с MP2949A. Подключил питание, SDA/SCL и PE (Programming Enable).

Залил в DUE скетч для поиска адрес (в datasheet вроде как 20h указан).

Но адрес не находит:

 
15:13:53.312 -> Scanning...
15:13:53.312 -> No I2C devices found
15:13:53.312 -> 
15:13:58.320 -> Scanning...
15:13:58.320 -> No I2C devices found
15:13:58.320 -> 
15:14:03.318 -> Scanning...
15:14:03.318 -> Unknow error at address 0x20
15:14:03.351 -> No I2C devices found
15:14:03.351 -> 
15:14:08.349 -> Scanning...
15:14:08.349 -> Unknow error at address 0x20
15:14:08.349 -> No I2C devices found
 
Может какие определённые условия нужны для работы этой м/с?
 
Спасибо.
b707
Offline
Зарегистрирован: 26.05.2017

Схемку давайте, к каким пинам на дуе и на какие пины на мс
И скетч нелишне

Feofan
Offline
Зарегистрирован: 28.05.2017

Для sda, scl подтяжка есть?

PeterS
Offline
Зарегистрирован: 25.10.2018

На DUE пины 20/21 (SDA/SCL)

На MP2949A 32/33 (SDA_P/SCL_P).

Подтяжка у этой шины есть, как сказано в описании на плату DUE. 

Скетч:

#include <Wire.h>

void setup(){
  pinMode(14, OUTPUT);
  digitalWrite(14, HIGH); // Включение Program enable (Pin 36)
    Wire.begin();
    Serial.begin(115200);
    while (!Serial);
    delay(500);
    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);
}
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вы сами резисторы подтяжки видели? Показать на плате можете?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Другими словами - поставьте подтяжку для начала (в виде резисторов килоом по 5..10), а потом повторите сканирование.

PeterS
Offline
Зарегистрирован: 25.10.2018

andriano пишет:

Вы сами резисторы подтяжки видели? Показать на плате можете?

Да, резисторы вижу и прозвонил даже.

Вот они:

Arduino DUE

b707
Offline
Зарегистрирован: 26.05.2017

PeterS, поиск в гугле показывает много тем с проблемами I2C на Дуе. Поэтому я бы советовал вам разделить задачу на две. Для начала подключите ваш сенсор с обычной ардуине - Уно или Нано, запустите сканер и убедитесь, что микросхема отвечает. Когда получите ответ на обычной ардуине - переходите на Дуе.

PeterS
Offline
Зарегистрирован: 25.10.2018

b707, да, возможно и железо глючное. Пока под руками только DUE, а какие там ещё платки на 3.3В?

У DUE есть второй IIC сегодня попробую к нему подключить.

b707
Offline
Зарегистрирован: 26.05.2017

PeterS пишет:

Пока под руками только DUE, а какие там ещё платки на 3.3В?

3.3в - про мини и СТМ32 блюпилл

А зачем обязательно 3.3? Разве ваша микросхема не работает от 5в?

PeterS
Offline
Зарегистрирован: 25.10.2018

b707 пишет:

А зачем обязательно 3.3? Разве ваша микросхема не работает от 5в?

Нет, макс. 3.6В

Feofan
Offline
Зарегистрирован: 28.05.2017

Цитата:
какие там ещё платки на 3.3В?

Существовала/существует Mega 2560 ProMini 3.3v от RobotDyn.

 

PeterS
Offline
Зарегистрирован: 25.10.2018

А как переназначить канал I2C (на пины D70/D71 вместо D20/D21) на плате DUE?