Не могу запустить плату I2C GPIO

Pochemushka
Offline
Зарегистрирован: 12.12.2014

Доброго времени суток. 

Реализую умный дом на arduino mega, встал вопрос нехватки цифровых портов. Приобрел вот такую плату на 16 доп цифр портов.  Фотка сперта с первого попавшегося сайта, но плата точно такая же. В подключении ничего особого нет, тем более нашел как это сделать тут. Там же беру библиотеку mcp23017 и mcp23x17. 

Пишу простейший скетч, при попытке инициализировать плату arduino mega виснет.  То что она виснет становиться ясно если вставить в код в  loop вывод тестового сообщения - сообщение не выводиться, как только в  setup комментирую строчку mcp23_1.init(0), тестовое сообщение начинает выводиться. 

Чего только не пробовал и втыкал в другие два SDA и SCL ( перед AREF) и игрался с потягивающими резисторами на SDA и   SCL, как написано даташите. Сразу скажу, что платы у меня такие две с обоими ситуация одинакова.  С адресными перемычками все виды танцев с бубнами производились. Плата MEGA 100% фирменная и рабочая, тем более у меня их три штуки и одна из них работает уже в продуктиве более полугода управлет светом, охраной и климатом - никаких нареканий.

Народ подскажите где куритть, а то не могу управление хамамом( турецкая баня) реализовать, а то оцень хотса в баню. 

Пример скетча ниже. 

#include <MCP23x17.h>
#include <MCP23017.h>
#include <SoftwareSerial.h>
#include <Wire.h>
CMCP23017 mcp23_1;

void setup()
{
  
  Serial.begin(9600);
  Wire.begin(); 
  mcp23_1.init(0); // инициализируем плату на адресе 0
  mcp23_1.pinMode(0,INPUT);  // нулевой порт признаем как вход
}

void loop()
{
Serial.println(mcp23_1.digitalRead(0)); // тут висит кнопка пытаемся считать ее состояние
Serial.println("Test!"); // тестовое сообщение
delay(100); // чтобы в глазах не рябило :) 
}

 

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Скетч i2c scanner - плату видит?

Pochemushka
Offline
Зарегистрирован: 12.12.2014

О блин, а то про слона то я и забыл :) 

Спасибо за "ниточку" - сегодня  вечером копну это лопатой. 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Нулевой адрес - это General Call.

Точне в скетче не пропущены циферкми?

Pochemushka
Offline
Зарегистрирован: 12.12.2014

Gippopotam пишет:

Нулевой адрес - это General Call.

Точне в скетче не пропущены циферкми?

Я все 8 адресов с 0 по 7 пробовал. 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Все восемь I2C адресов? :)

http://www.i2c-bus.org/addressing/

 

цитата:

The following table shows I2C addresses reserved for special purposes:

nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

недавно делал на двух mcp23016 (на 16 входов и16 выходов)работает отлично и простое программирование с библиотекой IOexpander

#include <IOexpander.h>
#include <Wire.h>;
#include <inttypes.h>;

IOexpander out(0x20);
IOexpander in(0x24);
void setup()
{
  out.init();
  in.init();
  in.pinMode(0, INPUT);
in.pinMode(1, INPUT);
out.pinMode(10, INPUT);
out.pinMode(0, INPUT);
in.pinMode(10, OUTPUT);
 out.pinMode(3, OUTPUT);
 out.pinMode(4, OUTPUT);
 in.pinMode(3, OUTPUT);
}

void loop()
{
 if( in.digitalRead(0)== HIGH
 )
 {
  in.digitalWrite(10, LOW);
   out.digitalWrite(3, HIGH);
//  delay(500);
// 
//  out.digitalWrite(3, HIGH);
//  delay(500);
}
else
{
   in.digitalWrite(10, HIGH);
    out.digitalWrite(3, LOW);
}
if( out.digitalRead(10)== LOW)
{
  out.digitalWrite(4, HIGH);
}
else
{
  out.digitalWrite(4, LOW);
}
if( out.digitalRead(0)== LOW)
{
  in.digitalWrite(3, HIGH);
}
else
{
  in.digitalWrite(3, LOW);
}
}

 

просто поставь свои адресса

Да ,там названия немного попутаны - в сетапе посмотри ,где входа где выходы

 

Pochemushka
Offline
Зарегистрирован: 12.12.2014

Andrey_Y_Ostanovsky пишет:

Скетч i2c scanner - плату видит?

Попробовал - видит, перемычки переставляешь - адреса меняются - платы живые.

Но не работают - инициализация не прходит пишу адрес при ининциализации как в сканере i2c например  с "пустыми" перемычками:  mcp23_1.init(0x27) - аналогичная фигня :(

Pochemushka
Offline
Зарегистрирован: 12.12.2014

nikolaki пишет:

недавно делал на двух mcp23016 (на 16 входов и16 выходов)работает отлично и простое программирование с библиотекой IOexpander

#include <IOexpander.h>
#include <Wire.h>;
#include <inttypes.h>;


просто поставь свои адресса

Да ,там названия немного попутаны - в сетапе посмотри ,где входа где выходы

 

Пробовал, но у меня какая то засада с IDE или самой библиотекой , сначала ругается на отсутствие WProgram.h я в  библиотеку(IOexpander.cpp)  дописываю автовыбор WProgam.h или Arduino.h:

#if defined(ARDUINO)&& ARDUINO >=100

#include "Arduino.h"

#else

#include "WProgram.h"

#endif

После этого мне вываливается два мешка ошибок: в таком то классе нет такого метода, в таком то классе нет такого то члена и так строчек 20, поэтому я пока эту библиотеку откинул.. Борюсь с mcp.

nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

Проверил на последней версии ИДЕ 1.0.6- компилируется нормально (как и на версии1.0.1). Библиотеку вытащил из директории ИДЕ.

Pochemushka
Offline
Зарегистрирован: 12.12.2014
sketch_dec12a:6: error: no matching function for call to 'IOexpander::IOexpander(int)'
IOexpander.h:62: note: candidates are: IOexpander::IOexpander()
IOexpander.h:46: note:                 IOexpander::IOexpander(const IOexpander&)
sketch_dec12a:7: error: no matching function for call to 'IOexpander::IOexpander(int)'
IOexpander.h:62: note: candidates are: IOexpander::IOexpander()
IOexpander.h:46: note:                 IOexpander::IOexpander(const IOexpander&)
sketch_dec12a.ino: In function 'void setup()':
sketch_dec12a:10: error: no matching function for call to 'IOexpander::init()'
IOexpander.h:63: note: candidates are: bool IOexpander::init(uint8_t, uint8_t)
sketch_dec12a:11: error: no matching function for call to 'IOexpander::init()'
IOexpander.h:63: note: candidates are: bool IOexpander::init(uint8_t, uint8_t)
sketch_dec12a:12: error: no matching function for call to 'IOexpander::pinMode(int, int)'
IOexpander.h:64: note: candidates are: bool IOexpander::pinMode(uint8_t, uint8_t, bool)
sketch_dec12a:13: error: no matching function for call to 'IOexpander::pinMode(int, int)'
IOexpander.h:64: note: candidates are: bool IOexpander::pinMode(uint8_t, uint8_t, bool)
sketch_dec12a:14: error: no matching function for call to 'IOexpander::pinMode(int, int)'
IOexpander.h:64: note: candidates are: bool IOexpander::pinMode(uint8_t, uint8_t, bool)
sketch_dec12a:15: error: no matching function for call to 'IOexpander::pinMode(int, int)'
IOexpander.h:64: note: candidates are: bool IOexpander::pinMode(uint8_t, uint8_t, bool)
sketch_dec12a:16: error: no matching function for call to 'IOexpander::pinMode(int, int)'
IOexpander.h:64: note: candidates are: bool IOexpander::pinMode(uint8_t, uint8_t, bool)
sketch_dec12a:17: error: no matching function for call to 'IOexpander::pinMode(int, int)'
IOexpander.h:64: note: candidates are: bool IOexpander::pinMode(uint8_t, uint8_t, bool)
sketch_dec12a:18: error: no matching function for call to 'IOexpander::pinMode(int, int)'
IOexpander.h:64: note: candidates are: bool IOexpander::pinMode(uint8_t, uint8_t, bool)
sketch_dec12a:19: error: no matching function for call to 'IOexpander::pinMode(int, int)'
IOexpander.h:64: note: candidates are: bool IOexpander::pinMode(uint8_t, uint8_t, bool)
sketch_dec12a.ino: In function 'void loop()':
sketch_dec12a:23: error: no matching function for call to 'IOexpander::digitalRead(int)'
IOexpander.h:68: note: candidates are: int IOexpander::digitalRead(uint8_t, uint8_t)
sketch_dec12a:25: error: no matching function for call to 'IOexpander::digitalWrite(int, int)'
IOexpander.h:66: note: candidates are: bool IOexpander::digitalWrite(uint8_t, uint8_t, bool)
sketch_dec12a:26: error: no matching function for call to 'IOexpander::digitalWrite(int, int)'
IOexpander.h:66: note: candidates are: bool IOexpander::digitalWrite(uint8_t, uint8_t, bool)
sketch_dec12a:34: error: no matching function for call to 'IOexpander::digitalWrite(int, int)'
IOexpander.h:66: note: candidates are: bool IOexpander::digitalWrite(uint8_t, uint8_t, bool)
sketch_dec12a:35: error: no matching function for call to 'IOexpander::digitalWrite(int, int)'
IOexpander.h:66: note: candidates are: bool IOexpander::digitalWrite(uint8_t, uint8_t, bool)
sketch_dec12a:37: error: no matching function for call to 'IOexpander::digitalRead(int)'
IOexpander.h:68: note: candidates are: int IOexpander::digitalRead(uint8_t, uint8_t)
sketch_dec12a:39: error: no matching function for call to 'IOexpander::digitalWrite(int, int)'
IOexpander.h:66: note: candidates are: bool IOexpander::digitalWrite(uint8_t, uint8_t, bool)
sketch_dec12a:43: error: no matching function for call to 'IOexpander::digitalWrite(int, int)'
IOexpander.h:66: note: candidates are: bool IOexpander::digitalWrite(uint8_t, uint8_t, bool)
sketch_dec12a:45: error: no matching function for call to 'IOexpander::digitalRead(int)'
IOexpander.h:68: note: candidates are: int IOexpander::digitalRead(uint8_t, uint8_t)
sketch_dec12a:47: error: no matching function for call to 'IOexpander::digitalWrite(int, int)'
IOexpander.h:66: note: candidates are: bool IOexpander::digitalWrite(uint8_t, uint8_t, bool)
sketch_dec12a:52: error: no matching function for call to 'IOexpander::digitalWrite(int, int)'
IOexpander.h:66: note: candidates are: bool IOexpander::digitalWrite(uint8_t, uint8_t, bool)

У меня тоже на 1.0.6 Ваш скетч вываливает хуллиард ошибок:

 

MaksMS
Offline
Зарегистрирован: 11.03.2013

Странно конечно, что не работает, я эти mcp23017 мучал больше года назад и статья "Расширяем порты" моя.. Может китайцы уже научились подделывать эти mcp23017 и по этому оно работает не правельно ?? ))

nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

Дело не в поддельных MCP230**. У чела не компилируется. Я через ДРОПБОХ на 3 компах использую Ардуино ИДЕ. (Предварительно установив драйвера на каждый)На одном-ХП, на втором _Семерка х64, на ноуте -Win8.1 .И везде компилируется нормально.ИДЕ на 2-х компах разных версий есть , начиная от 0,22 до последней

MCP230*** не при чем..

Скетч может не работать, но компиляция должна пройти..

ПАМАГУЧКА ,ты библы как в ИДЕ кидаешь?

 

 

MaksMS
Offline
Зарегистрирован: 11.03.2013

Я про это имеею ввиду - там все рабочее должно быть , лично все проверено

Pochemushka
Offline
Зарегистрирован: 12.12.2014

nikolaki пишет:

Дело не в поддельных MCP230**. У чела не компилируется. Я через ДРОПБОХ на 3 компах использую Ардуино ИДЕ. (Предварительно установив драйвера на каждый)На одном-ХП, на втором _Семерка х64, на ноуте -Win8.1 .И везде компилируется нормально.ИДЕ на 2-х компах разных версий есть , начиная от 0,22 до последней

MCP230*** не при чем..

Скетч может не работать, но компиляция должна пройти..

ПАМАГУЧКА ,ты библы как в ИДЕ кидаешь?

Нет нет так: что касается плат mcp23017 - там все компилтся, но виснет на инициализации платы ( после команды mcp.init(адрес) скетч более не выполняется). А ошибки валит при компиляции скетч IOexpander.  У меня два компа на которых  я ардуиню: один  windows 8 - IDE 1.0.6, второй iMAC - IDE 1.0.5  на обоих скетч с mcp виснет, скетч IOexpander валит мешок ошибок. Причем IOexpander - сначала просит WProgram.h, а как только я добавляю автобор WProgram.h или Arduino.h -то тогда уже сыпятся ошибки.

Библиотеки добавляю двумя способами: или через меню в IDE или прямым копированием папки с библиотекой в папку библитеки самого IDE с последующим перезапуском IDE.