РЕКЛАМА НА ФОРУМХАУС Показываю то, что использую в проектах, а точнее честно скачанную стандартную библиотеку для STM32F1XX. Она доступна бесплатно с сайта ST, или на Github.Там в разделе common есть интересующая нас библиотека stm32_eval_i2c_ee.h. Как видно из дефайнов она поддерживает все 24-ки от 01 до 64. Больше нет. Может научите, как туда парой строк добавить поддержку 24С256? Или свою прогу привести как пример. С удовольствием посмотрю.
О, вот вам практический опыт, как раз в тему: - отключается электричество (разумеется, я этого ожидал), запускается генератор, иииии... И ничего. Потому что в генераторе внутри есть маленькая коробочка - AVR, регулятор напряжения, а в нем есть транзистор, и этот транзистор сказал, что с него хватит. И вот у меня есть гудящий генератор, но нет электроэнергии, потому что он сломан. А купить эту штучку можно только под заказ, с доставкой в несколько недель. И просто починить нельзя - залито компаундом под горлышко. Но у меня, о чудо, как раз и есть "десяток аккумуляторов и зарядных устройств" (на самом деле два аккума, четыре зарядника и два инвертора) - поэтому я выругался на долбозавров, делающих неремонтопригодные вещи, и сел за комп заказывать аналог-неоригинал с Алибабы. Сейчас генератор уже восстановлен, но он - не единственный источник энергии в доме, и несколько часов как-нибудь переживу. В конце концов, если очень будет надо - можно подзарядить от генератора автомобиля, а там, глядишь, и магазины с генераторами откроются. Это из жизненного опыта и практики
@negator, вот примерно к такому я и пришел в итоге: - есть "абсолютные автоматы" - грубо говоря, термодатчик на котле, который не даст ему взорваться. Такое не должно управляться вообще, кроме как вручную физически выставить порог срабатывания. Типа - безусловный рефлекс. - есть "управляемые автоматы" - например, тот же терморегулятор с возможностью задания порога как вручную, если хочется, так и с управляющего сервера. Это локальный контроллер, отвечающий за работу железок вот-тут-рядом. Достаточно автоматический, чтобы работать автономно, но управляемый. Условные рефлексы, так сказать. - и есть центральный компьютер, с помощью которого можно управлять. Включить, выключить, установить новые пороги. Это мозг системы. Если вылетел мозг - ну, ум потеряется, но местная автоматика работать будет. Если вылетел где-то локальный контроллер - значит, там все будет вручную управляться, как будто ничего и не было, а в остальных местах все будет ОК. Если вылетело само оборудование - ну тут извините, не работает, надо чинить-менять конкретный сломанный прибор. На роль локальных контроллеров ардуины прекрасно подходят. Осталось решить вопросы с обменом данными - там есть ряд нюансов. Вот например, все идет к отказу от сети 1-wire - она медленная и тормозит все. Можно с ней работать с компьютера, где нет проблем с параллельными процессами, а вот с контроллеров работать неудобно, хотя технически можно. Но вендоры пишут, что у них есть аппаратные мастера сети - хочу заказать посмотреть возможности...
1-wire не поддерживает длинные линии связи, на мой взгляд это сразу должно насторожить. Если на каком то этапе Вы сможете обойтись 1-wire, то при дальнейшем наращивании системы придётся применять что то другое и в корне изменять весь проект. Из доступных для радиолюбителя в России проводных интерфейсов связи, всё таки это RS485. У буржуев много радиолюбительских проектов на европейской шине. В своё время я отслеживал их проекты KNX на ардуино, нашёл несколько разных библиотек KNX, всё упирается в шилд KNX TP uart. В принципе находил у китайцев самые дешёвые KNX шилды примерно по 600р, но отказался от этой затеи в пользу RS485. Дорогие KNX шилды, дорогой провод, дорогие источники питания, не для моих доходов. Сам обслуживаю системы АСДУ, там подход мне кажется очень разумный - вся автоматика делается на локальных контроллерах, а диспетчеризация данных данных поверх них на более высоком уровне, с помощью интерфейсных карт или где тет возможности их установить, применяются дополнительные контроллеры. При таком подходе получается очень устойчивая система, выход из строя любого контроллера ни как не влияет на работу всей системы. Вот по такому пути я и пошёл для своей системы.
Опять же, отнюдь не агитируя за 1-wire, неужто для дома мало 200 м с простым пуллап резистором или 500 м с более сложной подтяжкой?
Ну сначала взял бухту 600м, потом ещё докупал, делать драйвер на россыпухе конечно в качестве эксперимента интересно, но зачем, если MAX485 выйдет дешевле, займёт меньшие габариты (актуально когда контроллер в подрозетнике) и организует стандартную сеть для автоматизации. Хотя не настаиваю у всех свои предпочтения.
Тут не в этом дело. С одной стороны - 1-wire достаточно просто эмулируется на программном уровне, т. е. получается очень удобно - воткнул очередной ds1820 - и вот тебе еще одна точка измерения температуры. Но - сам процесс измерения занимает ощутимое время. Если отправка команды - то быстрее, только адрес набрать, но если опрос сети - то уже задержка. Протокол подразумевает эти задержки, он на них построен. Немного, но ощутимо на уровне легкого подтормаживания. А при попытке работы с таким контроллером через modbus возникают ситуации, когда запрос вообще не может быть обработан, т. к. по спецификации он должен ответить в заданное время, а он в это время выставляет задержки в 1-wire линии и занят, вместо того чтобы отвечать. Возможный выход - использование аппаратного мастера сети, отдельной микросхемы (усложнение), или отказ от самой технологии в данном случае. Первоначальная идея была в том чтобы использовать 1-wire в локальных контроллерах, как раз в силу простоты реализации и удобства. Но по всему выходит, что либо часть времени контроллер будет тратить на обслуживание сети, либо надо в каждый присобачивать этот самый аппаратный контроллер, а тогда где дешевизна, простота и удобство? С компьютером оно работает без проблем, так как там отдельный процесс на это запускается, а городить на микроконтроллере с 2к памяти многозадачную RTOS - это как-то сложно. Значит, это просто не то место, где надо ее применять.
Этот вопрос решается. Надо вывести опрос датчиков за цикл опроса модбаса, и вместо жестких delay (1000) использовать таймер - millis(). Тогда не надо использовать доп контроллер.
А не надо её использовать для для того, для чего она не предназначена - “Всё должно быть адекватно - Зад соответствовать штанам!(с) “Султан Брунея” Т. Шаов Для датчиков температуры/далласовских ключей и небыстрого включения распределённых нагрузок типа прожекторного освещения территории – самое то, и да - а кто Вас заставляет заниматься онанизмом/эмулировать 1-ware на языке высокого уровня – ассемблер, нее? И да, там основное время – преобразование – запускайте одновременно, хотя нахрена Вам измерять температуру быстрее, чем раз в минуту? .
Кооперативная на ассемблере всего пару сотен байт возьмет, на С - меньше килобайта. Я в Ардуинках использую сплошь и рядом.
Плохо смотрели...на КНХсе такие логические операции детский сад...в том числе можно и на малине всю логику настроить чтобы сьэкономить на различных навороченных вебсерверах итд...
Ну вообще- то такие вещи обычно решаются профилактическим обслуживанием. В данном случае если бы вы запускали генератор хотя бы раз в полгода, чтобы проверить его исправность, то на 99% избавились бы от таких сюрпризов. А так, конечно, можно из практики привести много примеров, только статистики из них, как и в случае с STM32F103 не построишь.
По поводу 1-wire, кстати: В Сodesys для Raspberry PI есть поддержка и его и Modbus TCP/RTU и Вебсервера и прочих блекджеков с шлю... фич. И так, как там рантайм сделан не ардуинщиками, а серьезными пацанами из промышленной автоматизации, ничего не тормозит и работает почти в реалтайме с 400мкс джиттером.
Ну держите еще пример: сегодня примерно в 12 часов отключилась электроэнергия. У все того же моего любимого генератора по случаю мороза сломался запуск, отломилась маленькая пластиковая деталюшка. Шах и мат, сэр! (мат был, и много...) Профилактика - штука хорошая. Вы можете сделать график проверочных пусков, и проводить их хоть каждую неделю - тогда нарастающая неисправность будет видна (винты развинтились, болты разболтались). А вот такое, типа сгоревшего транзистора или отломившейся шпильки, происходит внезапно. Вы не сможете это диагностировать заранее. Да, кстати, электроэнергии еще нет. На улице -9, представляю, что может произойти у тех, у кого поотключались септики, циркуляционные насосы и подогрев ввода воды. У нас тут такое часто, куда чаще чем раз в полгода... А в тему "умного дома" - надо добавить сигнализацию и на такой отказ: света нет, генератор не сработал, аларм! Кстати, Распберри как раз подходит на роль "мозга", по крайней мере предварительно. Но не подходит на то, чтобы "в каждой комнате", и уж точно не для того, чтобы управлять всем единолично. А вдруг и в нем "транзистор" сгорит?