1 2 3 4 5 6 7 8 9 10 10/10 10,00оценок: 12

Arduino Mega. Контроллер теплицы. Хроники - 4.0

Тема в разделе "Теплицы и парники", создана пользователем Анкор Плюс, 19.05.18.

Статус темы:
Закрыта.
  1. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Саш, ты можешь сделать ровно следующее: открыть RTCSupport. h и RTCSupport. cpp - и вставить код, который тебе нравится, вместо того, что есть сейчас? Работа с часами по I2C - начинается со строки 60 в заголовочном файле, и со строки 130 - в *.cpp-файле. Там главное - сохранить public-методы, и всё. И тогда можно будет раз и навсегда закрыть вопрос - проблема в коде - или в железе.

    Также, ради интереса - попробуй закомментировать строчки с 207 по 211 включительно:

    Код:
      wireInterface->beginTransmission(DS3231Address);
      wireInterface->write(0); // говорим, что мы собираемся читать с регистра 0
     
      if(wireInterface->endTransmission() != 0) // ошибка
        return t;
    Интересно, что будет?
     
    Последнее редактирование: 14.09.18
  2. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Переделал программу обслуживания DS3231. Переделал грубо, не стал соблюдать совместимость с Мега. Изменил файлы RTCSupport. h, RTCSupport. cpp и добавил HW_ARM_defines.h, HW_ARM.h (настройка I2C для SAM3X8E и обмен информацией по этому протоколу). Пока работает стабильно. Загнать контроллер в зависание не смог. Многократно нажимал сброс, переключал питание. Перегружается и выходит в рабочий режим нормально. Возможно удалось решить эту проблему. Еще одна примета - скорость обмена с конфигуратором на ПК. Если обмен без задержек, значит все нормально. В предыдущем варианте при сбое возникали большие задержки в обмене информацией. Осталась одна фича - иногда в буфере UART остается мусор и тогда при первом включении конфигуратора он может "выскочить" в обмен. В этом случае достаточно перезапустить подключение к порту, обмен будет нормальный. Мне эта фича вообще по барабану, могу и перезапустить подключение к порту.

    Что будем делать дальше?
     
  3. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Выкладывай в аттаче код, который под Due не виснет - гляну, как его вкорячить.
     
  4. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Ok!
     

    Вложения:

  5. tchernyavsky
    Регистрация:
    27.03.16
    Сообщения:
    473
    Благодарности:
    160

    tchernyavsky

    Живу здесь

    tchernyavsky

    Живу здесь

    Регистрация:
    27.03.16
    Сообщения:
    473
    Благодарности:
    160
    Неужели удалось решить проблему? :victory::super:
     
  6. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Вечер и ночь отработал нормально. Реагирует без задержек, поведение адекватное. В состояние зависания так и не смог перевести сбросом или питанием. Раньше это можно было сделать нажимая кнопку сброса несколько раз подряд. Продолжаю тестировать.
     
  7. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    День второй, контроллер "GreenhouseDUE_Base_Maxi" с новой программой для DS3231 работает нормально.
     
  8. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Как выделю время - гляну и отпишусь ;)
     
  9. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Саш, глянул код бегло. Знаешь, в чём проблема? У нас I2C используется много где, не только в часах реального времени. И тот факт, что под Due они висят на втором I2C - не отменяет того факта, что настройками их можно повесить на первый I2C. Вижу, что в коде инициализация I2C вынесена в класс часов, что есть неправильно, т. к. инициализировать надо один раз и централизованно. Далее - специфичный код работы с I2C тоже прямо внутри класса.

    Что с этим пока делать - неясно, т. к. нет уверенности, что не сломаются другие датчики на I2C, если всё посадить на одну шину. Именно для этого используется посредник в виде класса TwoWire, который предоставляет централизованный доступ к работе с шиной. Ясно, что с ним что-то не так, хотя его имплементация есть под Due, и, подозреваю, что там происходит нечто похожее по инициализации.

    Короче, я пока в непонятках: данный код, конечно, можно тупо вставить, чтобы он компилировался только под Due, но вопрос - не сломает ли это всё остальное на I2C? А этот вопрос, я считаю, принципиален.

    Попробуй посадить часы на первую I2C и посмотри - как оно с другими датчиками на I2C живёт. Ну а там дальше уже посмотрим, по факту. Пока - я поостерегусь сходу наскоком менять.
     
  10. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    В этой версии контроллера немного изменена концепция работы с периферией. В данной версии часы (DS3231) подключены непосредственно к SCL1, SDA1. В предыдущей версии обнаружилась следующая проблема. В связи с тем что в DUE применяется 3 вольтовая логика, пришлось переделывать под эту логику и периферию (блоки реле и. т. д). Поэтому в предыдущей версии блоки периферии без переделки подключать запрещено.

    В новом контроллере я на шину SDA0, SCL0 поставил буфер с преобразователем уровней с 3,3 на 5 вольт. Теперь вся периферия (MCP23017, 74HC595) стала пятивольтовой и подключаемые устройства не требуют переделки.

    На данный момент (тестируется) к шине SDA0, SCL0 подключены все MCP23017, датчик засветки BH1750.
    Все эти устройства работают штатно, реле включаются/выключаются, датчик засветки измеряет уровень освещения.
    Нарушений в работе не обнаружено, все работает очень стабильно. Не замечено ни одного сбоя.
    Боюсь сглазить. Информация по конфигуратору ПК "летает". На СМС контроллер отвечает мгновенно, Пинг в интернете отвечает. Я доволен, потому что применение встроенных часов в микроконтроллере предыдущей версии не очень комфортное в плане сброса. Проблему сброса описывал ранее.
    Уже двое суток контроллер работает очень стабильно.
     
  11. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Саш, я это понял. Моё возражение связано только с тем, что: что будет, если часы временно повесить на SCL, SDA - и применить твой код для часов? Прошивка, не забывай - настраиваемая, и привязываться к конкретной плате - не гуд, как понимаешь. Поэтому код работы с часами - должен, как минимум, не ломать работу других устройств на I2C. Ты можешь это проверить?

    В принципе, в коде там есть инициализация I2C, специфичная для Due - и вместо Wire. begin - можно использовать данный код, да и вообще отказаться от Wire для всех устройств на I2C, когда компилируется под Due, вместо этого сделав свой класс-посредник. Но для начала - неплохо было бы проверить следующую вводную: что будет с другими устройствами на I2C, если часы перевесить на первую I2C, и применить твой код. Если не затруднит - проверь, пж, а дальше - я уже посмотрю, как это дело обобщить.
     
  12. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Ок! Вечером проверю. Вообще, периферия АРМ требует специальной настройки и настройки для AVR для них не подходят. Я с этим столкнулся, работая с STM32. Это связано с требованиями параметров энергосбережения микроконтроллеров АРМ. Даже что бы работать просто с pin на вывод, необходимо подключить его, задать тактирующую частоту и еще пару настроек (сейчас уже не помню). А учитывая еще и взаимозаменяемость многих выводов, к настройкам нужно относиться тщательно.
    Возможно у нас возникала коллизия, кстати и с UART. Это отражалось на скорости обмена с конфигуратором.
     
  13. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Переключил часы на SDA0, SCL0. Контроллер по прежнему работает стабильно. Все устройства I2C работают штатно. Сбоев и зависаний не обнаружено. Обмен с конфигуратором на ПК по прежнему быстрое.
    Замечаний нет. Продолжаю тестировать.
     
  14. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Дима, есть предложение. Неплохо бы добавить к экрану показаний всех датчиков и измерение уровня сигнала GSM. Команда там простая, проблем не должно быть. Заколебался я уже ловить станцию оператора. Не знаю почему так. Вокруг обставлено вышками, а сигнал сильно плавает. Да и у других пользователей может есть такие проблемы. У нас вообще прикол, я живу недалеко от аэропорта Шереметьево (примерно 30 км.), как только самолет рядом пролетает сигнал падает до нуля. Что они там в самолете включают фиг знает, летит вроде высоко а такая реакция. Вот и гадаю, то ли контроллер барахлит, то ли самолет летит или туман лежит, капельками сигнал глушит. Красиво сказал как стихи сочинил. :)
     
  15. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    С этим попозжее чего-нибудь решим, сейчас надо часы допилить и отдать тебе на тестирование поправленную версию. Думаю пока, как обобщить первоначальную настройку I2C, поскольку, как выяснилось, другие датчики на I2C, использующие Wire - работают нормально. Буду смотреть, по результатам - отпишусь. Попробую на своей отладочной плате, конечно, но окончательная проверка - за тобой.
     
Статус темы:
Закрыта.