We accelerate Arduino more than 20 times!

  Переглядів 69,808

Home Made

Home Made

6 років тому

Everyone at some point is faced with the problem of low speed of the program on Arduino. But is Arduino really so slow as it seems? Let's try to understand what the problem is: in a weak gland or in an unoptimized code?
Using Arduino IDE imposes certain limitations in the speed of work. This is the price that we pay for the simplicity of writing commands and the language as a whole. And what if you try to write commands that work directly with the microcontroller? What will be the result? This we will see in the video.
CyberLib Library: istarik.ru/blog/arduino/1.html
Very useful articles:
geektimes.ru/post/255744/
robotosha.ru/arduino/digitalwr...
microsin.net/programming/avr/a...
4a4ik.blogspot.com/2014/05/avr...
easyelectronics.ru/avr-uchebny...
mkprog.ru/avr/avr-dlya-nachina...
Friends, support the channel!
Z422687519909
U139735106020
5168 7422 2228 7801 Privat Bank (Ukraine)
Useful links:
Micro SD Module: ali.pub/1tkx36
Arduino Mega 2560: ali.pub/1ny34r
Cheapest Arduino Pro Mini for crafts: ali.pub/1ny2z4
Breadbord: ali.pub/1ny3ae
Lintels: ali.pub/1ny3la
Quality crosspieces: ali.pub/1ny3j5
The most convenient cash back:
LetyShops: goo.gl/Ev5XgI
The most profitable cash back on aliexpress:
Ecomerce: goo.gl/3dDc2w

КОМЕНТАРІ: 364
@AlexLink-rb5by
@AlexLink-rb5by 6 років тому
в начале ролика тот кварц не для меги а для эмулятора порта.. для меги .. он планарный и размер примерно 1*2мм
@UCanDo
@UCanDo 6 років тому
Да, спутал.
@AlexLink-rb5by
@AlexLink-rb5by 6 років тому
да всё норм .. я боялся ты его перепаивать будешь и пытаться разогнать ;)))
@UCanDo
@UCanDo 6 років тому
:))
@user-fx9yn2hd2i
@user-fx9yn2hd2i 6 років тому
У автора этого комента было замечено двух(!!!) ядерное ардуино , но он решил скрыть это туманом молчания . может вы на видео покажете реализацию этого проекта ?
@michaelborisenko9232
@michaelborisenko9232 6 років тому
Я не гуру и не спец но уже накипело! Автор, попробуй перед тем как снимать новый ролик написать, хотя бы виде заметок, сценарий. Попробуй сократить время ролика но сделать его более содержательным, сейчас много "воды". И я умоляю проверяй информацию которую излагаешь !!! Много неточностей и дизинформации что может навредить начинающим и самому тебе.
@UCanDo
@UCanDo 6 років тому
По поводу "воды" и времени, согласен, есть над чем поработать. А по поводу неточностей и дезинформации - напишите что именно, в чем ошибся?
@michaelborisenko9232
@michaelborisenko9232 6 років тому
Например, указывали на кварц который стоит на интерфейсной меге, а кварц на ATMEGA2560 мелкий и находиться в низу с лева от чипа. Но я не задавался целью тыкать Вас носом в ошибки и не записывал их. Я попытался дать совет который возможно будет полезен.
@michaelborisenko9232
@michaelborisenko9232 6 років тому
Плюс какой смыслы из arduino IDE писать на чистом avr gcc который так тщательно инкапсулировали (упростили) ребята из компании для начинающих? AVR Studio бесплатна и там гораздо удобнее писать на чистом си если уже так хочется "ускорить" контролер и конечно же есть еще асемблер!!! Можно начинающих путать до опупения =)
@UCanDo
@UCanDo 6 років тому
Да, про кварц, это я потом уже понял что не туда показывал, но ведь все равно часто та та же - 16 мГц. Да, все верно, AVR Studio хорошая вещь. С ассемблером и я часто в ступор впадал :)
@katetometr
@katetometr 6 років тому
на последних минутах автор озвучил точно такие же мьісли.
@user-js6zw6zp4w
@user-js6zw6zp4w 6 років тому
Ниже уже написали-смысл тогда кодит в ардуино иде-берем атмел студию или блокнот и начинаем писать как раньше напрямую к портам обращаясь и перефирии.
@Vlad_4572
@Vlad_4572 5 років тому
Давно мечтал это понять. Спасибо, автор! )))
@SWS-LINK
@SWS-LINK 5 років тому
Вся прелесть и сила урдуинки в том, что ее код легко читаем не программистами -). И переносим. А если кодить такой тарабарщиной, то можно и поинтереснее железо найти -).
@cutefox8319
@cutefox8319 4 роки тому
Что мешает написать свои собственные функции и туда засунуть эти непонятные каракули? Будет и простота чтения/писания и скорость.
@user-ju7im5rp4u
@user-ju7im5rp4u 3 роки тому
Насчёт "поинтереснее железо": подскажите, пожалуйста, в каком направлении копать? Где можно почитать что-нибудь на эту тему? Спасибо :)
@SWS-LINK
@SWS-LINK 3 роки тому
@@user-ju7im5rp4u stm32 как вариант -) цена та же, возможностей больше.
@Silver2Storm
@Silver2Storm 3 роки тому
@@progressivereloaders92 Это не Си++. Это Си
@user-je1dd2re3d
@user-je1dd2re3d 3 роки тому
@@cutefox8319 Я в Atmel studio когда кодю, как раз такие функции типо ардуиновских Digital write Digital read Или даже Аnalog write, analog read и прописываю в виде макросов, обращаясь внутри них напрямую к биту порта или к регистру результатаАЦП илиТаймера в режиме Шим, вернее один раз прописал и потом просто копирую из проэкта в проэкт в заголовочный файл: Получается и Быстрое выполнение команд и одновременно их читабельность:))
@MrHazur
@MrHazur 6 років тому
Представь, что нужно обрабатывать неопределенное количество данных, и уже невозможно бутет поймать тайминги цикла. Они будут плавать. Советую учить прерывания , создавать события и разбивать программу на независимые блоки(мультизадачность). К примеру, мограем светодиодом не приостанавливая основной цикл, раз в секунду: digitalWrite(13, (millis() / 500 % 2));
@rudolfsikorsky7900
@rudolfsikorsky7900 6 років тому
Ага, заменил команды в Блинк и потерял универсальность. Теперь под другую плату надо переписывать код! Да и читаемость .... Вместо человеческих слов какие-то каракули :) Ардуино ИДЕ сделана для простоты и универсальности. Плата за это - размер и производительность. Если умеешь писать на Си (или Ассемблере), Ардуино ИДЕ не нужна. Просто пиши на Си и лей прошивку программатором. Для Си библиотек готовых не меньше чем для Дуины. А та же Студия хотя бы имеет средства отладки, в отличие от. Кроме того, можно отлаживать прямо в железе, используя JTAG
@cutefox8319
@cutefox8319 4 роки тому
А что мешает написать свои функции, которые будут юзать эти непонятные каракули? Сделаешь библиотеку и код переписывать не придется под каждую плату. Мыслите шире)
@VadRov
@VadRov 5 років тому
Если есть задача существенно повысить производительность и снизить объем памяти, то только ассемблер. Но есть ощутимый минус: потеря совместимости с другими контроллерами. Именно поэтому и используют всякие IDE. Поэтому ассемблер пойдет для специфичных задач, когда код надо уместить в условиях ограниченного размера памяти, и при этом важна производительность. Для коммерческого использования, например, или в самоделках из разряда "а вам слабо! ". В изучении ассемблера нет ничего сложного. В далеком 1993 году, будучи учеником 8-го класса, я легко освоил ассемблер такого мамонта, как Z-80. Брат, в то время студент университета, подарил мне спектрум совместимый компьютер Sintez-2 (48 кб). Начал с бейсика, но быстро уперся в его ограниченность и медлительность. Поэтому решил перейти на ассемблер. Первая настольная книга "Программирование в машинных кодах. ZX-Spectrum" (перевод с английского). Писал на ассемблере текстовые, музыкальные редакторы, игры (тетрис, L-club, поле чудес и т.п.). Параллельно с изучением ассемблера пришлось изучать и аппаратную часть компа (организация прерываний, порты В/В и т.п.). К примеру, тетрис занимал где-то 1 кб памяти, с учетом текстовой части и музыкальных эффектов. Где-то должны быть кассеты в доме у родителей с записями программ. Библиотека книг точно сохранилась. Эх.... Ностальгия!!! Делал кнопку турбо (7МГц) на триггере К555ТМ2. Расширил память до 128 КБ. Сам комп был подарен племяннику при переходе на IBM, и благополучно почил на свалке по причине полной и безвозвратной потери работоспособности)) (был разломан в хлам). Смотрю иногда видео про Ардуино и хочется "встряхнуть стариной" )) Увлекательная это штука. Главное, сейчас все доступно. А раньше приходилось выбираться в город на радиорынок, покупать микрухи непонятного качества. Помню, попадал пару раз с памятью на РУ5... Эх, были времена! ))
@UCanDo
@UCanDo 5 років тому
О да. Я вас понимаю. Я начинающий, только вхожу в эту сферу. Но все равно это так увлекательно самому что-то создать и видеть как это работает!!! Ассемблер вещь крутая. Но в современном мире его будут изучать только те, кто работают в этой сфере. Обычные пользователи не будут его изучать в силу сложности вхождения. Слишком много читать, ещё и даташиты на английском... А на Ардуино можно научиться программировать за час... Я не говорю что ассемблер плох. Наоборот, это крутая вещь. Но его сейчас никто не изучает.
@victortremov9584
@victortremov9584 5 років тому
До сих пор в шкафу лежит Sintez . В своё время , что бы его купить , пришлось откладывать деньги больше полугода .
@VadRov
@VadRov 5 років тому
@@victortremov9584 , брат брал Синтез с рук у "зажиточного" одногруппника, когда тот на Амигу переходил. Ценник сейчас и не вспомню, но если мама не ругалась, то было недорого)). Надо бы у брата спросить, вспомнить молодость))
@nickbalashov1780
@nickbalashov1780 5 років тому
Да парни, я вам покажусь мамонтом)) - мы разрабатывали и кодили аж в середине 90-х для i8081 8битного, и это была серийная продукция))
@nickbalashov1780
@nickbalashov1780 4 роки тому
@@KirillVotrin , угу - чистый asm, никакого Си у нас на контроллеры тогда не было. На си писал для АТ, и без всяких плюсплюсов. Но я больше железо и общее сист.построение.
@servarak
@servarak 6 років тому
Спасибо братан. Помог разобраться в этом. Читал это и раньше, но не до конца понимал работу. Тут все понятнее
@zonderdk
@zonderdk 3 роки тому
Расходимся, никто ничего не ускоряет. Просто подход к проблеме другой. Да, обращение к регистрам работает гораздо быстрее, и если вам нужно быстро дёрнуть ногой то это отлично работает. Но теряется удобство работы именно с ардуино. А ускорить кварц можно без особых проблем. Всего-то нужно переопроеделить дерективу F_CPU указав новую частоту кварца. Это можно сделать в файле описания доступных плат. Лично ставил кварц 40МГц. И всё работает, но возможно что заведётся не на каждом камне. Больше 40 ставить нет смысла, внутренний генератор больше не разгоняется. Но можно использовать внешний генератор частоты. Если переопределить фьюз биты. Пруфов негде не видел, но теоретически возможно.
@user-og6vn2nz5j
@user-og6vn2nz5j 2 роки тому
Как раз работать в Ардуино менее всего удобно. Я работаю в разных IDE и Ардуино самый худший.
@zonderdk
@zonderdk 2 роки тому
@@user-og6vn2nz5j Я имел ввиду не само IDE, а фреймворк Ардуино. Он доступен например в PlatformIO. Довольно удобно использовать Ардуино код для быстрого написания программы. Куча встроенных библиотек. Типа матх и сериал. Потом после проверки идеи можно переписать код на регистры, для ускорения быстродействия.
@kirillkv90
@kirillkv90 6 років тому
Я сегодня задумывался как ускорить чтение с ик датчиков! Прям в тему видео! Спасибо!
@Ardbot
@Ardbot 5 років тому
Спасибо, столкнулся с аналогичной проблемой на attiny13, вот сижу, оптимизирую
@user-bk1fq8vp7f
@user-bk1fq8vp7f 6 років тому
Спасибо. Было интересно. Но, несколько сумбурно. Может быть, стоит как-то структурировать?
@redsunpro.
@redsunpro. 11 місяців тому
Здравствуйте, а как аналоговый вход?
@sergiuolarescu9227
@sergiuolarescu9227 2 роки тому
Очень интересное видео, спасибо за труды.
@user-sj9kr7yf6c
@user-sj9kr7yf6c 9 місяців тому
это не какие то команды, это запись на языке С, вместо ардуиновского С++, благодаря использованию библиотек языка С код занимает меньше места в памяти. Можно писать прошивку для ардуино или attiny в Atmel Studio на С, и такой код с теми же функциями что и в ардуино но на С будет занимать меньше памяти МК в несколько раз. Можно использовать attiny 44 там чуть больше памяти, а стоит он копейки по сравнению с ардуино, экономя память будет влезать средняя компактная програмка.
@kotikvadik3000
@kotikvadik3000 4 роки тому
Мой совет прост. Хотите быструю программу - пишите на ассемблере. Ну уж точно не в Arduino
@Silver2Storm
@Silver2Storm 3 роки тому
Можно и в Arduino IDE наассемблере писать. Это просто редактор и подключен к нему тот же компилятор.
@alexzshow6314
@alexzshow6314 6 років тому
Отлично, как раз искал ускорение и сжатие объема кода в ардуино. Очень интересное видео
@Alex8Zajec
@Alex8Zajec 6 років тому
А где ассемблер взять для атмель или кода?
@UCanDo
@UCanDo 6 років тому
Писать на ассемблере можно где угодно. Хоть в блокноте. Лучше использовать Нотпад++ А дольше сгенерировать hex файл и зашить его обычным программатором. Для генерации прошивки можно использовать tavrasm.
@user-vb4gm1fb7f
@user-vb4gm1fb7f 5 років тому
Где скачать такие красивые карты с описанием портов?
@UCanDo
@UCanDo 5 років тому
Добрый день. В Гугле введите "Arduino Uno Pinout" или название той Ардуино что вам нужно. Перейдите в "Картинки". Там и будут распиновки
@kooba6205
@kooba6205 6 років тому
это не тот кварц!!
@user-di3mo2pd9g
@user-di3mo2pd9g 6 років тому
поясни
@user-di3mo2pd9g
@user-di3mo2pd9g 6 років тому
и в правду не тот
@Vlad_4572
@Vlad_4572 4 роки тому
9:32 Скорость выполнения команды даже не 0.2, а 0.13! Лично проверил))
@user-wq4ft4gy2l
@user-wq4ft4gy2l 4 роки тому
Добрый день! Подскажите ,для ардуино нужно добавить какие то библиотеки Аvr чтобы код писать на чистом си? Не получается запустить команду опроса порта на си if (!(PINB&0b00000001)) нужно в порте прерывания дополнительно проверять наличие сигнала на Пине B0 чтобы исключить помехи. В коде подключил библиотеку АВР , работает только аналог digitalwrite , а digitalread не работает?
@UCanDo
@UCanDo 4 роки тому
Добрый деень. Какой микроконтроллер у вас установлен?
@user-wq4ft4gy2l
@user-wq4ft4gy2l 4 роки тому
@@UCanDo ардуино нано, на выход все работает
@UCanDo
@UCanDo 4 роки тому
Я имел в виду какой конкретно микроконтроллер установлен на вашей Ардуино. Так как могут устанавливать разные микроконтроллеры. Предположу что это либо Atmega168 либо Atmega328. Может посмотреть какая именно?
@user-wq4ft4gy2l
@user-wq4ft4gy2l 4 роки тому
@@UCanDo атмега328
@UCanDo
@UCanDo 4 роки тому
Попробуйте простой скетч: const int buttonPin = 8; // the number of the pushbutton pin const int ledPin = 13; // the number of the LED pin void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop() { if (!(PINB & 0b00000001)) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } При нажатии на кнопку должен загораться светодиод
@user-lc9mi1pj2y
@user-lc9mi1pj2y 6 років тому
доброго времени суток, решил воспользоваться такими быстрыми командами. Но возникает ошибка и не удается компиляция. Единственное из за чего такое может быть, по моему мнению это из за того что я использую вместо ардуино платы, стм32. но с загрузчиком от ардуино и в среде ардуино иде. Может ли в этом быть проблема?
@UCanDo
@UCanDo 6 років тому
Да, именно в этом и проблема. Команды приведены для контроллеров AVR. STM использует совершенно другие команды, и не известно, поддерживаются они в среде Ардуино ИДЕ или нет. Как пример, посмотрите мое видео ukposts.info/have/v-deo/kqKcpWyxfJ12z5s.html Это мигание светодиодом на STM. Там используются совершенно другие команды.
@user-lc9mi1pj2y
@user-lc9mi1pj2y 6 років тому
Спасибо) будет время обязательно попробую разобраться)
@3dprinterdoma
@3dprinterdoma 6 років тому
Как вы узнали сколько времени выполняется команда?
@UCanDo
@UCanDo 6 років тому
Подобный вопрос уже был. Проверяется осциллографом. Но у меня осциллографа нет, потому взял данные из статей (ссылки есть в описании к видео).
@melickon
@melickon 5 років тому
Какой-то треш в комментариях. Всем хочется сказать, что для высокой производительности есть всякие там STM32... Но это вы с точки зрения профессионалов говорите, когда выбор микроконтроллера, одна из опций проекта. В реальности же, что-то делается на Arduino и на каком-то этапе начинает не хватать производительности. И вот тут как раз пригодятся подобные советы, чтобы пожертвовать переносимостью, но заставить проект работать.
@yevhenukrainianer4781
@yevhenukrainianer4781 4 роки тому
У Вас ШИМ выходит софтварный. Процессорное время занято. Есть таймеры и аппаратные моды ШИМа в AVR. Не проаерял, но аналогРид(), возможно, юзает как раз таймер аппаратно делая ШИМ.
@user-hh3ik4tj5j
@user-hh3ik4tj5j 5 років тому
Настройка ножки на ввод или вывод осуществляется командой DDR Например DDRB = 0b00000001; равно PB1, OUTPUT
@NikolayBalin
@NikolayBalin 6 років тому
Прелесть Arduino IDE в простоте и быстроте написания кода, "с" все немного усложняет, но тем не менее видео очень познавательно, спасибо за труды.
@user-og6vn2nz5j
@user-og6vn2nz5j 2 роки тому
Какая же прелесть? Вместо короткой команды PIN писать непонятную DigitalRead?
@user-il4kd9qq3y
@user-il4kd9qq3y Рік тому
Не си усложняет, а arduino IDE упрощает. Просто в ней есть библиотека и всё. Кто тебе мешает написать раз: unsigned char WriteBit(unsigned char In, unsigned char BitNum, unsigned char Val){ return (Val==0) ? In&(~(1
@user-il4kd9qq3y
@user-il4kd9qq3y Рік тому
Дошли!!!) void WriteBit(unsigned char *In, unsigned char BitNum, unsigned char Val){ *In = (Val==0) ? *In&(~(1
@user-dq2ci5ln5g
@user-dq2ci5ln5g Рік тому
@@user-il4kd9qq3y кста, обращаться к переменной одновременно как к байту, так и побитно можно при помощи вот такой конструкции: union { struct flag_bit { int f0 : 1; int f1 : 1; int f2 : 1; int f3 : 1; int f4 : 1; int f5 : 1; int f6 : 1; int f7 : 1; } b; byte in; } in_f; таким образом написав: in_f.in = 55; // мы записываем в байт а прописывая: in_f.b.f0 = 1; in_f.b.f5 = 0; //мы работаем с битовыми полями нашей байтовой переменной in_f! Очень легко, просто и наглядно, причём компилятор всё делает чисто и красиво, я в асм'овский код заглядывал! 👍😁 Особенно мне это помогло, когда на плате ввода/вывода 3х8 все входы/выходы "территориально" перепутаны: union { struct in_bit { int d17 : 1; int d19 : 1; int d21 : 1; int d23 : 1; int d22 : 1; int d20 : 1; int d18 : 1; int d16 : 1; int d8 : 1; int d6 : 1; int d2 : 1; int d4 : 1; int d0 : 1; int d1 : 1; int d3 : 1; int d5 : 1; int d11 : 1; int d14 : 1; int d13 : 1; int d15 : 1; int d12 : 1; int d9 : 1; int d10 : 1; int d7 : 1; } i; struct in_byte { byte i0, i1, i2; } a; } in, ev; Ну-у, разводка платы было такая, что уж тут поделать! 🤔 А так хоть какая-то "понятность" в представлении сигналов и переносимости на другую плату была! Кста, так можно и в Ардуине порты описать! 👍😁🤪
@TheMrKotmanul
@TheMrKotmanul Рік тому
я не знаю что вам ардуино иде упрощает, любая нормальная среда сама умеет за тебя дописывать строки, только переменные вписывай, в стм у тебя готовые функции лежат тебе просто нужно знать от куда их копировать и как ими пользоваться и тебе не нужно угадывать как тонны абстракции под твоим кодом будут всё собирать и потом выполняться. Арудино упрощает первый год возможно пока ты учишь всё это дело, потом просто нужно понять что это говно просто ущербно либо нужно для простещих проектов на уровне хобби или какого-то переключателя дома.
@farkoppp
@farkoppp 6 років тому
Означает ли такое ускорение чипа(программное) , что теперь можно получать на выходе и полноценное качественное аудио?
@UCanDo
@UCanDo 6 років тому
Лично не делал и не проверял. Есть проекты, где Ардуино воспроизводит звуковые файлы, но это были не MP3 a WAV, да ещё с урезанным битрейтом. На мой взгляд качественный плеер MP3 на базе Ардуино сделать невозможно. Либо использовать внешние модули MP3 - кодировщики, либо переходить на STM
@Raspi8
@Raspi8 6 років тому
А разве не надо добавлять avr/io.h перед программой?
@UCanDo
@UCanDo 6 років тому
Можно, но это не всегда на что-то влияет. Бывает что добавление этого файла не приводит ни к каким результатам.
@nikolaydd6219
@nikolaydd6219 3 роки тому
18:45 разве шип в ардуино 50Гц, он ведь 500Гц
@yaglaleon6064
@yaglaleon6064 6 років тому
А BASCOM AVR через среду Ардуино пойдет?
@slava022967
@slava022967 6 років тому
нет, да и зачем вам это нужно, BASCOM и так не плохо работает
@sailtogether3236
@sailtogether3236 3 роки тому
Спасибо, информация полезная. Палец вверх! Хотелось бы, правда, заметить о несправедливости выражения "на чистом С". Это, как бы, в любом случае "чистый С", просто доступ через прослойку библиотек или доступ напрямую через регистры портов. И ещё, там в программном шиме опечатка: в цикле k не итерируется.
@volvovolvo2641
@volvovolvo2641 Рік тому
Серьёзно? Автор явно указывает неправильные компоненты. И чему он научит? Писец.
@antisdalexander7145
@antisdalexander7145 6 років тому
Мне вот одно непонятно согласно спецификации на Atmega2560 Speed Grade максимальное 16 MHz для Atmega328 20MHz. Что мы достигнем подняв частоту внешнего кварца кроме того что все библиотеки рассчитаны на использования внешнего кварца для внутреннего генератора 16 и задержка 1000 мкс при другом кварце уже таковыми не будут что несет проблемы при настройке обмена данных с двумя или более МК. Что мы в конечном счете достигнем заменив кварц ? кроме как сбоя в настройке задающего генератора. Если речь про ускорение то тут я бы сказал что вопрос скорей к штатным функциям IDE Arduino почему они так много времени выполняются (Оптимизация кода функции за примером далеко ходить не нужно тот же IAR за это берет кило баксы). Возможно лучше говорить про варианты замены штатных ванильных функций IDE Arduino на более простые как показанный пример работы на прямую с портами Atmegи.
@UCanDo
@UCanDo 6 років тому
Все верно говорите.
@Alexander_Pisklov173
@Alexander_Pisklov173 6 років тому
Antisd Alexander Вообще-то, в ардуино есть описание платформ, в котором можно поправить частоту кварца.
@UCanDo
@UCanDo 6 років тому
+Александр Писклов Дело не в описании платформ и частоте кварца, а в том что все библиотеки рассчитаны на конкретную частоту МК. Тайминги в библиотеках сместятся, что вызовет сбой в работе/инициализации того или иного устройства. Если менять кварц (и соответственно менять частоту в описании платформы) то и нужно будет соответственно править и все библиотеки ко всем возможным устройствам... Та ещё головомойка...
@orkoteg09
@orkoteg09 6 років тому
DDRD - регистр направления передачи данных порта D. Биты этого порта управляют тем, настроены ли выводы Порта D как входы, или как выходы. А потом уже PORTD, PIND.
@JRichVid
@JRichVid 6 років тому
Откуда информация про 1800 мксек на выполнение "digitalWrite(13, HIGH)"? Посмотрите текст реализации этой функции в Arduino\hardware\arduino\avr\cores\arduino\wiring_digital.c Там куча макросов и текст, конечно, в разы длиннее, нежели "PORTB |= 0x80", но длиннее не в девять тысяч раз. На "Меге" digitalWrite выполняется за 7,8 мксек (~125 тактов), a "PORTB |= 0x80" - за 0,625 мксек (10 тактов).
@UCanDo
@UCanDo 6 років тому
Был бы у меня осциллограф, промерял бы реальную работу. А так, данные взяты из различных статей. Ссылки на них есть в описании к видео.
@JRichVid
@JRichVid 6 років тому
Если нет осциллографа, можно воспользоваться фантазией и секундомером. Пишется, например, 100 одинаковых строк digitalWrite на включение светодиода, зацикливаются на повтор 500 раз, следом за циклом пишется цикл 100 digitalWrite на выключение, прокручивающийся 9500 раз. Перед циклами желательно запретить прерывания. Получается, что за один проход двух циклов команда digitalWrite будет выполнена 1 млн раз, а обрабочик цикла всего лишь 10 тысяч раз. Т.о., период вспышек будет определяться в основном длительностью выполнения digitalWrite. Измеряете секундомером длительность, например, 10 вспышек, делите её на 10 миллионов - вот искомая длительность. Если лень возиться с секундомером, можно воткнуть снаружи циклов измерение разницы millis() c отсылкой результата в параллельный порт, только тогда прерывания нельзя выключать, и обработчик прерываний внесёт дополнительное время в измеряемый период. На UNO получается 5,15 мксек, а на MEGA 2560 - 7,73 мксек.
@user-jq7tc7qi5z
@user-jq7tc7qi5z 6 років тому
есть бенчмарки и мой Нано показывает длительность digitalWrite(3, HIGH); равную 3,67 микросекунды, а PORTB |= 0x80; длится 0,57 микросекунды.
@user-jq7tc7qi5z
@user-jq7tc7qi5z 6 років тому
Кстати, если есть Logic Analyser, то можно просто подряд несколько одинаковых команд инверсии пина поставить и посмотреть в графике длительность импульсов.
@Alexander_Pisklov173
@Alexander_Pisklov173 6 років тому
JRichVid Самому было интересно, откуда такие цифры. Я на mega32u4 осциллографом мерил - ~3.7мкС, а прямая запись в порт (out (p, val)) - 62.5нС.
@user-pr3en9db3b
@user-pr3en9db3b 6 років тому
Как ты микросекунды вычислял?
@UCanDo
@UCanDo 6 років тому
Данные взяты из разных источников (ссылки на статьи есть в описании). Но можно и просто осциллографом посмотреть.
@seixx3161
@seixx3161 6 років тому
подскажите.. у меня ардуино уно. если if (!PIND & 0b000010000) { s++; } подключив импульс-генератор я не смог получить и 5кГц? а если: attachInterrupt(0, DF, RISING) ; void DF () { s++; } но attachInterrupt мне не подходит получилось в районе 20-30кГц. что не так?
@UCanDo
@UCanDo 6 років тому
Добрый день. Код смогу проверить только на выходных. Проверять через if в основном цикле программы с такой частотой не получится. Только прерываниями. Но надо проверить.
@seixx3161
@seixx3161 6 років тому
мой код такой: void setup() { pinMode(2, INPUT); pinMode(4, INPUT); attachiterrupt(0, DF, RISING); void DF() { if (PIND & 0b00010000) { s++; }else{ s - -; } void loop() { // перевод s в градусы //далее выводим s на lcd или serial.
@seixx3161
@seixx3161 6 років тому
ститывание импульсов с энкодера происходит с частотой ~5 кГц но если из DF убрать if (PIND & 0b00010000) { s++; }else{ и оставить только s-- то он считывание выполняет с частотой в ~ 35 - 50 кГц
@SplashT
@SplashT 6 років тому
25:38 называется оптимизация кода (не увеличение мощности)
@user-il4kd9qq3y
@user-il4kd9qq3y Рік тому
Это шим ногодрыгом и используется по необходимости, если нужна большая разрядность, чем в аппаратном. Аппаратный же шим не влияет на скорость программы кроме записи в него числа. И разогнать его можно, таймеры поправь, возможно даже и командами ардуины, но это не точно: 8 бит 62 500 Гц TCCR1A = TCCR1A & 0xe0 | 1; TCCR1B = TCCR1B & 0xe0 | 0x09; 7 812,5 Гц TCCR1A = TCCR1A & 0xe0 | 1; TCCR1B = TCCR1B & 0xe0 | 0x0a; 976,56 Гц TCCR1A = TCCR1A & 0xe0 | 1; TCCR1B = TCCR1B & 0xe0 | 0x0b; 244,14 Гц TCCR1A = TCCR1A & 0xe0 | 1; TCCR1B = TCCR1B & 0xe0 | 0x0c; 61,04 Гц TCCR1A = TCCR1A & 0xe0 | 1; TCCR1B = TCCR1B & 0xe0 | 0x0d; 9 бит 31 250 Гц TCCR1A = TCCR1A & 0xe0 | 2; TCCR1B = TCCR1B & 0xe0 | 0x09; 3 906,25 Гц TCCR1A = TCCR1A & 0xe0 | 2; TCCR1B = TCCR1B & 0xe0 | 0x0a; 488,28 Гц TCCR1A = TCCR1A & 0xe0 | 2; TCCR1B = TCCR1B & 0xe0 | 0x0b; 122,07 Гц TCCR1A = TCCR1A & 0xe0 | 2; TCCR1B = TCCR1B & 0xe0 | 0x0c; 30,52 Гц TCCR1A = TCCR1A & 0xe0 | 2; TCCR1B = TCCR1B & 0xe0 | 0x0d; 10 бит 1 5625 Гц TCCR1A = TCCR1A & 0xe0 | 3; TCCR1B = TCCR1B & 0xe0 | 0x09; 1 953,13 Гц TCCR1A = TCCR1A & 0xe0 | 3; TCCR1B = TCCR1B & 0xe0 | 0x0a; 244,14 Гц TCCR1A = TCCR1A & 0xe0 | 3; TCCR1B = TCCR1B & 0xe0 | 0x0b; 61,04 Гц TCCR1A = TCCR1A & 0xe0 | 3; TCCR1B = TCCR1B & 0xe0 | 0x0c; 15,26 Гц TCCR1A = TCCR1A & 0xe0 | 3; TCCR1B = TCCR1B & 0xe0 | 0x0d; Да ноги кстати под битность тоже разные, например D9-D10 - 10 бит.
@UCanDo
@UCanDo Рік тому
Все верно. На эту тему я делал видео: ukposts.info/have/v-deo/jXxohIeEqmZjuWw.html
@user-il4kd9qq3y
@user-il4kd9qq3y Рік тому
Да увидел, но есть одно замечание по по поводу шим. Пром. двигатели от частотников пищат от 1300, до 16 000 Гц, иногда 800-1200 частоты фигурируют - тут уже проблема в выходном каскаде скорее всего. А в общем хорошие видео так держать. Сам хотел канал запилить, но хорошая работа, резко всплывшая из ниоткуда, испортила все начинания!!! ) @@UCanDo
@AndrewMikhno
@AndrewMikhno 6 років тому
В ардуино ударение нужно делать на У. ардУино. Проверочное слово - светодИод. А вообще програмное ускорение - дичь какая то. Контроллер от этого не стал быстрее работать. Он только стал выполнять совершенно другой код с той же скоростью что и раньше, не более. З.Ы. исправльте свой светодИод. У меня уши кровоточат когда слышу такое.
@UCanDo
@UCanDo 6 років тому
+Andrew Mikhno Спасибо за отзыв. Слова - паразиты, трудно избавиться от того чему был научен. По поводу ускорения. Все верно, контроллер работает с той же скоростью, НО скорость выполнения программы увеличилась. Стандартные команды Ардуино ИДЕ сделаны универсальными (работают на любом микроконтроллере) а универсальность влечёт за собой усложнение кода для того что бы именно эта команда сработала именно на той Ардуино какую вы используете. В результате контроллер вместо одной операции делает несколько операций. Это влечёт за собой "медленную" работу программы, так как контроллер выполняет действия, которые на самом деле не нужны. В видео я привёл пример прямой записи в порт - такой код весит на много меньше (так как не происходит подключения стандартного "универсального" кода Ардуино ИДЕ, он здесь просто не нужен), а если лишний код не добавлен, то и контроллер не будет тратить рабочее время, а сделает только то что ему указали - запись в порт. Именно это и является "ускорением" - не делать лишней работы, а только то, что нужно. Код не другой, он тот же, только выглядит иначе. Но весит меньше и выполняется быстрее.
@AndrewMikhno
@AndrewMikhno 6 років тому
Тогда следует говорить про реализацию алгоритма и оптимизацию кода. Но ни в коем случае не о том что контроллер заработал быстрее. Для примера - работу ПК можно ускорить путем некоего API увеличив частоты некоторых подсистем на мат.плате/процессоре. В этом случае получается "без обмана" - софтовое ускорение. По вашей же логике что бы сделать программное ускорение - нужно переписать код всей системы. Повторюсь - это оптимизация реализации алгоритма, не более. Изначально я подумал - вау, какой то программный трюк, недокументированные возможности, какие то заложенные производителем ограничения в виде излишних задержек при выполнении машинного кода, и это можно отключить, но был уверен на 99.9(9)%, что это скорее всего маркетинговый ход - называть вещи не своими именами.
@UCanDo
@UCanDo 6 років тому
+Andrew Mikhno Да, вы правы, правильно говорить "оптимизация" а не "ускорение". Видео рассчитано на заядлых "ардуинщиков", которые ничего другого не знают и не понимают сути процесса. Я просто хотел дать толчок к саморазвитию, к более глубокому освоению МК и т.д. Именно по этому я говорил об ускорении, а не об оптимизации - многие даже не знаю что это такое, а вот "ускорить" "на халяву" - этого многие хотят :)) вот я и попытался "перевернуть умы людей". Не подумайте что я из себя строю всезнающего, нет, наоборот, я сам только учусь. И о том что узнаю - рассказываю другим. И я тоже ошибаюсь. Но и учусь :)
@Alexander_Pisklov173
@Alexander_Pisklov173 6 років тому
Andrew Mikhno Ага. На самом деле это не ускорение, а оптимизация кода.
@Alexander_Pisklov173
@Alexander_Pisklov173 6 років тому
Home Made - То, что ты можешь сделать Вообще-то, это называется оптимизацией.
@aderod100
@aderod100 6 років тому
loop: sbi PORTB, 7 cbi PORTB, 7 rjmp loop риально мало и быыстро =_=
@UCanDo
@UCanDo 6 років тому
Ассемблер есть Ассемблер. Вот только его Большинство Ардуинщиков совершенно не знает.
@JRichVid
@JRichVid 6 років тому
Можно ещё быстрее: .MACRO ONOFF sbi PORTB, 7 cbi PORTB, 7 .ENDM loop: ONOFF ONOFF ONOFF ONOFF ... ONOFF rjmp loop
@Alexander_Pisklov173
@Alexander_Pisklov173 6 років тому
Денис Акимов На ассемблере куда круче. И всегда понятно, сколько будет выполняться тот или иной код.
@Alexander_Pisklov173
@Alexander_Pisklov173 6 років тому
Home Made - То, что ты можешь сделать Ага. Как-то давно делал usb устройство на pic'е с внешним usb контроллером. Писал, естественно, на ассемблере. Тут решил опробовать ардуино и понял, что это для детей. Лучше использовать атмел студию.
@XxxXxx-rc2nw
@XxxXxx-rc2nw 6 років тому
первые 2 инструкции по 2 такта крайняя от 2 до 4. итого нога будет дрыгаться какминимум с 1/4 системной тактовой
@EugeneAnt
@EugeneAnt 6 років тому
но при замене кварца возникнет проблема совместимости с модулями.. не?
@UCanDo
@UCanDo 6 років тому
Проблема совместимости возникает только на программном уровне, но не со всеми модулями. Некоторые все так же работают, а некоторые нет. Это связано с таймингами в командах. При замене кварца, время задержек изменяется, что влечет за собой неправильную передачу команд/данных, и, соответственно, это вызовет проблемы в работе.
@3d_idea800
@3d_idea800 3 роки тому
а есть где посмотреть все команды для перевода ардуины?
@UCanDo
@UCanDo 3 роки тому
Нужно смотреть Даташит на используемый микроконтроллер. Там все подробно описано, все возможные Настройки. Только неопытному человеку там трудно будет разобраться
@3d_idea800
@3d_idea800 3 роки тому
@@UCanDo и с чего начать в итоге?
@UCanDo
@UCanDo 3 роки тому
Что конкретно вас интересует? Если хотите посмотреть список доступных команд для Ардуино IDE, то вот здесь можете посмотреть основные Команды: arduino.ru/Reference Вот здесь можете посмотреть более расширенный список команд: www.arduino.cc/reference/en/ Вообще в Ардуино IDE можно использовать практически все от С++, а так же использовать вставки Ассембера. Если по каким-то настройкам микроконтроллера (на пример таймеры и т.д.) то нужно либо использовать готовые библиотеки, либо изучать даташит на микроконтроллер.
@3d_idea800
@3d_idea800 3 роки тому
@@UCanDo команды для ардуино и написание скетчей не вызывает проблем, также как добавление функций в библиотеки ардуины. Хочется большего. Я так понимаю если лезть в глубь то через С++ и далее асемблер.... мне бы ещё примеры кода.
@San_Cone
@San_Cone 6 років тому
Что за музыка, скинте название кто знает
@UCanDo
@UCanDo 6 років тому
Музыка: Hevenly - Highway-WQ4FBtyC
@poweredbysergey
@poweredbysergey 6 років тому
Cool
@Remontnik_
@Remontnik_ 4 роки тому
Спасибо за ролик, позновательно!
@user-fz3ks8ew1p
@user-fz3ks8ew1p 6 років тому
Еще лучше перейти к такой структуре программы int main() { init(); //setup() for (;;) { //loop() } return 0; }
@user-uv9rf6qm6f
@user-uv9rf6qm6f 5 років тому
заааачем?
@Avazart
@Avazart 5 років тому
в стандартном loop() дополнительные проверки делаются, ели делать свой цикл быстрее выполняется, так говорят по крайней мере.
@melickon
@melickon 5 років тому
Так такую структуру программы Arduino IDE добавляет от себя автоматически
@7G763svR6
@7G763svR6 4 роки тому
Автору пора лечится от ардуино-зависимости, если он все же желает перейти с уровня начинающего (кому надо минимум ресурсов и знаний в ущерб возможностям) на продвинутый уровень (не используя библиотеки для дурака, а написаем своего кода)
@EugeneAnt
@EugeneAnt 6 років тому
да, "оптимизация" библиотек поражает .. интересно, с чем связана такая медлительность при использовании библиотек?
@UCanDo
@UCanDo 6 років тому
Да все та же "кроссплатформенность". В библиотеках идет проверка на то, какая ардуина используется, какой стоит микроконтроллер, идет переподстановка многих констант / настроек под конкретный микроконтроллер. Да и еще много чего... К тому же основная цель многих библиотек - не скорость, а работоспособность на разных Ардуино.
@tihond11
@tihond11 6 років тому
Это чтобы нубам легче было.
@asasov7090
@asasov7090 4 роки тому
Толково...
@user-uq3cz5pd9u
@user-uq3cz5pd9u 6 років тому
Вот интересно кто нибудь из авторов таких клипов читал муму на контроллеры ,которые устанавливаются в платы .1-максимальная рекомендованная частота 20 мГц при рабочем напряжении 5 V , ну и маленькое замечание - частота сигналов , при обращении к памяти программ не должна превышать 25 мГц (это относится ко всем контроллерам , оснащённых подобным видом памяти , даже smt - там тот же вид памяти ) 2 - есть ограничения в работе некоторых узлов самого контроллера , 3 - получение стандартных частот для работы ком порта , и интервалы работы АЦП и так далее 4 что в виренге , что и в Си , программный код всегда избыточный , и по производительности медленный 5 полное быстродействие можно увидеть только применив код написанный на родном для этих контроллеров языке - Ассемблер АВР , время на выполнение изменения значения на выходе составляет 2 такта тактового генератора и при 16 мГц составит 0,000 000 125 с или 0,125 микросекунд а команда выглядит так sbi portb,5 И ВСЯ ПРОГРАММА МИГАНИЯ ВМЕСТИТСЯ (ВМЕСТЕ С ЦИКЛАМИ ПРОГРАММНОЙ ЗАДЕРЖКИ И НАСТРОЙКИ )30-40 СТРОК каждая по 2 байта - допустим - и получится - до 80 байт кода(зто с самыми навороченными ходами ),при написании на Си (как у Вас выполнение составит более 8 тактов и будет больше указанного Вами ) , Ускорение работы программ на таких контроллерах возможно И НУЖНО выполнять только на родном для этих контроллеров языке - Ассемблер АВР - 133 команды , прекрасный битовый процессор , непосредственное управление всем железом и ПРЕРЫВАНИЯМИ что ограниченно и урезанно в среде Ардуино . Но Вы лишаетесь такой прекрасной ХАЛЯВЫ -НАЛИЧИЕ ГОТОВЫХ , КРИВЫХ , ЧАСТО ПРОСТО НЕ СПОСОБНЫХ ОРГАНИЗОВАТЬ НУЖНЫЙ ПРОЦЕСС КАК НАДО И С БОЛЬШИМ БЫСТРОДЕЙСТВИЕМ библиотек написанных для среды Ардуино . пример - работа с модулями nrf24l01 в Ассемблере показало такое быстродействие , что получается одновременно получать сообщения на одном канале от 12 источников , такого библиотека NRFmaster или подобные ей не могут -вот это я понимаю быстродействие ! И даже переход на smt не даст прироста в скорости - 25 мГц - обращение к памяти программ ,Всё не больше ,да ядро там работает на 80 но обращение к портам не более 20 мГц + наворот работы компилятора раздувает код просто не прилично . Само определение Ардуино - это игрушка в не опытных руках , учебник КАК НЕ НАДО ПИСАТЬ ПРОГРАММЫ для таки контроллеров , другое дело для smt нет для него хорошего Ассемблера ,не развивали для них это направление
@UCanDo
@UCanDo 6 років тому
Понимаете, угодить всем невозможно. Сделал бы я видео об ассемблере - 99% начинающих ардуинщиков просто не стали бы смотреть... а видео делал именно для них, так сказать, хотел дать толчок к большему развитию В то же время писать что-то более простое, тогда знающие начинают говорить о том что что-то не договорил, не оптимизировал, недописал... Я не знаю по поводу скорости обращения к памяти (я сам только учусь и не претендую на всезнание), но в моей отладочной плате на STM32F407VET6 скорость на портах можно выставить более 100 мГц. Точно не помню, посмотрел 1 раз и забыл - не придал этому значения. По Ассемблеру согласен, язык сильный. В наше время это палка о двух концах. С одной стороны можно написать очень быстрый и оптимизированный код, который "заставит" быстро работать даже "медленный" контроллер. С другой стороны существует столько "мощных" контроллеров/процессоров и множество сред разработки, которые "в два клика" создают нужную программу. И, с учетом существующих мощностей, ко будет все так же быстро выполняться, легко портироваться на другую платформу, легко читаем...
@user-os5uk5nc4z
@user-os5uk5nc4z 5 років тому
В "пользу" ассемблера говорит тот факт, что хуй кто когда портирует "KolibriOS" на другие платформы. Ассемблера я с лихвой нажрался во времена на Радио-86РК и работой с видеопамятью на i386dx, отладка адовый пиздец, хер когда к нему прикоснусь.
@diminddl
@diminddl 6 років тому
а разве _delay_us ето не микросекунды для милисекунды вроде _delay_ms.
@UCanDo
@UCanDo 6 років тому
+Dimon Luchyn Да, все верно, нужно писать ms. Но у меня почему-то и так и через us работает одинаково.
@krepton85you
@krepton85you 6 років тому
Эт конечно все хорошо, но нужно к этому вопросу подойти с др. стороны, со стороны Arduino ide и модефицировать ее.
@UCanDo
@UCanDo 6 років тому
Сомневаюсь что этим кто-то будет заниматься. Лучше переходить на AVR Studio
@user-lr1dx2mz1e
@user-lr1dx2mz1e 6 років тому
Дмитрий Екименко лучше переходить на stm, и забыть это говно как страшный сон, stm8 дешевле меги8, но лучше.
@MaxBudkin
@MaxBudkin 4 роки тому
Разве миллисекунды это _delay_us?? Это же уже микросекунды вроде бы.
@UCanDo
@UCanDo 4 роки тому
Да, все верно
@xavigarcia5969
@xavigarcia5969 6 років тому
Капец! Уже докатились до оверлока ардуино с жидким азотом. ГТА 5 потянет?
@user-io3yy9vp9n
@user-io3yy9vp9n 6 років тому
Разгонял Мегу16 кварцем до 25МГц. При чём запускалась как при 5В питании, так и при пониженном до 3,6В (разряженный Li-ion акк.). С кварцем 27 МГц отказывалась стартовать при любом питании. Возможно, если выставить фуз-биты на тактирование от внешнего источника, получится разогнать и до 32МГц. Хотя лично у меня имеются сомнения по этому поводу.
@UCanDo
@UCanDo 6 років тому
Мне встречались устройства с Мегой32, работали на частоте 32 МГц. Только они работали не от кварцевого резонатора (обычного кварца) а от кварцевого генератора.
@SaLaGaDH
@SaLaGaDH 6 років тому
Запустить это одно, а заставить стабильно работать без глюков совсем другое. плюс сузится диапазон рабочих температур, плюс со временем могут вылезти глюки которые не заметил сразу, т.е. некоторы операции иногда могут выполняться с ошибками... у меня в частности были случаи когда из-за повышенной частоты некорректно работал захват таймера ICP, в другом случае при выходе из сна по прерыванию АЦП значение преобразования иногда бывало с большей ошибкой чем без сна и т.д. короче можно самому себе гемор создать, сразу вроде бы все нормально, продолжаешь дальше писать, а потом бьешься головой об стену не понимая почему правильно написанный код неправильно работает, а оказывается что частота для данного напряжения питания превышает рекомендуемую производителем...
@ibrag2012
@ibrag2012 4 роки тому
Раніше у мене ардуїно дригав ногою кожну мікросекунду а зараз кожну наносекунду: дякую! :)
@user-jq7tc7qi5z
@user-jq7tc7qi5z 6 років тому
тот кварц что показывает автор ролика можно заменить на любой, например 3,2ГГц и АТмега 2560 все равно заработает, можно даже вообще не впаивать ничего
@GodsHermes
@GodsHermes 6 років тому
А если писать на ассемблере, то будет еще меньше(на порядок), и максимально быстро.
@zonderdk
@zonderdk 3 роки тому
Не будет), инструкции типа PORTB |= 1
@FlameWinds
@FlameWinds 4 роки тому
СветодИод =)
@Ololoshize
@Ololoshize 2 роки тому
светодИад
@Red-gv4bl
@Red-gv4bl 4 роки тому
продолжи эту тематику
@mr_kotik
@mr_kotik 4 роки тому
Или я что-то не понимаю в двоичной системе счисления, или 0b00001000 - это не 3, а 8
@UCanDo
@UCanDo 4 роки тому
3-й бит
@mr_kotik
@mr_kotik 4 роки тому
@@UCanDo Да, уже понял)
@Heorenmaru
@Heorenmaru 5 років тому
изучи даташит на контроллер, там есть такая вещь как регистры, таймеры, АЦП и прочее показанный шим тут правильно работать не будет, для него надо настроить один из таймеров и выводить нужное значение в нужные регистры. в режиме FastPWM можно шим разогнать до 78kHz (с кварцем в 20MHz). По поводу кварца: у многих атмег максимальная частота, при которой контроллер будет надежно работать, это 20MHz
@UCanDo
@UCanDo 5 років тому
Производитель действительно гарантирует стабильную заботу до 20 мГц. Есть еще другой показатель: 16 мГц при питании от 5 вольт. При питании 3.3 вольта стабильная работа производителем не гарантирована. Вот посмотрите это видео: ukposts.info/have/v-deo/j5GoZGaFrGOGjoE.html Используется Atmega326, кварц на 16 мГц. Питание - 3.3 вольта. Устройство стабильно работает (круглые сутки, не выключаясь) уже около 9-ти месяцев. То есть "не гарантировано производителем" - не значит что вообще не будет работать. При частоте 32 мГц важнейшим фактором является внешний частотный генератор. Именно внешний генератор. От всего остального (кварц, внутренний генератор) работает не стабильно. Я проводил разные эксперименты, с использованием обычного кварца стабильная работа была на частоте 27 мГц. Выше никак. Только от внешнего генератора. Согласен с тем что это все делается на свой страх и риск. Производителем не даются гарантии работоспособности. А значит вероятность сбоя все равно присутствует.
@user-os5uk5nc4z
@user-os5uk5nc4z 5 років тому
Я делал как-то схему на 16Мгц 3.3v, потому что лень было согласовывать уровни 3.3-5V, работа с spi tft и spi флеш памятью, поскольку progmem для графики не хватало вообще. Работало паршиво, флеш читался и писался через раз. После того, как поменял кварц на 8МГц, все заработало идеально.
@user-wq4ft4gy2l
@user-wq4ft4gy2l 4 роки тому
В Протеусе проверил код ,не работает шимм..
@UCanDo
@UCanDo 4 роки тому
проверьте в реальном железе. Протеус не всегда адекватно моделирует устройства.
@user-wq4ft4gy2l
@user-wq4ft4gy2l 3 роки тому
@@UCanDo На счет ускорения шим цикл for void loop() { for (int i=0; i
@UCanDo
@UCanDo 3 роки тому
В видео я допустил ошибку. Где-то в комментариях уже говорилось об этом
@UCanDo
@UCanDo 3 роки тому
Нужно дописать k++ перед закрывание скобок
@user-wq4ft4gy2l
@user-wq4ft4gy2l 3 роки тому
так работает но ведь цикл должен всегда крутиться как же другии операции #include #include int PWM_time=200; //Число, которое мы как бы хотим записать в analogWrite(PIN, 32) void setup() { DDRB=B00000001; PORTB=B00000000; } void loop() { for (int k=0; k
@OMG4WTF4OMG
@OMG4WTF4OMG 6 років тому
А слабо прошивку от пультоскопа ускорить?
@brainrolling3259
@brainrolling3259 Рік тому
Скорость от изменения программного кода не изменяется. Изменяются задержки. Скорость и задержка - разные вещи.
@dmytroi5456
@dmytroi5456 6 років тому
Автор, то кварц от usb-uart преобразователя, сам МК тактируется от крохотного кварца возле пинов 3.3 и 5v. А то что ты сделал программно, называется не "ускорение ардуино", а избавление от лишних комманд при записи в порт GPIO, все остальные действия выполняются со все той же скоростью. И то что оно ускорилось в 20 раз - где измерение? В среде ардуино так же есть функция задержек на микросекунды, без подключения дополнительной бибилотеки - delayMicroseconds();
@UCanDo
@UCanDo 6 років тому
Спасибо за отзыв. Ваши замечания правильны. Их уже много раз писали в комментариях к видео. Там же я и давал ответы. Как-то не хочется опять все дублировать. Почитайте комментарии
@user-nq1qx7qt5i
@user-nq1qx7qt5i 3 роки тому
Чтоб пересесть на другую платформу будет опять кодить :( Универсальность программы теряется.
@user-nq1qx7qt5i
@user-nq1qx7qt5i 3 роки тому
... Вообще говоря, поступать так - не лучшая идея. Почему нет? Вот несколько причин: Код намного сложнее отлаживать и поддерживать, и его намного труднее понять другим людям. Процессору требуется всего несколько микросекунд для выполнения кода, но вам могут потребоваться часы, чтобы выяснить, почему он работает неправильно, и исправить это! Ваше время ценно, правда? Но компьютерное время очень дешево, если судить по стоимости электричества, которое вы его питаете. Обычно гораздо лучше писать код наиболее очевидным способом. ... www.arduino.cc/en/Reference/PortManipulation
@UCanDo
@UCanDo 3 роки тому
@@user-nq1qx7qt5i Я не соглашусь с вами. Почитайте историю создания Ардуино, на пример в Википедии: ru.wikipedia.org/wiki/Arduino Цитирую: "Целью проекта было создание дешевой и простой среды для начального обучения программированию". а если более подробно то среда разработки Ардуино разрабатывалась для школьников, чтобы заинтересовать ДЕТЕЙ и чтобы ДЕТЯМ было легко и просто писать какой-то код. Цель была именно в детях, в простоте, в том, чтобы заинтересовать, а не научить. Представьте себе человека, который всю жизнь ездил на машине только в симуляторе, а в качестве управления был только геймпад с 8 кнопками. Зато все просто и понятно, угол обзора всего несколько десятков дюймов (экран монитора), управление проще простого, не нужно переучиваться на управление другой машиной, ведь геймпад тот же.... А что будет если такой человек сядет в реальную машину? С микроконтроллерами то же самое. Ардуино не учит программированию. Вот скажите, что вы будете делать, если сделали все по инструкции, подключили все необходимые библиотеки, все настройки прописали правильно, компиляция и прошивка прошли без проблем, а в результате устройство не работает, или работает не так. Что вы будете делать? Что сделают те, кто ничего не знают кроме ардуино? Сможет ли кто-то самостоятельно разобраться, найти и устранить глюк? Может несколько человек и смогут, но подавляющее большинство побежит на форум чтобы получить готовое решение, или начнут качать/устанавливать другие библиотеки и пытаться запустить все МЕТОДОМ ТЫКА. Потому что никто не разбирается в том как работают библиотеки, что в них внутри, какие процессы происходят в МК, вот по этому таким людям потребуются МНОГО ЧАСОВ чтобы понять что в коде написано и еще больше часов чтобы найти ошибку. А если ошибка не явная - все! Приехали! Туши свет! Скажите, вы сможете определить ошибку связанную с наползанием "кучи" на область явно объявленных переменных. Вы хоть знаете о чем я сейчас спросил? А сколько еще Ардуинщиков об этом знает? один? два? Поймите, все, абсолютно все СЕРЬЕЗНЫЕ среды разработки работают на прямую с портами. Еще вопрос: что будет делать Ардуинщик, если у него не хватает памяти МК? Ну вот тупо программа не влазит в Atmega328. То есть 32 килобайта и не хватило... код весь пересмотрели, ничего выкинуть нельзя. Что делать? У меня была такая ситуация. После окончания написания программы код занимал 205% памяти, то есть 65,6 КИЛОБАЙТ! Кто из ардуинщиков с этим справится? Сразу побегут покупать Мегу2560 потому что не способны решит элементарные проблемы и вопросы. Знаний нет. После полу часа оптимизации код стал занимать 90%, то есть 28,8 килобайт. Даже свободное место осталось! И это не максимальная оптимизация. Я ничего не выкинул, не вырезал, все функции остались.... А на счет универсальности... Это такой спорный вопрос. И им "тычут" в первую очередь, но по факту никто этим не пользуется, и в половине случаев эта кроссплатформенность НЕ РАБОТАЕТ. Попробуйте один и тот же проект проект скомпиллировать и запустить на РАЗНЫХ Платах / Микроконтроллерах: Atmega8 attiny85 Atmega328 Mega2560 Arduino DUE Arduino LEONARDO Arduino ZERO ARDUINO MKR VIDOR 4000 ARDUINO 101 ARDUINO YÚN ARDUINO M0 и так далее... Перечислять можно долго. Кроссплатформенным в этих всех платах будет только скетч Blink (но не факт). Весь остальной код нужно будет существенно переделывать. А многие библиотеки так и вовсе не заработают! Так что не заблуждайтесь о кроссплатформенности.
@user-nq1qx7qt5i
@user-nq1qx7qt5i 3 роки тому
@@UCanDo _Вы хоть знаете о чем я сейчас спросил?_ Вы умеете играть на пианино? Думаю, что да ;)) Я в начале. Уже есть вопросы, но я их приберегу, пока они не оформятся в *понятные* вопросы ;))
@user-nq1qx7qt5i
@user-nq1qx7qt5i 3 роки тому
П.С. Минд42 плохо дружит с телефонами/планшетами. Комп работает с "картами" нормально. Там ссылки по теме. Мож чего пригодится...
@UCanDo
@UCanDo 3 роки тому
Так у меня и видео не начального уровня. Канал рассчитан не на новичков, а на тех кто немного разбирается в программировании. И да, я умею играть на фортепиано и немного на гитаре ;)
@Vlad_4572
@Vlad_4572 4 роки тому
Проверил время исполнения DigitalWrite, и офигел, порядка 6 мкс! Тогда о чем речь в ролике, о каких 1800?? Автор, поясни, пожалуйста?
@UCanDo
@UCanDo 4 роки тому
Видео не новое. Возможно в новых версиях Arduino IDE код подправили и скорость возросла. Надо проверить.
@Vlad_4572
@Vlad_4572 4 роки тому
@@UCanDo , я так же предположил. Сейчас реально за два исполнения 12 мкс. Спасибо за ответ)
@user-mb1zq1nj8y
@user-mb1zq1nj8y 3 роки тому
​@@UCanDo Я проводил тесты на Arduino Uno порядка 5 лет назад. digitalWrite() - порядка 4-5 мкс.
@user-rn8yc1wx8w
@user-rn8yc1wx8w 6 років тому
Такая запись и выглядит вроде понятнее
@user-gb2ze8db9b
@user-gb2ze8db9b 5 років тому
а есть схема переделки пульта
@UCanDo
@UCanDo 5 років тому
Вы имеете ввиду как сделать радиоуправление на Ардуино?
@Juriy830
@Juriy830 6 років тому
Ну всё таки это конструктор чуть ли не для детей. Что бы поиграться вполне хватает. А ШИМ тут получится какой то реального времени, т.е. работает только шим, всё остальное стоит
@Silver2Storm
@Silver2Storm 3 роки тому
Зачем для ШИМ писать в порты. Он сам это сделает. Надо только настроить работу таймера и схемы сравнения.
@nikolaydvornikov397
@nikolaydvornikov397 3 роки тому
Как? Я совсем новенький в Ардуино. Нет ли у Вас ссылок/инструкций по ускорению работы платы?
@dr_docer
@dr_docer 4 роки тому
в 20 или в 10?
@orest_savitskyi
@orest_savitskyi 3 роки тому
в примерно 10, тоесть даже не 10, не говоря уже о 20
@Asmcavr
@Asmcavr 4 роки тому
Среда Ардуино из любого камня сделает кусок тормознутого железа (криворуко написанные библиотеки с кучей ненужного шлака). Пишите на норм си и будет вам счастье, иногда приходится пользоваться вставками на asm. Автор вы можете ускорить этот контроллер с 9 этажа))).
@0imax
@0imax 6 років тому
Ардуино пойдёт для простых, непроизводительных задач. Но что-то серьёзное на ардуино сделать не получится. Надо учить ассемблер и потом С, но никак не наоборот. Ну и бросать уже эти Меги - STM сейчас на коне. А то некоторые до сих пор под pic16 свои самоделки пилят, поди найди это древнее г.. мамонта))
@melickon
@melickon 5 років тому
В Arduino IDE С используется.
@andreyvashenko9321
@andreyvashenko9321 4 роки тому
ребята вы сами попробуйте вести канал а потом критикуйте. я сейчас не ко всем обращаюсь а конкретным лицам. я не знаю как вообще но автор снял очень классное видео. по поводу длительности видео я согласен, долго. но об этом можно сказать и без упрёков а вежливо попросить автора немного более сжато рассказывать. не спешите критиковать.
@Palladln
@Palladln Рік тому
Если цикл ардуиновский убрать (лупп) и использовать чисто СИшные команды еще раз в 30тыс. ускоришься...
@UCanDo
@UCanDo Рік тому
Согласен. Кстати, видео довольно старое, с тех пор Ардуино ИДЕ обновилась и многое пофиксили, и скорость работы стала приближаться к СИ-шной.
@Palladln
@Palladln Рік тому
@@UCanDo Это сама ИДЕ стала шустрее(т.е. компиляция).. а сама прошивка ардуиновская (код этот) как был кривой, так и остался.. Ребята на форуме "схем нет", наглядно показывали разницу на блинке.. можно в луупе убрать задержку, только вкл. и выкл светик и посмотреть скорость на осциллографе.. там меандр получается не выше 50кГц. и еще помеха (когда цикл Лууп переходит в начало), и можно сделать этот блинк чисто СИшными командами, получим примерно половину тактовой частоты (т.е 8 Мгц при такте 16).. вот те и разница: 50кГц и 8 Мгц..
@ODIY_main
@ODIY_main 6 років тому
на 11 минуте секунду вы секунду уменьшили до 1мс таким образом уменьшили и код
@UCanDo
@UCanDo 6 років тому
Задержка так и осталась 1 секунду. Проверьте на своей ардуино.
@ODIY_main
@ODIY_main 6 років тому
может конечно я и не прав, но _delay_us(1000) это и есть 1000мкс=1мс.
@UCanDo
@UCanDo 6 років тому
Посмотрел код, точно, должно быть _delay_ms а не _delay_us... но почему-то "_us" работает как "_ms" и у меня получаются нормальные задержки. Может это у меня что-то с самой библиотекой "delay.h"? Вы проверяли у себя? Задержки правильно идут в "_delay_ms" и " _delay_us"?
@ODIY_main
@ODIY_main 6 років тому
нет я не проверял, за видео спасибо.
@raal8438
@raal8438 4 роки тому
ты конечно молодец что понял что в ардуино иде чой то не то ))) но ты бы сначала сам разобрался с этим потом бы объяснил как писать проги на простом Си, а так блеешь что то и сам не понимаешь , но направление правильное, и молодец что разбираешься, но скорее бы ))) надо писать на Си, а некоторые вещи или строки даже на "страшном" Ассемблере! как делают продвинутые прогеры.
@raal8438
@raal8438 4 роки тому
спасибо, дорогой что правильно понял! значит все получится! я старый инж-электронщик и радиолюбитель, лет 15 назад увлекся AVR и PIC и писал на них управление блоками тьюнеров из телевизоров и автомагнитол на CodeVision, а сейчас полгода назад увидев ардуино решил приобщить к этому делу внука и соседского мальчишку, стал читать и смотреть ютуб, полный дурдом этот ардуино-иде! и эти дебильные скетчи!))) но для начала наверно все таки придется с ним познакомиться или может лучше MariaMole. но все таки хотелось бы подружить CVAVR с ESP32 и с NodeMcu как более продвинутые ардуины)
@user-yb1sv6ls9z
@user-yb1sv6ls9z 6 років тому
Если совместить способ с заменой тактового генератора и писать скетчи на чистом avr то мк будут летать
@UCanDo
@UCanDo 6 років тому
Да, скорость будет очень большая! Я видел проекты с частотой 32 Мегагерц! Библиотеки все равно придется править или писать самому.
@user-yb1sv6ls9z
@user-yb1sv6ls9z 6 років тому
3:16 в корне не соглашусь! Нужно собрать новый bootloader и загрузить его в мк Собрать bootloader можно тут homes-smart.ru/index.php/oborudovanie/arduino/avr-zagruzchik
@UCanDo
@UCanDo 6 років тому
А какое отношение имеет бутлоадер до скорости выполнения команд и к библиотекам??? Бутлоадер выполняет только одну цель: через UART получить прошивку и записать ее в конкретный адрес памяти. ВСЕ! Если МК будет работать на частоте (допустим) 32 мегагерца то и все команды будут выполнятся быстрее, все тайминги ускорятся, и работа с устройствами нарушится так как тайминги выполнения команд МК будут не соответствовать таймингам команд конкретного устройства (на пример дисплея). Работа нарушится.
@user-yb1sv6ls9z
@user-yb1sv6ls9z 6 років тому
Не буду спорить, я говорю что лично проверил на atmega 8, 328 с разным кварцем и собранным бутлодером! Но если мои слова вас не убедили, тогда попробуйте залить на 328-ую bootloader собранный для 8 мгц и установите кварц на 16 мгц, после чего загрузите блинк.
@UCanDo
@UCanDo 6 років тому
Вы поймите, вы не привели никаких данных. Лишь намеки. Если я в чем-то не прав, то дайте конкретные данные, ссылки где точно описано о том что вы говорите. А так даже не совсем понятно о чем речь...
@UCanDo
@UCanDo 6 років тому
Кстати, знаете почему у вас блинк в обоих случаях получается одинаковым? Потому что вы в настройках boards.txt прописали значение частоты. Вот только для большинства библиотек этого не достаточно.
@user-yb1sv6ls9z
@user-yb1sv6ls9z 6 років тому
Я не сказал что он получается одинаковый! Он разный и я прекрасно знаю все про boards.txt, он у меня настроен под целую ахапку атмег и разных частот для этих самых атмег! И рас уж такая пьянка пошла, то все толковые программисты делают библиотеки которые подстраиваются под частоту мк. А что касается не подходящих библиотек, заменить чило тактов в библиотеке это не такая и сложная задача. Библиотеки RF24, MFRC522, Shifty и еще многие другие, прекрасно работали без изменения.
@mr_tea866
@mr_tea866 6 років тому
322 оговорка по соло
@user-zj6wu8hy8x
@user-zj6wu8hy8x 6 років тому
это все хорошо...ГТА 5 то потянет?
@gtasabttfandroid4599
@gtasabttfandroid4599 3 роки тому
Ещё лучше будет чем на пс4:)
@Juriy830
@Juriy830 6 років тому
500 гц а не 50 !
@ujinn7248
@ujinn7248 5 років тому
я все понимаю, парень хочет показать альтернативные способы, которые "как бы" оптимизируют код, но нафига при этом комментарии то он удаляет?? при компиляции они один фиг не попадают ....
@cutefox8319
@cutefox8319 4 роки тому
наверное чтобы на экране места меньше занимали.. а не в памяти микроконтроллера.. не?)
@searus7237
@searus7237 Рік тому
Надо не пытаться скетчи оптимизировать, а писать на Ассемблере
@UCanDo
@UCanDo Рік тому
Кто сейчас пишет на ассемблере?
@Mulinby
@Mulinby 6 років тому
Автор ты гений! Я запустил батлу на arduino UNO! А если серьезно, то вот так можно до 284 байт уменьшить моргалку #include int main(void) { DDRB = 0xff; start: PORTB ^= (1
@UCanDo
@UCanDo 6 років тому
Хороший пример быстрого и маленького кода По ходу ролик удалю и переделаю по-новой... В двух слова о моем видео пытался просто показать что Ардуино - это только начало, надо учить более серьезные языки, и переходить на "нормальное программирование"....
@user-jq7tc7qi5z
@user-jq7tc7qi5z 6 років тому
Так и заяви в новом ролике, что Ардуино это проект для популяризации микроконтроллеров среди широких масс, первая ступень на пути великих возможностей, которые открывают нам МК.
@Alexander_Pisklov173
@Alexander_Pisklov173 6 років тому
Николай Только, по-моему, вот так и появляются недопрограммисты, которые пишут код и абсолютно не понимают, как он работает.
@opoffis
@opoffis 6 років тому
Круто
@user-ts5qb4ip3b
@user-ts5qb4ip3b 5 років тому
вот только на 11:27 минуте подождали не секунду а 0,001 секунды потому что us это микросекунда 10 в -6 степени а ms это миллисекунда 10 в -3 степени,автор не делай ошибки грубые и будь внимателен
@zdomovoi6094
@zdomovoi6094 2 роки тому
Ерунда всё это! Ставил кварц на 23 мГц и всё прекрасно работало,но почему то заменил обратно на 16 мГц. Значит не всё так прекрасно как автор утверждает ?
@UCanDo
@UCanDo 2 роки тому
Одной только заменой кварца не получится все решить. Нужно и код, и компилятор настраивать под новую частоту, иначе нормально работать не будет
@user-lf4yk8zt8i
@user-lf4yk8zt8i 6 років тому
Что будет если впаять кварц на 54000)))
@user-nq1qx7qt5i
@user-nq1qx7qt5i 3 роки тому
Плата на первой космической покинет пределы электричества ;))
@user-mr8dz3tj1j
@user-mr8dz3tj1j 6 років тому
А в примере с кнопкой, читается весь порт целиком вместо одного пина! Зачем путаешь новичков, которые не знают С++! Да и С++ в разных средах программирования отличается!
@UCanDo
@UCanDo 6 років тому
Да к ведь и не возможно считать отдельно 1 бит... Порты потому и разделены по 8 пинов в каждом (0-7) что составляет 1 байт. Это ограничение самого микроконтроллера. Он может дать значение только порта целиком, всех 8-ми бит (портов) сразу. А уж с полученным байтом мы и сравниваем требуемое нам значение и тем самым узнаем в каком состоянии находится тот или иной бит (то есть порт).
@user-mr8dz3tj1j
@user-mr8dz3tj1j 6 років тому
Возможно в этой среде и невозможно (надо проверить), а в некоторых других средах разработки это реально сделать.
@user-en4vo4qp9h
@user-en4vo4qp9h 6 років тому
Не тот кварт показываете.
@UCanDo
@UCanDo 6 років тому
Да, ошибся.
@fdg0d1
@fdg0d1 6 років тому
это и есть оптимизация о которой юбисофт ничего не знает
@ZacroyPast
@ZacroyPast 5 років тому
OGON!!! LIKE!!!
@Ev3658
@Ev3658 6 років тому
Bascom AVR на всегда ))))
@Ek_Ko
@Ek_Ko 3 роки тому
На когда?
@alexbel5717
@alexbel5717 5 років тому
Если заливать напрямую машинный код, то результаты будут на порядок лучше.
@UCanDo
@UCanDo 5 років тому
А как получить этот Машинный код? Вы сможете написать программу в виде «0» и «1»?
@alexbel5717
@alexbel5717 5 років тому
Есть языки низкого уровня. Все расслабились на С, и тому подобные, еще бейсик вспомните.@@UCanDo
@UCanDo
@UCanDo 5 років тому
Кстати, есть Бейсик для АВР... но это совсем уж извращение :)))
@vaa3921
@vaa3921 4 роки тому
Alex Bel, на порядок - значит в 10 раз. Ну ну. Смешно. Хоть раз пробовали декомпилировать код Си? Современный оптимизирующий компилятор генерирует код лучше, чем напишет человек на ассемблере. Только в очень редких случаях удается написать чуть-чуть быстрее. Реальный код это вам не ножкой подергать.
Temperature sensor AD7416. Connect to Arduino
5:21
Home Made
Переглядів 2,9 тис.
Фишки Arduino, о которых ты не знал!
13:37
Заметки Ардуинщика
Переглядів 104 тис.
1 класс vs 11 класс (рисунок)
00:37
БЕРТ
Переглядів 4,2 млн
Простая беспроводная сеть датчиков на Arduino и 433 MHz
18:54
Заметки Ардуинщика
Переглядів 254 тис.
Самое простое объяснение парадокса Ферми
28:11
Задний двор Айлашкерского
Переглядів 90 тис.
Arduino and external EEPROM AT24C128
12:39
Home Made
Переглядів 48 тис.
DIY 3D lidar point cloud testing
4:09
Lethic Z
Переглядів 25 тис.
DIY COMPUTER from scratch!
25:03
Vectozavr
Переглядів 2,2 млн
How to connect the display from a mobile phone to Arduino
13:58
Home Made
Переглядів 1,2 млн
Не хватает Arduino? Выход есть STM32!
9:36
VirF Live Productions
Переглядів 200 тис.
Крутейший генератор сигналов на Arduino!
13:24
Заметки Ардуинщика
Переглядів 141 тис.
Оптимизация кода Ардуино и ускорение работы Ардуино проекты.
15:18
MQA - ловушка для аудиофила. FX-AUDIO- DR07
26:41
НЕ ПОКУПАЙТЕ НОВЫЙ СМАРТФОН, ПОКА НЕ ВЫШЕЛ ЭТОТ [2024]
13:25
Thebox - о технике и гаджетах
Переглядів 54 тис.
Creepy Samsung Alarm cannot be turned off 😱🤣 #shorts
0:14
Adani Family
Переглядів 412 тис.
САМЫЙ дешевый ПК с OZON на RTX 4070
16:16
Мой Компьютер
Переглядів 71 тис.
Портативная PS 5 🎮 #ps5 #expressly
0:22
ExpresSLY Shorts
Переглядів 67 тис.
ИГРОВОЙ ПК от DEXP за 37 тысяч рублей из DNS
27:53
Ремонтяш
Переглядів 392 тис.