We accelerate Arduino more than 20 times!
HTML-код
- Опубликовано: 26 сен 2024
- 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/blo...
Very useful articles:
geektimes.ru/p...
robotosha.ru/ar...
microsin.net/pr...
4a4ik.blogspot....
easyelectronics...
mkprog.ru/avr/a...
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
Я не гуру и не спец но уже накипело! Автор, попробуй перед тем как снимать новый ролик написать, хотя бы виде заметок, сценарий. Попробуй сократить время ролика но сделать его более содержательным, сейчас много "воды". И я умоляю проверяй информацию которую излагаешь !!! Много неточностей и дизинформации что может навредить начинающим и самому тебе.
По поводу "воды" и времени, согласен, есть над чем поработать.
А по поводу неточностей и дезинформации - напишите что именно, в чем ошибся?
Например, указывали на кварц который стоит на интерфейсной меге, а кварц на ATMEGA2560 мелкий и находиться в низу с лева от чипа. Но я не задавался целью тыкать Вас носом в ошибки и не записывал их. Я попытался дать совет который возможно будет полезен.
Плюс какой смыслы из arduino IDE писать на чистом avr gcc который так тщательно инкапсулировали (упростили) ребята из компании для начинающих? AVR Studio бесплатна и там гораздо удобнее писать на чистом си если уже так хочется "ускорить" контролер и конечно же есть еще асемблер!!! Можно начинающих путать до опупения =)
Да, про кварц, это я потом уже понял что не туда показывал, но ведь все равно часто та та же - 16 мГц.
Да, все верно, AVR Studio хорошая вещь. С ассемблером и я часто в ступор впадал :)
на последних минутах автор озвучил точно такие же мьісли.
в начале ролика тот кварц не для меги а для эмулятора порта.. для меги .. он планарный и размер примерно 1*2мм
Да, спутал.
да всё норм .. я боялся ты его перепаивать будешь и пытаться разогнать ;)))
:))
У автора этого комента было замечено двух(!!!) ядерное ардуино , но он решил скрыть это туманом молчания . может вы на видео покажете реализацию этого проекта ?
Ниже уже написали-смысл тогда кодит в ардуино иде-берем атмел студию или блокнот и начинаем писать как раньше напрямую к портам обращаясь и перефирии.
Расходимся, никто ничего не ускоряет. Просто подход к проблеме другой. Да, обращение к регистрам работает гораздо быстрее, и если вам нужно быстро дёрнуть ногой то это отлично работает. Но теряется удобство работы именно с ардуино. А ускорить кварц можно без особых проблем. Всего-то нужно переопроеделить дерективу F_CPU указав новую частоту кварца. Это можно сделать в файле описания доступных плат. Лично ставил кварц 40МГц. И всё работает, но возможно что заведётся не на каждом камне. Больше 40 ставить нет смысла, внутренний генератор больше не разгоняется. Но можно использовать внешний генератор частоты. Если переопределить фьюз биты. Пруфов негде не видел, но теоретически возможно.
Как раз работать в Ардуино менее всего удобно.
Я работаю в разных IDE и Ардуино самый худший.
@@ИраФомченко Я имел ввиду не само IDE, а фреймворк Ардуино. Он доступен например в PlatformIO. Довольно удобно использовать Ардуино код для быстрого написания программы. Куча встроенных библиотек. Типа матх и сериал. Потом после проверки идеи можно переписать код на регистры, для ускорения быстродействия.
Если есть задача существенно повысить производительность и снизить объем памяти, то только ассемблер. Но есть ощутимый минус: потеря совместимости с другими контроллерами. Именно поэтому и используют всякие IDE. Поэтому ассемблер пойдет для специфичных задач, когда код надо уместить в условиях ограниченного размера памяти, и при этом важна производительность. Для коммерческого использования, например, или в самоделках из разряда "а вам слабо! ". В изучении ассемблера нет ничего сложного. В далеком 1993 году, будучи учеником 8-го класса, я легко освоил ассемблер такого мамонта, как Z-80. Брат, в то время студент университета, подарил мне спектрум совместимый компьютер Sintez-2 (48 кб). Начал с бейсика, но быстро уперся в его ограниченность и медлительность. Поэтому решил перейти на ассемблер. Первая настольная книга "Программирование в машинных кодах. ZX-Spectrum" (перевод с английского). Писал на ассемблере текстовые, музыкальные редакторы, игры (тетрис, L-club, поле чудес и т.п.). Параллельно с изучением ассемблера пришлось изучать и аппаратную часть компа (организация прерываний, порты В/В и т.п.). К примеру, тетрис занимал где-то 1 кб памяти, с учетом текстовой части и музыкальных эффектов. Где-то должны быть кассеты в доме у родителей с записями программ. Библиотека книг точно сохранилась. Эх.... Ностальгия!!! Делал кнопку турбо (7МГц) на триггере К555ТМ2. Расширил память до 128 КБ. Сам комп был подарен племяннику при переходе на IBM, и благополучно почил на свалке по причине полной и безвозвратной потери работоспособности)) (был разломан в хлам).
Смотрю иногда видео про Ардуино и хочется "встряхнуть стариной" )) Увлекательная это штука. Главное, сейчас все доступно. А раньше приходилось выбираться в город на радиорынок, покупать микрухи непонятного качества. Помню, попадал пару раз с памятью на РУ5... Эх, были времена! ))
О да. Я вас понимаю. Я начинающий, только вхожу в эту сферу. Но все равно это так увлекательно самому что-то создать и видеть как это работает!!!
Ассемблер вещь крутая. Но в современном мире его будут изучать только те, кто работают в этой сфере. Обычные пользователи не будут его изучать в силу сложности вхождения. Слишком много читать, ещё и даташиты на английском... А на Ардуино можно научиться программировать за час...
Я не говорю что ассемблер плох. Наоборот, это крутая вещь. Но его сейчас никто не изучает.
До сих пор в шкафу лежит Sintez . В своё время , что бы его купить , пришлось откладывать деньги больше полугода .
@@victortremov9584 , брат брал Синтез с рук у "зажиточного" одногруппника, когда тот на Амигу переходил. Ценник сейчас и не вспомню, но если мама не ругалась, то было недорого)). Надо бы у брата спросить, вспомнить молодость))
Да парни, я вам покажусь мамонтом)) - мы разрабатывали и кодили аж в середине 90-х для i8081 8битного, и это была серийная продукция))
@@KirillVotrin , угу - чистый asm, никакого Си у нас на контроллеры тогда не было. На си писал для АТ, и без всяких плюсплюсов. Но я больше железо и общее сист.построение.
Давно мечтал это понять. Спасибо, автор! )))
Вся прелесть и сила урдуинки в том, что ее код легко читаем не программистами -). И переносим. А если кодить такой тарабарщиной, то можно и поинтереснее железо найти -).
Что мешает написать свои собственные функции и туда засунуть эти непонятные каракули? Будет и простота чтения/писания и скорость.
Насчёт "поинтереснее железо": подскажите, пожалуйста, в каком направлении копать? Где можно почитать что-нибудь на эту тему? Спасибо :)
@@МовсарХалахоев stm32 как вариант -) цена та же, возможностей больше.
@@progressivereloaders92 Это не Си++. Это Си
@@cutefoxRC Я в Atmel studio когда кодю, как раз такие функции типо ардуиновских Digital write Digital read Или даже Аnalog write, analog read и прописываю в виде макросов, обращаясь внутри них напрямую к биту порта или к регистру результатаАЦП илиТаймера в режиме Шим, вернее один раз прописал и потом просто копирую из проэкта в проэкт в заголовочный файл: Получается и Быстрое выполнение команд и одновременно их читабельность:))
Представь, что нужно обрабатывать неопределенное количество данных, и уже невозможно бутет поймать тайминги цикла. Они будут плавать. Советую учить прерывания , создавать события и разбивать программу на независимые блоки(мультизадачность).
К примеру, мограем светодиодом не приостанавливая основной цикл, раз в секунду: digitalWrite(13, (millis() / 500 % 2));
Я сегодня задумывался как ускорить чтение с ик датчиков! Прям в тему видео! Спасибо!
Ага, заменил команды в Блинк и потерял универсальность. Теперь под другую плату надо переписывать код!
Да и читаемость .... Вместо человеческих слов какие-то каракули :)
Ардуино ИДЕ сделана для простоты и универсальности. Плата за это - размер и производительность.
Если умеешь писать на Си (или Ассемблере), Ардуино ИДЕ не нужна. Просто пиши на Си и лей прошивку программатором. Для Си библиотек готовых не меньше чем для Дуины. А та же Студия хотя бы имеет средства отладки, в отличие от. Кроме того, можно отлаживать прямо в железе, используя JTAG
А что мешает написать свои функции, которые будут юзать эти непонятные каракули? Сделаешь библиотеку и код переписывать не придется под каждую плату. Мыслите шире)
Отлично, как раз искал ускорение и сжатие объема кода в ардуино. Очень интересное видео
Прелесть Arduino IDE в простоте и быстроте написания кода, "с" все немного усложняет, но тем не менее видео очень познавательно, спасибо за труды.
Какая же прелесть? Вместо короткой команды PIN писать непонятную DigitalRead?
Не си усложняет, а arduino IDE упрощает. Просто в ней есть библиотека и всё. Кто тебе мешает написать раз:
unsigned char WriteBit(unsigned char In, unsigned char BitNum, unsigned char Val){
return (Val==0) ? In&(~(1
Дошли!!!)
void WriteBit(unsigned char *In, unsigned char BitNum, unsigned char Val){
*In = (Val==0) ? *In&(~(1
@@ЮрийСамофал-ю9ь кста, обращаться к переменной одновременно как к байту, так и побитно можно при помощи вот такой конструкции:
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;
Ну-у, разводка платы было такая, что уж тут поделать! 🤔 А так хоть какая-то "понятность" в представлении сигналов и переносимости на другую плату была! Кста, так можно и в Ардуине порты описать! 👍😁🤪
я не знаю что вам ардуино иде упрощает, любая нормальная среда сама умеет за тебя дописывать строки, только переменные вписывай, в стм у тебя готовые функции лежат тебе просто нужно знать от куда их копировать и как ими пользоваться и тебе не нужно угадывать как тонны абстракции под твоим кодом будут всё собирать и потом выполняться.
Арудино упрощает первый год возможно пока ты учишь всё это дело, потом просто нужно понять что это говно просто ущербно либо нужно для простещих проектов на уровне хобби или какого-то переключателя дома.
В ардуино ударение нужно делать на У. ардУино. Проверочное слово - светодИод.
А вообще програмное ускорение - дичь какая то. Контроллер от этого не стал быстрее работать. Он только стал выполнять совершенно другой код с той же скоростью что и раньше, не более.
З.Ы. исправльте свой светодИод. У меня уши кровоточат когда слышу такое.
+Andrew Mikhno Спасибо за отзыв. Слова - паразиты, трудно избавиться от того чему был научен.
По поводу ускорения. Все верно, контроллер работает с той же скоростью, НО скорость выполнения программы увеличилась. Стандартные команды Ардуино ИДЕ сделаны универсальными (работают на любом микроконтроллере) а универсальность влечёт за собой усложнение кода для того что бы именно эта команда сработала именно на той Ардуино какую вы используете. В результате контроллер вместо одной операции делает несколько операций. Это влечёт за собой "медленную" работу программы, так как контроллер выполняет действия, которые на самом деле не нужны.
В видео я привёл пример прямой записи в порт - такой код весит на много меньше (так как не происходит подключения стандартного "универсального" кода Ардуино ИДЕ, он здесь просто не нужен), а если лишний код не добавлен, то и контроллер не будет тратить рабочее время, а сделает только то что ему указали - запись в порт.
Именно это и является "ускорением" - не делать лишней работы, а только то, что нужно. Код не другой, он тот же, только выглядит иначе. Но весит меньше и выполняется быстрее.
Тогда следует говорить про реализацию алгоритма и оптимизацию кода. Но ни в коем случае не о том что контроллер заработал быстрее. Для примера - работу ПК можно ускорить путем некоего API увеличив частоты некоторых подсистем на мат.плате/процессоре. В этом случае получается "без обмана" - софтовое ускорение. По вашей же логике что бы сделать программное ускорение - нужно переписать код всей системы. Повторюсь - это оптимизация реализации алгоритма, не более. Изначально я подумал - вау, какой то программный трюк, недокументированные возможности, какие то заложенные производителем ограничения в виде излишних задержек при выполнении машинного кода, и это можно отключить, но был уверен на 99.9(9)%, что это скорее всего маркетинговый ход - называть вещи не своими именами.
+Andrew Mikhno Да, вы правы, правильно говорить "оптимизация" а не "ускорение". Видео рассчитано на заядлых "ардуинщиков", которые ничего другого не знают и не понимают сути процесса. Я просто хотел дать толчок к саморазвитию, к более глубокому освоению МК и т.д. Именно по этому я говорил об ускорении, а не об оптимизации - многие даже не знаю что это такое, а вот "ускорить" "на халяву" - этого многие хотят :)) вот я и попытался "перевернуть умы людей". Не подумайте что я из себя строю всезнающего, нет, наоборот, я сам только учусь. И о том что узнаю - рассказываю другим. И я тоже ошибаюсь. Но и учусь :)
Andrew Mikhno
Ага. На самом деле это не ускорение, а оптимизация кода.
Home Made - То, что ты можешь сделать
Вообще-то, это называется оптимизацией.
Какой-то треш в комментариях. Всем хочется сказать, что для высокой производительности есть всякие там STM32... Но это вы с точки зрения профессионалов говорите, когда выбор микроконтроллера, одна из опций проекта. В реальности же, что-то делается на Arduino и на каком-то этапе начинает не хватать производительности. И вот тут как раз пригодятся подобные советы, чтобы пожертвовать переносимостью, но заставить проект работать.
Спасибо, информация полезная. Палец вверх! Хотелось бы, правда, заметить о несправедливости выражения "на чистом С". Это, как бы, в любом случае "чистый С", просто доступ через прослойку библиотек или доступ напрямую через регистры портов. И ещё, там в программном шиме опечатка: в цикле k не итерируется.
Серьёзно? Автор явно указывает неправильные компоненты. И чему он научит? Писец.
Спасибо братан. Помог разобраться в этом. Читал это и раньше, но не до конца понимал работу. Тут все понятнее
это не какие то команды, это запись на языке С, вместо ардуиновского С++, благодаря использованию библиотек языка С код занимает меньше места в памяти. Можно писать прошивку для ардуино или attiny в Atmel Studio на С, и такой код с теми же функциями что и в ардуино но на С будет занимать меньше памяти МК в несколько раз. Можно использовать attiny 44 там чуть больше памяти, а стоит он копейки по сравнению с ардуино, экономя память будет влезать средняя компактная програмка.
Мой совет прост. Хотите быструю программу - пишите на ассемблере. Ну уж точно не в Arduino
Можно и в Arduino IDE наассемблере писать. Это просто редактор и подключен к нему тот же компилятор.
Автору пора лечится от ардуино-зависимости, если он все же желает перейти с уровня начинающего (кому надо минимум ресурсов и знаний в ущерб возможностям) на продвинутый уровень (не используя библиотеки для дурака, а написаем своего кода)
Это шим ногодрыгом и используется по необходимости, если нужна большая разрядность, чем в аппаратном. Аппаратный же шим не влияет на скорость программы кроме записи в него числа. И разогнать его можно, таймеры поправь, возможно даже и командами ардуины, но это не точно:
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 бит.
Все верно. На эту тему я делал видео: ruclips.net/video/UL7PQMs02X8/видео.html
Да увидел, но есть одно замечание по по поводу шим. Пром. двигатели от частотников пищат от 1300, до 16 000 Гц, иногда 800-1200 частоты фигурируют - тут уже проблема в выходном каскаде скорее всего. А в общем хорошие видео так держать. Сам хотел канал запилить, но хорошая работа, резко всплывшая из ниоткуда, испортила все начинания!!! ) @@UCanDo
9:32 Скорость выполнения команды даже не 0.2, а 0.13! Лично проверил))
это не тот кварц!!
поясни
и в правду не тот
ребята вы сами попробуйте вести канал а потом критикуйте. я сейчас не ко всем обращаюсь а конкретным лицам. я не знаю как вообще но автор снял очень классное видео. по поводу длительности видео я согласен, долго. но об этом можно сказать и без упрёков а вежливо попросить автора немного более сжато рассказывать. не спешите критиковать.
18:45 разве шип в ардуино 50Гц, он ведь 500Гц
loop:
sbi PORTB, 7
cbi PORTB, 7
rjmp loop
риально мало и быыстро =_=
Ассемблер есть Ассемблер. Вот только его Большинство Ардуинщиков совершенно не знает.
Можно ещё быстрее:
.MACRO ONOFF
sbi PORTB, 7
cbi PORTB, 7
.ENDM
loop:
ONOFF
ONOFF
ONOFF
ONOFF
...
ONOFF
rjmp loop
Денис Акимов
На ассемблере куда круче. И всегда понятно, сколько будет выполняться тот или иной код.
Home Made - То, что ты можешь сделать
Ага. Как-то давно делал usb устройство на pic'е с внешним usb контроллером. Писал, естественно, на ассемблере.
Тут решил опробовать ардуино и понял, что это для детей. Лучше использовать атмел студию.
первые 2 инструкции по 2 такта крайняя от 2 до 4. итого нога будет дрыгаться какминимум с 1/4 системной тактовой
25:38 называется оптимизация кода (не увеличение мощности)
Настройка ножки на ввод или вывод осуществляется командой DDR Например DDRB = 0b00000001; равно PB1, OUTPUT
Здравствуйте, а как аналоговый вход?
Еще лучше перейти к такой структуре программы
int main() {
init();
//setup()
for (;;) {
//loop()
}
return 0;
}
заааачем?
в стандартном loop() дополнительные проверки делаются, ели делать свой цикл быстрее выполняется, так говорят по крайней мере.
Так такую структуру программы Arduino IDE добавляет от себя автоматически
Надо не пытаться скетчи оптимизировать, а писать на Ассемблере
Кто сейчас пишет на ассемблере?
Спасибо. Было интересно. Но, несколько сумбурно. Может быть, стоит как-то структурировать?
Вот интересно кто нибудь из авторов таких клипов читал муму на контроллеры ,которые устанавливаются в платы .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 нет для него хорошего Ассемблера ,не развивали для них это направление
Понимаете, угодить всем невозможно. Сделал бы я видео об ассемблере - 99% начинающих ардуинщиков просто не стали бы смотреть... а видео делал именно для них, так сказать, хотел дать толчок к большему развитию
В то же время писать что-то более простое, тогда знающие начинают говорить о том что что-то не договорил, не оптимизировал, недописал...
Я не знаю по поводу скорости обращения к памяти (я сам только учусь и не претендую на всезнание), но в моей отладочной плате на STM32F407VET6 скорость на портах можно выставить более 100 мГц. Точно не помню, посмотрел 1 раз и забыл - не придал этому значения.
По Ассемблеру согласен, язык сильный. В наше время это палка о двух концах. С одной стороны можно написать очень быстрый и оптимизированный код, который "заставит" быстро работать даже "медленный" контроллер. С другой стороны существует столько "мощных" контроллеров/процессоров и множество сред разработки, которые "в два клика" создают нужную программу. И, с учетом существующих мощностей, ко будет все так же быстро выполняться, легко портироваться на другую платформу, легко читаем...
В "пользу" ассемблера говорит тот факт, что хуй кто когда портирует "KolibriOS" на другие платформы. Ассемблера я с лихвой нажрался во времена на Радио-86РК и работой с видеопамятью на i386dx, отладка адовый пиздец, хер когда к нему прикоснусь.
доброго времени суток, решил воспользоваться такими быстрыми командами.
Но возникает ошибка и не удается компиляция. Единственное из за чего такое может быть, по моему мнению это из за того что я использую вместо ардуино платы, стм32. но с загрузчиком от ардуино и в среде ардуино иде. Может ли в этом быть проблема?
Да, именно в этом и проблема. Команды приведены для контроллеров AVR. STM использует совершенно другие команды, и не известно, поддерживаются они в среде Ардуино ИДЕ или нет. Как пример, посмотрите мое видео ruclips.net/video/Zrkq6zEgEng/видео.html
Это мигание светодиодом на STM. Там используются совершенно другие команды.
Спасибо) будет время обязательно попробую разобраться)
У Вас ШИМ выходит софтварный. Процессорное время занято. Есть таймеры и аппаратные моды ШИМа в AVR. Не проаерял, но аналогРид(), возможно, юзает как раз таймер аппаратно делая ШИМ.
Спасибо за ролик, позновательно!
Автор, то кварц от usb-uart преобразователя, сам МК тактируется от крохотного кварца возле пинов 3.3 и 5v. А то что ты сделал программно, называется не "ускорение ардуино", а избавление от лишних комманд при записи в порт GPIO, все остальные действия выполняются со все той же скоростью. И то что оно ускорилось в 20 раз - где измерение? В среде ардуино так же есть функция задержек на микросекунды, без подключения дополнительной бибилотеки - delayMicroseconds();
Спасибо за отзыв. Ваши замечания правильны. Их уже много раз писали в комментариях к видео. Там же я и давал ответы. Как-то не хочется опять все дублировать. Почитайте комментарии
Если цикл ардуиновский убрать (лупп) и использовать чисто СИшные команды еще раз в 30тыс. ускоришься...
Согласен.
Кстати, видео довольно старое, с тех пор Ардуино ИДЕ обновилась и многое пофиксили, и скорость работы стала приближаться к СИ-шной.
@@UCanDo Это сама ИДЕ стала шустрее(т.е. компиляция).. а сама прошивка ардуиновская (код этот) как был кривой, так и остался.. Ребята на форуме "схем нет", наглядно показывали разницу на блинке.. можно в луупе убрать задержку, только вкл. и выкл светик и посмотреть скорость на осциллографе.. там меандр получается не выше 50кГц. и еще помеха (когда цикл Лууп переходит в начало), и можно сделать этот блинк чисто СИшными командами, получим примерно половину тактовой частоты (т.е 8 Мгц при такте 16).. вот те и разница: 50кГц и 8 Мгц..
Куда скидывать на лечение ?
Автор ты гений! Я запустил батлу на arduino UNO!
А если серьезно, то вот так можно до 284 байт уменьшить моргалку
#include
int main(void)
{
DDRB = 0xff;
start:
PORTB ^= (1
Хороший пример быстрого и маленького кода
По ходу ролик удалю и переделаю по-новой... В двух слова о моем видео пытался просто показать что Ардуино - это только начало, надо учить более серьезные языки, и переходить на "нормальное программирование"....
Так и заяви в новом ролике, что Ардуино это проект для популяризации микроконтроллеров среди широких масс, первая ступень на пути великих возможностей, которые открывают нам МК.
Николай
Только, по-моему, вот так и появляются недопрограммисты, которые пишут код и абсолютно не понимают, как он работает.
изучи даташит на контроллер, там есть такая вещь как регистры, таймеры, АЦП и прочее
показанный шим тут правильно работать не будет, для него надо настроить один из таймеров и выводить нужное значение в нужные регистры. в режиме FastPWM можно шим разогнать до 78kHz (с кварцем в 20MHz).
По поводу кварца: у многих атмег максимальная частота, при которой контроллер будет надежно работать, это 20MHz
Производитель действительно гарантирует стабильную заботу до 20 мГц. Есть еще другой показатель: 16 мГц при питании от 5 вольт. При питании 3.3 вольта стабильная работа производителем не гарантирована. Вот посмотрите это видео: ruclips.net/video/Waw00Nu-U-M/видео.html
Используется Atmega326, кварц на 16 мГц. Питание - 3.3 вольта. Устройство стабильно работает (круглые сутки, не выключаясь) уже около 9-ти месяцев.
То есть "не гарантировано производителем" - не значит что вообще не будет работать.
При частоте 32 мГц важнейшим фактором является внешний частотный генератор. Именно внешний генератор. От всего остального (кварц, внутренний генератор) работает не стабильно. Я проводил разные эксперименты, с использованием обычного кварца стабильная работа была на частоте 27 мГц. Выше никак. Только от внешнего генератора.
Согласен с тем что это все делается на свой страх и риск. Производителем не даются гарантии работоспособности. А значит вероятность сбоя все равно присутствует.
Я делал как-то схему на 16Мгц 3.3v, потому что лень было согласовывать уровни 3.3-5V, работа с spi tft и spi флеш памятью, поскольку progmem для графики не хватало вообще. Работало паршиво, флеш читался и писался через раз. После того, как поменял кварц на 8МГц, все заработало идеально.
тот кварц что показывает автор ролика можно заменить на любой, например 3,2ГГц и АТмега 2560 все равно заработает, можно даже вообще не впаивать ничего
DDRD - регистр направления передачи данных порта D. Биты этого порта управляют тем, настроены ли выводы Порта D как входы, или как выходы.
А потом уже PORTD, PIND.
СветодИод =)
светодИад
Дядя это не тот, твой мелкий кварц
Ну всё таки это конструктор чуть ли не для детей. Что бы поиграться вполне хватает. А ШИМ тут получится какой то реального времени, т.е. работает только шим, всё остальное стоит
Бля, какой понос слов!!!
Почему ролик который можно сделать на 10 минут, растянул на пол часа???
Вроде бы тема интересная, но пока слушал захотелось спать!
Ерунда всё это! Ставил кварц на 23 мГц и всё прекрасно работало,но почему то заменил обратно на 16 мГц. Значит не всё так прекрасно как автор утверждает ?
Одной только заменой кварца не получится все решить. Нужно и код, и компилятор настраивать под новую частоту, иначе нормально работать не будет
Разве миллисекунды это _delay_us?? Это же уже микросекунды вроде бы.
Да, все верно
Такая запись и выглядит вроде понятнее
Зачем ты "подставил" ОТЦОВ АРДУИНО! Скетчи на ардуино выполняются ОЧЕНЬ МЕДЛЕННО!😢
500 гц а не 50 !
Ардуино пойдёт для простых, непроизводительных задач. Но что-то серьёзное на ардуино сделать не получится.
Надо учить ассемблер и потом С, но никак не наоборот. Ну и бросать уже эти Меги - STM сейчас на коне. А то некоторые до сих пор под pic16 свои самоделки пилят, поди найди это древнее г.. мамонта))
В Arduino IDE С используется.
а есть где посмотреть все команды для перевода ардуины?
Нужно смотреть Даташит на используемый микроконтроллер. Там все подробно описано, все возможные Настройки. Только неопытному человеку там трудно будет разобраться
@@UCanDo и с чего начать в итоге?
Что конкретно вас интересует?
Если хотите посмотреть список доступных команд для Ардуино IDE, то вот здесь можете посмотреть основные Команды: arduino.ru/Reference
Вот здесь можете посмотреть более расширенный список команд: www.arduino.cc/reference/en/
Вообще в Ардуино IDE можно использовать практически все от С++, а так же использовать вставки Ассембера.
Если по каким-то настройкам микроконтроллера (на пример таймеры и т.д.) то нужно либо использовать готовые библиотеки, либо изучать даташит на микроконтроллер.
@@UCanDo команды для ардуино и написание скетчей не вызывает проблем, также как добавление функций в библиотеки ардуины. Хочется большего. Я так понимаю если лезть в глубь то через С++ и далее асемблер.... мне бы ещё примеры кода.
Эт конечно все хорошо, но нужно к этому вопросу подойти с др. стороны, со стороны Arduino ide и модефицировать ее.
Сомневаюсь что этим кто-то будет заниматься. Лучше переходить на AVR Studio
Дмитрий Екименко лучше переходить на stm, и забыть это говно как страшный сон, stm8 дешевле меги8, но лучше.
Капец! Уже докатились до оверлока ардуино с жидким азотом. ГТА 5 потянет?
Мне вот одно непонятно согласно спецификации на Atmega2560 Speed Grade максимальное 16 MHz для Atmega328 20MHz. Что мы достигнем подняв частоту внешнего кварца кроме того что все библиотеки рассчитаны на использования внешнего кварца для внутреннего генератора 16 и задержка 1000 мкс при другом кварце уже таковыми не будут что несет проблемы при настройке обмена данных с двумя или более МК. Что мы в конечном счете достигнем заменив кварц ? кроме как сбоя в настройке задающего генератора.
Если речь про ускорение то тут я бы сказал что вопрос скорей к штатным функциям IDE Arduino почему они так много времени выполняются (Оптимизация кода функции за примером далеко ходить не нужно тот же IAR за это берет кило баксы). Возможно лучше говорить про варианты замены штатных ванильных функций IDE Arduino на более простые как показанный пример работы на прямую с портами Atmegи.
Все верно говорите.
Antisd Alexander
Вообще-то, в ардуино есть описание платформ, в котором можно поправить частоту кварца.
+Александр Писклов Дело не в описании платформ и частоте кварца, а в том что все библиотеки рассчитаны на конкретную частоту МК. Тайминги в библиотеках сместятся, что вызовет сбой в работе/инициализации того или иного устройства. Если менять кварц (и соответственно менять частоту в описании платформы) то и нужно будет соответственно править и все библиотеки ко всем возможным устройствам... Та ещё головомойка...
продолжи эту тематику
Как вы узнали сколько времени выполняется команда?
Подобный вопрос уже был. Проверяется осциллографом. Но у меня осциллографа нет, потому взял данные из статей (ссылки есть в описании к видео).
вот только на 11:27 минуте подождали не секунду а 0,001 секунды потому что us это микросекунда 10 в -6 степени а ms это миллисекунда 10 в -3 степени,автор не делай ошибки грубые и будь внимателен
А разве не надо добавлять avr/io.h перед программой?
Можно, но это не всегда на что-то влияет. Бывает что добавление этого файла не приводит ни к каким результатам.
в 20 или в 10?
в примерно 10, тоесть даже не 10, не говоря уже о 20
да, "оптимизация" библиотек поражает .. интересно, с чем связана такая медлительность при использовании библиотек?
Да все та же "кроссплатформенность". В библиотеках идет проверка на то, какая ардуина используется, какой стоит микроконтроллер, идет переподстановка многих констант / настроек под конкретный микроконтроллер. Да и еще много чего...
К тому же основная цель многих библиотек - не скорость, а работоспособность на разных Ардуино.
Это чтобы нубам легче было.
Зачем для ШИМ писать в порты. Он сам это сделает. Надо только настроить работу таймера и схемы сравнения.
Как?
Я совсем новенький в Ардуино. Нет ли у Вас ссылок/инструкций по ускорению работы платы?
Если заливать напрямую машинный код, то результаты будут на порядок лучше.
А как получить этот Машинный код? Вы сможете написать программу в виде «0» и «1»?
Есть языки низкого уровня. Все расслабились на С, и тому подобные, еще бейсик вспомните.@@UCanDo
Кстати, есть Бейсик для АВР... но это совсем уж извращение :)))
Alex Bel, на порядок - значит в 10 раз. Ну ну. Смешно. Хоть раз пробовали декомпилировать код Си? Современный оптимизирующий компилятор генерирует код лучше, чем напишет человек на ассемблере. Только в очень редких случаях удается написать чуть-чуть быстрее.
Реальный код это вам не ножкой подергать.
я все понимаю, парень хочет показать альтернативные способы, которые "как бы" оптимизируют код, но нафига при этом комментарии то он удаляет??
при компиляции они один фиг не попадают ....
наверное чтобы на экране места меньше занимали.. а не в памяти микроконтроллера.. не?)
Чтоб пересесть на другую платформу будет опять кодить :(
Универсальность программы теряется.
...
Вообще говоря, поступать так - не лучшая идея. Почему нет? Вот несколько причин:
Код намного сложнее отлаживать и поддерживать, и его намного труднее понять другим людям. Процессору требуется всего несколько микросекунд для выполнения кода, но вам могут потребоваться часы, чтобы выяснить, почему он работает неправильно, и исправить это! Ваше время ценно, правда? Но компьютерное время очень дешево, если судить по стоимости электричества, которое вы его питаете. Обычно гораздо лучше писать код наиболее очевидным способом.
...
www.arduino.cc/en/Reference/PortManipulation
@@ВасилисаПримудрая-х9ц Я не соглашусь с вами.
Почитайте историю создания Ардуино, на пример в Википедии: 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 (но не факт). Весь остальной код нужно будет существенно переделывать. А многие библиотеки так и вовсе не заработают! Так что не заблуждайтесь о кроссплатформенности.
@@UCanDo
_Вы хоть знаете о чем я сейчас спросил?_
Вы умеете играть на пианино?
Думаю, что да ;))
Я в начале.
Уже есть вопросы, но я их приберегу, пока они не оформятся в *понятные* вопросы ;))
П.С.
Минд42 плохо дружит с телефонами/планшетами.
Комп работает с "картами" нормально.
Там ссылки по теме. Мож чего пригодится...
Так у меня и видео не начального уровня. Канал рассчитан не на новичков, а на тех кто немного разбирается в программировании.
И да, я умею играть на фортепиано и немного на гитаре ;)
Если совместить способ с заменой тактового генератора и писать скетчи на чистом avr то мк будут летать
Да, скорость будет очень большая! Я видел проекты с частотой 32 Мегагерц! Библиотеки все равно придется править или писать самому.
это и есть оптимизация о которой юбисофт ничего не знает
ты конечно молодец что понял что в ардуино иде чой то не то ))) но ты бы сначала сам разобрался с этим потом бы объяснил как писать проги на простом Си, а так блеешь что то и сам не понимаешь , но направление правильное, и молодец что разбираешься, но скорее бы ))) надо писать на Си, а некоторые вещи или строки даже на "страшном" Ассемблере! как делают продвинутые прогеры.
спасибо, дорогой что правильно понял! значит все получится! я старый инж-электронщик и радиолюбитель, лет 15 назад увлекся AVR и PIC и писал на них управление блоками тьюнеров из телевизоров и автомагнитол на CodeVision, а сейчас полгода назад увидев ардуино решил приобщить к этому делу внука и соседского мальчишку, стал читать и смотреть ютуб, полный дурдом этот ардуино-иде! и эти дебильные скетчи!))) но для начала наверно все таки придется с ним познакомиться или может лучше MariaMole. но все таки хотелось бы подружить CVAVR с ESP32 и с NodeMcu как более продвинутые ардуины)
А где ассемблер взять для атмель или кода?
Писать на ассемблере можно где угодно. Хоть в блокноте. Лучше использовать Нотпад++
А дольше сгенерировать hex файл и зашить его обычным программатором. Для генерации прошивки можно использовать tavrasm.
А BASCOM AVR через среду Ардуино пойдет?
нет, да и зачем вам это нужно, BASCOM и так не плохо работает
А слабо прошивку от пультоскопа ускорить?
Все гораздо проще звучит, во первых не ускоряем ардуино! а правильно используем микроконтроллер AVR(которые засрали ардуиной), то есть пишем код в человеческой среде, а arduino ide, это априори мусор. странно видеть людей которые этому уделяются, люди которые убили мощность контроллера(а не ардуино) на ровном месте.
Добрый день! Подскажите ,для ардуино нужно добавить какие то библиотеки Аvr чтобы код писать на чистом си? Не получается запустить команду опроса порта на си if (!(PINB&0b00000001)) нужно в порте прерывания дополнительно проверять наличие сигнала на Пине B0 чтобы исключить помехи.
В коде подключил библиотеку АВР , работает только аналог digitalwrite , а digitalread не работает?
Добрый деень. Какой микроконтроллер у вас установлен?
@@UCanDo ардуино нано, на выход все работает
Я имел в виду какой конкретно микроконтроллер установлен на вашей Ардуино. Так как могут устанавливать разные микроконтроллеры. Предположу что это либо Atmega168 либо Atmega328. Может посмотреть какая именно?
@@UCanDo атмега328
Попробуйте простой скетч:
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);
}
}
При нажатии на кнопку должен загораться светодиод
Как ты микросекунды вычислял?
Данные взяты из разных источников (ссылки на статьи есть в описании). Но можно и просто осциллографом посмотреть.
ПО ардуино - это шляпа. Бестолковая подсветка, подсказок нет совсем. Пишешь функцию, а какие аргументы у неё - хер поймешь. Atmel Studio тоже не подарок, но даже она в разы удобнее.
Мы то можем писать в ардуино на си, но вот полно библиотек (особенно родные), которые сводят на нет все наши потуги.
С другой стороны, если программа огромная и быстрее и удобнее её писать в среде ардуино, то имеет смысл сменить платформу.
Это да, но никто не мешает смотреть исходники библиотеки и смотреть параметры.
подскажите.. у меня ардуино уно. если
if (!PIND & 0b000010000) {
s++;
}
подключив импульс-генератор я не смог получить и 5кГц?
а если:
attachInterrupt(0, DF, RISING) ;
void DF () {
s++;
}
но attachInterrupt мне не подходит
получилось в районе 20-30кГц.
что не так?
Добрый день. Код смогу проверить только на выходных.
Проверять через if в основном цикле программы с такой частотой не получится.
Только прерываниями. Но надо проверить.
мой код такой:
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.
ститывание импульсов с энкодера происходит с частотой ~5 кГц
но если из DF убрать
if (PIND & 0b00010000) {
s++;
}else{
и оставить только s-- то он считывание выполняет с частотой в ~ 35 - 50 кГц
Проверил время исполнения DigitalWrite, и офигел, порядка 6 мкс! Тогда о чем речь в ролике, о каких 1800?? Автор, поясни, пожалуйста?
Видео не новое. Возможно в новых версиях Arduino IDE код подправили и скорость возросла. Надо проверить.
@@UCanDo , я так же предположил. Сейчас реально за два исполнения 12 мкс. Спасибо за ответ)
@@UCanDo Я проводил тесты на Arduino Uno порядка 5 лет назад. digitalWrite() - порядка 4-5 мкс.
Макитовская шлифмашинка что на заставке не умеет точить букафки)
В Протеусе проверил код ,не работает шимм..
проверьте в реальном железе. Протеус не всегда адекватно моделирует устройства.
@@UCanDo На счет ускорения шим цикл for
void loop()
{
for (int i=0; i
В видео я допустил ошибку. Где-то в комментариях уже говорилось об этом
Нужно дописать k++ перед закрывание скобок
так работает но ведь цикл должен всегда крутиться как же другии операции
#include
#include
int PWM_time=200; //Число, которое мы как бы хотим записать в analogWrite(PIN, 32)
void setup() {
DDRB=B00000001;
PORTB=B00000000;
}
void loop() {
for (int k=0; k
А в примере с кнопкой, читается весь порт целиком вместо одного пина! Зачем путаешь новичков, которые не знают С++! Да и С++ в разных средах программирования отличается!
Да к ведь и не возможно считать отдельно 1 бит... Порты потому и разделены по 8 пинов в каждом (0-7) что составляет 1 байт. Это ограничение самого микроконтроллера. Он может дать значение только порта целиком, всех 8-ми бит (портов) сразу. А уж с полученным байтом мы и сравниваем требуемое нам значение и тем самым узнаем в каком состоянии находится тот или иной бит (то есть порт).
Возможно в этой среде и невозможно (надо проверить), а в некоторых других средах разработки это реально сделать.
а разве _delay_us ето не микросекунды для милисекунды вроде _delay_ms.
+Dimon Luchyn Да, все верно, нужно писать ms. Но у меня почему-то и так и через us работает одинаково.
Ну ты бздец. Научился моргать светиком и стал экспертом. Ты забыл, что эта система разработана для непрограммистов, то что ты показал этим и ограничится так, как весь софт все либы рассчитаны для своеобразного применения. Я в асме ещё быстрей могу переключать порт, но это не для Arduino...
Или я что-то не понимаю в двоичной системе счисления, или 0b00001000 - это не 3, а 8
3-й бит
@@UCanDo Да, уже понял)
Ты бы еще руками меньше махал перед камерой, да код проверял перед тем как показывать! Где у тебя в этих ШИМ циклах переменная к инкрементится? Сама чтоли ?
Дальше неправильного кварца смотреть не стал
Чувак, скучно. Мог бы сценарий написать, записать фрагментами, озвучить отдельно, а не вот это вот всё.
Отвратительное изложение материала, которое только запутывает начинающих. Вот статья на geektimes ru, в которой все нормально изложено: geektimes(точка)ru/post/255422/
надо не железо ковырять, а код.
Что за музыка, скинте название кто знает
Музыка: Hevenly - Highway-WQ4FBtyC
на 11 минуте секунду вы секунду уменьшили до 1мс таким образом уменьшили и код
Задержка так и осталась 1 секунду. Проверьте на своей ардуино.
может конечно я и не прав, но _delay_us(1000) это и есть 1000мкс=1мс.
Посмотрел код, точно, должно быть _delay_ms а не _delay_us... но почему-то "_us" работает как "_ms" и у меня получаются нормальные задержки. Может это у меня что-то с самой библиотекой "delay.h"? Вы проверяли у себя? Задержки правильно идут в "_delay_ms" и " _delay_us"?
нет я не проверял,
за видео спасибо.
Толково...
322 оговорка по соло
а есть схема переделки пульта
Вы имеете ввиду как сделать радиоуправление на Ардуино?
Что будет если впаять кварц на 54000)))
Плата на первой космической покинет пределы электричества ;))
эээ.. ууэээ.аааэээ.... светоДиод. просто супер (нет)
неприятно, когда большие пальцы гнутся в другую сторону
да, когда так гнутся у девушек- вроде куда не шло, но у парня - есть даже такое выражение - кудрявые руки - наверное оттуда. не в обиду автору видео
После кварца смотреть дальше не стал
Зря.
Дальше суть видео.
у вас есть кот? А давайте увеличим ему яйца!
Не тот кварт показываете.
Да, ошибся.