Зависание I2C Ардуино

Тема в разделе "Arduino & Shields", создана пользователем arduin, 11 май 2017.

  1. arduin

    arduin Нерд

    добрый день.
    Зависает Ардуино loop serial.

    При этом не важно что подключаю через I2C.
    Пробовал модуль часов, если питания нет то висит..

    подключение идет через пины
    SCL A5
    SDA A4


    при нажатии reset setup срабатывает.

    Сейчас хочу подключить плату как на картинке.
    Как подключить I2C чтоб он не зависал в случае обрыва питания.
    Получается как бы замыкание на A4 A5
     

    Вложения:

    • $_1[1].JPG
      $_1[1].JPG
      Размер файла:
      23,5 КБ
      Просмотров:
      863
  2. mcureenab

    mcureenab Гуру

    В строке 45 смотрите.
     
  3. arduin

    arduin Нерд

    Можно подробнее. Смотреть в библиотеках или скетче?
    Просто скетч ничего нет.

    #include <Wire.h>
    #include "RTClib.h"
     
  4. mcureenab

    mcureenab Гуру

    Не вы первый с модулем RTC бодаетесь.
    Что в вашей тайной системе зависает, можно только гадать.
    У меня
    Код (C++):
    #include <Wire.h>
    #include "RTClib.h"
    даже не компилируется.
     
  5. DetSimen

    DetSimen Guest

    Эх, не взял я сёдня свой хрустальный шар на работу :(
     
  6. arduin

    arduin Нерд

    Проблема не в RTC

    I2C Работает нормально, сейчас подключил к нему часы и барометр, оба работают.

    Проблема в зависании, при отключении питания.
    Тоесть либо VCC Либо GND отключаем и виснет сразу же цикл.

    Сегодня проверю на другом скетче, может виснет по другой причине.
     
  7. mcureenab

    mcureenab Гуру

    От чего отключаем? От RTC модуля? Ну так и есть. Когда I2C устройство не работает нормально протокол зависает.
     
  8. arduin

    arduin Нерд


    При проверке тестового скетча TFT LCD не зависает.

    Видимо какой то конфликт происходит, в этом протоколе у меня.
     
  9. mcureenab

    mcureenab Гуру

    Собрал часы RTC.
    Выставил время и залил скетч из урока по RTC:
    Код (C++):
    #include <Wire.h>

    #include <TroykaRTC.h>


    // размер массива для времени с учётом завершающего нуля
    #define LEN_TIME 12
    // размер массива для даты с учётом завершающего нуля
    #define LEN_DATE 12
    // размер массива для дня недели с учётом завершающего нуля
    #define LEN_DOW 12
    // создаём объект для работы с часами реального времени
    RTC clock;
    void setup() {
      // put your setup code here, to run once:
    Serial.begin(9600);
      // инициализация часов
      clock.begin();
      // метод установки времени и даты в модуль вручную
      // clock.set(10,25,45,27,07,2005,THURSDAY);
      // метод установки времени и даты автоматически при компиляции
    //  clock.set(__TIMESTAMP__);
    }

    void loop() {
      // put your main code here, to run repeatedly:
      // массив для хранения текущего времени
      char time[LEN_TIME]={0};
      // массив для хранения текущей даты
      char date[LEN_DATE]={0};
      // массив для хранения текущего дня недели
      char dow[LEN_DOW]={0};
      // запрашиваем данные с часов
      clock.read();
      // сохраняем текущее время в массив time
      clock.getTimeStr(time);
      // сохраняем текущую дату в массив date
      clock.getDateStr(date);
      // сохраняем текущий день недели в массив dow
      clock.getWeekDayStr(dow);
      // выводим в serial порт текущее время, дату и день недели
      Serial.print(time);
      Serial.print("--");
      Serial.print(date);
      Serial.print("--");
      Serial.println(dow);
      // ждём одну секунду
      delay(1000);
    }

    Когда отключаю батарейку и + резервного питания повисает в воздухе скетч выдает хлам, хотя часы продолжают считать время и после подключения батарейки на место работа восстанавливается: