mcp23017 + mega

Migele
Offline
Зарегистрирован: 25.04.2022

проблему имею.

не могу никак подключить кнопку через mcp 

#include <Wire.h>
#include "Adafruit_MCP23017.h"
Adafruit_MCP23017 mcp;
Adafruit_MCP23017 mcp2;
  
void setup() {  
    Wire.begin();
    Serial.begin(9600);
    
    Serial.println("");
    Serial.println("Scanning...");
    byte error, address, address2;
    byte addr = 0;
    int 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(" !");
            addr = address;
            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");
    mcp.begin(0x22);      // use default address 0
    
    mcp.pinMode(8, INPUT);
    mcp.pullUp(8, LOW);  // turn on a 100K pullup internally
    //mcp.digitalWrite(8, HIGH);
    pinMode(13, OUTPUT);  // use the p13 LED as debugging
    pinMode(11, INPUT_PULLUP);
    mcp2.begin(0x24);
    mcp2.pinMode(5, OUTPUT);
    mcp2.digitalWrite(5, HIGH);
}
void loop() {
  // The LED will 'echo' the button
    digitalWrite(13, !mcp.digitalRead(8));
  /*if (!mcp.digitalRead(8))
  {
    Serial.println("pressed");
    delay(250);
  }*/
  if (!digitalRead(11))
  {
    Serial.println("pressed2");
    delay(250);
  }
}

всякие опыты ставил.

кнопка на ардуинке работает. через MCP - никак. и напряжения на вывод не могу сделать.

подключение MCP

SDA SCL - с меги + резисторы 10к к "+"

питание по схеме, 4,85 вольта идет + вывод питание на ногу ресет

адреса выставляю + и - на ноги а0-а2

 

 

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

В 47 строке HIGH вместо LOW

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Где вы взяли эту библиотеку ? Может надо скачать самую свежую ?

https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library/blob/master/examples/mcp23xxx_button/mcp23xxx_button.ino

Migele
Offline
Зарегистрирован: 25.04.2022

BOOM пишет:

В 47 строке HIGH вместо LOW

по всякому пробовал

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

Значит пробуй другую библиотеку (как советовали выше): https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library

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

Migele пишет:

по всякому пробовал

теперь попробуй подумать...

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Даже страшно...
Что там такое на этой Меге собрано, что не хватает портов ???

Migele
Offline
Зарегистрирован: 25.04.2022

эта библиотека заработала. но. если питать плату от стороннего бп и подключится к порту по юсб - то не работает.

при запуске пишет про 2-3 нажатия кнопки, и перестает реагировать.

#include <Adafruit_MCP23X17.h>

#define BUTTON_PIN 8  // MCP23XXX pin button is attached to

// only used for SPI
//#define CS_PIN 6

// uncomment appropriate line
//Adafruit_MCP23X08 mcp;
Adafruit_MCP23X17 mcp;

void setup() {
  Serial.begin(9600);
  //while (!Serial);
  Serial.println("MCP23xxx Button Test!");

  // uncomment appropriate mcp.begin
  if (!mcp.begin_I2C(0x22)) {
  //if (!mcp.begin_SPI(CS_PIN)) {
    Serial.println("Error.");
    while (1);
  }

  // configure pin for input with pull up
  mcp.pinMode(BUTTON_PIN, INPUT_PULLUP);

  Serial.println("Looping...");
}

void loop() {
  // LOW = pressed, HIGH = not pressed
  if (!mcp.digitalRead(BUTTON_PIN)) {
    Serial.println("Button Pressed!");
    delay(250);
  }
}

 

Migele
Offline
Зарегистрирован: 25.04.2022

Kakmyc пишет:
Даже страшно... Что там такое на этой Меге собрано, что не хватает портов ???

очень страшно...

2 LCD на I2C + 3 MCP23017

3 дисплея SPI

порядка 20 датчиков температуры, штук 20 светодиодов

кнопки....

3 датчика расстояния

Migele
Offline
Зарегистрирован: 25.04.2022

b707 пишет:

Migele пишет:

по всякому пробовал

теперь попробуй подумать...

как и чем?

Migele
Offline
Зарегистрирован: 25.04.2022

Komandir пишет:

Где вы взяли эту библиотеку ? Может надо скачать самую свежую ?

https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library/blob/master/examples/mcp23xxx_button/mcp23xxx_button.ino

вчера пробовал с ней.

не пошло из-за проблем при подключении БП

и сейчас то же самое

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Migele пишет:

Kakmyc пишет:
Даже страшно... Что там такое на этой Меге собрано, что не хватает портов ???

очень страшно...

2 LCD на I2C + 3 MCP23017

3 дисплея SPI

порядка 20 датчиков температуры, штук 20 светодиодов

кнопки....

3 датчика расстояния

Все это на мегу влезет без MCP23017.
5-6пинов на светодиоды, один пин на датчики температуры (18b20), на кнопки 4-5 пинов(в зависимости от количества), 2пина дисплеи i2c, 7 пинов на дисплеи spi, 4 пина на датчики расстояния.

Может где то ошибся, но не на много.
70 пинов Меги хватит с запасом.

Migele
Offline
Зарегистрирован: 25.04.2022

Komandir пишет:

Где вы взяли эту библиотеку ? Может надо скачать самую свежую ?

https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library/blob/master/examples/mcp23xxx_button/mcp23xxx_button.ino

итого, без блока питания отдельного - всё чётко, при  питании расширителей и меги от БП + подключение к порту по ЮСБ, сразу идет так. тут не знаю, что предположить.

и на кнопке нет напряжения при этом.

12:11:57.857 -> MCP23xxx Button Test!
12:11:57.903 -> Looping...
12:11:58.273 -> Button Pressed!
12:11:58.549 -> Button Pressed!
12:11:58.780 -> Button Pressed!
12:11:59.010 -> Button Pressed!
12:11:59.287 -> Button Pressed!
12:11:59.517 -> Button Pressed!
12:11:59.795 -> Button Pressed!
 
Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

То есть код виноват в том что БП сделан из говна ???

Migele
Offline
Зарегистрирован: 25.04.2022

Komandir пишет:

То есть код виноват в том что БП сделан из говна ???

попробуй раскрыть свою гениальную гипотезу

Migele
Offline
Зарегистрирован: 25.04.2022

Kakmyc пишет:
Migele пишет:

Kakmyc пишет:
Даже страшно... Что там такое на этой Меге собрано, что не хватает портов ???

очень страшно...

2 LCD на I2C + 3 MCP23017

3 дисплея SPI

порядка 20 датчиков температуры, штук 20 светодиодов

кнопки....

3 датчика расстояния

Все это на мегу влезет без MCP23017. 5-6пинов на светодиоды, один пин на датчики температуры (18b20), на кнопки 4-5 пинов(в зависимости от количества), 2пина дисплеи i2c, 7 пинов на дисплеи spi, 4 пина на датчики расстояния. Может где то ошибся, но не на много. 70 пинов Меги хватит с запасом.

датчики температуры - термопары MAX6675

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Тем более.
Они ж по SPI подключаются.

Migele
Offline
Зарегистрирован: 25.04.2022

Kakmyc пишет:
Тем более. Они ж по SPI подключаются.

точно. спасибо за подсказку. а то я на каждый по 3 провода выделял. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Вот. А дебил почему-то - я, с твоей точки зрения. 

Migele
Offline
Зарегистрирован: 25.04.2022

DetSimen пишет:

Вот. А дебил почему-то - я, с твоей точки зрения. 

видимо, буквы одни видим, а читаем по разному. бывает.

однако, мои реверансы, исключительно, в ответ.

 

Migele
Offline
Зарегистрирован: 25.04.2022

одни только термопары кушают 1А. а еще есть куча потребителей. Нужен доп БП

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

Migele пишет:

одни только термопары кушают 1А

каждая? :)

Migele
Offline
Зарегистрирован: 25.04.2022

b707 пишет:

Migele пишет:

одни только термопары кушают 1А

каждая? :)

как с русской грамматикой? Хуже, чем с Ардуиной?

"одни только термопары кушают 1А"

"одни только термопары кушают ПО 1А"

разница есть в буквах? )))

kalapanga
Offline
Зарегистрирован: 23.10.2016

Migele пишет:

одни только термопары кушают 1А. а еще есть куча потребителей. Нужен доп БП

Это что же за термопары такие, кушающие 1А? MAX6675 максимум 1,5 мА потребляет.

Migele
Offline
Зарегистрирован: 25.04.2022

kalapanga пишет:

Migele пишет:

одни только термопары кушают 1А. а еще есть куча потребителей. Нужен доп БП

Это что же за термопары такие, кушающие 1А? MAX6675 максимум 1,5 мА потребляет.

50mA

https://www.chipdip.ru/product/max6675-k-module-for-thermocouple

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

Migele пишет:

b707 пишет:

Migele пишет:

по всякому пробовал

теперь попробуй подумать...

как и чем?

Очевидно тем, что сильно тупит и «как» уже тут чисто пофилософствовать.