Site Loader

Советы начинающим программистам микроконтроллеров / Хабр

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

1. Многие начинающие электронщики не знают с чего начать, поэтому спрашивают совета. Большинство бывалых радиолюбителей ответят, что начни собирать какую нибудь схему. Естественно в голове любого начинающего сразу мелькает LCD дисплей с jpeg картинками, какой нибудь mp3 плеер или часы, без малейшей мысли о том, что не имея базовых знаний это неподъемная задача.

Я категорически против такого подхода. Обычно это все заканчивается — либо ничем, либо забитые форумы с мольбами помочь. Даже если кому то помогают, то в 90% он больше никогда не всплывет на сайтах по электронике. В остальных 10% он так и продолжает заливать форумы мольбами, его будут сначала пинать, затем поливать грязью. Из этих 10% отсеивается еще 9%. Далее два варианта: либо таки до глупой головы доходит и все же происходит goto к началу, либо в особо запущенных вариантах, его удел копировать чужие конструкции, без единой мысли о том как это работает. Из последних зачастую рождаются ардуинщики.

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

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

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

2. Перед решением задачи, дробите ее до абсурда вплоть до «припаять резистор», это помогает, проверено. Мелкие задачи решать куда проще. Когда большая задача разбита на кучу мелких действий, то все что остается — это выполнить их. Могу привести еще один годный совет, хоть он вам и покажется бредовым — заведите блокнотик и пишите в него все что собираетесь сделать. Вы думаете, итак запомню, но нет. Допустим сегодня у меня хорошее настроение и думаю о том, как собрать плату. Запиши план действий: сходить купить резистор, подготовить провода, сделать крепление дисплея. Потом все забудешь, откроешь блокнотик и смотришь — ага сегодня настроение попилить и построгать, сделаю крепление. Или собираешь ты плату и уже осталось допаять последний компонент, но не тут то было резисторы кончились, вот записал бы перед тем как паять, то вспомнил.

3. Не пользуйтесь кодогенераторами, нестандартными фичами и прочими упрощалками, хотя бы на первых этапах. Могу привести свой личный пример. Во времена активного использования AVR я пользовался кодогеном CAVR. Меня он полностью устраивал, хотя все говорили, что он кака. Звоночки звенели постоянно, были проблемы с библиотеками, с синтаксисом, с портированием, но было тяжело от этого отказаться. Я не разбирался как это работает, просто знал где и как поставить галочки.

Кол в мой гроб был вбит с появлением STM32, нужно было обязательно переползать на них, вот тогда то и появились проблемы. Проблемы мягко сказано, фактически мне пришлось осваивать микроконтроллеры и язык Си с нуля. Больше я не повторял прошлых ошибок. Надо сказать это уже пригодилось и не один раз. С тех пор мне довелось поработать с другими платформами и никаких затруднений не испытываю, подход оправдывает себя.

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

4. Изучайте язык Си. Эх, как же часто я слышу, как начинающие радиолюбители хвалятся, что хорошо знают сишку. Для меня это стало кормом, всегда люблю проконсультироваться у таких собеседников. Обычно сразу выясняется, что язык они совершенно не знают. Могу сказать, что не смотря на кажущуюся простоту, людей которые действительно хорошо бы его знали, встречал не так много. В основном все его знают на столько, на сколько требуется для решения задач.

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

Очень многие начинающие брезгуют изучением языка, поэтому если вы не будете как все, то сразу станете на две ступени выше остальных новичков. Так же не никакой разницы, где изучать язык. На мой взгляд, микроконтроллер для этого не очень подходит. Гораздо проще поставить какую нибудь Visual studio или Qt Creator и порешать задачки в командной строке.

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

5. Изучение ассемблера? Бояться его не нужно, равно как и боготворить. Не нужно думать, что умея написать программу на ассемблере, вы сразу станете гуру микроконтроллеров, почему то это частое заблуждение. В первую очередь это инструмент. Даже если вы не планируете использовать его, то все равно я бы настоятельно рекомендовал написать хотя бы пару программ. Это сильно упростит понимание работы микроконтроллера и внутреннего устройства программ.

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

7. Часто народ просит прислать даташит на русском. Даташит — это то, что должно восприниматься как истина, самая верная информация. Даже там не исключены ошибки. Если к этому добавятся ошибки переводчика, он ведь тоже человек, может даже не нарочно, просто опечататься. Либо у него свое видение, может что-то упустить, на его взгляд не важное, но возможно крайне важное для вас. Особенно смешной становится ситуация, когда нужно найти документацию на не сильно популярные компоненты.

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

Мною был проведен эксперимент: в наличии был студент, даташит и гугл переводчик. Эксперимент №1: студенту вручен даташит и дано задание самостоятельно найти нужные значения, результат — «да как я смогу», «да я не знаю английский», «я ничего не нашел/я не понял» типичные фразы, говорящие о том, что он даже не пытался. Эксперимент №2: тому же студенту, вручен все тот же даташит и тоже задание, с той разницей, что я сел рядом. Результат — через 5 минут он сам нашел все нужные значения, абсолютно без моего участия, без знания английского.

8. Изобретайте велосипед. Например, изучаете какую то новую штуку, допустим транзистор, дядька Хоровиц со страниц своей книги авторитетно заявляет, что транзистор усиливает, всегда говорите — НЕ ВЕРЮ. Берем в руки транзистор включаем его в схему и убеждаемся что это действительно так. Есть целый пласт проблем и тонкостей, которые не описываются в книгах. Прочувствовать их можно только, когда возьмешь в руки и попробуешь собрать. При этом получаем кучу попутных знаний, узнаем тонкости. Кроме того, любая теория без практики забудется намного быстрее.

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

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

9. А как бы я сделал это, если бы находился на месте разработчиков? Могу ли я сделать лучше? Каждый раз задавайте себе эти вопросы, это очень хорошо помогает продвигаться в обучении. Например, изучите интерфейсы 1wire, i2c, spi, uart, а потом подумайте чем они отличаются, можно ли было сделать лучше, это поможет осознать почему все именно так, а не иначе. Так же вы будете осознавать, когда и какой лучше применить.

10. Не ограничивайтесь в технологиях. Важно что этот совет имеет очень тонкую грань. Был этап в жизни, когда из каждой подворотни доносилось «надо бы знать ПЛИС», «а вот на ПЛИС то можно сделать». Формально у меня не было целей изучать ПЛИСины, но и пройти мимо было никак нельзя. Этому вопросу было выделено немного времени на ознакомление. Время не прошло зря, у меня был целый ряд вопросов, касаемых внутреннего устройства микроконтроллеров, именно после общения с плисинами я получил ответы на них. Подобных примеров много, все знания, которые я приобретал в том или ином виде, рано или поздно пригодились. У меня нет ни единого бесполезного примера.

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

11. Если спросить начинающего радиолюбителя, что ему больше нравится программирование или схемотехника, то с вероятностью 99% ответ будет программирование. При этом большую часть времени эти программисты тратят на изготовление плат ЛУТом/фоторезистом. Причины в общем то понятны, но довольно часто это переходит в некий маразм, который состоит в изготовлении плат ради изготовления плат.

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

12. Следующий совет, особенно болезненный, мне очень не хочется его обсуждать, но надо. Часто мне пишут, мол ххх руб за ууу дорого, где бы подешевле достать. Вроде бы обычный вопрос, но обычно я сразу напрягаюсь от него, так как зачастую он переходит в бесконечные жалобы на отсутствие денег. У меня всегда возникает вопрос: почему бы не оторвать пятую точку и не пойти работать? Хоть в тот же макдак, хоть на стройку, потерпеть месяц, зато потом можно приобрести парочку плат, которых хватит на ближайший год. Да я знаю, что маленьких городах и селах сложно найти работу, переезжайте в большой город. Работайте на удаленке, в общем нужно крутиться. Просто жаловаться нет смысла, выход из ситуации есть, кто ищет его тот находит.

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

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

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

15. Тонкий вопрос: профильное высшее образование, нужно ли оно? Мне известны не единичные случаи, когда люди работали абсолютно без образования и по опыту и знаниям они могли дать прикурить любому дипломированному специалисту. Собственно, у меня нет профильного образования, испытываю ли я от этого дискомфорт? В определенной степени да.

Еще в самом начале, когда микроконтроллеры были для меня хобби, я много помогал с курсовыми и дипломами разных вузов, просто чтобы оценить свой уровень. Могу сказать уверенно, что уровень в целом невысок вне зависимости от имени вуза. Учиться несколько лет, для того чтобы написать такой диплом, совершенно необязательно. Достигнуть этого можно самостоятельно за весьма короткий срок. И все же зачастую бывали моменты, когда студенты знали какой то предмет, который они проходили на 2-3 курсе, а я этого не знал. Хоть все эти знания и компенсировались самообразованием, но все же лучше было бы не тратить на это время.

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

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

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

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

16. Поздно ли начинать программировать в 20, 30, 40, 50 лет? Практика других людей показывает, что возраст вообще не помеха. Многие почему то не учитывают то, что есть целый пласт работы, которую молодые в силу своих амбиций не хотят делать. Поэтому работодатели предпочитают брать тех, кто будет ее тащить. Это ваш шанс зацепиться, а дальше все зависит только от вас.

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

Программирование микроконтроллеров ⋆ diodov.net

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

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

Для кого предназначен курс

Данный курс рассчитан главным образом для начинающих, поэтому подробно рассмотрено назначение каждого символа в коде, предполагая что ранее слушатель не имел никакого опыта в программировании; изучаем «даташиты», подробно рассматриваем периферию: таймер-счетчик, прерывания, АЦП, ШИМ, интерфейсы и т.п. Выполняем анализ ошибок,  наиболее часто допускаемых начинающими, рассматриваем альтернативные варианты кода и многое другое.

Какой тип микроконтроллеров будем изучать

Изучать программирование мы будем на примере микроконтроллеров AVR. Для обучающих целей за базовый МК принят ATmega8. Плюс несколько последних занятий будут посвящены микроконтроллерам STM32.

Изучать в качестве первого микроконтроллера  STM32 по личному и опыту других программистов я не рекомендую. Проще и продуктивней начинать изучение с 8-ми битных МК, например таких как ATmega8, ATmega48, ATmega16, ATmega8535, ATmega328, ATtiny2313, ATtiny13 и т.п. Кроме того, работу МК линейки AVR можно эмулировать в программе Proteus. Благодаря этому можно изучать работу и выполнять отладку микроконтроллеров не имея в наличии самих МК, что очень удобно как в обучающих, так и в практических целях.

В дальнейшем я собираюсь проводить курсы по программированию микроконтроллеров STM32, поскольку они сейчас пользуются наибольшим спросом среди программистов встроенных систем. И в целях экономии времени, чтобы не дублировать самого себя, я буду строить занятия с учетом того, что у слушателей уже имеется хотя бы минимальный опыт программирования МК AVR, и мне не придется уделять много времени снова рассказывая, что собой представляют функции, операторы, массивы, побитовые операции или, например, порты ввода-вывода, таймеры, АЦП, ШИМ, UART, SPI и т. п. Все эти и многие другие вопросы рассмотрены в данном курсе. 

На каком язык программирования будем писать программы

В основном микроконтроллеры программируют на таких языках: C, С++, Python, а также на Ассемблере. Знать ассемблер – это хорошо, но опыт показывает, что программирование микроконтроллеров для начинающих выглядит гораздо интересней и увлекательней на языке C. Поэтому в данном курсе особое внимание уделяется языку C, причем С излагается с учетом того, что у слушателей ранее не было никакого опыта программирования вовсе, то есть мы будем изучать C от самых базовых понятий до вполне приличного уровня.

Программа  курса

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

Программа курса включает следующие основные пункты:

  1. Область применение микроконтроллеров (МК). Основная периферия МК. Отличие микроконтроллера от микропроцессора. Порти ввода-вывода микроконтроллера. Настройка портов на выход. Подключение светодиодов. Функция main. Оператор while. Директива препроцессора #include.
  2. Библиотека задержек. Директива препроцессора #define. Прошивка микроконтроллера.
  3. Подключение кнопок к портам микроконтроллера. Настройка портов МК на выход. Подтягивающий и стягивающий резисторы. Высокое входное сопротивление. Проверка состояния пинов порта микроконтроллера.
  4. Семисегментные индикаторы. Подключение одноразрядных семисегментных индикаторов с общим катодом и общим анодом.
  5. Массивы. Оператор for. Типы данных int, char.
  6. Логические операции. Побитовые операции. Установка, сброс, переключение отдельных битов микроконтроллера.
  7. Проверка отдельных битов микроконтроллера. Динамическая индикация.
  8. Подключение динамической индикации посредством транзисторов. Общие понятия о таймер-счетчиках. Настройки нулевого таймер-счетчика. Регистр контроля и счетный регистр таймер-счетчика.
  9. Настройки первого и второго таймер-счетчиков. Отличие 8-ми битного и 16-ти битного таймер-счетчиков. Форматы записи чисел в таймер-счетчики.
  10. Дребезг контактов. Борьба с дребезгом. Настройка работы кнопки в разных режимах. Общие понятия о прерываниях. Внешние прерывания.
  11. Прерывание от таймер-счетчиков. Прерывание при переполнении таймер-счетчика. Динамическая индикация по прерыванию таймер-счетчика.
  12. Прерывание таймер-счетчика при совпадении. Формирование точного интервала времени. Таймер. Секундомер.
  13. Настройка фьюзов. Подключение внешнего кварцевого резонатора к микроконтроллеру.
  14. Оператор switch case. Динамическая индикация с применением switch case.
  15. Сдвиговый регистр 74HC595. Принцип работы. Применение. Подключение к микроконтроллеру. Расширение портов микроконтроллера. Последовательное соединение сдвиговых регистров. Статическая и динамическая индикация с применением сдвиговых регистров.
  16. Разработка частотомера и тахометра.
  17. Аналогово-цифровой преобразователь (АЦП). Принцип работы. Основные параметры. Настройки. Источники опорного напряжения. Расчет схемы подключения.
  18. Настройки работы АЦП по прерыванию. Сборка и настройка вольтметра. Типы данных с плавающей запятой. Явное и неявное преобразование типов данных.
  19. Подключение аналогового датчика температуры TMP36 (LM35). Измерения с нескольких каналов АЦП. Подключение кнопок к выводам АЦП.
  20. Аналоговый компаратор. Принцип действия. Основные параметры. Настройки. Применение. Режимы работы аналогового компаратора.
  21. Энергонезависимая память EEPROM. Основные параметры. Настройки. Организация памяти, запись и чтение данных из EEPROM.
  22. Функции. Типы функций. Создание и подключение подключаемых файлов .h и .c. Определение наибольшего и среднего числа.
  23. Подключение жидкокристаллического дисплея (ЖК) LCD. Настройки. Различие между строками и символами. Код ASCII. Отображение символов и строк на ЖК.
  24. Вывод переменной на ЖК дисплей.
    Применение функций itoa, dtostrf, sprintf. Вольтметр на ЖК дисплее. Настройки среды для работы с плавающей запятой для функции sprintf.
  25. Матричная клавиатура. Принцип работы. Подключение. Работа с двухмерными массивами данных.
  26. Широтно-импульсная модуляция (ШИМ). Принцип работы. Основные параметры. Настройки. Быстродействующая ШИМ. ШИМ с точной фазой. ШИМ с точной фазой и частотой.
  27. Регулирование ШИМ посредством кнопок и АЦП. Энкодер. Принцип работы. Подключение.
  28. Шаговый двигатель (ШД). Принцип работы и управления униполярным и биполярным ШД. Управление униполярным ШД посредством драйвера ULN2003.
  29. Управление биполярным, униполярным ШД и коллекторным двигателям посредством драйверов LN298N, L293D, DVR8834.
  30. Интерфейс UART. Принцип работы. Настройки. Передача данных.
  31. Прием данных по интерфейсу UART.
  32. Применение функций для работы с UART. Передача данных с АЦП по UART.
  33. Аппаратная реализация интерфейса 1-wire. Подключение датчика температуры DS18B20.
  34. Интерфейс 1-wire. Обмен данными с датчиком температуры DS18B20.
  35. Интерфейс TWI (I2C). Принцип работы. Настройки. Подключение EEPROM 24C256.
  36. Интерфейс TWI (I2C). Подключение датчика температуры и влажности SHT3x.
  37. OLED дисплей. Основные параметры и настройки. Подключение OLED посредством TWI (I2C).
  38. Интерфейс TWI (I2C). Подключение расширителя портов PCF8574. Подключение LCD к МК посредством PCF857.
  39. Интерфейс SPI. Принцип работы. Настройки. Обмен данными между двумя МК.
  40. Интерфейс SPI. Подключение преобразователя MAX6675 и термопары.

Особенность данного курса

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

После курсов

После изучения курса Вас ожидает следующее:

  • Полюбите микроконтроллеры и больше не будете их бояться.
  • Научитесь программировать микроконтроллеры любых типов серии AVR и сможет приступить к МК STM32.
  • Приобретете навыки уверенного программирования на языке C.
  • Научитесь читать и понимать даташиты (техническую документацию) микроконтроллеров, датчиков, радиоэлектронных элементов.
  • Сможете разрабатывать электронные устройства средней сложности на базе микроконтроллеров AVR.
  • Сможете очень быстро и без труда освоить ARDUINO.
  • Будет гораздо проще и интересней изучать микроконтроллеры других серий: STM, PIC и т.п.
  • Приобретете новую профессию и в дальнейшем сможете работать программистом микроконтроллеров.

Стоимость курса

 Стоимость курса 160 USD.

Курс состоит из 40 видеороликов, общей продолжительность более 80 часов, объемом более 130 ГБ. Также к видеозаписям прилагаются сопутствующие материалы ко всем занятиям курса.

После оплаты курса автоматически загрузится страница с ссылками на скачивание материалов.

Внимание! Только для жителей России! В связи с войной в Украине платежи из России не проходят привычным образом, то есть невозможно осуществить оплату курса по кнопке «Оплатить». Также не возможен перевод с карты на карту. Однако оплату можно выполнить в криптовалюте либо картой через любой сайт-обменник на мой криптокошелек: USDT: TT2ogf7hBUWgtxmH6AnC3CoSf7vynx5jeZ

Сеть: TRC20

Сумма платежа 160 $

Если Вы не имеете криптокошелька, можно зарегистрироваться, как вариант, на сайте binance, который имеет функционал для покупки, продажи, перевод и торговли криптовалютой: https://accounts.binance.com/ru/register?ref=429200663

После перевода денег сделайте скрин экрана или копию чека, подтверждающего оплату и отправьте ее на мою почту: zabarylodo@gmail. com и я Вам вышлю ссылки на скачивание материалов курса. Также, если возникнут вопросы, пожалуйста, обращайтесь ко мне по вышеуказанной почте.


Оплатить
160 USD

Контакты:

e-mail: [email protected]

Дмитрий Забарило.

6 лучших плат микроконтроллеров для всех уровней

Микроконтроллеры в основном имеют схожие конструкции. Они имеют ограниченную встроенную память, работают с низким энергопотреблением и оснащены набором контактов ввода и вывода общего назначения (GPIO), которые обычно программируются через USB-кабель.

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

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

1. Лучший микроконтроллер для начинающих. Arduino Uno R3

Если вас интересуют микроконтроллеры, вы почти наверняка слышали об Arduino. Они популяризировали оборудование для хобби с открытым исходным кодом с помощью множества плат разработки и независимой среды разработки (IDE) для их кодирования.

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

Подождите, это не похоже на плату микроконтроллера!

Что ж, в наборе роботов mBot в качестве мозга используется микроконтроллер. Его дизайн делает его идеальным для обучения детей робототехнике без необходимости иметь дело со сложным кодом. Код визуального блока, собранный в приложении Blocky, передается на доску через Bluetooth, чтобы повлиять на поведение робота.

Можно купить микроконтроллер отдельно от комплекта робота, но зачем? Роботы лучше всех!

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

Плата STM32 F3 Discovery представляет собой микроконтроллер на базе ARM Cortex-M4 для экспериментов со всеми аспектами аппаратного программирования. Плата оснащена встроенным детектором движения, трехосевым гироскопом, датчиком линейного ускорения и датчиком магнитного поля.

Также имеется восемь светодиодов, расположенных по кругу. Обратите внимание, что для этой платы требуется отдельный адаптер FTDI для связи с компьютерами через USB. Если вы не уверены, что это такое, один из них использовался в нашем собственном руководстве по Arduino для связи с чипом ATMega328P.

Обучение программированию F3 Discovery является более углубленным процессом, чем многие другие микроконтроллеры. К счастью, существуют библиотеки, делающие процесс более доступным, и многие учебные пособия начинаются с основ. Наряду с использованием языка программирования C++, доска является предметом The Discovery Book; руководство по началу работы с языком программирования Rust.

4. Лучший микроконтроллер для носимых устройствAdafruit Gemma M0

Поскольку микроконтроллеры сочетают в себе расширенные возможности управления светодиодами и другими компонентами с малыми форм-факторами и низким энергопотреблением, неудивительно, что они появляются в дизайне костюмов и косплее. Плата Gemma M0 от Adafruit представляет собой микроконтроллер размером с монету, который идеально подходит для подключения к светодиодам или другим компонентам с помощью токопроводящей нити. Кроме того, вы можете использовать встроенный светодиод RGB DotStar.

Микросхема ATSAMD21E18 (попробуйте сказать это в спешке) является шагом вперед по сравнению со штатными бортовыми контроллерами для микроконтроллеров этого типа. Хотя вы можете использовать стандартный тип Arduino C++, плата поставляется с предустановленной программой CircuitPython для программирования на Python и собственным USB-соединением, которого обычно не хватает другим платам этого типа.

5. Лучший микроконтроллер для PowerTeensy 3.2

Линейка Teensy 3.2 считается лучшей по мощности в крошечном форм-факторе. 32-битный микропроцессор ARM Cortex работает практически на каждой второй плате. Помимо скорости, Teensy имеет аудиоинтеграцию I2C и несколько высококачественных аналого-цифровых преобразователей (АЦП).

Каждый контакт на Teensy настраивается как прерывание, а платы работают с 64 КБ ОЗУ и 256 КБ флэш-памяти. Все это совместимо с Arduino IDE с использованием библиотеки Teensyduino, и если 28 контактов Teensy 3. 2 вам недостаточно, 48-контактные Teensy 3.5 и 3.6 доступны на веб-сайте PJRC.

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

Хорошим примером платы на границе между потребителем и промышленностью является макетная плата Mbed LPC1768. Эта доска — скачок в качестве и инструментах, и цена отражает это. Mbed предоставляет онлайн-среду IDE для оборудования и библиотеки для выполнения задач с выводами GPIO и встроенными светодиодами.

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

Маленькие платы, большие планы

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

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

Изображение предоставлено: Ha4ipiri/Depositphotos

Руководство для начинающих по микроконтроллерам

Джон Уайлдер

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

В этой статье не делается попытка рассказать о каком-либо конкретном микроконтроллере/микропроцессоре, но она представляет собой скорее учебник для объяснения общих концепций, применимых ко всем микроконтроллерам/микропроцессорам.

Во-первых, давайте зададим себе пару вопросов. Первый вопрос —

Что такое микроконтроллер?
Микроконтроллер — это крошечный микрокомпьютер на микросхеме. Он имеет ЦП, ОЗУ (оперативное запоминающее устройство), регистры специальных функций, ПЗУ программ, ПЗУ данных, от одного до нескольких параллельных портов ввода-вывода (ввода/вывода) и может иметь множество встроенных периферийных устройств, включая но не ограничиваясь аналого-цифровым преобразователем (АЦП), цифро-аналоговым преобразователем (ЦАП), последовательным UART, одним или несколькими таймерами, компараторами/на микросхеме опорного напряжения, модулем захвата/сравнения/ШИМ (широтно-импульсной модуляции) , главный синхронный последовательный порт для связи SPI (последовательный периферийный интерфейс) / I2C (межинтегральная схема), порт USB, порт Ethernet, встроенные генераторы, а также множество других периферийных устройств.

Что такое микропроцессор (подождите, вы имеете в виду, что на самом деле есть разница)?
Микропроцессор — это все, что есть у микроконтроллера, но без программного ПЗУ на кристалле. Программный код находится вне микросхемы в отдельной внешней микросхеме EPROM.

ПЗУ программ и ПЗУ данных
Встроенная ПЗУ (постоянная память) микроконтроллера похожа на жесткий диск микроконтроллера. Он имеет два раздела. Один раздел зарезервирован для хранения программного кода, а другой раздел зарезервирован для постоянного хранения данных, которые используются чипом во время обычного выполнения программы. На данном микроконтроллере PIC с, скажем, 8 КБ пространства для программ пространство для программ будет занимать адреса ПЗУ 0x0000 — 0x1FFF (или 0 — 819).1 в десятичной форме). Пространство данных будет начинаться с адреса ПЗУ программы 0x2100. Если бы пространство ПЗУ данных имело длину 256 байт, пространство ПЗУ данных занимало бы адреса ПЗУ 0x2100–0x21FF (или 8448–8704 в десятичном формате).

CPU
CPU означает центральный процессор. По сути, это «мозги» микроконтроллера. Это то, что извлекает инструкции из памяти кода и выполняет извлеченные инструкции.

ОЗУ данных
ОЗУ данных (оперативное запоминающее устройство) — это пространство данных, которое используется для временного хранения постоянных и переменных значений, используемых микроконтроллером во время обычного выполнения программы. Объем физической оперативной памяти на данном микроконтроллере варьируется от одного микроконтроллера к другому. ОЗУ данных на микроконтроллере организовано в несколько «регистров», каждый из которых имеет свой уникальный «адрес». Регистр ОЗУ на 8-битном микроконтроллере может содержать в общей сложности 8 бит или один байт данных. Типичная спецификация пространства ОЗУ может указывать, что оно составляет 256 x 8. Это означает, что в ОЗУ всего 256 регистров, и эти регистры могут содержать 8 бит каждый.

Регистр — это просто место в памяти, в которое вы можете записывать или считывать данные. Некоторые из нас называют регистры «местоположениями».

Регистры специальных функций
Регистры специальных функций (или просто SFR) в микроконтроллере аналогичны регистрам в ОЗУ данных. Вы можете записывать данные в них, а также читать данные из них. Отличие заключается в том, что некоторые SFR напрямую управляют аппаратным обеспечением на кристалле микроконтроллера, в то время как другие управляются аппаратным обеспечением на кристалле микроконтроллера.

Каждый бит в SFR соответствует функции. В SFR у вас есть управляющие биты и флаговые биты. Управляющие биты подобны «переключателям», которые включают или выключают функцию в зависимости от того, записываете ли вы 1 или 0 в это место бита в SFR. Биты флага похожи на «световые индикаторы», которые указывают, существует ли данное условие, в зависимости от того, равен ли бит флага 1 или 0. Биты управления напрямую управляют оборудованием. Биты флагов контролируются аппаратно. В любой заданной программе мы обычно записываем в управляющие биты, когда читаем биты флагов (некоторые биты флагов должны быть очищены вручную путем записи в них в зависимости от микроконтроллера… подробнее об этом позже).

Каждому аппаратному элементу микроконтроллера будет назначен как минимум 1 SFR. Некоторым аппаратным средствам может быть назначено несколько SFR. Обратитесь к техническому описанию вашего микроконтроллера, чтобы узнать больше о его конкретной организации SFR.

Биты конфигурации
Большинство микроконтроллеров имеют специальные биты, известные как «биты конфигурации». Эти биты настраивают специальные параметры микроконтроллера, включая, помимо прочего, –

* Тип генератора
* Включение/выключение сторожевого таймера
* Вкл./выкл. таймера включения питания
* Вкл./выкл. сброса при отключении питания
* Вкл./выкл. программирования низкого напряжения
* Вкл./выкл. монитора отказоустойчивых часов
* Вкл./выкл. внутреннего/внешнего переключения

На микроконтроллере PIC имеется являются четными битами конфигурации для защиты программного кода и защиты кода данных. Эти биты предотвращают чтение программы или областей данных внешним аппаратным обеспечением для программирования, чтобы другие не могли украсть ваш код. На чипе Atmel AT89S (производном 8051) это устанавливается так называемыми «блокировочными битами».

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

ALU (Арифметико-логическое устройство)
Это устройство отвечает за все математические и логические операции, выполняемые микроконтроллером. На большинстве микроконтроллеров АЛУ будет иметь 3 бита флага, связанных с ним —

* Нулевой бит — этот бит флага устанавливается аппаратно в 1 всякий раз, когда математическая операция приводит к нулевому результату. Он будет сброшен аппаратно на 0 всякий раз, когда математическая операция приводит к ненулевому результату.

* Бит переноса/заема — Этот бит флага работает как бит переноса для операций сложения и как флаг заимствования для операций вычитания. «Перенос» происходит, когда результат операции сложения приводит к значению, превышающему то, что регистр способен удерживать. 8-битный регистр может содержать максимальное значение 255 (FF в шестнадцатеричном формате или 11111111 в двоичном).

Если результат операции сложения больше 255, флаг переноса устанавливается в 1. Если результат операции сложения меньше 255, перенос не выполняется, поэтому флаг переноса очищается до 0.

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

* Бит переноса/заема цифр – Этот флаг бит делает то же самое, что и флаг переноса/заимствования, но он работает только для указания, происходит ли перенос/заимствование только между битами 3 и 4.

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

Нулевой бит — это удобный флаговый бит, который позволяет сравнить два значения, чтобы увидеть, равны ли они/не равны. Если мы возьмем два числа и вычтем их, результат будет равен нулю, если он равен, и не равен нулю, если не равен. Таким образом, чтобы сравнить два значения, чтобы увидеть, равны они или нет, мы вычитаем их, затем читаем/проверяем нулевой бит, чтобы увидеть, является ли бит 1 или 0. Если нулевой бит = 1, результат вычитания ноль, что означает, что два значения равны. Если нулевой бит = 0, результат вычитания не равен нулю, что означает, что два значения не равны.

Бит переноса/заимствования — это удобный флаг, который позволяет нам сравнивать два значения, чтобы увидеть, является ли одно значение больше или меньше другого значения. Пример… у нас есть два значения: VALUE1 и VALUE2. В коде мы выполняем эту операцию —

ЗНАЧЕНИЕ1 — ЗНАЧЕНИЕ2 = ЗНАЧЕНИЕ3

После выполнения операции вычитания мы читаем/проверяем высокое/низкое состояние бита переноса/заимствования.

Если ЗНАЧЕНИЕ2 больше ЗНАЧ1, результат вычитания будет отрицательным, что приведет к сбросу бита переноса/заема в 0. Если ЗНАЧЕНИЕ2 меньше ЗНАЧ1, результат вычитания будет положительным, что установит перенос /занять бит до 1.

Обратитесь к спецификации, чтобы узнать, какой SFR содержит эти биты. В микроконтроллерах PIC биты флага ALU находятся в STATUS SFR. На MCS-51 они находятся в PSW SFR (слово состояния программы).

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

При перезагрузке микроконтроллера программный счетчик сбрасывается на 0x0000. ЦП выберет инструкцию, которая находится по адресу ПЗУ программы 0x0000. После того, как эта инструкция будет получена, счетчик команд автоматически увеличится до значения 0x0001. Счетчик программ постоянно автоматически увеличивается на значение 1, что заставляет ЦП последовательно обращаться к содержимому каждой ячейки регистра в программном ПЗУ. Это продолжается до тех пор, пока ЦП не выберет и не выполнит инструкцию, которая изменяет значение счетчика команд. Такими инструкциями, которые делают это, являются инструкции перехода (ajmp и ljmp на MCS-51, goto на PIC), вызовы подпрограмм (acall и lcall на MCS-51, вызов на PIC) и любые инструкции, которые добавляют или вычитают значение из или из счетчик программ.

Стек
Стек микроконтроллера в основном используется во время вызовов подпрограмм и переходов к обработчику прерывания. Это буфер «последним пришел первым обслужен», который используется для хранения адресов возврата. Во время вызова подпрограммы текущий адрес программного счетчика «заталкивается» в стек с добавленным к нему смещением +1, затем программный счетчик модифицируется значением адреса, по которому находится вызываемая подпрограмма. Это заставляет программный счетчик перейти к коду подпрограммы для выполнения подпрограммы.

В конце подпрограммы будет инструкция «возврата» (возврат на MCS-51, возврат на PIC). После выполнения инструкции возврата стек «извлекается», и последнее значение адреса ПЗУ, которое было помещено в стек, извлекается из стека и возвращается в счетчик программ. Это заставляет программный счетчик вернуться к инструкции, которая находится после инструкции, вызвавшей подпрограмму (отсюда необходимость смещения +1 во время помещения адреса ПК в стек), и выполнение программы продолжается с того места, где оно было остановлено. до вызова подпрограммы.

Некоторые микроконтроллеры имеют «программный стек» (MCS-51). Программный стек использует часть внутренней оперативной памяти микроконтроллера в качестве пространства стека. Другие микроконтроллеры имеют аппаратный стек (PIC). В аппаратном стеке стек представляет собой собственное выделенное пространство, которое отделено от всех других областей памяти на кристалле.

На некоторых микроконтроллерах стек доступен для записи. Это позволяет нам использовать стек для временного резервного копирования важных регистров во время вызовов подпрограмм и выполнения обработчиков прерываний. Перед выполнением подпрограммы или обработчика прерывания содержимое резервных регистров помещается в стек. Затем, непосредственно перед возвратом из подпрограммы или обработчика прерывания, содержимое, которое мы поместили в стек в начале подпрограммы, извлекается из стека по одному, а затем восстанавливается в исходное положение в порядке, обратном тому, в котором оно было помещается в стек (помните… «последним пришел — первым ушел»).

Хорошим примером этого может быть то, как мы резервируем аккумулятор и регистры PSW на MCS-51 во время выполнения процедуры обработчика прерывания —

Код (текст):

push        ACC         ;резервное копирование аккумулятора в стек
push PSW; резервное копирование статуса программы на стек

; выполнить код обработчика прерываний здесь

POP PSW; Статус программы восстановления Word
POP ACC; восстановить аккумулятор
RETI; вернуться в основной код из прерывания

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

После выполнения кода обработчика прерывания сначала из стека выталкивается PSW, а затем из стека извлекается аккумулятор… в порядке, обратном тому, как они были помещены в стек.

Типовой SFR
Типовой SFR настроен, как показано ниже.

Код (текст):

| ПОРТ 1 SFR                        |
——————————————————
| 7   | 6   | 5   | 4   | 3   | 2   | 1   | 0   |
| P1.7 | P1.6 | P1.5 | P1.4 | P1.3 | P1.2 | P1.1 | P1.0 |
| 0   | 0   | 0   | 0   | 0   | 0   | 0   | 0   |

Это SFR-защелка порта на микроконтроллере MCS-51 для параллельного порта 1. Каждый порт на MCS-51 является 8-битным параллельным портом, и каждый бит в SFR порта назначается каждому контакту порта. P1.0 будет контактом 0 на порту 1, P1.1 будет контактом 1 на порту 1, P1.2 будет контактом 2 на порту 1 и т. д. и т. д.

Как показано, все нули записаны в каждый из битов защелки порта 1 SFR. Это поместит все контакты порта 1 в низкое состояние (0 вольт). Если бы мы записали 1 в любой из битов SFR порта, это установит вывод, связанный с позицией бита, в которую мы записываем «1», в высоком состоянии (+5 В).

Пример, запишем значение 01010101 в порт 1 SFR –

Код (текст):

| ПОРТ 1 SFR                        |
——————————————————
| 7   | 6   | 5   | 4   | 3   | 2   | 1   | 0   |
| P1.7 | P1.6 | P1.5 | P1.4 | P1.3 | P1.2 | P1.1 | P1.0 |
| 0   | 1   | 0   | 1   | 0   | 1   | 0   | 1   |

Как показано, это установит контакты P1.0, P1.2, P1.4 и P1.6 в состояние высокого уровня, а контакты P1.1, P1.3, P1.5 и P1.7 — в состояние низкого уровня. .

Несколько слов о таблицах данных… и почему они так важны
Не все микроконтроллеры одинаковы. Каждый из них разработан с использованием определенного аппаратного обеспечения на чипе. Микроконтроллеры разных производителей имеют разную архитектуру. Вы обнаружите, что микроконтроллеры PIC сильно отличаются от микроконтроллеров MCS-51, точно так же, как MCS-51 сильно отличается, скажем, от Motorola 65xx в отношении того, как реализованы SFR, как организована RAM данных, набор команд, конфигурационное слово, как параллельные порты работают и т. д. и т.п.

ЕДИНСТВЕННЫЙ способ точно узнать, как работать с вашим микроконтроллером и его оборудованием, — это ознакомиться с его техническим описанием. Техническое описание объясняет каждый SFR, каждую часть встроенного оборудования, абсолютные максимальные электрические характеристики, организацию памяти программ/данных, как подключены параллельные порты и как они работают, сводку набора инструкций (для тех из вас, кто программирует на ассемблере). язык) и т. д. и т. д. Почти все, что вам, как программисту, необходимо знать о вашем микроконтроллере, находится в техническом описании микроконтроллера.

Большинство из них находятся в свободном доступе в Интернете с помощью простого поиска Google (я еще не нашел ни одного, которого нет). Заявление о том, что вы не смогли найти техническое описание, не является приемлемым оправданием, когда дело доходит до этого. ЕДИНСТВЕННАЯ причина, по которой кто-либо отказывается просматривать техническое описание, заключается либо в том, что они слишком ленивы, либо в том, что они их не понимают, но не хотят, чтобы другие знали, что они этого не понимают. Однако я скажу прямо сейчас … на большинство вопросов форума, касающихся микроконтроллеров, можно было бы ответить самостоятельно, если бы человек нашел время, чтобы найти ответ в таблице данных.

Спецификации абсолютно обязательны. Без них вы не сможете написать свой собственный код.

Об авторе
Джон Уайлдер — внештатный инженер-электронщик и энтузиаст электроники с более чем 20-летним стажем. Он провел четыре года в ВМС США в качестве техника по авиационной электронике. Джон также играет на гитаре с 13 лет и начал интегрировать электронику и музыку с 15 лет. Джон построил свой первый ламповый усилитель в 17 лет. «Музыкальная электроника», — говорит Джон, — его любовь и страсть.

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

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *