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

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

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

Статус темы:
Закрыта.
  1. Shelllonn
    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300

    Shelllonn

    Живу здесь

    Shelllonn

    Живу здесь

    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300
    @andy117, да
     
  2. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Обновил прошивку, добавил возможность для модуля таймеров (который на 4 канала) рулить не только пинами напрямую, но и через микросхемы MCP* - см. настройку TIMERS_DRIVE_MODE в файлах конфигурации.

    Т. е. в зависимости от способа руления пинами в конфигураторе/вебморде/пр. можно указывать не только номера пинов, но и номера каналов микросхемы, через которую таймер работает.

    Сделал по запросу англоязычного товарища по имени Мэл, по факту оказалось, что Александр @promavto тоже хотел об этом попросить - короче, добавлено.

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

    promavto

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

    promavto

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

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Да, больше и не нужно. А другие настройки на модули расширения пинов настроить можно?
    Сейчас не помню, что то то хотел пару раз настроить, но не получилось. Может сделать универсальный модуль расширения пинов типа 100 - 200 сотый пин. Так, мысль еще не оформилась. Пока забей на эту информацию.
     
  4. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

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

    promavto

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

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Интересно, как иностранцы переводят такие слова? :faq:
     
  5. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    В прошивке уже есть концепция виртуальных пинов: все пины после 80 - виртуальные. Можно влёгкую привязывать универсальный исполнительный модуль к таким пинам, например, а в правилах устанавливать состояние таких пинов. По результату - на контроллере ни один физический пин занят не будет, а универсальный исполнительный модуль будет реагировать на любую смену состояния таких виртуальных пинов. При этом можно такие пины рулить командами CTSET=PIN|100|ON, CTSET=PIN|102|OFF и т. п. - т. е. сохраняется универсальность.

    Короче, виртуальные пины есть, сохраняются во внутренней карте контроллера. До 80 - физические, 80-128 - виртуальные, за глаза.
     
  6. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Долго и мучаясь :)]:aga: А кому щас легко? Вот, Мэлу приходится в русских комментариях к прошивке разбираться - ничего, вроде получается. Отписал сегодня, поблагодарил за модуль таймеров, заодно спросил - чегой-то универсальный модуль с датчиками не регистрируется, если прошивка модуля закачана на Mega? А я и не пробовал на Mega - нахрен такой оверхэд?
     
  7. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Кстати за виртуальные пины: обновил прошивку, добавил возможность из правил следить за всеми пинами, не только физическими: т. е. указывать можно номера вплоть до 127 (нумерация с нуля). И если кто-то где-то установит пин 100, например, в HIGH, а правило следит за этим пином - правило сработает.

    В общем, ввёл шлюз для чтения с пинов, и где надо - заменил digitalRead на вызов шлюза: в правилах и ещё паре мест. Шлюз работает просто: если номер пина меньше, чем настройка VIRTUAL_PIN_START_NUMBER - то читается напрямую из пина (digitalRead). Если это виртуальный пин - читаем из карты состояний:
    Код:
      if(pin < VIRTUAL_PIN_START_NUMBER)
        return digitalRead(pin);
    
      uint8_t byte_num = pin/8;
      uint8_t bit_num = pin%8;
    
      if(byte_num > 15) // не помещаемся
        return LOW;
    
      return (State.PinsState[byte_num] & (1 << bit_num)) ? HIGH : LOW;
    Всё просто, короче. Зато теперь чуть больше функциональности, например, можно чего-то делать по MQTT, не трогая физический пин контроллера: например, привязать пин №105 к правилу "следим за этим пином, если на нём высокий, то открыть окна" - и получаем следующую колбасу: отправили по MQTT команду Teplica/SET/PIN/105/ON - окна открылись :)

    Что только нельзя вытворить с прошивкой - того нельзя, этого нельзя :)]:aga:

    З. Ы. Да, на железе пока не проверял. Если что-то где-то пойдёт не так (всё-таки не в одном месте поменял) - маякуйте ;)
     
  8. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

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

    promavto

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

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Не совсем понял как применять пины на микросхемах расширения MCP23017. Где то должна быть привязка виртуальных (81-127) пинов к MCP23917. Или не так понял применение виртуальных пинов? А если применяют 2 микросхемы MCP23017?
     
    Последнее редактирование: 02.06.18
  9. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    А при чём тут MCP? Я где-то говорил, что виртуальные пины как-то привязаны к MCP? Это просто виртуальные пины, на то они и виртуальные, что ни к чему не привязаны. Определение определяет функционал: виртуальный - не привязанный к железу. Переделывать данное поведение - не намерен, виртуальные пины успешно выполняют ровно то, для чего предназначены - это карта состояний, не трогающая физические пины контроллера, но которую (карту состояний пинов контроллера, включая виртуальные пины) можно менять и передавать на универсальные модули, юзкейс я демонстрировал выше, на примере команды PIN и правил. Других применений - масса, и всё зависит от хотелок конкретного пользователя, например: одно правило может писать высокий уровень в виртуальный пин (физически ничего не меняется в железе), другое - читать этот уровень и писать во второй виртуальный пин (читать - не с ноги МК, а из памяти), при этом один исполнительный модуль может реагировать на состояние первого виртуального пина, а второй исполнительный модуль - на состояние второго пина. Что из этого можно сделать? Да что угодно, хоть цветомузыку, тут главное - что никакие физические ноги контроллера не задействуются, однако - реализуется нужное поведение, именно потому, что пины виртуальные ;)

    Другого расширения пинов - не будет, их достаточно на Mega и Due. Если надо как-то расширить кол-во пинов - выбрасываем TFT-экран - и радуемся. Или - заводим кучу пинов TFT-экрана через те же MCP (корёжа библиотеку UTFT, ессно) - и радуемся опять. Пинов - хватает, носиться как угорелый с этими MCP я не намерен - это не контроллер установки термоядерного синтеза, это тривиальный контроллер теплицы, и не надо туда впихивать невпихуемое - уже и так достаточно, кмк.

    Или ты о другом? Тебе надо тысячу пинов, и чтобы все они рулились по железу? Тогда лучше модуль отдельный завести, который будет рулить твоими MCP - хоть пачками ;) Ннннада? Щас напишу, надо от бетона отвлечься :)
     
    Последнее редактирование: 02.06.18
  10. Tehnik53
    Регистрация:
    22.08.15
    Сообщения:
    142
    Благодарности:
    23

    Tehnik53

    Живу здесь

    Tehnik53

    Живу здесь

    Регистрация:
    22.08.15
    Сообщения:
    142
    Благодарности:
    23
    @DIYMan ветке к 5-6 уже будет полноценный контроллер термоядерного синтеза) есть небольшое предложение по поводу ведения тем форума. Может быть создать отдельную тему в которую потихоньку добавлять значимые сообщения? Такие как обновления в прошивке, схемы плат контроллера, дополнительных плат (ватчдога и т. д.) даже на данном этапе очень сложно найти нужную информацию в 4 темах.
     
  11. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

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

    Где вот только товарищ тот - найти бы его... :)
     
  12. Tehnik53
    Регистрация:
    22.08.15
    Сообщения:
    142
    Благодарности:
    23

    Tehnik53

    Живу здесь

    Tehnik53

    Живу здесь

    Регистрация:
    22.08.15
    Сообщения:
    142
    Благодарности:
    23
    Я до сих пор не начал, обещанное мной неделю-две назад делать) времени категорически нехватает)
     
  13. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

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

    Код:
    // раскомментировать, если надо управлять микросхемами MCP* с внешних команд (CTGET и CTSET, а также через MQTT командами GET и SET)
    #define USE_MCP_MODULE
    
    // SET:
    //    CTSET=MCP|SPI|MODE|mcpNumber|mcpChannel|pinMode, for example  CTSET=MCP|SPI|MODE|0|7|OUT, CTSET=MCP|SPI|MODE|1|2|IN
    //    CTSET=MCP|SPI|WRITE|mcpNumber|mcpChannel|level, for example  CTSET=MCP|SPI|WRITE|2|10|ON, CTSET=MCP|SPI|WRITE|0|4|OFF
    //    CTSET=MCP|I2C|MODE|mcpNumber|mcpChannel|pinMode, for example  CTSET=MCP|I2C|MODE|0|7|OUT, CTSET=MCP|I2C|MODE|1|2|IN
    //    CTSET=MCP|I2C|WRITE|mcpNumber|mcpChannel|level, for example  CTSET=MCP|I2C|WRITE|2|10|ON, CTSET=MCP|I2C|WRITE|0|4|OFF
    
    // GET:
    //    CTGET=MCP|SPI|mcpNumber|mcpChannel
    //    CTGET=MCP|I2C|mcpNumber|mcpChannel
    Как видно, можно рулить любым каналом любой микросхемы - на SPI она сидит или на I2C. Режимов работы каналов - поддерживается два: на вход (IN) и на выход (OUT). Не стал делать автоматический перевод в режим OUT при записи в канал - это надо делать ручками, отдельной командой.

    Что имеем: скормив контроллеру понятную ему команду (или через UART, или через тот же MQTT) - получим руление каналами MCP, если вдруг оно кому надо. В будущем, если пойму, что это дело нужное - можно будет и в правила добавить поддержку этой команды, и ещё куда, где будет нужно.

    Если кто забыл, напоминаю: механизм команд используется и внутри прошивки, т. е. любой модуль может попросить контроллер выполнить команду, например CTSET=MCP|SPI|WRITE|2|10|ON - и на третьей микрухе MCP на шине SPI в канале номер 10 установится высокий уровень. Это я к тому, что стороннему модулю пофик, как там и что устроено в конкретном модуле - он просто выдаёт команду, и всё. Т. е. если сейчас нет чёткого понимания, зачем нужен модуль руления MCP, то в дальнейшем, возможно, он понадобится для руления каналами MCP с каких-нибудь других модулей ;)

    Ну а пока, кому не надо - просто оставляем настройку USE_MCP_MODULE закомментированной, и всё ;)
     
  14. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    А кому щас легко? :) Я вон - бетон помесил, ручонки оттянул - и вперёд, программировать реактор термояда :)]:aga:
     
  15. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

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

    promavto

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

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Клавиатуру почаще промывай водой, иначе бетон на клавишах застынет. Иначе потом будешь долбить перфоратором - такая белиберда будет в программе:)]
     
Статус темы:
Закрыта.