Платформа для управления умным домом на базе чипа NRF24L01+

mihart
Offline
Зарегистрирован: 14.05.2013

Нет, я в Новосибирске. Уже хотел в Devicter.ru купить, чтобы быстрее, но у них каникулы до пятницы следующей.

У меня знакомый в Москве может забрать, но отправить сможет только в среду, а с пересылкой опять пятница получится.

Спасибо за предложение, но быстрее не получится.

Поизучаю пока keil, попробую писать isp под nrf24le1, посмотрю как пойдет.

axill
Offline
Зарегистрирован: 05.09.2011

Ясно. Для нашей почты расстояние до Новосибирска почти как до китая) три недели с вашейтоможни ушли мкшки и до сих пор до Москвы не доехали

ты когда про код ISP размером 4.8кб писал имел в виду програматор через ISP?

Ардуиновский загрузчик через uart то совсем не большой

прошелся по интернету - проектов на nrf2le1 не нашел хотя странно, решение интересное

пларирую в ближайшее время собрать блок питария на чипе lnk306, уже все есть. Это импульсный бестрансформаторный источник с током до 300ма. Безтрансфарматорный конечно звучит опасно, но на отладенных устройствах, куда лезть не нужно - не проблема. Зато компактнее сложно представить - десяток деталей, из громоздких только два дросселя, высоковольные конденсаторы и 2вт резистор.

кстати в большей части моих выключателей zwave блок питания именно такой

mihart
Offline
Зарегистрирован: 14.05.2013

Учитывая, что у меня одно время в розетке такое жило: http://easyelectronics.ru/kondensatornoe-pitanie.html, меня это не пугает. Ставить батарейку, когда 220 под рукой глупо.

Меня смущает, что может понадобиться лишний провод в выключатель ламп. Ведь если lnk306 дает 300ma, то они же будут течь и через лампу, а значит она будет слабо светиться, ночью будет видно.

axill
Offline
Зарегистрирован: 05.09.2011

mihart пишет:

Учитывая, что у меня одно время в розетке такое жило: http://easyelectronics.ru/kondensatornoe-pitanie.html, меня это не пугает. Ставить батарейку, когда 220 под рукой глупо.

Меня смущает, что может понадобиться лишний провод в выключатель ламп. Ведь если lnk306 дает 300ma, то они же будут течь и через лампу, а значит она будет слабо светиться, ночью будет видно.

300 ma по низковольтной цепи, по высоковольной в разы меньше, но проблема не в этом

очень желательно иметь нулевой (третий) провод у выключателя. все промышленные выключатели умного дома расчитаны на три провода - это снимает ряд проблем

- при использовании светодиодного освещения даже нескольких ма может не оказаться для питания электроники выключателя

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

двухпроводными делают только диммеры - у них всегда есть пауза в питании нагрузки когда можно подзарядить собственный источник питания (конденсатор)

axill
Offline
Зарегистрирован: 05.09.2011

тут рекомендации самого атмела как програмировать по ISP http://www.atmel.com/Images/doc0943.pdf

а здесь код исходника http://www.atmel.com/Images/AVR910.zip

mihart
Offline
Зарегистрирован: 14.05.2013

Пока жду модули и чипы nrf24le1 возник вопрос.

Первоначально мы планировали запустить связку nrf24l01+Atmega8+Atmega328p. RF-чип отвечает за коммуникацию, Atmega8 отвечает за перепрошивку основного микроконтроллера при необходимости, Atmega328 непосредственно выполняет всю полезную работу.

Но так как три чипа в решении, для которого стоимость достаточно принципиальна, дороговато, как рабочий решили рассматривать связку nrf24le1+Atmega328, первый чип будет выполнять роли RF-модуля и отвечать за перепрошивку чипа. Роль Atmega328 не меняется.

Посмотрев на datasheet nrf24le1 я увидел, что фукционал чипа при его цене очень неплох, нам доступно от 6 пинов в 24-ногом чипе до 30 в 48-ногом. То есть он самостоятельно может решать основные задачи, которые мы планировали возложить на Atmega328. Плюс явный: один чип, низкая стоимость.

Но и минусы огромны:

1. Пропадает главное отличие заявленной платформы - возможность перепрошить модуль дистанционно.

2. Пропадают все удобства ардуино, легкость написания кода, библиотеки и т.д.

Да и в целом писать программатор на отличной от привычной AVR платформе вряд ли будет просто.

Поэтому я задумался о следующей связке nrf24l01+Atmega328p но с сохранением возможности ее дистанционной перепрошивки через бутлоадер Atmega328. Вот возможность такой реализации я и хочу обсудить.

Что такое бутлоадер? По сути ведь это такая же программа, что и скетчи, что мы пишем, он должен быть небольшим для того, чтобы нам оставалось больше места под полезный код, но ведь никто не запрещает сделать его не 2 кб, а 11кб?

Библиотека для работы с nrf24l01 при компиляции под Atmega328 кушает примерно 9 кб. Мы можем ее использовать как в своем коде, так и в коде загрузчика. Теоретически это возможно и под полезный код у нас останется: 32 - 2 - 9 - 9 = 12 кб. Мало, но и не фатально мало в общем-то.

В чем вопрос. Реально ли разместить код библиотеки nrf24l01 таким образом, чтобы им мог воспользоваться как наш скетч, так и бутлоадер? Был бы это не класс, а набор функций, можно было бы навтыкать указателей на функции и обращаться к функциям по ним, но у нас класс. На большом брате есть реализации подключения классов из dll, COM-объекты и прочие тяжелые реализации. Реально ли это малой кровью реализовать на микроконтроллере?

axill
Offline
Зарегистрирован: 05.09.2011

1, 2 или 3 чипа на цену влияет не существенно - это разница от 1 до 3 долларов на устройство. с учетом стоимости платы, обвязки сборки, разработки - разница ничтожная

я согласен, что надо смотреть на вариант LE1 + mega. В базовом варианте это 328-я, но может быть и 32-я если надо много ног или 128-я если надо и ног и памяти (или еще какие варианты - главное распространенные)

зачем загрузчику иметь доступ к библиотеке nrf24? загрузка на мой взгляд должна идти так:

- загрузчик меги при рестарте смотрит нет ли для него данных на UART (RX/TX)

- если есть - перезашивает основную прошивку

- LE1 подключен к reset+rx+tx меги

- когда из сети приходит прошивка, он ее распознает, буферирует и начинает заливать в мегу через rx/tx после того как сбросит его через reset

mihart
Offline
Зарегистрирован: 14.05.2013

Видимо я недостаточно точно описал свой вопрос.

Для ситуации nrf24le1+Atmega328 я не вижу никаких проблем и вопрос про нее не стоит. LE передает данные по UART, мега эти данные принимает. Такая ситуация мне не нравится парой вещей.

1. Модуль на чипе nrf24l01 купить в России легко, можно сделать модификацию шасси под стандартный разъем, что явно будет удобно для тех, кто не хочет ничего паять. C LE же не все так радужно. Я говорю о том, что такую мелкотню еще попробуй спаяй, я в своих силах пока до конца не уверен.

2. Пишем код на двух разных платформах. И ладно, это проблемы для нас, в общем-то в примере из SDK меня все устраивает, нужно только добавить подтверждение получения данных. Проблема серьезная кроется в прошивке этого чипа любителями. Для открытого проекта получается сложновато, сначала его попробуй запаяй, а потом попробуй прошей. Я пока не смотрел еще, может его не получится прошить с помощью ArduinoISP.

 

Поэтому я и предлагаю рассмотреть связку nrf24l01+Atmega328p. Плюс очевидный: при желании можно купить готовый модуль и не паять крошечный чип, прошить нужно только плату Arduino, что все мы делаем по сто раз на дню.

Но нужен SPI и RF24 библиотеки на каждом этапе работы микроконтроллера.

axill пишет:

зачем загрузчику иметь доступ к библиотеке nrf24? загрузка на мой взгляд должна идти так:

Минус l01 в том, что он по RX-TX общаться не умеет. Именно поэтому в такой связке загрузка не пойдет.

Нужны библиотеки и в скетче и в бутлоадере.

В общем-то я вижу, что задача решаемая, попробую написать тестовый пример подхода.

Нужно в каждой библиотеке отделить интерфейс класса от его реализации. Интерфейс будет описывать класс и в скетче и в бутлоадере. Реализация будет реализована только в одном из них. Во втором в реализации будут заглушки в виде указателей на функции-реализации. Нужно решить как эти указатели получить, как хранить и как подхватывать.

mihart
Offline
Зарегистрирован: 14.05.2013

Указатели на функцию на ардуино прекрасно работают.

А вот реализацию SPI+nrf24 запихнуть в бутлоадер не получится. Его максимальный размер для 168 - 2кб, а для 328 - 4 кб.

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

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

mihart
Offline
Зарегистрирован: 14.05.2013

Видео, демонстрирующее, что никуда торопится при прошивке не нужно:

www.youtube.com/watch?v=UJHeDvr_doM

axill
Offline
Зарегистрирован: 05.09.2011

mihart пишет:

2. Пишем код на двух разных платформах. И ладно, это проблемы для нас, в общем-то в примере из SDK меня все устраивает, нужно только добавить подтверждение получения данных. Проблема серьезная кроется в прошивке этого чипа любителями. Для открытого проекта получается сложновато, сначала его попробуй запаяй, а потом попробуй прошей. Я пока не смотрел еще, может его не получится прошить с помощью ArduinoISP.

платформа другая, согласен, что это усложняет. С другой стороны есть проекты где надо разбираться с другими чипами и ничего - летают)) Надо не забывать, что например на UNO/mega2560 R3 кроме основного чипа есть еще atmega16U2 о прошивке которой мало кто значет из тех кто пользуется ардуиной, но это не смутило разработчиков плат

Цитата:

Минус l01 в том, что он по RX-TX общаться не умеет. Именно поэтому в такой связке загрузка не пойдет.

не беда, можно написать softserial или заменить протокол обмена на I2C или SPI, жесткой привязки к UART нет - просто так привычней для ардуино

axill
Offline
Зарегистрирован: 05.09.2011

mihart пишет:

Поэтому я и предлагаю рассмотреть связку nrf24l01+Atmega328p. Плюс очевидный: при желании можно купить готовый модуль и не паять крошечный чип, прошить нужно только плату Arduino, что все мы делаем по сто раз на дню.

Цитата:

А вот реализацию SPI+nrf24 запихнуть в бутлоадер не получится. Его максимальный размер для 168 - 2кб, а для 328 - 4 кб.

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

вот здесь концептуально возникает проблема. Чтобы устройство было надежным - та часть кода, которая занимается прошивкой по воздуху должна быть защищена от изменения по воздуху. Поэтому либо мы запихиваем в бутлоадер загрузчик, который работает напрямую с L01 или мы туда запихиваем загрузчик, который общается снаружи с LE1 либо atmega8+L01

смысл шить по проводам и иметь через раз необходимость перепрошивать все по проводам?

я вижу или le1+mega328 либо l01+mega8+mega328

третий вариант который под вопросом - L01+mega328 - загрузчик полностью включая код L01 в бутлоадере

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

прошивка соседского умного дома по радио... ммммм :) 
все что нужно подарить соседу axillа радиомодуль с эзернетом :) и можно будет находясь на другой стороне глобуса выстукивать морзянку его лампочкой на кухне :) 

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

речь идет о модулях с датчиками... тоесть весь код такого модуля сводится к ПРОЧИТАЛ ДАТЧИК-ОТПРАВИЛ РЕЗУЛЬТАТ-ПОЛУЧИЛ ОТВЕТ-ДЕРНУЛ РЕЛЕ ... что именно вы собираетесь апдейтить в таком коде? да еще таким извращеным способом..

axill
Offline
Зарегистрирован: 05.09.2011

Puhlyaviy пишет:

речь идет о модулях с датчиками... тоесть весь код такого модуля сводится к ПРОЧИТАЛ ДАТЧИК-ОТПРАВИЛ РЕЗУЛЬТАТ-ПОЛУЧИЛ ОТВЕТ-ДЕРНУЛ РЕЛЕ ... что именно вы собираетесь апдейтить в таком коде? да еще таким извращеным способом..

если вам удается делать любительские устройства в формате прошил-забыл и пользоваться ими годами, то я могу за вас только порадоваться

а мне нужна возможность подкрутить/подпилить/проапргредить

тут увидел на форуме и купил себе напольные весы с wifi/bluetooth и возможностью обновить прошивку. Как вы думаете, зачем напольным весам обновлять прошивку?) можно не отвечать, но все течет, все меняется

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

axill пишет:

тут увидел на форуме и купил себе напольные весы с wifi/bluetooth и возможностью обновить прошивку. Как вы думаете, зачем напольным весам обновлять прошивку?) можно не отвечать, но все течет, все меняется

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

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

но чем бы не тешилось, лиж бы есть не просило.. :)

axill
Offline
Зарегистрирован: 05.09.2011

Puhlyaviy пишет:

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

а зря, очень удобно, весь прогресс он от лени

первый шаг к умному дому - когда лень ползти до выключателя. Кстати на полном серьезе - я задумался об умном доме когда уходя из дома мне надоело везде свет выключать. Сейчас гасится автоматом.

второй - когда лень с програматором лезть в розетку. мы на втором шаге

Цитата:

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

но чем бы не тешилось, лиж бы есть не просило.. :)

да вот уже не угадали. свое первое беспроводное устройство я сделал год назад. Оно уже долго не работает по причине того, что в контроллере умного дома надо было заменить перенастроить виртуальные устройства с которым моя ардуина общалась и теперь связь потеряна. Вот не озота мне лезть под раковину, откручивать крышку, добираться до ардуинки (у FIO нет програмирования через USB, надо еще адаптер прилаживать) и прошивать. А был бы wireless давно перепрошил бы.

Мы же не агитируем, вам не надо, я не настаиваю на том, что это нужно всем

mihart
Offline
Зарегистрирован: 14.05.2013

Простой пример необходимости дистанционной перепрошивки, вот буквально вчера пришел в голову.

Я себе планировал поставить выключатели, которые при выключенной нагрузке (освещение), подсвечивают себя в темноте светодиодом.

А буквально вчера я увидел здесь на форуме ссылку на такой выключатель.

Первоначально я планировал, чтобы светодиод горел при выключенном освещении только в темное время суток. Реализация проста до безобразия. А после того как я его увидел, понял, что я не хочу чтобы такие глазки мне по всей квартире светили, когда я сплю или засыпаю. Если бы я уже поставил ардуино в выключатели, мне потребовалось бы лезть в эти выключатели. По воздуху же я добавляю новую логику, добавляю запрос к мастеру "есть ли кто в комнате" и если нужно этот конкретный светодиод зажигаю. Вот ради таких мелочей, тонкой подстройки мне и нужно беспроводное обновление прошивки.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

mihart пишет:

А буквально вчера я увидел здесь на форуме ссылку на такой выключатель.

Ё! Кнопка из пласмасы за 10 баксов :) требуется апгрейд... 

Давайте я вам подкину несколько мыслей и удалюсь с этой темы...

Каким образом вы собрались запитывать дуинку в выключателе? при этом не включая лампочку (учитывая саму дуинку, трансивер и светодиоды, там очень все на грани что бы лампочка не загорелась) ... ибо обычно в выключатель приходит фаза, а ноль приходит через лампочку... нужна будет не стандартная прокладка проводов? Ради чего тогда все танцы с радио? где один провод там и остальные.

Удалился!

 

 

axill
Offline
Зарегистрирован: 05.09.2011

Что касается работы светодиода, то такие вещи лучше заложить в параметры выключателя, я не в его программу

Тогда зажигать или нет светодиод - этим сможет управлять логика на центральном контроллере умного дома
Захотел изменить логику - не надо перепрошивать выключатели, достаточно изменить сценарий на контроллере умного дома
 
Так прлучится более гибко и куда более легко управляемо
 
У меня так с выключателями zwave. перепрограмировать я их не могу, но могу изменить параметр, который отвечает за логику подсветки - 1. Не светится никогда 2. Светится когда включен свет 3. Светится когда свет выключен
У меня настроен вариант 3 - "ночник". Нисколько не раздражант, наоборот удобно
 
Что касается вопроса питания выключателей - нужен нулевой провод в розетке. Либо закладывать при ремонте либо дорабатывать.
Мне удалось доработать в вариациях:
- двойные выключатели где изначально были три провода перекомутировал в разводных коробках
- где возможно протянул новый провод скрытно
- где не возможно - сделал аккуратно снаружи
- в некоторых местах перекомутировал так, что в выключатель приходит только 220, а управление нагрузкой идет не от выключателя - в раздаточной коробке спрятан модуль который по радио управляется кнопкой
alex_r61
alex_r61 аватар
Offline
Зарегистрирован: 20.06.2012

Мда, две страницы на тему загрузчика, а когда до дома доберётесь?

Я в первом варианте УД в комнатных МК предусмотрел всё на что мозгов

хватило, пока отлаживал обновлял их с ноута. Теперь про них забыл.

Обновляю только прошивку основного МК, при необходимости, и всё.

Комнатные МК управляют кондиционерами, эл.замками, измеряют

температуру и отображают её на дисплее и т.д. Что там ещё апгрейдить?

Я использовал Mega16, ног еле хватило и память забил процентов на 80.

А что тогда можно на 328?

Сейчас меняю проводку и 220 ни в выключателях, ни в подсобных помещениях

у меня не будет.

axill
Offline
Зарегистрирован: 05.09.2011

alex_r61 пишет:

Мда, две страницы на тему загрузчика, а когда до дома доберётесь?

Я в первом варианте УД в комнатных МК предусмотрел всё на что мозгов

хватило, пока отлаживал обновлял их с ноута. Теперь про них забыл.

Обновляю только прошивку основного МК, при необходимости, и всё.

Комнатные МК управляют кондиционерами, эл.замками, измеряют

температуру и отображают её на дисплее и т.д. Что там ещё апгрейдить?

Я использовал Mega16, ног еле хватило и память забил процентов на 80.

А что тогда можно на 328?

у меня не будет.

так поделитесь наработками, особенно интересно управление кондиционерами, не видел готовых решений, там вроде все как-то сложнее чем теливизорами управлять

Цитата:

Сейчас меняю проводку и 220 ни в выключателях, ни в подсобных помещениях

а если захотите проапргейдить квартиру? кто у вас купит квартиру в которой без ардуино ни свет включить ни в туалет сходить?)

alex_r61
alex_r61 аватар
Offline
Зарегистрирован: 20.06.2012

axill пишет:

не видел готовых решений, там вроде все как-то сложнее чем теливизорами управлять

Тоже искал, но ничего не нашел. Кнопка "Пуск/Стоп" , на пульте, выдаёт на включение и выключение

разные команды. Я их попробовал записать, а потом воспроизвести. С LG это получилось, а вот

с Samsung нет. У Samsung команды оказались очень длинными и не хватило памяти у МК, я тогда

использовал Tiny2313. Тогда сделал проще, если кто то пытается устроить в квартире холодильник

или уходя забывает выключить кондёр, то МК в щитке отрубает ему питание. А по приходу снова его

включает. 

 

axill пишет:

а если захотите проапргейдить квартиру? кто у вас купит квартиру в которой без ардуино ни свет включить ни в туалет сходить?)

А управление будет встроено в квартиру, и я его уносить с собой не буду.

Ксати второй вариант сначала тоже хотел сделать на NRF24L01+, а сейчас нашел альтернативу

на CC430. 

Вот и думаю, какой вариант выбрать.

axill
Offline
Зарегистрирован: 05.09.2011

alex_r61 пишет:

Тоже искал, но ничего не нашел. Кнопка "Пуск/Стоп" , на пульте, выдаёт на включение и выключение

разные команды. Я их попробовал записать, а потом воспроизвести. С LG это получилось, а вот

с Samsung нет. У Samsung команды оказались очень длинными и не хватило памяти у МК, я тогда

использовал Tiny2313. Тогда сделал проще, если кто то пытается устроить в квартире холодильник

или уходя забывает выключить кондёр, то МК в щитке отрубает ему питание. А по приходу снова его

включает.

насколько я понял из обсуждений кондиционеры имеют двухсторонний протокол, в этом и есть сложность. У меня управление прекрасно работает и настройка режимов и температуры, но я использую покупные модули для сети zwave, но было бы интересно уметь управлять и самому

Цитата:

А управление будет встроено в квартиру, и я его уносить с собой не буду.

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

Цитата:

Ксати второй вариант сначала тоже хотел сделать на NRF24L01+, а сейчас нашел альтернативу

на CC430. 

Вот и думаю, какой вариант выбрать.

CC430 хороши только несущей частотой - она лучше распространяется и не конфликтует с wifi

но во всем остальном - это просто каменный век (потребление, функциональность, надежность передачи и т.д.), к тому же они скорее всего дороже

alex_r61
alex_r61 аватар
Offline
Зарегистрирован: 20.06.2012

axill пишет:

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

Сильно не занимался, но такого не встречал. Задайте кондёру температуру, а затем уйдите в другую комнату и измените её и всё увидите.

axill пишет:

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

Предусмотрено, поверху 220, внизу - 12.

axill пишет:

CC430 хороши только несущей частотой - она лучше распространяется и не конфликтует с wifi

но во всем остальном - это просто каменный век (потребление, функциональность, надежность передачи и т.д.), к тому же они скорее всего дороже

А Вы их характеристики смотрели?  У меня потребление, с вкючёнными часами и работающей терминальной

программой при отключённом трансивере 4-6мкА. Функциональность? Вы в какой Mega AVR видели

аппаратные RTC(не таймер), DMA, шифрование 128 бит, 12-Bit A/D Converter, 32-Bit Hardware Multiplier

и т.д.

axill
Offline
Зарегистрирован: 05.09.2011

 

Вы имели в виду МК? я спутал с древними радиомодулями

Серкрет популярности AVR покрыт тайной))

Если не секрет поделитесь со схемами и кодом того, что сделали

 

alex_r61
alex_r61 аватар
Offline
Зарегистрирован: 20.06.2012

Основная обвязка стандартная. Mega1280(переделал питание на 3.3 вольт, частота 8М), TFT дисплей с

SD card, часы DS1338(DS1307 на 3в не работают). Как минимум три интерфейса: USB, RS485 и радио.

Дальше буду добавлять по необходимоти, сначала разберусь с трансиверами. 

mihart
Offline
Зарегистрирован: 14.05.2013

axill пишет:

насколько я понял из обсуждений кондиционеры имеют двухсторонний протокол, в этом и есть сложность.

 

не совсем так. пульт кондиционера при любой посылке отправляет все настройки. То есть нажимается только кнопка включить, а он помимо включения и температуру задает, и настройки шторки, в общем все.

И так при нажатии любой кнопки пульта.

axill
Offline
Зарегистрирован: 05.09.2011

ясно. что-то мне не попадалось устройств для управления кондиционерами, для тв много, а таких нет.

axill
Offline
Зарегистрирован: 05.09.2011

свежая статья - построение сети с ретрансляцией http://www.insidegadgets.com/2013/06/09/nrf24-multi-network-allowing-for...

mihart
Offline
Зарегистрирован: 14.05.2013

Вот пишут мол, вроде тема про умный дом, а все про загрузчик речь, да про загрузчик. Для меня это принципиальный момент, как в мультике "лучше день потерять, потом за час долететь". Верхний уровень у многих написан, мне нужно беспроводное исполнительное устройство, уважаю тех, кто растянул по квартире провода, но это не мой путь.

что касается самой перепрошивки. Все еще считаю что связка Один МК и RF-модуль возможна. Это несмотря на то, что я считал очевидным, что если загрузчик может писать во флеш, то и сам код может себя модифицировать. К сожалению AVR это не умеет. Проверил на всякий случай ассемблерные команды, но естественно не заработало. Более того, пользоваться классами в флеше он тоже не может. Это значит, что оставить ардуиновский загрузчик, записать флеш, одна из частей будет перезаписывать другую по воздуху и предоставляя ей интерфейс nrf24 не получится.

Остается перезаписать фьюзы, чтобы под бут отводилось 4 кб и на основе 1 кб оптибута написать nrf24 бут. Нужно переписывать библиотеку, ужимать ее до 3 кб. Распотрошив ее я вижу, что пожертвовав част функционала и многое написав на ассемблере это реально. 

Пока же на плате вывожу дорожки под "второй этаж", на котором будет жить шьющий мк, для того, чтобы его было легко удалить после того, как он перестанет быть нужен.

alex_r61
alex_r61 аватар
Offline
Зарегистрирован: 20.06.2012

mihart пишет:

мне нужно беспроводное исполнительное устройство, уважаю тех, кто растянул по квартире провода, но это не мой путь.

А запитывать схему тоже по воздуху будете?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

библиотека и проект который вы пытаетесь создать уже существует и называется JeeBoot. ребяты давно уже делают апдейты по воздуху.. погуглите, там есть вики и исходники :)

рылся тут по своим делам и случайно наткнулся. благодарности принимаю хорошим вином. :)

mihart
Offline
Зарегистрирован: 14.05.2013

Спасибо! Это именно то, что я сейчас делаю, с другим чипом, но тоже самое. На jeenode я натыкался, но вот то, что они написали бутлоадер я не знал.

mihart
Offline
Зарегистрирован: 14.05.2013

Ужимаю библиотеки для работы с RF-модулем, удаляю ненужную для бута функциональность. Ломать - не строить) Минимальный проект компилится под 2,5 кб. А значит, что в сочетании с optyboot уже сейчас реален беспроводной бутлоадер под Atmega328.

Тем не менее, на мой взгляд к бутлоадеру есть несколько требований:
1. Крайне желательно уложиться в 2кб для полной обратной поддержки arduino
2. Для той же самой полной обратной поддержки arduino этот бутлоадер должен уметь обновлять прошивку как стандартным способом по UART, так и через радиоканал.

Возможно для многих это будет не новость, но посмотрев код прошивальщика и бутлоадера стало понятно, что программатор посылает команду и данные для выполнения этой команды, а бут их выполняет. Получает данные он по вызову функции Getch(), отправляет по функции Putch(). То есть нам нужно создать компактный драйвер nRF24L01+, переписать функции для его использования, не забыть, что данные можно получать как по RF, так и по UART и все. Бут готов.

Правда встает вопрос о том, как бутлоадеру сообщать о том, что нужно принимать прошивку. Для этого я планирую задействовать EEPROM. Это значит, что модуль выполняет свою основную программу, получает команду «сейчас будут менять прошивку», оставляет об этом пометку в EEPROM и запускает бут. Бут же при запуске видит эту пометку и на специально выделенной частоте начинает поиск несущей, после этого начинается собственно прошивка.

Ну это так, если кому интересно еще.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

остается еще большая проблема всех радио систем... взлом :)

mihart
Offline
Зарегистрирован: 14.05.2013

Почему-то мне не страшно)

В обычный обмен между радиомодулями можно вмешаться, но я чтото не слышал, что от этого кто-то пострадал. Да и решение я делаю для себя, не думаю, что кто-то будет целенаправленно мешать.

А от взлома по идее диалоговый код спасет. Метки же автомобильные на простом PIC-чипе  работают и диалог поддерживают.

axill
Offline
Зарегистрирован: 05.09.2011

mihart пишет:

Ужимаю библиотеки для работы с RF-модулем, удаляю ненужную для бута функциональность. Ломать - не строить) Минимальный проект компилится под 2,5 кб. А значит, что в сочетании с optyboot уже сейчас реален беспроводной бутлоадер под Atmega328.

речь идет о варианте без внешнего чипа? т.е. ардуинка сама себя будет по радио програмировать?

если так, значит "детектирования" сигнала на перепрошивку должно быть встроено в код основной программы и опрашиваться по циклу при каждой проверки наличия данных на радиомодуле, так ведь?

как только обнаружили команду на прошивку мы должны отдать управление загрузчику. а зачем для этого делать перезапуск МК? почему просто не передать управдение нужному вектору внутри загрузчика выставив признаки в обычных регистрах МК? можно конечно и eeprom использовать

mihart
Offline
Зарегистрирован: 14.05.2013

axill пишет:

речь идет о варианте без внешнего чипа? т.е. ардуинка сама себя будет по радио програмировать?

Да, ардуинка сама себя без внешнего чипа будет программировать.

Почти не потеряв в функциональности (почти потому что в самом начале убрал выбор канала и размера сообщения), немного переписав функции удалось сократить код работы с RF-модулем до 987 байт. Возвращение выбора канала и размера сообщения добавит думаю байт 30-50.

А вообще арифметика показывает что в 2 кб бутлоадер удасться влезть. Это значит, что с таким шасси можно будет работать как с обычной ардуиной, хочешь шить через USART - шей, хочешь через радио - шей.

1 кб - работа с модулем + 500 кб бутлоадер + около 200 кб увязка кода, протокол обмена сообщениями между чипами + около 100 кб на выбор канала прошивки при старте бута + около 100 байт работа с EEPROM (еще не смотрел вообще) = 1,9 кб. Должно получиться.

Теперь думаю как скрестить этот код с optiboot'ом. Проблем со скрещиванием не вижу, но так как я еще ни разу не писал бутлоадер, не компилировал бутлоадер (нужно настроить линковщик, может кто занимался этим, подскажет?), не тестировал его, процесс движется медленно.

axill пишет:

если так, значит "детектирования" сигнала на перепрошивку должно быть встроено в код основной программы и опрашиваться по циклу при каждой проверки наличия данных на радиомодуле, так ведь?

как только обнаружили команду на прошивку мы должны отдать управление загрузчику. а зачем для этого делать перезапуск МК? почему просто не передать управдение нужному вектору внутри загрузчика выставив признаки в обычных регистрах МК? можно конечно и eeprom использовать

Можно передать сразу. Скорее всего так и будет, но нужно будет предусмотреть кучу исключительных ситуаций.

Бут запустили по вектору, но в какой-то момент команды перестали поступать. Что делать? Основной код уже запорот, адресов соседей нет, куда стучаться непонятно. Эту информацию предлагаю писать в eeprom.

Или watchdog сбросил чип (а я перепишу бут так, чтобы watchdog работал), запустился бут, как ему понять, когда можно передавать код основной программе, а когда ее нужно шить.

И таких ситуаций куча возможно. Все нужно предусматривать.

По поводу шифрования спрашивали, его тоже по идее нужно предусмотреть, есть реализация алгоритма AES256 синхронного шифрования на 2 кб. Можно будет добавить в atmega328 увеличив размер бута. Все равно уверен, что под основной код исполнительного модуля место останется.

 

Вопрос к тем, у кого есть nrf-модуль с большой антенной. Эта антенна увеличивает только дальность передачи или и приема тоже?

axill
Offline
Зарегистрирован: 05.09.2011

mihart пишет:

Вопрос к тем, у кого есть nrf-модуль с большой антенной. Эта антенна увеличивает только дальность передачи или и приема тоже?

смотреть надо не только на антену, есть модуои у которых антена согласрвана прямо с чипом.

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

смотреть надо на модуоли у которых указано PA+LNA - это означает, что кроме чипа стоит еще усилитель сигнала на передачу и на прием. Соответственно такой модуль обязан работать на большие растояние в обе стороны

mihart
Offline
Зарегистрирован: 14.05.2013

Я к чему спрашиваю. Я задумываюсь о ситуациях (но не пишу пока про них, рано), когда команда на программацию пришла, слэйв в бут переключился, а мастер пропал куда-то. В такой ситуации слейву нужно куда-то обратиться за помощью что делать дальше. А так как передача не может быть широкополосной, всегда должен быть адресат, то я и задумался о контроллере с большой антенной и адресом "0х00,0х00,0х00,0х00,0х00", который сможет получить клич о помощи и уже с помощью контроллера по цепочке выстроенной из модулей сети добраться до слейва.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

я вот сижу думаю на контролером 2.4Мгц с тач дисплеем... пока пришел к выводу что нужно видимо рисовать свою плату. разводить на ней разьем к дисплею.. разводить разьем к модулю 2.4 Мгц.... иначе проводов много получается....

в целом кому интересно можум обсудить в скайпе например... подумать прикинуть что куда и зачем.

alex_r61
alex_r61 аватар
Offline
Зарегистрирован: 20.06.2012
Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

alex_r61 пишет:

Уже придумали http://devicter.ru/goods/Iteaduino-Iboard-pro

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

вы все время забываете что это DEVELOPER BOARD, в смысле они предназначены для тыканья проводками и формирования представления что вы хотите, а не для того что бы из них собирать законченый продукт..

да и краткое изучение рынка запчастей показывает что  разница на камни между

ATMega2560 и Cortex3 ( который в Due) исчисляется в центах... 

 

mihart
Offline
Зарегистрирован: 14.05.2013

А мне эта плата нравится, я такую скоро куплю. И не сказал бы что она для разработки, вполне себе сердце умного дома.

А по поводу тач мониторов, вы их в живую видели? Ужасная цветопередача. Я когда делал блок wifi-gps-монитора положения искал компактные библиотеки декодирования jpg, png наткнулся на страницу andybrown.me.uk. Будете разводить, лучше уж разводить плату под эти экраны, правда он тач вроде не реализовывал, но можно попробовать сделать самому. Сами экраны рублей 500 стоят, если в из наличия брать

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

mihart пишет:

А по поводу тач мониторов, вы их в живую видели? Ужасная цветопередача. Я когда делал блок wifi-gps-монитора положения искал компактные библиотеки декодирования jpg, png наткнулся на страницу andybrown.me.uk. Будете разводить, лучше уж разводить плату под эти экраны, правда он тач вроде не реализовывал, но можно попробовать сделать самому. Сами экраны рублей 500 стоят, если в из наличия брать

Я не только видел. у меня вот даже на столе несколько валяется...цветопередача вполне себе соотвествует 65К цветов.. не фотографии же на нем расматривать.... тем более 12 баксов с доставкой для 3.2" размер вполне себе оправдывает...  вот например как это выглядело неделю назад

mihart
Offline
Зарегистрирован: 14.05.2013

У меня обостренное чувство прекрасного))))

а как вы планируете экран крепить в корпусе? Мне этот момент не понравился, мега+шилд+экран. И ладно бы толсто, шилд крепко стоит, а экран болтается. С одной стороны пины, а с другой стороны в воздухе висит

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

я не использую никаких шильдов.. не вижу в них смысла... на данный момент экран просто пучком проводов прикреплен к меге...

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

но у меня нет опыта в разработке плат... к тому же иследование цен показали что лучше сразу перейти на кортекс3.. ибо он буквально на 50 центов дороже меги2560

mihart
Offline
Зарегистрирован: 14.05.2013

Разводить платы несложно, я бы посоветовал дихадьта с его easyelectronics.ru. Я научился по его статьям. Искать по слову eagle

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

mihart пишет:

Разводить платы несложно, я бы посоветовал дихадьта с его easyelectronics.ru. Я научился по его статьям. Искать по слову eagle

Спасибо, нашел и уже читаю. Я тут за пару недель уже столько всего пересмотрел и перечитал, дым с ушей идет.. сначало взялся за Altium, потом устал к нему библиотеки искать и подключать.решил пойти коротким путем через Eagle и открытые чертежи ардуино, подработать их напильником... хых 2 дня изучал  и пытался понять что я не так делаю и почему он не дает мне увеличить площадь платы... потом нашел список ограничений бесплатной версии... в общем век живи, век учись и дураком помреш :(

Да, кстати, корпус тоже планирую заказывать специальный под эту разработку.. ибо есть кое какие мысли по креплениям... Вообще как бы готов обсуждать проект, но в приватной обстановке :) есть пара решений оригинальных и хочется попробовать все таки довести его до комерческой версии... 

axill
Offline
Зарегистрирован: 05.09.2011

кроме easyelectronics.ru рекомендую радиокота, там есть очень обстоятельные темы про ЛУТ http://radiokot.ru/forum/viewtopic.php?f=8&t=31 и фоторезист http://radiokot.ru/forum/viewtopic.php?f=8&t=535&sid=7096c9066c1f9eb4bb5.... там же есть тема про программы по разработке плат и схем. Многие хвалят diptrace как самый простой. Я пользовался протеусом - очень не плохо. Но в итоге изучил алтиум (совсем недавно), оно того для меня стоило.

согласен, что ардуино, это development board. Начинал с ардуино и приобшился к теме МК именно через ардуино. Но сейчас меня уже не привлекает сборка сэендвичей из шилдов. Я предпочитаю сделать кастомное устройство и разработать схему-плату-корпус самостоятельно. Это хлопотно, долго, но цель для меня не в потоке, а в какой-то с тепени в процессе.

Мега2560 стоит неразумных денег. Я для себя решил, что мне хватит от 32 до 128 кб. Мега128 стоит 2.5 бакса, мега2560 - 5. Но дело даже не в стоимости - для моих задач 128-й хватит с головой, часто буду применять 328 и 32 и 644-ю. Даже 128-ю с 64 ногами припаять не просто, а 2560 - 100 ног и шаг между ними меньше )) Тем более, что решил отказаться от ардуино студии в пользу атмела - а так код выходит меньше

cortex круче явно чем AVR, когда я это понял уже много усилий потратил на изучение AVR, так что останусь на AVRках. А если с нуля браться наверно лучше браться за cortex.