Не задумывались ли вы, почему специалисты/профессионалы в области микроконтроллеров и автоматизации относятся к тем, кто работает с Arduino примерно так, как будто они занимаются чем-то не серьёзным, вроде игры в песочнице?


Примерно так же к ардуино относится и мой кот Вася.

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



Для начала следует сказать, что Arduino это не так уж плохо как может показаться. Именно благодаря ардуино появилось на свет множество самых разных проектов, которые бы так и не воплотились в жизнь, из-за очень большого количества информации, которую нужно «переварить» чтобы их реализовать. Ни для кого не секрет, что на ардуино делать какие-то устройства значительно проще, да и к тому же быстрее. Именно из-за этого я и начал увлекаться темой микроконтроллеров. И постепенно я начал перерастать всякие digitalWrite(13, HIGH); и переходить на PORTB = 32;, так как желание повышения производительности моих девайсов возрастало.

Вот так выглядит код обычной «мигалки» на привычном для «ардуинщика» языке:
Открыть спойлер
//Привет geektimes

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}



image

Я думаю многим знаком этот пример, потому что это классическое упражнение «здравствуй мир», которое призвано максимально снизить порог вхождения в тему программирования микроконтроллеров Arduino.

Давайте посмотрим как бы это выглядело если мы пошли путём не наименьшего сопротивления используя регистры микроконтроллера:

Открыть спойлер
//Привет geektimes

#include <avr/io.h>
#include <util/delay.h>

int main( void )
{
  DDRB |= (1 << 5);     // вывод PB5 как выход
  while (1) { // вечный цикл, аналог loop() 
    PORTB &= ~(1 << 5); // низкий уровень на выводе PB5
    _delay_ms(1000); // задержка 1000 миллисекунд 
    PORTB |= (1 << 5);  // высокий уровень на выводе PB5
    _delay_ms(1000);
  }
  return 0;
}



image

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

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

image

Но давайте вернёмся к нашим баранам среде разработки Arduino IDE.
Обратите внимание на использование памяти в двух примерах, чтобы вам не метаться по страничке вверх вниз, вот два кода на одном скрине:

image

Первое что бросается в глаза — размер кода, если писать на обычном языке Arduino IDE то он выглядит немного компактнее. А если бы я взял какой-то более сложный код, например ReadAnalogVoltage который считывает напряжение на нулевом аналоговом порте пине, преобразует его в вольты и выводит в сериал, если всё это прописать используя регистры микроконтроллера, то получится в несколько раз больше кода. Но в данном случае больше не всегда значит хуже, я бы даже сказал наоборот. Почему так? Об этом я расскажу ниже.

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

В папке среды разработки по пути \hardware\arduino\avr\cores\arduino лежит ядро Arduino, там есть файл wiring_digital.c, где собственно и прописана наша «прожорливая» функция digitalWrite, мы встретим там следующие строчки:

void digitalWrite(uint8_t pin, uint8_t val)
void digitalWrite(uint8_t pin, uint8_t val)
{
	uint8_t timer = digitalPinToTimer(pin);
	uint8_t bit = digitalPinToBitMask(pin);
	uint8_t port = digitalPinToPort(pin);
	volatile uint8_t *out;

	if (port == NOT_A_PIN) return;

	// If the pin that support PWM output, we need to turn it off
	// before doing a digital write.
	if (timer != NOT_ON_TIMER) turnOffPWM(timer);

	out = portOutputRegister(port);

	uint8_t oldSREG = SREG;
	cli();

	if (val == LOW) {
		*out &= ~bit;
	} else {
		*out |= bit;
	}

	SREG = oldSREG;
}



Вы только посмотрите, сколько работы она делает вместо того чтобы просто задать состояние порта(как например вот так PORTB = 32;). А сделано это неспроста, так как у ардуино низкий порог вхождения, как я высказался выше, тут присутствуют разные проверки аля «защита от дурака». Например, если новичок по глупости забыл задать порт пин как выход, чтобы тот не перешёл в состояние Hi-Z(о котором ещё новичок не подозревает, скорее всего) и таким образом отпугнул его при первой же ошибке. Но за это приходиться платить повышенным потреблением ресурсов, как вы сами видите.

А теперь давайте перейдём к осциллографу, как я и обещал в начале статьи.

image

У меня есть две идентичные китайские Arduino Pro Mini которые размещены на одной и той же макетной плате, то есть у них будут одинаковые условия. Давайте прошьём одну из них «мигалку» только без задержек и посмотрим что будет на экране осциллографа:

image

Один пример написан на языке ардуино, а второй работает непосредственно с регистрами:

image

Синий луч осциллографа(КАН2) — это обычный ардуиновский код, как можно видеть, частота переключений из логической единицы в логический ноль у жёлтого луча(КАН1) больше:

image

2.67 против 0.094 МГц, разумеется что емкость порта микроконтроллера не даёт получить чистый меандр как в случае кода ардуино, но если присмотреться, то и там фронты далеко не чистые:

image

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

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

image

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

Должен признаться я и сам «ардуиншик», и работаю по большей с Arduino платами, например копия Pro Mini у китайцев стоит не так уж дорого, разумеется что дешевле «голого» микроконтроллера, но как я уже сказал выше, не всегда находиться время и желание заниматься разводкой платы с нуля, лично мне проще интегрировать в проект Arduino плату, особенно недорогие Arduino Pro Mini или немного более продвинутую Arduino Nano.

Так же, я люблю работать из средой разработки Arduino IDE, не взирая на её ограничения и неудобства, она может запуститься сразу, без каких либо настроек, просто скачал ZIP архив, распаковал куда нужно и всё, можно приступать к работе, да и к тому же занимает не особо много места если сравнивать с более профессиональным софтом, например Atmel Studio. И ещё, тут есть одна полезная фишка — автоформатирование(комбинация клавиш Ctrl+T):

image

Разумеется есть такое понятие как «правило хорошего тона», и себя нужно приучивать к этому с самого начала, но если есть такая фитча то почему бы её не пользоваться?

Ещё из удобств в Arduino IDE появилась возможность в настройках включать нумерацию строк и сворачивание кода:

image

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

К тому же Arduino IDE, как вы заметили, умеет «переваривать» не только свой язык но и Си и даже ассемблер.

P.S. Вообщем суммируя написанное в статье и сказанное в видеоролике выше, Сергей ПоделкинЦ хотел бы всем пожелать развиваться, ардуино это не предел тех возможностей которые даёт мир микроконтроллеров, правильно же говорит народная мудрость «Век живи — век учись».

Ссылки по теме:

Всё новое — хорошо забытое старое;

Свежая версия Arduino IDE лежит тут;

Arduino на википедии;

Как экономить память на Arduino?;

Все мои публикации на geektimes.
А как относитесь к теме Arduino Вы?

Проголосовало 813 человек. Воздержалось 163 человека.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Комментарии (149)


  1. DIHALT
    24.01.2016 20:16
    +15

    Ща начнется…


    1. WolFman
      24.01.2016 20:21

      Именно. Запасаюсь попкорном :)


      1. AlexanderS
        24.01.2016 20:27
        +1

        А меня кот порадовал! Автор, у вас от статики ничего не «дохло» никогда?))
        У меня случай был, когда кот «пробил» планку памяти для компа. С тех пор я опасаюсь этих животных если электроника открытая)


        1. DIHALT
          24.01.2016 20:31
          +2

          Ты моего кота не видел. Это натуральная электростанция, его даже гладить порой больно — шибает так, что искру видно. На каждой итерации поглажки. И ничо, еще ничего не сдохло.


          1. HWman
            24.01.2016 20:34

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


            1. DIHALT
              24.01.2016 20:47
              +2

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


          1. Halt
            27.01.2016 09:47

            И ничо, еще ничего не сдохло.
            А ты не пробовал антистатический браслет снимать, хотя бы на время? :)


            1. DIHALT
              27.01.2016 10:25

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


              1. Meklon
                27.01.2016 10:39

                Я мосфеты почему-то статикой часто убивал. Сухо в помещении.


                1. DIHALT
                  27.01.2016 10:41

                  Они могут, да. Особенно п канальные. Хотя я с ними тоже не парюсь, живут падлы.


        1. HWman
          24.01.2016 21:13

          Пока ещё ничего не пробивало, да и я как-то об этом не думал…


  1. AlexanderS
    24.01.2016 20:23
    +15

    Холиварная тема однако опять на гиктаймсе)
    Знаете, это как в медицине говорят, что яд от лекарста отличается только дозой.
    То же самое и тут. У ардуины есть вполне своя определённая ниша. Причём её не только заполняют только новички, но и вполне «образованные» в микроконтроллерах люди по причине, как это было верно в статье замечено, порой банальной лени. Если мне нужно выстроить логику для трёх входящих сигналов и пары исходящих — да мне проще купить китайскую ардуину нано, перепрошить загрузчик на optiboot (чтобы watch dog нормально заработал), ну и нескольок проводкой и пару резисторов с диодами припаять, всех затрат рублей на 400.
    Опасность-то и отторжение, так скажем профессионалов, тут другая — народ который раньше в глаза ни микроконтроллеров, ни ПЛИСов в глаза не видел, посидев на ардуине пару лет, вдруг осознаёт себя нехилым «электронщиком», хотя на самом деле таковым не является, т.к. понятия не имеет как устроен контроллер и не понимает некоторые технические аспекты типа зачем нужно делать подтяжки на пины, ставить фильтрующие конденсаторы и т.д. Т.е. на самом деле он только в начале пути по сути и нужно книжки читать, а не только сидеть на амперке и смотреть на картинки с ШИМ)

    Ардуина — вполне себе вещь. Надо только понимать где её резонно использовать, а где нет. Для макетирования, например, — вполне подойдёт. Я на работе как-то при ремонте «спас» часы старые советские. Которые от 24В управляют разнополярными импульсами напряжения раз в секунду. Набодяжил платку с ардуиной для управления. Воткнул туда понимающий и повышающий dc/dc, кучка мосфетов и проводков. Работает уже полгода)) Хотел сюда небольшой обзор запилить, но никак времени нет, да и ничего особого технически вроде тоже нет)


    1. DIHALT
      24.01.2016 20:32
      +5

      Дада и схемы управления лифтами делать :)


      1. AlexanderS
        24.01.2016 20:39

        Нееее, если уж и делать для лифтов, то на марсоходе)


        1. DIHALT
          24.01.2016 20:48
          +8

          geektimes.ru/post/258540
          вы не видели этот эпик?


          1. AlexanderS
            24.01.2016 21:36
            +2

            Теперь видел! Экранирование порадовало вообще особо! :)


      1. Astrei
        25.01.2016 14:47
        +2

        Меня с лифтом давно переплюнули. Прошлым летом на GeekPicnick в Москве можно было увидеть бортовой компьютер спутника CubeSat,

        угадайте с чем


        1. DIHALT
          26.01.2016 09:25

          Если кубсат сдохнет, то никто не пострадает кроме эго владельца. Так что нет, не переплюнули :)


      1. slovak
        26.01.2016 20:47

        image

        Устройство купленное в США за $600. Качество изготовления на уровне.


    1. HWman
      24.01.2016 21:26

      Согласен с Вами, времени не хватает. Я эту статью и видео подготавливал ещё с рождества, а закончил только сегодня.


      1. AlexanderS
        24.01.2016 21:41
        +1

        О, так это довольно быстро. У меня на статью минимум месяц уходит))


    1. sav13
      25.01.2016 06:00

      image
      Аналогично. Восстановил старые часы. Удивительно хорошо сохранились латунные механизмы которым больше 60 лет!


      1. AlexanderS
        25.01.2016 06:08

        Они самые!


  1. dcoder_mm
    24.01.2016 20:30
    +8

    В целом, ардуина для электронщиков (эмбеддеров, радиолюбителей, you name it) вредна примерно так же как популярные лекции по астрофизике для научного сообщества. Любители мигать светодиодами конечно раздражают, но из 1000 школьников собравших по готовым исходникам метеостанцию, будет 10 которые потом захотят подробно разобраться в том что они сделали и изучать вопрос глубже. Без дуины их было бы несколько меньше.

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

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


    1. istui
      24.01.2016 20:41
      +4

      тем самым они расширяют рынок людьми из других сфер — учеными, artists (ни один перевод не передает все оттенки), школьниками, «чистопородными программистами» (кто не общался до этого с железом).

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


      1. dcoder_mm
        24.01.2016 20:57

        перейти на уровень ниже можно всегда, и это лежит на совести тех кто создает обучающий материал. увы, в случае ардуины я редко видел хотя бы намеки на попытки углубиться в принципы работы библиотечных функций. То есть хочется видеть что-то типа «а это analogRead(); внутри она работает вот так — и дальше много текста для интересующихся». Но как показывает практика, мир устроен не так.

        Хотя согласен, ардуина это меньшее из зол, если сравнить с аналогами.


        1. istui
          24.01.2016 21:13
          +2

          на оф. сайте — увы, на сторонних — все расписано. Кому действительно интересно, тот найдет.
          Жаль, что они закрыли вики на главном сайте, можно было бы улучшать тексты…

          А изначально я имел в виду аппаратные решения. Мы присоединяем не абстрактный «кубик» с Ethernet-портом, а Ethernet Shield. На него есть схемы, чертежи, видно все дорожки — он не залит пластмассой в конце концов :). Кому интересно, посмотрит его схему, купит себе несколько чипов W5100, попробует что-то сделать самостоятельно, на своей плате с W5100 и МК в габаритах Pro Mini, а потом узнает, что есть еще более эффективные решения. Знания, добытые подобным «полуигровым» способом — наиболее прочные.


        1. HWman
          24.01.2016 21:32

          Как показывает моя практика — делать подробные уроки это не совсем благодарное занятие, хотя находятся энтузиасты как например HomoFaciens.


  1. istui
    24.01.2016 20:38
    +3

    Я всегда говорю, что Arduino — это jQuery. Обе очень популярны, обе неоптимальны по сравнению с vanilla, у обоих низкий порог вхождения. И у обоих огромное количество плагинов/библоитек для всех возможных целей.

    Лично мне например проще при нехватке времени воспользоваться «фреймворком» Arduino — быстро развести свою плату, быстро написать скетч с использованием готовых либ и поместить это в корпус. Ответственные либо требовательные к ресурсам вещи пишу на vanilla C.


  1. Hellsy22
    24.01.2016 20:43
    +5

    Почти все тоже самое написано и в ардуиновской статье «Port Manipulation».
    Типа, если вам очень нужна скорость, одновременность или вы выжимаете все, что можно из памяти — используйте регистры.

    Однако, вариант с регистрами куда вероятнее приведет к многочасовой отладке, потому как не очевиден — сейчас вы помните как обращаться к пину 13, а через неделю? А через полгода?

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

    #define fast_pin_up13 PORTB&=233; // Автор, я сэкономил еще несколько тактов, избавив от двух ненужных вычислений.
    #define fast_pin_dn13 PORTB|=32;

    fast_pin_up13;
    fast_pin_dn13;

    Насчет отношения некоторых «специалистов и профессионалов» — это обычный снобизм. Ардуино — это как PHP в мире электроники. Кто угодно может помигать диодом в свое удовольствие или пощелкать реле. Соотв. это же порождает и огромное количество новичков, которые только разбираются в вопросе, но что-то пробуют делать. Меня вот тут как-то долго убеждали в диалоге (кажется, ignat99), что я ничего не понимаю в серийном производстве плат с МК вообще и их сертификации в частности, хотя я не собирался ничего сертифицировать и серийно производить, о чем сказал собеседнику минимум трижды. Но у него, видимо, накипело. Впрочем, это все равно было познавательно.


    1. mlu
      24.01.2016 23:41
      +5

      >> #define fast_pin_up13 PORTB&=233; // Автор, я сэкономил еще несколько тактов, избавив от двух ненужных вычислений

      Боюсь, что не сэкономил, а немного усложнил понимание для человека :) Любой нормальный (и не очень) компилятор посчитает ~(1 << 5) «в уме» и в машинном коде вместо этого вычисления будет всё та же константа.


      1. Hellsy22
        25.01.2016 12:48

        Да, вполне вероятно. Разница в скетчах — 4 байта, но это, скорее всего, обусловлено типизацией.


        1. ignat99
          25.01.2016 13:04
          -4

          Не поминайте ignat99 в суе:
          1. Микрочип купил Атмел (по слухам). Поэтому в течении года лучше всем перебраться на PIC32 и забыть об AVR.
          2. Olimex выпускает Ардвино в отличном форм факторе: https://www.olimex.com/Products/Duino/AVR/OLIMEXINO-NANO/open-source-hardware
          3. Olimex анонсировал FPGA (ПЛИС) шильд iCE40HX1K в этом же форм факторе NANO, который работает в 4 раза быстрее на SPI и в 80 раз быстрее может дёргать пины чем да же программа на СИ под Arduino.

          Вот можно ознакомиться с IP блоками доступными для iCE40:
          http://www.latticesemi.com/en/Products/DesignSoftwareAndIP/IntellectualProperty.aspx

          Выводы очевидны — зачем AVR, если есть FPGA за ту же цену, или PIC32 который имеет частоту 200 МГц и у которого нет проблем при покупке большой партии под нужды компании.

          PS: И ESP32 то же не кто не забывает. Так что для AVR вообще уже места нет.


          1. DIHALT
            25.01.2016 13:50

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


          1. Hellsy22
            25.01.2016 14:25
            +1

            > зачем AVR, если есть FPGA

            «Зачем нужен процессор, если есть видеокарта за ту же цену».
            Дешевый FPGA — это замечательно. Обязательно посмотрю его в деле, когда он начнет на Али стоить 1-2$.

            > И ESP32

            В конце прошлого года для ESP8266 какие-то особо одаренные китайские мыслители убили очередь отправки данных через сокет (типа, ее все использовали неправильно и потому девайс крашился из-за оом). И на все вопросы у них один ответ — вот будет ESP32 с нормальной ОС…


            1. ignat99
              25.01.2016 15:10

              «Та же цена» для FPGA шильда от Olimex это между 5-20 Евро. Боюсь 1-2$ не дождётесь. Понятно что он будет работать в комплекте с самим мк в формфакторе NANO, но надеюсь, AVR для этого размера платы (NANO) Цветан (директор Olimex) заменит на PIC32 в ближайшее время…


    1. ignat99
      25.01.2016 14:08

      Сообщение из Твиттера Olimex: «iCE40HX1K shield for OLIMEXINO-NANO you can program the FPGA via Arduino IDE».


  1. Konachan700
    24.01.2016 20:51
    +11

    А какая альтернатива у любителя ардуине?
    Ладно, платы делать на заказ недорого стало. Но эти платы надо развести. Человек лезет в игл или pcad и что он видит? Крутой САПР, да. Он тут же закрывает в ужасе его и покупает ардуино — потому что изучить этот софт это неделя минимум, а так месяц-полтора, если особо времени нет. А еще надо знать и держать в голове типы корпусов, разъемы, производителей, брать где-то в розницу рассыпуху… Запайка это тоже эпопея, так как архаичные DIP-корпуса уже стоят, как настоящий раритет, а остальное паять — изволь купить станцию, да не абы какую, а хорошую. Дальше достань пару материнок негодных и по урокам с ютуба научись паять эти корпуса. Но теории мало, как и тренировки на кошках, и подпаленные чипы все равно будут.
    Сможет все это новичок? Нет, испугается и бросит. Как бросают рисование те, кого неумные преподы начинают мучать кубами и кувшинами. Как бросают музыку, кого преподы до полусмерти замучивают гаммами и аккордами. Да, азы знать надо, но пока сам человек не поймет, что ему это нужно, все тщетно. Ардуино закрывает потребность нубов в самоделках, не требуя специфических знаний и навыков. Это хорошо, это приводит в отрасль множество людей, и часть из них рано или поздно начинают профессионально развиваться.
    Другое дело, что отдельные личности пихают ардуино в коммерческие применения, вот это действительно ахтунг. Но тут не ардуино виновата, а халтурщик, делающий это.


    1. DIHALT
      24.01.2016 21:02
      +7

      Это то ладно. Когда чел лепит радостно на проводках это можно понять. Лень, быстро и сразу… Меня вымораживает другое. Когда человек осваивает все эти мощные сапры, открывает какой-нибудь pcad и рисует там печатку, потом по хардкору травит плату в которую будет… впаиваться ардуино. А что сразу развести на той же плате микроконтроллер и прошить его тем же ардуиновским загрузчиком ему религия не позволяет? Это какой то ардуиноз головного мозга в терминальной стадии.


      1. dcoder_mm
        24.01.2016 21:05

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


        1. DIHALT
          24.01.2016 21:06
          +1

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


      1. Konachan700
        24.01.2016 21:14
        +10

        Тут собака в другом зарыта. Китайские ардуино идут по цене самого микроконтроллера в рознице. Или близко к этой цене, особенно мелкие версии типа про мини на 168/328. Это из той же оперы, что блютусы и прочие модули — можно купить уже готовый модуль и запаять, а можно бегать искать рассыпуху для запайки в свою плату, по деньгам тоже самое, но еще есть риск всю эту мелочь кривыми руками перегреть. А еще там есть неявные вещи, на которых китайцы уже прошлись по граблям и сделали модуль…
        Да, это не труЪ-путь и в продакшн такое выставлять нельзя, но вот для хоббийной разработки это вполне себе реальная альтернатива. Я сам отдам предпочтение миниатюрному 9axis-модулю, а не буду ставить три крошечных корпуса и кучу 0102 рассыпухи — я не смогу так плотно развести плату с первой попытки, как сделали это китайцы, разве что куплю модуль и срисую.


        1. DIHALT
          24.01.2016 23:28

          Ага и глючат безбожно то там то тут. Они же не спроста такие дешевые.


      1. Hellsy22
        24.01.2016 21:23
        +7

        Что можно выиграть, взяв чип вместо платы с разводкой? 0.5$ и немного места. Стоит ли это дополнительной возни?


        1. DIHALT
          24.01.2016 23:28
          +1

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


          1. woddy
            26.01.2016 15:42
            +1

            Как-то мне понадобилось несколько устройств с cp2102. Развел, заказал на заводе платы. Попытался купить чипы. Хаха. Пришлось купить usb адаптеры и феном пересаживать.

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


      1. Meklon
        25.01.2016 10:18
        +7

        Стыдно-стыдно… А если я ну совсем врач. И для моих задач этого хватает? Более того, экспериментальное железо чаще всего одноразовое. Типа на пару тестов собрать и потом обратно на запчасти. Тебе спасибо огромное, что убил основы и хорошие статьи писал. Без этого было бы очень сложно. Но не всем нужно опускаться до жутковатого синтаксиса C. Многим хватает понимать более или менее физику процессов, принципы снижения помех в платах, базовые паттерны применения рассыпухи в разных случаях. А логика самой программы иногда до идиотизма проста.

        Мне, например, надо было лишь очень точно измерять напряжение и крутить насос перистальтический по этим показателям. Измерение напряжения зависит от помех в схеме и хорошего экранирования. Тут загрузчик и убогая IDE никак не повлиять. Крутить насосом мне тоже надо абсолютно стандартно. Библиотеки от adafruit позволили не тратить кучу ценного времени на отладку. Воткнул АЦП и заработало. Только над правильной разводкой долго думал и изучал мануалы.

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


        1. DIHALT
          25.01.2016 12:14

          ну я как бы не про то коммент писал.

          Я то про аппаратную, а ты про софтверную часть. Тут я соглашусь, готовых библиотечных решений очень много и это большой плюс для неспецов. Налепил библиотечек и готово.


          1. Meklon
            25.01.2016 12:37
            +1

            Так и у меня впаяная ардуина. Ибо работает, а у меня куча этих Arduino Nano. Ты прав, бесспорно, но тут надо разделять категории пользователей. Я не железячник, мне нужно минимизировать время на разработку и отладку. Если работает — трогать не буду. Если человек продает изделия со впаянными ардуинами, то за это отстреливать надо, согласен. То есть по факту у меня разведенная плата-прототип, она же конечное изделие. Ибо экспериментальная железка.


            1. DIHALT
              25.01.2016 12:38
              -2

              А смысл? Ведь все равно плату делал, все равно паять. Так запаял сразу же все. Оно и компактней будет в разы.


              1. Meklon
                25.01.2016 13:19
                +1

                Компактность не нужна, ардуина уже как готовый модуль-расходник. Зачем мне тратить время на разводку дополнительно? Никакой выгоды для меня. по факту нет принципиальной разницы напаял ли я модуль-breakout АЦП ADS1115 с обвязкой готовый или впаял «управляющий модуль» Arduino Nano, который как раз имеет удобные выводы параллельными рядами. Просто еще один уровень абстракции для непрофессионала.


                1. Alexeyslav
                  25.01.2016 15:45

                  Боюсь еще и очевидных косяков при разводке внесёте в конструкцию, из-за которых будет работать 50 на 50 и сбрасываться от любого чиха.


                  1. Meklon
                    25.01.2016 22:06

                    Вроде все корректно. Я правда старался и читал мануалы) даже постарался изобразить чистую и грязную землю отдельно. И много много конденсаторов керамических где ни попадя))


            1. JC_Piligrim
              25.01.2016 16:44
              +1

              Не надо никого отстреливать! :)

              Вы же не отстреливаете повара за то, что в ресторане вам подали стейк из говядины, которую закупили у фермеров, а не вырастили сами на заднем дворе ресторана. Если человек сделал какую-то интересную и полезную фиговину на ардуине для себя, а потом оказалось, что эта фиговина нужна ещё двум десяткам человек — не вижу никакого криминала, чтобы он собрал её так же на ардуине, без этапа «причёсывания» и разработки отдельной платы с тем же микроконтроллером и без лишней обвязки. А если завтра с апдейтом прошивки появится новая функция? При ардуине внутри пользователю достаточно будет шилдик докупить прицепить к ней, а в случае с «монолитным» решением — отзывать партию и перепаивать, если не предусмотреть «порты расширения» заранее. Это как с программными фреймоврками. В релиз попадает куча лишнего кода, который никогда не будет задействован, но на фреймворке проще и быстрее решать многие задачи.


        1. Meklon
          25.01.2016 12:38

          убил основы *дал основы


      1. Roman1977
        25.01.2016 16:23
        +1

        Очень очень уважаемый DIHALT. Я не освоил Игл, протеус. Платы я разводу в ворде 2003. Прям из него печатаю и травлю ЛУТом. И я в своих увлечениях, которыми теперь интересуется и мой сын, именно так и планирую делать. В частности велоспидометр. Плата с панелькой под ардуино нано, в обвязке будет К176ИЕ4, пара транзисторов и 8 резисторов для управления семисегментным индикатором в динамическом режиме, ещё пара транзисторов для управления стоп-сигналом и поворотниками, несколько кнопок, LM7805 и батарейка крона. С панелькой потому, что из инструментов у меня 40 ваттный паяльник, купленный тридцать лет назад в моём детстве, маленькие пассатижи, пинцет, лупа семикратного увеличения, китайский тестер, показывающий ноль при измерении напряжения на выходе импульсных БП, серп и молот. В магазинах электроники на вопрос «А есть ли у вас микроконтроллер фирмы Atmel ATmega 328?» мне говорят «Нет, и никогда не было». Свою арду нано я заказывал в Московском инетмагазине Неотой, и ждал два месяца. И потому я не уверен, что смогу самостоятельно изготовить аналог из голого МК. Спидометр надоест сыну за одно лето. Тем более, что китайский в магазине стоит 700 руб. А эту нану мы впоследствии можем использовать ещё не раз.


        1. DIHALT
          25.01.2016 18:26
          +5

          Платы? В Ворде? О_о…


          1. Meklon
            25.01.2016 19:47
            +1

            Хардкор, да.


          1. ploop
            25.01.2016 21:33
            +2

            Ну вот, а ты всё "… ардуину в плату впаять" :))


        1. Hellsy22
          25.01.2016 18:55

          Один знакомый геймер ухитрился привыкнуть вместо WASD к какой-то дикой раскладке типа QW и две кнопки мышки для бега вперед. Это приводило к тому, что он регулярно путался в клавишах и сталкивался с огромным количеством сложностей. На все увещевания типа «прекратить страдать ерундой и переучиться» отвечал, что «ему так удобнее».

          Так вот, для начинающих практически везде рекомендуется Sprint-Layout. Он по сложности освоения близок к Пеинту или Блокноту. Почему Ворд? Зачем Ворд?

          Зачем связываться с российскими реселлерами? Что вам мешает заказать эту Arduino Nano из Китая? И зачем повторно использовать контроллер, стоящий дешевле банки пива?

          Ну и инструмент вызывает недоумение — понятно, что не все могут позволить себе хорошую паяльную станцию, но паяльник с регулировкой температуры (не мощности) и необгораемым жалом стоит где-то 25-30$.


          1. DIHALT
            25.01.2016 19:58

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

            Но вот софт совершенно не подходящий для рисования вообще? Хотя может это олдскульный хардкорщик и рисует платы в ASCII арте?


        1. Bluewolf
          25.01.2016 21:27

          Кстати, почти всеми не слишком крупным семисегментными индикаторами с напряжением на сегменте не больше 4-х вольт и которым хватает 40 мА на все сегменты, можно рулить в динамическом режиме напрямую выходами МК\Ардуины, добавив только резисторы, транзисторы и микросхемы не нужны.


        1. Alexeyslav
          25.01.2016 23:09

          Sprint Layout 6 хотябы освоить, почти как в ворде только лишние кнопки не мешают.
          А онлайн-магазинов есть много, есть ведь где и поближе — быстрей доставят.
          Да, все-таки советую использовать HC595 а не К176ИЕ4, они в будущем тоже пригодятся не только чтобы на сегменты что-то выводить. И брать сразу горсть, их всегда не хватает.


          1. Roman1977
            26.01.2016 14:56
            +1

            Отвечу здесь всем сразу. Да, в ворде. Потому, что он есть в каждой конторке печати документов. И чертёж печатается 100% в масштабе один к одному. Конечно, может я туп. Может просто поленился детально разобраться в орле. В каком формате он может отдать чертёж, если не сразу его печатать? Принтер у меня только струйный. И то давно стоит колом из-за конского ценника на картриджи. Схемы у меня простые. Максимум три DIP корпуса не считая рассыпухи. Шаг сетки у ворда в режиме векторной графики 0,1 мм. Объединение позволяет просто переносить группы контактов из чертежа в чертёж. Рисую дорожки со стороны деталей. Ошибок меньше, зеркалить не надо. Двухсторонки не делаю. Хоть иногда и куча перемычек. Рулить двухразрядным семисегментным индикатором сразу от ног МК конечно можно. Но это всё равно динамический режим. Анод (катод) то общий. А значит всё равно МК будет постоянно дёргать ногами, переключая вывод с разряда на разряд. Количество потребных ног: 7 на разряды, одна на точки десятичных знаков, две на транзисторные ключи дёргать аноды (катоды). Итого ДЕСЯТЬ. В моём варианте: одна — накидывать микрухе импульсы (количество по требуемому значению числа в разряде), одна — точки, две — аноды (катоды) Итого: ЧЕТЫРЕ. Логика скетча проще, какая никакая, а защита ног МК от коротыша в индикаторе. Да и индикатор можно повесить попрожористей, а значит поярче. А если поставить две микрухи, можно и от динамической индикации отказаться. Русская кушает импульсы с частотой до мегагерца. Импортная — до 15 мегагерц. Так что пофигу. Хоть десять раз в секунду накидывать до 99 импульсов, всё равно успеет. Почему русская — да потому, что импортную у нас не найти. Заказ из Китая… Сам ничего не заказывал. Родня… Не электронику. Бисер, камушки, фурнитуру для поделок. Шло два месяца. Говорят, на фотках али всё красиво. А пришло так себе по качеству. И были позиции, которые вообще не пришли. Но тут скорее всего Почта России… :( Да и с таким курсом доллара нынче и с Китая заказывать уже не дёшево. Кстати! Светодиоды там стоят рублей пять — шесть штучка. А китайская новогодняя гирлянда 100 светодиодов 4 цвета у нас стоит 150 р. Итого 15 коп за светодиод. Но это уже пример находчивости голи, той, что на выдумки хитра :( Инструменты… Это вообще боль… Паяльник с хромированым жалом — от 700 руб. Припой с флюсом внутри — от 200 за буквально граммы. Моя голь (а может это жаба?) давно надоумила дербанить всю дохлую электронику на детали. БП компов, матричные принтеры. Даже бортовые компы японских авто, блоки управления вентилятором печки, сигнализации из битых машин, покупаемых другом под разбор. Ну вот и припой оттуда. :) Всё мечтаю найти на какой нить материнке микросхему RTS :) Гуглю… Но никакой инфы толком. А материнки есть… :)


            1. Roman1977
              26.01.2016 15:48

              Упс… Забыл про ногу сброса микрухи в ноль. 11 против 5.


              1. Roman1977
                26.01.2016 16:05

                Да блин… :((( Конечно же десять против пяти. НО всё равно экономия ног в два раза.


            1. Alexeyslav
              26.01.2016 15:56
              +1

              На материнках нет отдельной RTC, она реализована на части большого чипсета в виде OTP-части кристалла… Единственное что на материнках иногда попадаются операционники в SMD-корпусах вроде LM358 и транзисторы NPN общего применения как КТ315 только SMD.

              АлиЭкспресс — та ещё контора мошенников! Ebay с PayPal в этом отношении как-то посерьёзней и надёжней, хотя там чуточку дороже(у меня из 300 заказов за 5 лет наверно 5...7 не пришли). Но и там нюх тоже терять не стоит, есть уловки продавцов.

              Сохраняй схемы в PDF… виртуальный принтер тебе в помощь. Он позволяет открывать везде документ для печати 1 к 1.
              Sprint Layout в этом отношении лучше ворда, в нём схему можно проектировать в естественном виде — со стороны деталей а перед печатью «отразить» изображение. Та же самая группировка, ОЧЕНЬ наглядное и простое создание своих компонентов и раздеребан готовых.
              Ну и на закуску — по выбору дюймовый и метрический шаг сетки, можно установить произвольный. Если задавать в миллиметрах то уже для 16-выводных корпусов и выше(155ИД3 например) сильно расходятся отверстия с выводами.

              Припой… не такой уж дорогой, 200грамм диаметром 0.8мм с добавлением 2% серебра хватит наверно на всю жизнь если не заливать им все платы(большие капли припоя обладают меньшей механической прочностью на большом отрезке времени и легче трескаются от температурных перепадов).

              Регистры сдвига использовать удобнее. Их подключение к контроллеру можно сделать универсальным, и плату с индикатором соединять всего 5-ю проводами, независимо от количества сегментов — наращивать можно до тех пор пока хватает источника питания. Это пригодится в будущем. Впрочем, есть даже целая микросхема которая по I2C реализует динамическую индикацию на 8 разрядов 7-сегментного индикатора. Есть и под матрицы 16x24 с поддержкой 4 уровней градации яркости каждого сегмента. Есть регистры сдвига сразу на 16 бит с драйверами под светодиоды на выходе — т.е. никаких резисторов на сегменты, напрямую светодиоды подключаются — меньше пайки, меньше деталей.


            1. x8973
              28.01.2016 11:14

              А как насчет печати в PDF? Если я не ошибаюсь, любой компьютер сейчас умеет открывать и печатать PDF.
              Далее. У SprintLayout'а имеется в комплекте утилита-просмотрщик с функцией печати, которую можно скинуть на ту же флешку с чертежом. Да и сам SprintLayout отлично с флешки работает.


              1. Alexeyslav
                28.01.2016 12:11

                Не везде дадут что-то запускать на печатающем оборудовании, тем более там что-то делать в программе. И это отличный способ нахвататься троянов! Да и банально может не оказаться Windows для запуска приложения…


                1. DIHALT
                  28.01.2016 15:53

                  Ну уж PDF умеет печатать любая контора по печати. Это такой же документальный стандарт как и ворд.


              1. Roman1977
                28.01.2016 15:52

                PDF вроде всё хранит чуть ли не в jpeg'ах. Сколько не печатал их — контрастность довольно низкая. Белое — нифига не белое. А с чёрными точками. Может быть любой комп и открывает PDF. Но однозначно ни одна тётя в конторе по распечатке и ксерокопированию документов ни за что не согласится открыть с флешки исполняемый файл. Только файлы данных. Давайте остановимся на том, что пока это дело моего вкуса. Вот приспособился я так. Понимаю, что это не правильно. Возможно, когда нибудь и перейду на спринт или орла.


                1. Alexeyslav
                  28.01.2016 18:19

                  Это зависит только от того КАК был сформирован документ. Если это скан, то само собой будут артефакты, а если он создан вектором то будет просто идеально всё. Вплоть до того что в PDF-документ встраивается шрифт, которого может не оказаться на целевой системе(китайский, например).
                  Соответственно Sprint сохранит в документ именно в векторном виде, так как он выводит это на принтер используя подсемейство языка PCL.


                1. SunX
                  28.01.2016 18:56
                  +1

                  Я как истинный нищеброд и сторонник лицензионного ПО использую для разведения план программку PCB (http://pcb.geda-project.org/). Не знаю, как другие, но она генерирует замечательные файлы для печати без каких либо артефактов или нечерного черного.


                  1. ploop
                    28.01.2016 23:34

                    Хм, не знал про такую. Собрал, работает, выглядит неплохо.


                    1. SunX
                      28.01.2016 23:53

                      Ну Eagle я не осилил — он для меня оказался слишком сложным, а Sprint Layout слишком дорогой для того, что бы разводить по плате в полгода. А больше я особо вариантов и не нашел для Linux (ну точнее есть еще KiCad, но с ним у меня что-то не получилось).

                      Ну и вообще все вполне просто и легковесно.


                      1. x8973
                        29.01.2016 08:39

                        А SprintLayout что, платный? О_о
                        В сети полно ломаных русифицированных версий. Но я вам этого не говорил)


                        1. ploop
                          29.01.2016 09:00

                          В сети невозможно найти НЕ ломаную версию :) Не знаю, оф.сайт работает у них или нет сейчас.


                          1. SunX
                            29.01.2016 09:54

                            Где-то пол года назад я точно находил не ломаную версию на их сайте.


                      1. ploop
                        29.01.2016 09:08

                        Мне KiCad больше по душе, так как если разводить что-то сложнее диодного моста, велика вероятность ошибок, и всякие автоматические контроли спасают. Пару лет назад разводил плату на 400+ компонентов, так макет заработал с первого(!) раза, ошибки несоответствия платы и схемы, и даже ошибки в схеме, вычищаются на этапе проектирования. Простой пример: цифровой выход микросхемы случайно заземлили, перепутали вход и выход стабилизатора, ну и всё в этом духе. Контроль схемы заругается ещё до начала работы с платой.

                        Правда не работал уже давно с ним, времени на хобби всё меньше…


    1. entomolog
      25.01.2016 06:53

      Я помню (лет десять назад это было), если надо быстро что-то смакетировать, брал AVR-ку, и прямо к DIP корпусу тоненькими проводками припаивал питание и «программатор», который представлял собой ничто иное как 5 проводков припаянных к LPT. Далее в зависимости от потребностей макета, припаивал светодиод/реле/пищалку. В итоге, на это времени уходило меньше пяти минут. Если нужно что-то сложнее, то без разводки платы тут никак.
      Гораздо больше проблем с софтом было. Начинал я с wavrasm + PonyProg. Потом, когда освоил C, переполз на AtmelStudio + WinAVR, но прошивал по прежнему PonyProg'ом (почему не помню). Неправильными фьюзами я попортил несчетное колличество кристалов.
      Для старта, от более простой среды я в то время не отказался бы.


    1. x8973
      25.01.2016 13:32

      Насчет крутых САПРов не соглашусь. Начинал знакомство с МК с msp430. Разводил сразу в Sprint Layout'е. Никакого дискомфорта не почувствовал. Было это 5 лет назад.
      Сейчас спокойно развожу сложные платы в том же SL'е, паяю на них TQFP и TSSOP-корпуса, пишу достаточно сложные прошивки, подумываю о разработке собственного бутлоадера для AVR. На работе с ARM'ами ковыряюсь.
      Понимаю, что Ардуино удобна для макетирования, но делать законченные устройства на ней — как по мне, это верх безумия.
      Кстати, насчет модулей и плат расширения — удобно иметь на уже готовой фабричной плате датчик с уже разведенной обвязкой. Но цена таких модулей действительно отпугивает.


  1. HWman
    24.01.2016 21:21
    +1

    И тут кот осознал что он попал на Geektimes
    image


  1. ploop
    24.01.2016 21:47
    +1

    Щупы осцилла пробовали подстроить? Не должен так заваливать фронты на 2 МГц :)


    1. HWman
      24.01.2016 22:00

      Разумеется.


      1. ploop
        24.01.2016 22:03

        Странно. У меня 1102, хоть и покруче, но не думал, что они так отличаются. Вот 1МГц с контроллера, тоже на соплях

        image


        1. HWman
          24.01.2016 22:08

          А Вы к какой ножке подключились?


          1. ploop
            24.01.2016 22:39

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


            1. HWman
              24.01.2016 22:51

              Ну, выход микроконтроллера это не совсем то, что вы называете пуш-пул.


              1. ploop
                24.01.2016 22:54

                эээ… в смысле?


                1. HWman
                  24.01.2016 23:21
                  +1

                  Вот примерно так выглядит эквивалент порта микроконтроллера:

                  image

                  А на что похожа Ваша схема?


                  1. ploop
                    24.01.2016 23:26

                    Вот то, что слева, когда DDRx = 1, и есть режим push-pull. Есть ещё «open drain» (режим с открытым коллектором), которого напрямую в AVR нет, но он легко эмулируется записью в PORTx = 1 и дёрганием DDRx

                    А на что похожа Ваша схема?

                    Какая схема? С осциллограммой сигнала? Так тупо осцилл на голую ногу МК.


                    1. ploop
                      24.01.2016 23:46

                      Вот то, что слева

                      Тьфу, справа!


                1. HWman
                  24.01.2016 23:25

                  Ага, нагуглил я обзор осциллографа откуда собственно и Ваш скрин.
                  Дело в том, что я для тестов использовал 13-й пин ардуино, он же и PB5. К нему ещё подключен светодиод с резистором, видимо они и накладывают свой отпечаток на сигнал. Но суть моей статьи не об этом. Я хотел показать разницу в быстродействии.


                  1. ploop
                    24.01.2016 23:27
                    +2

                    К нему ещё подключен светодиод с резистором, видимо они и накладывают свой отпечаток на сигнал.
                    А, ну это да, 100% загубит фронты.
                    Я хотел показать разницу в быстродействии.
                    И разжечь холивар :)


                    1. HWman
                      24.01.2016 23:30

                      До холивара тут ещё далеко ;)


                    1. dcoder_mm
                      25.01.2016 10:57

                      А, ну это да, 100% загубит фронты.
                      У uno кстати этот светодиод включен через буфер. Так что на фронты сильно влиять не должно. тем более, на том-же пине SCK от SPI.


  1. ncix
    24.01.2016 21:59
    +10

    Вопрос немного в сторону, как к поклонникам ардуины, так и к скептикам — почему код для микроконтроллеров обычно пишут абы как?
    Глобальные переменные, гигантские god-функции, отсутствие модулей вообще, magic-number'ы — это типичный перечень антипаттернов программирования, которые можно найти почти в любом коде как для ардуино так и для контроллеров, которые считаются более «тру»?
    Автор, вашего кода это тоже касается, кстати.


    1. HWman
      24.01.2016 22:04
      +1

      Просто надо нарабатывать профессионализм, это не приходит сразу.


      1. ncix
        24.01.2016 23:57
        +7

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

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


    1. Hellsy22
      24.01.2016 22:13
      +2

      1. Профессиональных программистов мало.
      2. Большая часть задач от «Hello world!» отличается лишь количественно.
      3. Ограниченность ресурсов.

      Из перечисленных вами антипаттернов проблемой являются лишь magic-number-ы — но их довольно часто выносят в define и комментируют — посмотрите любую библиотеку.


      1. ncix
        24.01.2016 22:29
        +1

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

        А почему вы не считаете раздутые функции и отсутствие модулей проблемой? Я уж не говорю про ООП, которое исключительно редко можно встретить.


        1. ploop
          24.01.2016 22:43
          +2

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


        1. Hellsy22
          24.01.2016 23:28
          +4

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

          Насчет популярных библиотек. Я вот сейчас копаюсь в NodeMCU: 65 контрибьюторов, больше года разработки и и все такое. А внутри все те же проблемы — магические числа, которые не внесены в документацию и даже не прокомментированы, портянки из жутких if-ов с перевернутыми параметрами ( if ( 1 == i ) ), отсутствие единой стилистики в названиях, бардак в типах (индексом одного и того же массива в трех функциях являются int, uint8_t и size_t), названия типов не отличающиеся от названий переменных и многое другое за что положено бить канделябром. Но код работает и понемногу развивается.


          1. DIHALT
            24.01.2016 23:32
            +3

            А что вам не нравится в перевернутых параметрах? Это же самопроверяющийся код.

            1=i даст сразу же ошибку синтаксиса. А i=1 спокойно себе скомпилируется и попробуй ее найти потом.


            1. ploop
              24.01.2016 23:52
              +2

              А i=1 спокойно себе скомпилируется и попробуй ее найти потом.

              С ворнингом. На которые тоже смотреть не мешало бы.
              Хотя всё от настроек среды зависит.


    1. DIHALT
      24.01.2016 23:30
      +4

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


      1. HWman
        24.01.2016 23:32

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


  1. AlNinyo
    24.01.2016 22:40
    +24

    Ох… Все «иликтронщеги» такие умные, прямо жуть берёт. Скажу вам пару слов как практикующий учитель, который пытается приобщить детей к электронике, программированию и прочим инженерно-техническим прелестям очумелых ручек. Я уже не раз про это писал, но, раз уж вы снова подняли ЭТУ тему, то и я повторюсь.
    Попробуйте, господа электронщики, взять группу (человек 10) детей 10-13 лет, у которых нет в школе информатики, у которых родители не инженеры и которые не понимают, почему батарейка не работает в пульте, вставленная «не тем концом». Посадите этих детей перед вашими любимыми микроконтроллерами и начните учить программировать «как гуру». Уверен, очень скоро от вашей группы останется 1-2 человека. Остальные разбегутся и близко потом не подойдут к электронике!
    Огромный плюс Ардуино в том, что с её помощью можно втянуть в программирование человека почти любого возраста с любым, даже нулевым, уровнем программирования и навыком работы с электрическими схемами! Со временем, при правильном подходе и объяснении, ученик сам поймёт, что Ардуино — не панацея и имеет кучу минусов. Тогда уже он САМ захочет изучить и работу с микроконтроллерами напрямую, и создавать полностью свои платы, не используя «дорогущие разноцветные готовые модули». Но сначала его надо вовлечь в это всё, дать основы для понимания. И для этого Ардуино очень здорово подходит.

    Может я и не прав, но в нашем центре «Юный техник» это работает: ребята (11-40+ лет) с разным уровнем подготовки с одинаковым удовольствием учатся основам с помощью Ардуино. Те, кто постарше, уже начинают поглядывать в сторону микроконтроллеров…
    Представьте ситуацию: приходит ребёнок (10 лет) в секцию фехтования. Он никогда не держал меча в руках, не занимался толком спортом. Насмотрелся фильмов про бои на мечах и пришёл учиться. Ему дают настоящий меч (чуть ли не с парня ростом, кстати), выкидывают на арену против пары тигров и начинают «учить». Как думаете, много в такой школе будет учеников? Да, несомненно, в ней будет учиться пара вундеркиндов/везунчиков, которые смогли, но…


    1. Hoksmur
      25.01.2016 11:49
      +3

      Спасибо, что готовите смену. :)


    1. GarryC
      25.01.2016 15:35
      -4

      А может, так и надо? Чтобы осталось именно 2-3 человека, которые не будут в будущем превращать ~(1<<5) в 233 для экономии тактов?


      1. AlNinyo
        25.01.2016 16:15
        +4

        Чтобы осталось 2-3 человека, надо сначала 10-20 человек НАЧАТЬ учить. Иначе велика вероятность, что, начав учить 2-3 человека, в итоге останешься без учеников совсем.


  1. r00tGER
    24.01.2016 22:46
    +4

    Обычная ситуация, когда профи пересекаются с любителями.

    Думаю, если спеца по встраиваемым системам усадить писать интерпрайз софт, то получим аналогичный итог.
    Повсеместно будут использоваться «красивые разноцветные модули» — толстые фреймворки. Которые, можно было бы заменить парой своих строк кода.


    1. OnYourLips
      24.01.2016 23:36

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


      1. r00tGER
        25.01.2016 08:37

        В интерпрайзе у новичка нет шансов протащить в проект «отсебятину». Сверху есть четкие инструкции, что надо использовать. Одна из причин, почему интерпрайз многие не любят — код под контролем бюрократии.

        А дома, новичок, пусть хоть ОС свою пишет.


        1. Bluewolf
          25.01.2016 21:32

          Энтерпрайз — это толстая неоднородная область, где есть и огромные интеграторы\разработчики с четкими инструкциями совершенно на всё, мелкие конторы из нескольких человек, которые пилят что-то для кого-то и даже крупные конторы, выросшие из мелких, но оставшиеся с таким же (никаким) уровнем организации разработки.


          1. r00tGER
            26.01.2016 08:35
            +1

            У вас получился настолько общий комментарий, что вместо «энтерпрайза» можно подставлять любую область, даже не ИТ.

            Например:
            ЖКХ — это толстая неоднородная область, где есть и огромные хозяйства с четкими инструкциями совершенно на всё, мелкие домоуправления из нескольких человек, которые непонятно чем занимаются и даже крупные конторы, выросшие из мелких, но оставшиеся с таким же (никаким) уровнем организации работы.

            Суть надо искать в характерных чертах, а не в крайностях.


            1. Bluewolf
              26.01.2016 08:41

              В общем-то, соглашусь :) Но я действительно видел в реальности примеры всех трех типов, причем тех, где с инструкциями было не очень — было больше. О глобальном распределении судить не берусь, конечно.


  1. areht
    25.01.2016 00:10
    +2

    > Получается проигрыш производительности в данном случае — 28 раз. Разумеется что это не значит, что ардуино работает в 28 раз медленнее, но я считаю, что для наглядности, это лучший пример того, за что не любят ардуино.

    А вы куда спешите? У меня самый большой проект на ардуине работает с портами с частотой 1 герц. Самый шустрый — 200 герц. Есть ещё 1wire, но на портах ли она работает интересно только автору той библиотеки (а это 0,1% пользователей). Это VB на компе можно не любить за то, что впустую отбирает ресурсы у других приложений. Среднему человеку уметь писать в порты просто не надо.

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

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

    А тут проблема. Непонятные ругательства и сотни итераций кода в уме — это проблема. Проблема отсутствия нормального инструментария. Эмуляторов, тестов, дебаггеров. Я не могу без слёз смотреть на то, что есть.

    Но переходом на Си бороться с непонятными ругательствами… Напоминает анекдот про «жаль, а у меня еще столько идей было»


    1. DIHALT
      25.01.2016 00:52
      +2

      Да есть там и дебагеры и эмуляторы. Вот только не в ардуино среде. Но, наверное, можно загнать в AVR Studio и там протащить, правда после библиотек там столько мусора разгребать придется.


    1. HWman
      25.01.2016 02:22
      +1

      Да, всё есть просто это нужно осваивать. Я когда закончил универ и устроился на работу встретился с дефицитом времени… Но может я так оправдываю свою лень, кто знает.


    1. istui
      25.01.2016 13:35
      +1

      согласен. Оптимизации нужны, если упираешься в пределы МК либо высокие требования к проекту.

      Точно также и на ПК — я знаю, как решить задачу на ассемблере, но выберу либо Ruby/Python, либо C# для большинства задач.
      C++ использую, если есть высокие требования к производительности. Асм последние 8 лет не использовал ни разу :), последний раз — правил баг в Menuet OS.

      На МК я намного чаще упирался в нехватку аппаратных ресурсов (таймеры, пины), чем в нехватку производительности или места во флеше.


  1. serafims
    25.01.2016 00:28

    Вот очередной холиварный топик приводит к чему? К описку решения, хотя бы «полурешения». Это я к тому, что уже есть «библиотеки», которые имеют все эти FastDigitalWrite и им подобные, в итоге и производительность чуть выше, и читаемость не хуже стала.
    Больше споров = больше решений = больше инструментов = больше пользователей, ИНТЕРЕСУЮЩИХСЯ, ЛЮБОПЫТНЫХ, СОЗДАЮЩИХ. В итоге это на пользу всем. Ну, кроме тех, кто будет продолжать ненавидеть ардуинщиков.


  1. alexcom
    25.01.2016 07:43

    Вроде весна ещё не началась…


  1. Vsevo10d
    25.01.2016 08:08

    А феномен нелюбви, на самом деле, очень простой. Этому есть две причины.

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

    2-я, основная: неправильное использование. Почему-то все забывают, что Ардуино — это специальная удобная плата для ПРОТОТИПИРОВАНИЯ. И нужна она ровно до момента, как отлаженное устройство начнет нормально работать, после чего покупается маленький процессор за полтора бакса, курится пдф с его распиновкой, он впаивается и прошивается программатором, а Ардуино отправляется на нужды новых амбициозных проектов, таких как «килоомный резистор на Ардуино» или «отмотчик туалетной бумаги на Ардуино».


  1. smart_alex
    25.01.2016 10:01

    Пара слов в защиту Ардуино. Вот что можно сделать из Ардуино, если отбросить стереотипы мышления. Смотреть рекомендуется в HD и сначала до конца.

    http://www.youtube.com/watch?v=jmu0MkIlywU

    Кстати, это ещё и обучающая платформа для всего спектра современных IT технологий для школ и образовательных центров.


  1. totuin
    25.01.2016 10:05
    -2

    Мне кажется основной вопрос не ПОЧЕМУ не любят Arduino а КТО не любит Arduino.
    Больше всех о том что ардуино ЗЛО кричат именно «истинные» программисты. А почему? Потому что они в основном только и умеют что писать код. Не спорю красивый, правильный, и надёжный. Но как только встаёт вопрос о том что бы разработать и расчитать входные развязки, выходные ключи, экранировку и развязки питания, они испытывают шок. «Транзистор, опропара — нет не слышали и не знаем что это такое». Им намного легче взять готовый контроллер за 1000500 рублей где все эти задачи уже решили те самые электронщики о которых они с таким пренебрежением отзываются («ну как же они не умеют писать красивый код, их задача делать для нас готовые железяки») и впарить их заказчику как абсолютно надёжное устройство.
    А те самые электронщики если хоть немного разобрались с кодом сделают из той же ардуинки абсолютно надёжное устройство, пускай не с очень красивым кодом, но правильно рассчитанное и разработанное. И оно будет работать и приносить пользу в отличие от поделок которые творят «истинные гуру» программирования. Хотя и от этих поделок есть польза. По крайней мере есть откуда скопипастить куски кода))))


    1. rotor
      25.01.2016 10:59
      +3

      Вы противоречите сами себе. Вы пишите, что программисты не любят Ардуино, потому что электроника для программистов слишком сложна:

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

      Так почему же программисты должны нелюбить Ардуино, если электроника для них сложна (да, это так), а Ардуино решает их проблемы?

      И по опыту. Ну покажите хоть одного программиста, который не любит Ардуино.
      Могу сказать, что программисты к Ардуино относятся или никак или хорошо. А вот электронщики, бывает грешат такой нелюбовью.
      Я конечно имею ввиду программистов, а не тех кто напихает в код препроцессорных деректив, глобальных переменных и прочих антипаттернов и гордо называет себя программистом просто потому что его код скомпилился.

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


      1. totuin
        25.01.2016 11:18
        -2

        Вот как раз то потому что ардуино не решает их проблемы. Она имеет практически чистые входы — выходы контроллера которые требуют дополнительных усилий по их развязки с исполнительными цепями. Но поскольку по этой причине в по мнению програмистов ардуино — зло, то альтернативой является те самые контроллеры за большие бабки, как например habrahabr.ru/company/contactless/blog/213243 где все развязки уже сделаны и на долю программиста остается чисто творческая работа, и не надо марать ручки паяльником или чем то ещё


    1. ncix
      25.01.2016 11:30
      +3

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


      1. totuin
        25.01.2016 11:40
        -4

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


        1. Hellsy22
          25.01.2016 12:29
          +3

          А что такое «реальное применение», например? Управление девайсами на 220В? Добавить модуль реле и все. Управление чем-то средней мощности? Транзистор. Чем-то мощным через ШИМ? Полевой транзистор. Считать данные с датчиков? «Соедините проводами следующие пины».

          Я вот себе сделал в качестве эксперимента RGB-подсветку для рабочего стола. ИК-датчик расстояния (чтобы свайпом управлять яркостью), миниджойстик для выбора HUE, три простеньких IRF530N, Arduino UNO, чтобы не возиться ээ… вообще ни с чем и пять метров ленты 5050. Так Ардуина вообще висит на проводах. Я уже год жду, когда поделка сломается, чтобы получить повод все аккуратно переделать и убрать в корпус. Но она не ломается.

          https://habrastorage.org/files/8f9/35e/0ac/8f935e0ac64b425abc7721ff4c697bfc.jpg


          1. Meklon
            25.01.2016 12:44
            +1

            image


          1. totuin
            25.01.2016 12:48

            Управление девайсами на 220В? Добавить модуль реле и все.

            Модуль реле накроется через неделю (желательно твердотельное реле или оптосемистр). При включении контактора ардуинка зависнет (необходима экранировка контроллера вместе с дисплеем), при срабатывании конечника расположенного за 10 м контроллер зависнет (необходима опторазвязка входа).
            Считать данные с датчиков?

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

            Если хотите узнать какие реально полезные устройства собирают на ардуинке и какие проблемы возникают в процессе их создания — загляните на форум . Там электронщики собирают от устройств управления двигателем до дозаторов в пищевой промышленности и промышленных станков.


            1. Bluewolf
              25.01.2016 21:38

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


              1. Alexeyslav
                26.01.2016 00:10

                А у меня один девайс просто выгорел из-за того что с него висели провода длиной 20 сантиметров… во время грозы. Девайс был отключен от розетки, даже вилка выдернута из розетки! остальное что было включено в этот момент выжило, в телевизоре только разрядник щелкнул, сработал автомат и на розетке черный след с фазы на заземляющий контакт.
                А девайс сгорел тихо, выяснилось только по дыму с него при следующем включении. Выгорела микросхема к которой были подключены эти два проводка. Без защиты… кто же мог подумать что от такого может пробить вход, даже с защитой от статики?
                После этого, всё что идёт в автоматике не в виде макета — все входы и выходы должны быть защищены. Разрядник даже не всегда помогает поэтому он используется только как вспомогательный когда совсем уж плохо.

                Второй девайс, находился в 10 метров от сети вообще, но с 5-ю метрами проводов… там микросхему сразу разнесло на части, и стабилитрон защитный не помог. Поэтому, ТОЛЬКО СУПРЕССОР.


            1. Hellsy22
              26.01.2016 00:52

              У меня не накрылся ни один из модулей реле. Никаких проблем не возникло даже при включении двухкиловаттного чайника — почти предельная нагрузка для широко распространенного SRD-05VDC-SL-C. Кстати, широко распространенные ардуиновские модули с реле используют оптопару PS817C.

              Не было проблем и с датчиками — у меня на метр болтается «хвост» с DTH22, например.

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


  1. evr1ka
    25.01.2016 10:35
    +1

    А я спасибо сказать хочу.
    Не знал например, что можно на чем-то еще писать, и вшивать в ардуинку код.
    Почему-то раньше на 386х приходилось еще думать, как код оптимизировать, а тут да, вот только так, и даже мысль не проскочила, что можно делать быстрее.
    Спасибо


    1. HWman
      25.01.2016 20:31

      Пожалуйста. Рад видеть что мои работы кому-то могут быть полезны.


  1. olekl
    25.01.2016 13:01

    Если хочется ардуино, то можно же в сторону mbed посмотреть. Те же проблемы, но на ARM и с частотой повыше :) Писал недавно как раз об этом. В целом же проблема в другом — не зная о том, «что у ей внутре», первую же возникшую проблему ардуинщику решить не удастся. А проблема возникнет на 100%.


    1. DIHALT
      26.01.2016 09:24
      +2

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

      Какой смысл идти на мбед если там всего этого в три порядка меньше?


      1. olekl
        27.01.2016 12:52

        Там все-таки настоящий С++, при желании можно и до железки напрямую достучаться, ну и платформы там попроизводительнее будут. Кода тоже хватает уже. А смысл учить облегченный язык, что потом с ним делать?


        1. DIHALT
          27.01.2016 12:59
          +1

          Ну в ардуине тоже си. В оконечнике то все тот же winavr GCC стоит. Просто все обернуто кучей либ и макросов разных. При желании их можно и размотать.


  1. Jeditobe
    25.01.2016 14:52
    +3

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

    imageRobotLinking 2015 New Uno R3 Project Ultimate Starter Kit For Arduino UNO R3 Mega2560 Mega328 Nano including Uno R3 55 баксов. В комплекте идет учебник.
    Есть другие разновидности, дешевле на десяток другой баксов.


  1. potan
    25.01.2016 17:52

    На мой взгляд, система для хобби может стоить достаточно дорого, но предоставлять «все удобства» — иметь достаточно памяти, что бы не приходилось оптимизировать вручную, позволять программировать на различных языках, в том числе очень высокоуровневых (Erlang, Julia, Lisp, Prolog).
    Все это требует более мощного процессора.
    Системы, типа Arduino, больше подходят для серийных изделий, где экономия на ресурсах оправдывает более сложную разработку.
    Но в целом проект все равно интересный.


    1. ploop
      25.01.2016 21:40

      Все это требует более мощного процессора.
      Так есть же малинка и другие платы на любой вкус и цвет, работающие под полноценными ОС.
      Системы, типа Arduino, больше подходят для серийных изделий
      Как раз наоборот — для простых любительских задач, а так же прототипирования.


      1. potan
        25.01.2016 22:07

        Для любительских задач, IMHO, не самое лучшее программировать на чистом пытаясь уместиться в жесткие аппаратные ограничения. То есть 8-битного процессора не достаточно — малинка лучше подходит.


        1. Hellsy22
          25.01.2016 22:25

          Не представляю любительских задач, где ограничения Ардуины были бы существенны, кроме, пожалуй, вывода какой-то графики и текста на TFT. По той же причине и Си не доставляет проблем. Вот вам не все ли равно, написать digitalWrite(13, HIGH) (Cи) или gpio.write(13, gpio.HIGH) (Lua, nodeMCU)?

          А вот как выглядит обращение к пину на Малинке, Perl: Device::BCM2835::gpio_write(&Device::BCM2835::RPI_GPIO_P1_13, 1)


        1. ploop
          25.01.2016 23:59

          Для небольшой автоматизации чего-то (основная масса хотелок) вполне достаточно. Ну а для серьёзных проектов контроллер выбирают под задачу, а там уже, например, на ARM, есть куда развернуться. На AVR8 свет клином не сошёлся. А если позволяют габариты/масса/энергопотребление — то и платку на SoC типа малинки с нормальной осью.


  1. HWman
    30.01.2016 18:16

    Arduino уже и в телепередачах.

    image

    youtu.be/l3WQ2rygTo4?t=1745

    Не только я продвигаю Ардуино в массы ;)