Редкие AVR (8bit) нужны ли?

Тема в разделе "Микроконтроллеры AVR", создана пользователем ostrov, 17 авг 2016.

  1. ostrov

    ostrov Гуру

    Практически все проекты уталкиваются в любимые Atmega8, Atmega16, Atmega168, Atmega328, Attiny13, Attiny85 и Attiny2313, а так же комбинации из них. Но в природе существуют десятки МК, о которых даже слышать приходится не часто, а в Али о многих и вообще не слышали. Например: Atmega644, Atmega8535, Atmega1284, Attiny167, Attiny861 и так далее. Спрашивается, зачем такое разнообразие и есть ли смысл изучать его с целью найти что то более интересное чем перечисленная выше "попса"? Может быть я что то упускаю?
     
  2. AlexVS

    AlexVS Гик

    У меня серверная часть метеостанции собрана на Arduino Mega 2560, скомпилированный скетч под 85кБ - запас огромный, а вот с оперативкой уже напряг.
    Решил перейти на Atmega1284 ибо 16кБ ОЗУ и удобный для меня DIP40, уже прикупил его на Али, после отпуска начну собирать.
     
    Максим B нравится это.
  3. DIYMan

    DIYMan Guest

    135 кБ кода, оперативки свободной ещё 1,5 кБ ;) Вангую, можно оптимизировать расход оперативы у вас ;)
     
  4. AlexVS

    AlexVS Гик

    Не спорю, поле для оптимизации есть. Да и свободной оперативки тоже около 1,4кБ, но я не могу опускаться ниже этого размера ибо принимаю и распарсиваю (слово то какое дурацкое) прогноз погоды на неделю, вот тут то и требуется она.
    ЗЫ в последнее время почитываю Ваши хроники и просматриваю исходники (просто интересно и поучительно/позновательно), правда теплицу автоматизировать не планирую :)
     
  5. DIYMan

    DIYMan Guest

    А как парсите - покажите плз. Там не надо много оперативы, достаточно иметь совсем немного буфера, алгоритм:

    1. Проверяем размер принятых в приёмный буфер данных (например, Stream.available()) - если он меньше двух длин идентификатора, по которому мы ищем начало входных данных - игнорируем;

    2. Как только в буфере достаточно данных - смотрим, не встретился ли там идентификатор. Если встретился - всё, что после него - вычитываем к себе;

    3. Как только встретили конец нужных нам данных - то всё :)

    При таком подходе нет надобности вычитывать все данные в оперативу, можно обойтись разбором на лету, по мере прихода данных ;) Если дадите кусок HTML-кода (или с чего вы там парсите), с которого надо выцепить данные - могу примерно накидать суть.
     
  6. ANV

    ANV Гуру

    Такое разнообразие нужно для оптимизации проекта при серийном производстве.
    Память, периферия, количество I/O пинов - это все размер кристалла и его стоимость. В домашнем проекте разница в 10 центов ничего не дает, а при серийном производстве набегают приличные деньги.
     
  7. AlexVS

    AlexVS Гик

    Данные получаю в JSON, для разбора использую библиотеку https://github.com/markert/ArduinoJsonParser
    данные выглядят так
    Код (C++):
    {"city":{"id":1502026,"name":"Krasnoyarsk","coord":{"lon":92.791672,"lat":56.00972},"country":"RU","population":0,"sys":{"population":0}},"cod":"200","message":0.0337,"cnt":16,"list":[{"dt":1471424400,"main":{"temp":17.6,"temp_min":17.6,"temp_max":20.05,"pressure":974.38,"sea_level":1025.12,"grnd_level":974.38,"humidity":70,"temp_kf":-2.45},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":{"all":80},"wind":{"speed":1.52,"deg":321.005},"rain":{"3h":0.905},"sys":{"pod":"d"},"dt_txt":"2016-08-17 09:00:00"},{"dt":1471435200,"main":{"temp":14.63,"temp_min":14.63,"temp_max":16.46,"pressure":975.47,"sea_level":1026.23,"grnd_level":975.47,"humidity":86,"temp_kf":-1.83},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":{"all":88},"wind":{"speed":1.05,"deg":299.001},"rain":{"3h":1.96},"sys":{"pod":"d"},"dt_txt":"2016-08-17 12:00:00"},{"dt":1471446000,"main":{"temp":12.85,"temp_min":12.85,"temp_max":14.07,"pressure":975.97,"sea_level":1027.05,"grnd_level":975.97,"humidity":92,"temp_kf":-1.22},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"clouds":{"all":32},"wind":{"speed":1.01,"deg":264.505},"rain":{"3h":0.01},"sys":{"pod":"n"},"dt_txt":"2016-08-17 15:00:00"},{"dt":1471456800,"main":{"temp":11.97,"temp_min":11.97,"temp_max":12.58,"pressure":976.24,"sea_level":1027.49,"grnd_level":976.24,"humidity":96,"temp_kf":-0.61},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"clouds":{"all":32},"wind":{"speed":1.28,"deg":300.502},"rain":{"3h":0.01},"sys":{"pod":"n"},"dt_txt":"2016-08-17 18:00:00"},{"dt":1471467600,"main":{"temp":12.23,"temp_min":12.23,"temp_max":12.23,"pressure":976.48,"sea_level":1027.96,"grnd_level":976.48,"humidity":98,"temp_kf":0},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"clouds":{"all":80},"wind":{"speed":1.15,"deg":283.001},"rain":{"3h":0.48},"sys":{"pod":"n"},"dt_txt":"2016-08-17 21:00:00"},{"dt":1471478400,"main":{"temp":13.15,"temp_min":13.15,"temp_max":13.15,"pressure":977.32,"sea_level":1028.72,"grnd_level":977.32,"humidity":100,"temp_kf":0},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":{"all":92},"wind":{"speed":1.34,"deg":287.503},"rain":{"3h":0.98},"sys":{"pod":"d"},"dt_txt":"2016-08-18 00:00:00"},{"dt":1471489200,"main":{"temp":14.7,"temp_min":14.7,"temp_max":14.7,"pressure":977.95,"sea_level":1029.08,"grnd_level":977.95,"humidity":97,"temp_kf":0},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":{"all":92},"wind":{"speed":1.36,"deg":308.5},"rain":{"3h":0.74},"sys":{"pod":"d"},"dt_txt":"2016-08-18 03:00:00"},{"dt":1471500000,"main":{"temp":17.74,"temp_min":17.74,"temp_max":17.74,"pressure":977.96,"sea_level":1028.87,"grnd_level":977.96,"humidity":87,"temp_kf":0},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":{"all":68},"wind":{"speed":1.42,"deg":287.511},"rain":{"3h":0.2},"sys":{"pod":"d"},"dt_txt":"2016-08-18 06:00:00"},{"dt":1471510800,"main":{"temp":18.92,"temp_min":18.92,"temp_max":18.92,"pressure":977.79,"sea_level":1028.77,"grnd_level":977.79,"humidity":76,"temp_kf":0},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":{"all":44},"wind":{"speed":1.66,"deg":302.501},"rain":{"3h":0.18},"sys":{"pod":"d"},"dt_txt":"2016-08-18 09:00:00"},{"dt":1471521600,"main":{"temp":18.3,"temp_min":18.3,"temp_max":18.3,"pressure":977.83,"sea_level":1028.8,"grnd_level":977.83,"humidity":74,"temp_kf":0},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"clouds":{"all":36},"wind":{"speed":1.21,"deg":278},"rain":{},"sys":{"pod":"d"},"dt_txt":"2016-08-18 12:00:00"},{"dt":1471532400,"main":{"temp":15.49,"temp_min":15.49,"temp_max":15.49,"pressure":977.95,"sea_level":1029.3,"grnd_level":977.95,"humidity":78,"temp_kf":0},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],"clouds":{"all":76},"wind":{"speed":1.61,"deg":235.501},"rain":{},"sys":{"pod":"n"},"dt_txt":"2016-08-18 15:00:00"},{"dt":1471543200,"main":{"temp":15.28,"temp_min":15.28,"temp_max":15.28,"pressure":977.67,"sea_level":1029.04,"grnd_level":977.67,"humidity":75,"temp_kf":0},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],"clouds":{"all":56},"wind":{"speed":1.68,"deg":236.017},"rain":{},"sys":{"pod":"n"},"dt_txt":"2016-08-18 18:00:00"},{"dt":1471554000,"main":{"temp":12.88,"temp_min":12.88,"temp_max":12.88,"pressure":977.09,"sea_level":1028.59,"grnd_level":977.09,"humidity":86,"temp_kf":0},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"clouds":{"all":0},"wind":{"speed":1.76,"deg":219.501},"rain":{},"sys":{"pod":"n"},"dt_txt":"2016-08-18 21:00:00"},{"dt":1471564800,"main":{"temp":13.91,"temp_min":13.91,"temp_max":13.91,"pressure":976.87,"sea_level":1028.32,"grnd_level":976.87,"humidity":82,"temp_kf":0},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"02d"}],"clouds":{"all":8},"wind":{"speed":2.01,"deg":225.005},"rain":{},"sys":{"pod":"d"},"dt_txt":"2016-08-19 00:00:00"},{"dt":1471575600,"main":{"temp":18.21,"temp_min":18.21,"temp_max":18.21,"pressure":976.54,"sea_level":1027.64,"grnd_level":976.54,"humidity":70,"temp_kf":0},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"clouds":{"all":68},"wind":{"speed":2.81,"deg":239.501},"rain":{},"sys":{"pod":"d"},"dt_txt":"2016-08-19 03:00:00"},{"dt":1471586400,"main":{"temp":19.97,"temp_min":19.97,"temp_max":19.97,"pressure":975.79,"sea_level":1026.62,"grnd_level":975.79,"humidity":59,"temp_kf":0},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":{"all":20},"wind":{"speed":3.27,"deg":241},"rain":{"3h":0.01},"sys":{"pod":"d"},"dt_txt":"2016-08-19 06:00:00"}]}
    Наверное с этим лучше свалить в другую тему.
     
    Максим B нравится это.
  8. DIYMan

    DIYMan Guest

    Ох ё, и вам таки всё из этого нужно показывать? Вангую, что только некоторые вещи из JSON-объекта, при таком раскладе проще ручками вытащить.

    И как оно вообще вмещается, я не пойму - то, что вы привели, имеет длину 5895 байт :)
     
  9. AlexVS

    AlexVS Гик

    Вы не поверите, разбираю и вывожу на дисплейчик всю инфу, вот как это выглядит (нижний сегмент)
    20160801_192434.jpg
    W5500 - вполне успевает все принять и отдать, а вот с W5100 были проблемы.
    Если интересно как - могу дать код.
    Если грубо - то по мере приема каждого байта я веду учет открытых и закрытых скобок, при получении закрывающей скобки, считаю, что закончен очередной логический блок и подвергаю его разбору, после чего продолжаю вычитывать данные из буфера.
     
    Последнее редактирование: 17 авг 2016
    Максим B нравится это.
  10. DIYMan

    DIYMan Guest

    А, ну то есть сделано, как практически я и предлагал - разбор по мере поступления ;) Тогда вопросов нет, всё норм. Как известно, premature optimization is the root of all evil ;)
     
  11. Максим B

    Максим B Гуру

    Как все это повторить? Выглядит круто
     
  12. AlexVS

    AlexVS Гик

    В отпуске был, поэтому молчал. Что конкретно вас интересует? Железо? Код? Уточните.
    ЗЫ здесь скриншот дисплейного модуля, он только и умеет, что отображать инфу, взятую с серверной части. Серверная часть отдельно, датчики отдельно, датчики на даче (на дисплее "Минино") тоже отдельно.
     
  13. Faberge

    Faberge Administrator Администратор

    У AVR Atmega 2560 что стоит на плате Arduino Mega есть возможность сравнительно просто расширить объем оперативной памяти дополнительной микросхемой и регистром-защелкой.

    http://andybrown.me.uk/2011/08/28/512kb-sram-expansion-for-the-arduino-mega-build/
    http://andybrown.me.uk/2013/05/05/512k-xmem-in-shield-format/
    http://andybrown.me.uk/2011/08/28/512kb-sram-expansion-for-the-arduino-mega-software/
     
  14. Максим B

    Максим B Гуру

    Вы не ведет где-нибудь блог по созданию поделок??? Вообще интересует все от ежелеза до кода. Хотя бы железячную часть глянуть ;)
     
  15. Vad33

    Vad33 Капитан-оригинал

    Ва-абче та Atmega644, Atmega1284 напрополую используют в 3D принтерах. И под эти камни существуют вполне нормальные отладочные платы. Так что я не стал бы так сразу с плеча... Просто есть популярные промышленные платы с "попсой" и их то и юзают в основном. Потому как самому плату делать - это не проводки в дырочки втыкать, специалистов на два порядка меньше.
    Скажу еще более страшную вещь. Если открыть сайт ATMEL, так там вообще, та-акой зверинец...
     
  16. VITAL_P

    VITAL_P Нерд

    А если открыть Atmel Studio то можно наглядно увидеть их функционал. Намного интереснее чем по сайту долго читать-сравнивать