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

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

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 лет? Практика других людей показывает, что возраст вообще не помеха. Многие почему то не учитывают то, что есть целый пласт работы, которую молодые в силу своих амбиций не хотят делать. Поэтому работодатели предпочитают брать тех, кто будет ее тащить. Это ваш шанс зацепиться, а дальше все зависит только от вас.

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

Как я научился работать с микроконтроллерами — опыт новичка / Хабр
Всем привет. В этой статье хотел рассказать о том, как я научился работать с микроконтроллерами
(далее по тексту — МК) и на какие подводные камни налетел. Сразу скажу — статья не претендует на эксклюзивность, так как любой человек работающий с МК проходил через то, что прошёл я. Прошу строго не судить, а прочитать как историю.



Вместо вступления


Впервые интерес к МК у меня возник, когда я учился в 10 классе. На тот момент был 2009 год. Я умел немного программировать на ПК в QBasic и Visual Basic — школьная программа, но так сложилась жизнь, что я особо не разбирался в программировании, да и отсутствие знающих людей по части электроники и МК рядом сделали своё дело — для меня это была новая ниша. Хотя я с детства ковырялся с платами и микросхемами найденными на помойках, но как оно работало я толком не понимал — толком никто не мог объяснить. Как работает транзистор нормально я узнал только спустя пару лет после описанных событий. Когда я выбирал первый МК то смотрел характеристики на сайте ЧИП-ДИП. Скажу честно — для меня это было как иероглифы. Так что не стоит этого бояться. И да, про Arduino тогда никто понятия не имел.

Как всё началось


Начал ковыряться в яндексах и гуглах. Понимал, что сам контроллер — половина дела, нужна ещё и программа. А как сказано во вступлении — с программированием у меня было не очень. В конце концов попал на какой-то сайт. Как стало позднее ясно, я с этим сайтом реально «попал». Создатель сайта написал ещё и учебник по программированию, я на радостях скачал учебник и первое что там увидел — «В качестве образца для работы я использовал PIC16F84A ». Собственно так я и выбрал свой первый МК. Теперь вопрос — почему я именно «попал». А попал я из-за того, что создатель этого учебника и сайта предлагал программировать МК на АССЕМБЛЕРЕ. Его не все практикующие проггеры то знают, а тут новичок… Контроллер я уже заказал, и только потом начал читать учебник, к сожалению.

Как я выходил из положения


После того, как я понял, что ничего не понял, я забросил МК на пару лет, но параллельно всё-таки шарился на форумах типа Схем.нет и прочих, и ко мне постепенно приходило понимание вопроса. Решил учиться кстати на модели PIC16F877A.

Итак, что нужно знать новичку:


Микроконтроллер — это маленький компьютер, в нём есть и Арифметико-логическое устройство — процессор по сути дела, и оперативная память и некое подобие жесткого диска — память программ и данных, но выполнено это всё в одной микросхеме. Соответственно в зависимости от модели и производителя у него следующие характеристики (ориентировочно):
  • Рабочие частоты от единиц до ~100 Мгц, я лично использую в своих устройствах как правило частоты 20 Мгц, именно МЕГАгерц, а не ГИГАгерц. Частота задаётся внешним источником тактирования — кварцевым или керамическим резонатором.

  • Объём ОЗУ — единицы и десятки Килобайт
  • Объём памяти под данные и программу — до нескольких десятков Килобайт. При желании можно расширить память для данных с помощью микросхем памяти. Для того чтобы использовать эти микросхемы для расширения памяти под программу — новичку стоит забыть, не всякий профессионал может это правильно сделать, да и не каждый микроконтроллер позволяет изменять свою прошивку во время работы.
  • Рабочее напряжение от 1 до 5 вольт в зависимости от модели и производителя.

Микроконтроллер рассчитан на работу на плате, скажем так, в конкретной «железке», на плате, в устройстве. Так что не стоит думать, что на нём можно поиграть в CS 🙂

Языки программирования


Начал выбирать язык программирования и среду в которой можно программировать. Так как я хоть как-то знал Basic, то и задумался, что было бы хорошо прогать на нём. Да, он не очень совершенный и ещё куча недостатков, но для начала подходил как нельзя кстати. Мне повезло, оказалось, что есть язык PIC-Basic. По нему есть учебник, автор Чак Хелибайк и переведённое на русский руководство, собственно до всего доходил дальше по учебнику и руководству. Среда работает из-под ДОС, но можно прикрутить CodeStudio и всё будет работать из-под Windows.

Программатор


Следующая проблема, стоявшая у меня на пути — чем записать программу в чип. Понятное дело, что нужен программатор, я решил экономить, попробовал собрать несколько схем из этих ваших интернетов. Одной схемы недостаточно, нужна ещё программа которая используя программатор (саму железку) занесёт код в память. Все мои опыты окончились неудачами, по причине малого опыта. Решил я больше не смотреть на то, как от чипов идёт дым и заказал PICKit3, после этого не знал проблем, поигрался пару дней с ним и всё заработало.

  • В настоящее время есть адаптированные языки программирования для МК, тот же Бэйсик, СИ и прочие.
  • После написания программы она компилируется в машинный код — файлик с расширением HEX, его-то и надо прошивать в память МК.
  • Для того, чтобы «прошить МК» — записать в него выполняемый код нужно две вещи:

    1) плата-программатор, которая является промежуточным устройством между разъёмом компьютера и самим чипом
    2) Программа-программатор, которая будет знать как работать с программатором, собранным по конкретной схеме.
    То есть нужно чтобы программа на ПК знала какая схема подключена к ПК чтоб правильно прошить чип. В моём случае это заводское решение — вместе с программатором PicKit идет диск с нужными программами.

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

Несколько слов про периферию


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

Например у PIC16F877А их 40 штук, причем 7 штук вылетают сразу, т.к. используются для подачи питания, подключения резонатора и управления аварийным сбросом. Так же надо внимательно смотреть документацию на чип. Например тот же АЦП — в PIC16F877А он может измерять напряжение только на 8 конкретных ножках чипа, на других он это делать не может. То есть под каждую встроенную функцию отводятся конкретные выводы и поменять их нельзя.

Суть сей басни такова


Освоить МК реально даже самому и с нуля, но есть места где не очень понятно. Если с программированием никогда не сталкивались, то сначала выучите хотя-бы азы программирования и напишите «Hello World» на компьютере. После этого будет проще. Если не хотите особо заморачиваться — Arduino Ваше всё. МК расчитаны на использование в «железках» — блоки управления, платы, контроллеры итд итп, это не полноценный компьютер, а контроллер. И ожидать от него следует соответственно. Благо сейчас полно примеров на ютубе, и я надеюсь, что мой опыт начинания с нуля будет не таким горьким и моя статья кому-нибудь, да поможет.
Что нужно для программирования микроконтроллеров? ⋆ diodov.net

Программирование микроконтроллеров Курсы

Теперь, когда мы уже ознакомлены с некоторыми возможностями и функциями микроконтроллеров, естественно, возникает логичный вопрос: что нужно для программирования микроконтроллеров? Какие необходимы программы и устройства, где их взять?

Программирование микроконтроллеров AVR

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

Структура и порядок написания программы

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

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

Языки программирования микроконтроллеров: Си и Ассемблер

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

Здесь мы не будем сравнивать преимущества и недостатки написания программ на Ассемблере и Си. Со временем, приобретя некоторый опыт в программировании МК, вы сами для себя сделаете полезные выводы.

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

Компиляция программы

Написанный нами код на Си еще вовсе не понятен микроконтроллеру, поскольку МК понимает команды только в двоичной (или шестнадцатеричной) системе, которая представляет собой набор нулей и единиц. Поэтому Си-шный код нужно преобразовать в нули и единицы. Для этого применяется специальная программа, называемая компилятор, а сам процесс преобразования кода называется компиляция.

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

Для прошивки МК применяется устройство, называемое программатор. В зависимости от типа программатора вход его подключается к COM или USB порту, а выход к определенным выводам микроконтроллера.

Программатор

Существует широкий выбор программаторов и отладочных плат, однако нас вполне устроит самый простой программатор USBASP, который в Китае стоит не более 3 $.

Программатор USBASP

После того, как микроконтроллер прошит, выполняется отладка и тестирование программы на реальном устройстве или, как еще говорят, на «железе».

Теперь давайте подытожим этапы программирования микроконтроллеров.

Что нужно для программирования микроконтроллеров

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

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

Необходимый набор программ

Существует множество полезных и удобных программ для программирования МК. Они бывают как платные, так и бесплатные. Среди них можно выделить три основных:

1) Atmel Studio

2) CodeVisionAVR

3) WinAVR

Все эти программы относятся к IDEIntegrated Development Environment – интегрированная среда разработки. В них можно писать код, компилировать и отлаживать его.

Следует обратить внимание на Code Vision AVR. Эта IDE позволяет упростить и ускорить написание кода. Однако программа платная.

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

Прошивка и отладка программы

Прошивать микроконтроллеры мы будем с помощью дополнительной программы AVRDUDE.

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

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

Еще один важный элемент, который нам пригодится – это техническая документация на МК, называемая datasheet. В общем, нужно скачать datasheet на микроконтроллер ATmega8.

Итак, полный набор для программирования МК состоит из таких элементов:

1) Atmel Studio

2) Datasheet на ATmega8

3) Proteus

4) AVRDUDE

5) Программатор USB ASP (+ драйвер на него)

6) Макетная плата

7) Микроконтроллер ATmega8

Если микроконтроллера нет в наличии, не стоит откладывать изучение микроконтроллеров на потом, достаточно скачать и установить:

1) Atmel Studio

2) Datasheet на ATmega8

3) Proteus

Скачать AVRDUDE

Скачать datasheet ATmega8

Скачать Atmel Studio

Как читать электрические схемы и создавать электронные устройства

Еще статьи по данной теме

Программирование микроконтроллеров PIC. Часть 1. Необходимые инструменты и программы. Основы MPLAB

Итак, вы решили научиться программировать pic-контроллеры. Для начала поговорим о том, что вам для работы с этими контроллерами понадобится.

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

Программа для контроллера — это, как я уже сказал, набор машинных кодов, записанный в файле с расширением «hex» (здесь можно почитать про формат *.hex), который и нужно заливать в контроллер с помощью программатора. Никакого другого языка контроллер не понимает. Следовательно, нужна специальная программа, которая будет переводить текст программы, написанный на каком-либо языке программирования, в машинные коды. Наиболее удобными в этом плане являются интегрированные среды разработки (IDE — integrated development environment), поскольку они могут не только осуществлять перевод текста программы в машинный код, но и производить симуляцию её работы. Причём симуляцию можно проводить пошагово, при этом можно наблюдать состояние регистров или даже менять их состояние по своему желанию. Короче, интегрированные среды помимо, собственно, компиляции (перевода в машинные коды) предоставляют отличные возможности для отладки программы.

IDE, как и программаторов, существует много. Лично я пользуюсь MPLAB и вам рекомендую, по той простой причине, что MPLAB — это IDE от самого производителя PIC-контроллеров — фирмы Microchip, поэтому имеет отличную поддержку (в том числе на русском языке, что особенно приятно). С официального сайта Microchip можно скачать и сам этот пакет, и подробное описание по работе с ним. Если не нашли или ломает искать — ссылки для скачивания здесь, правда это уже не самая свежая версия.

В описании на русском языке про всё рассказано: от установки и настройки до удаления. В большинстве случаев вся установка заключается в том, чтобы запустить setup и ответить на пару вопросов, типа куда ставить драйверы и тому подобное, от себя лишь добавлю, что во избежание глюков ставить пакет надо в такую папку, чтобы в пути были только английские буквы (а не в какую-нибудь, типа C:\Программы\PIC\MPLAB). Вообще, кириллицу в путях к файлам или в названиях файлов лучше не использовать, иначе возможны глюки.

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

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

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

Короче говоря, в случае с языком высокого уровня вы изучаете как какой-то дядя обозвал свои способы реализации необходимых вам функций и по каким правилам их надо записывать. В данном случае можно провести следующую аналогию: вы хотите поговорить с китайцем, но вам говорят: «Китайский слишком сложный язык, но есть один дядя в Болгарии, который 20 лет жил в Китае и отлично его выучил. А болгарский язык с русским очень похожи и русскому человеку он интуитивно понятен, так что выучите болгарский, а уж дядя переведёт.»

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

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

Что нужно сделать в MPLAB, чтобы получить желанную прошивку? Как я уже сказал — подробности читайте в руководстве к IDE MPLAB, оно на русском и там всё понятно (если не понятно — идём на форум), я же только кратко перечислю самое основное и дам некоторые рекомендации.

Итак, мы установили MPLAB, хотим написать в нём программу для контроллера и получить готовую прошивку.

Сначала нужно создать проект. Для каждого проекта рекомендую заводить отдельную папку, потому что, во-первых, в проект может входить несколько файлов, а, во-вторых, сам MPLAB создаст ещё несколько вспомогательных файлов (*.lst, *.err, *.cod, *.bkx). Если несколько проектов будут в одной папке, то легко можно запутаться какие файлы к какому проекту относятся. Короче, создаём для проекта новую папку, потом запускаем MPLAB и выбираем меню Project -> New Project…

В появившемся окошке, в проводнике справа, выбираем нашу папку, в левой части (в поле под надписью File Name) пишем название будущего проекта, например my1.pjt (не забываем указать расширение), и жмём ОК.

Появляется окно с названием Edit Project. Это менеджер проекта, в котором указываются параметры проекта (какие файлы и библиотеки нужно подключить к проекту, какой будет использоваться камень, будет ли использоваться симуляция и многое другое). Находим поле ввода с названием Development Mode. Справа от этого поля есть кнопочка Change… Нажимаем.

Открывается окошко с названием Development Mode, в котором мы видим кучу вкладок. На вкладке Tools ставим галочку рядом с MPLAB SIM Simulator (грех для отладки симулятором не пользоваться), в поле ввода Processor выбираем контроллер, с которым мы будем работать. На вкладке Clock указываем какая у нас будет частота генератора. Жмём ОК. На ошибку и предупреждение не обращаем внимания, это просто нам говорят, что пока не могут создать .hex (ну правильно, у нас пока и программы нет) и что при изменении настроек надо заново перекомпилировать проект (так мы ещё вообще ни разу не компилировали).

В поле ввода Language Tool Suite выбираем Microchip.

Нажимаем кнопку с названием Add Node… В появившемся окне, в проводнике справа выбираем папку проекта, в поле ввода слева пишем как будет называться файл с текстом программы на ассемблере, например my1.asm (не забываем указывать расширение), и жмём ОК. Всё, теперь мы подключили к проекту файл my1.asm (указали, что текст программы будет в этом файле).

На этом с Edit project заканчиваем, — нажимаем ОК.

Теперь нужно, собственно, создать файл с текстом программы (в менеджере проекта мы просто указали, что текст будет в таком-то файле, но фактически этот файл ещё не создан). Для этого идём в меню File и выбираем пункт New. Откроется окошко редактора с названием Untitled1. Выбираем меню File -> Save As…, в проводнике справа указываем папку проекта, в поле ввода File Name пишем название файла, которое мы указали в менеджере проекта, то есть в нашем примере это будет my1.asm. Если всё сделано правильно, то название окошка редактора поменяется с Untitled1 на \путь\my1.asm.

Вот и всё! Теперь осталось только набрать в окошке редактора текст программы, скомпилировать проект (меню Project->Build All) и, если в программе нет ошибок (что с первого раза бывает очень редко), то в папке проекта появится готовая прошивка (файл с расширением hex), которую можно заливать в контроллер.

  1. Часть 1. Необходимые инструменты и программы. Основы MPLAB
  2. Часть 2. Что такое микроконтроллер и как с ним работать
  3. Часть 3. Структура программы на ассемблере
  4. Часть 4. Разработка рабочей части программы. Алгоритмы
  5. Часть 5. Ассемблер. Организация циклов и ветвлений
  6. Часть 6. Как перевести контроллер в режим программирования и залить в него прошивку

Программирование ПЛК. Первые шаги | Pop Hi-Tech

ПЛК

Итак, вы решили изучать программирование ПЛК (Программируемых Логических Контроллеров). С чего стоит начать изучение программирования контроллеров? Какие учебные материалы искать, стоит ли заниматься этим самостоятельно или лучше пойти на курсы, сколько времени займёт обучение и насколько оно будет сложным? Доступно ли программирование ПЛК всем или для этого нужно быть программистом? Как быстро стоит переходить от теории к практике? Мы подготовили ответы на эти и другие вопросы.

1. Для того чтобы начать изучать программирование ПЛК, быть программистом вовсе не обязательно. Достаточно иметь так называемый логический склад ума. Если вы любили математику и информатику в школе — скорее всего, у вас всё получится.
2. Однако определённые навыки и понимание машинной логики все же необходимы. Если вы изучали в школе или институте основы программирование на Паскале, Бейсике или Ассемблере — это значительный плюс.
3. Первые шаги в программировании ПЛК можно и даже лучше всего делать самостоятельно, это позволит изучить основы в комфортном для себя темпе. Учебных материалов о ПЛК и их программировании достаточно много в интернете, а приблизительный план для самостоятельного обучения вы можете найти в этой статье.
4. А вот сразу после изучения основ следует обратить своё внимание на профессиональные курсы и руководства. От своего имени особо рекомендуем видеокурс по Simatic Step 7, который можно купить на сайте http://step7-kurs.ru. Этот курс как нельзя лучше подходит для новичков, в то же время Simatic Step 7 используется для разработки систем автоматизации для ПЛК Simatic — одних из самых популярных и востребованных на сегодня контроллеров.
5. После того как вы сделаете свои первые шаги step 7 — милости просим на специализированные форумы: здесь вы сможете не только «задачки порешать», но и уже начинать подыскивать работу или стажировку.
6. Время, необходимое для изучения программирования ПЛК, — параметр индивидуальный. Однако в любом случае это займёт у вас гораздо меньше времени, чем попытки освоить Java или C#.

Темы, которые стоит изучить самостоятельно до того, как вы приступите к изучению профессиональных курсов (т. е. на этапе самообучения):

1. Требования техники безопасности при работе с ПЛК. Хотя в начале обучения вам, возможно, будет казаться, что эта тема вам не нужна — все же потратьте некоторое время и изучите ТБ работы с ПЛК. Пригодится обязательно.
2. Назначение, функции, принципы работы и конструкция ПЛК. Условия, в которых работают ПЛК и требования к ним. Если вы раньше занимались радиотехническим конструированием — эта тема не составит для вас особого труда.
3. История ПЛК. Необязательная, но весьма интересная часть.
4. Знакомство с основными языками программирования ПЛК согласно стандарту МЭК-61131-3: Sequential Function Chart (SFC), Function Block Diagram (FBD), Ladder Diagrams (LАD), Statement List (STL), Instruction List (IL).
5. Знакомство со средой разработки, лучше всего — с двумя-тремя наиболее популярными. Например, это могут быть CoDeSys и Simatic Step 7.
6. Изучение методики программирования ПЛК. Структуризация программы, вызов подпрограмм, задание циклов и времени работы программы.
7. Основные команды (операторы). К этому моменту вы уже должны были определиться с языком программирования и средой разработки, наиболее симпатичной лично вам.
8. Функции и функциональные блоки.
9.Примеры кода работающих программ.
10. Практикум. При написании собственных программ переходите от элементарных задач к более сложным. На этом этапе нет ничего плохого в том, чтобы использоваться в своих программах части чужого кода, однако старайтесь со временем уменьшать их количество (в процентном выражении).

Средства программирования PIC-контроллеров / Хабр

Введение


PIC-контроллеры остаются популярными в тех случаях, когда требуется создать недорогую компактную систему с низким энергопотреблением, не предъявляющую высоких требований по ее управлению. Эти контроллеры позволяют заменить аппаратную логику гибкими программными средствами, которые взаимодействуют с внешними устройствами через хорошие порты.

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

Компания Microchip распространяет MPLAB — бесплатную интегрированную среду редактирования и отладки программ, которая записывает бинарные файлы в микроконтроллеры PIC через программаторы.

Взаимодействие MPLAB и Matlab/Simulink позволяет разрабатывать программы для PIC-контроллеров в среде Simulink — графического моделирования и анализа динамических систем. В этой работе рассматриваются средства программирования PIC контроллеров: MPLAB, Matlab/Simulink и программатор PIC-KIT3 в следующих разделах.

• Характеристики миниатюрного PIC контроллера PIC12F629
• Интегрированная среда разработки MPLAB IDE
• Подключение Matlab/Simulink к MPLAB
• Подключение программатора PIC-KIT3

Характеристики миниатюрного PIC-контроллера


Семейство РIС12ххх содержит контроллеры в миниатюрном 8–выводном корпусе со встроенным тактовым генератором. Контроллеры имеют RISC–архитектуру и обеспечивают выполнение большинства команд процессора за один машинный цикл.

Для примера, ниже даны характеристики недорогого компактного 8-разрядного контроллера PIC12F629 с многофункциональными портами, малым потреблением и широким диапазоном питания [1].

• Архитектура: RISC
• Напряжение питания VDD: от 2,0В до 5,5В (< 6,5В)
• Потребление:
— <1,0 мА @ 5,5В, 4МГц
— 20 мкА (тип) @ 32 кГц, 2,0В
— <1,0 мкА (тип) в режиме [email protected],0В
• Рассеиваемая мощность: 0,8Вт
• Многофункциональные каналы ввода/вывода: 6/5
• Максимальный выходной ток портов GPIO: 125мА
• Ток через программируемые внутренние подтягивающие резисторы портов: ≥50 (250) ≤400 мкА @ 5,0В
• Разрядность контроллера: 8
• Тактовая частота от внешнего генератора: 20 МГц
Длительность машинного цикла: 200 нс
• Тактовая частота от внутреннего RC генератора: 4 МГц ±1%
Длительность машинного цикла: 1мкс
• FLASH память программ: 1К
Число циклов стирание/запись: ≥1000
• ОЗУ память данных: 64
• EEPROM память данных: 128
Число циклов стирание/запись: ≥10K (-40оС ≤TA≤ +125 оС)
• Аппаратные регистры специального назначения: 16
• Список команд: 35 инструкций, все команды выполняются за один машинный цикл,
кроме команд перехода, выполняемых за 2 цикла
• Аппаратный стек: 8 уровней
• Таймер/счетчик ТМR0: 8-разрядный с предделителем
• Таймер/счетчик ТМR1: 16-разрядный с предделителем

Дополнительные особенности:
• Сброс по включению питания (POR)
• Таймер сброса (PWRTтаймер ожидания запуска генератора (OST
• Сброс по снижению напряжения питания (BOD)
• Сторожевой таймер WDT
• Мультиплексируемый вывод -MCLR
• Система прерываний по изменению уровня сигнала на входах
• Индивидуально программируемые для каждого входа подтягивающие резисторы
• Программируемая защита входа
• Режим пониженного энергопотребления SLEEP
• Выбор режима работы тактового генератора
• Внутрисхемное программирование ICSP с использованием двух выводов
• Четыре пользовательские ID ячейки

Предельная рабочая температура для Е исполнения (расширенный диапазон) от -40оС до +125 оС;
Температура хранения от -65оС до +150 оС.

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

Интегрированная среда разработки MPLAB IDE

MPLAB IDE — бесплатная интегрированная среда разработки ПО для микроконтроллеров PIC включает средства для создания, редактирования, отладки, трансляции и компоновки программ, записи машинного кода в микроконтроллеры через программаторы.

Загрузка MPLAB IDE

Бесплатные версии MPLAB (включая MPLAB 8.92) хранятся на сайте компании Microchip в разделе «DOWNLOAD ARCHIVE».

Создание проекта

Пример создания проекта программ PIC контроллера в среде MPLAB включает следующие шаги [2].

1. Вызов менеджера проекта.


2. Выбор типа PIC микроконтроллера.
3. Выбор компилятора, например, Microchip MPASM для ассемблера.
4. Выбор пути к каталогу проекта (клавиша Browse…) и ввод имени проекта.

5. Подключение файлов к проекту в окне Project Wizard → Step Four можно не выполнять. Это можно сделать позднее, внутри активного проекта. Клавиша Next открывает следующее окно.

6. Завершение создания проекта (клавиша Finish).

В результате создания проекта FirstPrMPLAB интерфейс MPLAB принимает вид, показанный на Рис. 1.


Рис. 1. Интерфейс среды MPLAB v8.92 и шаблон проекта.

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

Создание программы в MPLAB можно выполнить в следующей последовательности.

1. Открыть редактор программ: меню → File → New. Изначально программе присвоено имя Untitled.

2. Набрать или скопировать программу, например, на ассемблере.

3. Сохранить программу под другим именем (меню → File → Save As), например, FirstPrMPLAB.asm.


Рис. 2. Пример простейшей программы (на ассемблере) вывода сигналов через порты контроллера GP0, GP1, GP2, GP4, GP5 на максимальной частоте.

Запись ‘1’ в разряде регистра TRISIO переводит соответствующий выходной буфер в 3-е состояние, в этом случае порт GP может работать только на вход. Установка нуля в TRISIO настраивает работу порта GP на выход.

Примечание. По спецификации PIC12F629 порт GP3 микроконтроллера работает только на вход (соответствующий бит регистра TRISIO не сбрасывается – всегда находится в ‘1’).

Регистры TRISIO и GPIO находятся в разных банках области памяти. Переключение банков выполняется 5-м битом регистра STATUS.

Любая программа на ассемблере начинается директивой org и заканчивается директивой end. Переход goto Metka обеспечивает циклическое выполнение программы.

В программе (Рис. 2) используются следующие обозначения.

Директива LIST — назначение типа контроллера
Директива __CONFIG — установка значений битов конфигурации контроллера
Директива equ — присвоение числового значения
Директива org 0 — начало выполнения программы с адреса 0
Команда bsf — устанавливает бит указанного регистра в 1
Команда bсf — сбрасывает бит указанного регистра в 0
Команда movlw — записывает константу в регистр W
Команда movwf — копирует содержимое регистра W в указанный регистр
Команда goto — обеспечивает переход без условия на строку с меткой
Директива end — конец программы

Установка требуемой конфигурации микроконтроллера
Конфигурация микроконтроллера PIC12F629 зависит от настроек слова конфигурации (2007h), которые можно задать в программе через директиву __CONFIG.

Непосредственно или через окно MPLAB: меню → Configure → Configuration Bits:

Где:

Бит 2-0 — FOSC2:FOSC0. Выбор тактового генератора
111 — Внешний RC генератор. Подключается к выводу GP5. GP4 работает как CLKOUT
110 — Внешний RC генератор. Подключается к выводу GP5. GP4 работает как ввод/вывод
101 — Внутренний RC генератор 4МГц. GP5 работает как ввод/вывод. GP4 — как CLKOUT
100 — Внутренний RC генератор 4МГц. GP5 и GP4 работают как ввод/вывод
011 — EC генератор. GP4 работает как ввод/вывод. GP5 — как CLKIN
010 — HC генератор. Резонатор подключается к GP4 и GP5
001 — XT генератор. Резонатор подключается к GP4 и GP5
000 — LP генератор. Резонатор подключается к GP4 и GP5

Бит 3 — WDTE: настройка сторожевого таймера (Watchdog Timer)
1 — WDTE включен
0 — WDTE выключен

Сторожевой таймер предохраняет микроконтроллер от зависания – перезапускает программу через определенный интервал времени если таймер не был сброшен. Период таймера устанавливается в регистре OPTION_REG. Обнуление сторожевого таймера вызывается командой CLRWDT.

Бит 4 — PWRTE: Разрешение работы таймера включения питания:
1 — PWRT выключен
0 — PWRT включен

Таймер задерживает микроконтроллер в состоянии сброса при подаче питания VDD.

Бит 5 — MCLR: Выбор режима работы вывода GP3/-MCLR
1 — работает как -MCLR
0 — работает как порт ввода-вывода GP3

Бит 6 — BODEN: Разрешение сброса по снижению напряжения питания (как правило < 2.0В)
1 — разрешен сброс BOR
0 — запрещен сброс BOR автоматически включается таймер

При разрешении сброса BOR автоматически включается таймер PWRT

Бит 7 — .CP: Бит защиты памяти программ от чтения программатором
1 Защита выключена
0 Защита включена

При выключения защиты вся память программ стирается

Бит 8 — .CPD: Бит защиты EPROM памяти данных
1 Защита выключена
0 Защита включена

После выключения защиты вся информация будет стерта

Бит 11-9 — Не используются: Читается как ‘1’.

Бит 13-12 — BG1:BG0. Биты калибровки сброса по снижению питания
00 — нижний предел калибровки
11 — верхний предел калибровки


Добавление программы к проекту

Пример добавления программы к проекту показан на (Рис. 3).


Рис. 3. Добавление программы FirstPrMPLAB.asm к проекту FirstPrMPLAB.mcp

Сохранить материалы проекта можно командой: меню → File → Save Workspace.

Компиляция


Чтобы создать бинарный файл с расширением hex для прошивки микроконтроллера необходимо откомпилировать проект. Запуск компиляции выполняется командой меню → Project → Build All. Результаты компиляции можно увидеть в окне Output (Рис. 1). Если в программе нет ошибок, то компилятор выдаёт сообщение об успешной компиляции: BUILD SUCCEEDED, загрузочный HEX файл можно найти в рабочем каталоге:

Отладка программы


Отладку программы в среде MPLAB IDE можно выполнить при помощи аппаратного эмулятора MPLAB REAL ICE или программного симулятора MPLAB SIM. Запуск последнего выполняется как показано на Рис. 4.
Рис. 4. Подключение к симулятору MPLAB SIM для отладки программы.

После запуска отладчика в окне Output (Рис. 1) появляется закладка MPLAB SIM, куда MPLAB выводит текущую информацию отладчика. Команды отладчика (Рис. 5) после запуска становятся активными.


Рис. 5. Команды отладчика.

Команды отладчика:

• Run — Непрерывное выполнение программы до точки останова (Breakpoint) если таковая установлена.
• Halt — Остановка программы на текущем шаге выполнения.
• Animate — Анимация непрерывного выполнения программы.
• Step Into — Выполнение по шагам (вызовы Call выполняются за один шаг).
• Step Over — Выполнение по шагам включая команды вызовов Call.
• Reset — Начальная установка программы. Переход указателя на первую команду.
• Breakpoints — Отображение списка точек останова. Обработка списка.

При выполнении программы по шагам текущий шаг выделяется стрелкой (Рис. 6). Непрерывное выполнение программы останавливается командой Halt или достижением программой точки останова. Точка останова устанавливается/снимается в строке программы двойным щелчком.
Пример программы на ассемблере, которая с максимальной скоростью меняет состояние портов контроллера показан на Рис. 6 (справа). Программа передаёт в регистр портов GPIO данные b’10101010’ и b’01010101’. Поскольку в регистре GPIO передачу данных в порты контроллера выполняют не все разряды, а только 0,1,2,4 и 5, то состояние регистра GPIO (Рис. 6, слева) отличается значениями: b’00100010’ и b’00010101’.


Рис. 6. Состояние регистров специального назначения контроллера на момент выполнения программы (слева) и выполняемая по шагам программа (справа).

В процессе отладки можно наблюдать за состоянием регистров, переменных, памяти в соответствующих окнах, открываемых в разделе View основного меню. В процессе отладки можно вносить изменения в код программы, содержимое регистров, памяти, изменять значения переменных. После изменения кода необходимо перекомпилировать программу. Изменение содержимого регистров, памяти и значения переменных (окна раздела View: Special Function Register, File Register, EEPROM, Watch) не требует перекомпиляции.

Входные сигналы портов модели микроконтоллера можно задать в разделе Debugger → Stimulus. Устанавливаемые состояния сигналов портов привязываются к времени (тактам) отладки.

Иногда результаты выполнения программы в режиме отладки не соответствуют выполнению этой же программы в реальном контроллере, так, например, отладчик программы (Рис. 6) без инструкций movlw 0x07 и movwf cmcon показывает, что выходы GP0 и GP1 регистра GPIO не изменяются — находятся в нулевом состоянии, содержимое регистра GPIO попеременно равно 0x14 и 0х20. Однако, контроллер, выполняющий программу без указанных инструкций, показывает на осциллографе циклическую работу всех пяти выходов: 0x15 и 0х22, включая GP0 и GP1 (см. Рис. 7).

Осциллограммы контроллера, выполняющего циклы программы Рис. 6 (Metka… goto Metka) показаны на Рис. 7.


Рис. 7. Осциллограммы выхода GP0 (слева) и GP1 (справа) микроконтроллера PIC12F629, работающего от внутреннего 4МГц RC генератора. Программа (Рис. 6) формирует сигналы максимальной частоты на всех выходах контроллера. За период сигналов 5.3 мкс выполняется 5 команд (6 машинных циклов), амплитуда GP0 сигнала на осциллограмме равна 4.6В, измеренное программатором питание контроллера 4.75В.

Прошивка микроконтроллера


Для записи программы в микроконтроллер (прошивки контроллера) необходимо микроконтроллер подключить к интегрированной среде MPLAB IDE через программатор. Организация подключения показана ниже в разделе «Подключение программатора PIC-KIT3».

Примечание. В контроллер PIC12F629 записана заводская калибровочная константа настройки частоты внутреннего тактового генератора. При необходимости её можно прочитать и восстановить средствами MPLAB с использованием программатора.

Команды для работы с программатором и изменения его настроек находятся в меню MPLAB Programmer. Тип программатора в MPLAB выбирается в разделе: меню → Programmer → Select Programmer.


Рис. 8. Выбор программатора для подключения к среде MPLAB.

Прошивка микроконтроллера через программатор запускается командой: меню → Programmer → Program. Сообщение об успешной прошивке показано на Рис. 9.


Рис. 9. Запуск прошивки микроконтроллера и вид сообщения об успешной прошивке.

Примечание: Во время прошивки микроконтроллера у программатора PIC-KIT3 мигает желтый светодиод.

Подключение MATLAB/SIMULINK к MPLAB


В системе моделирования динамических систем Simulink (приложение к Matlab) на языке графического программирования [7] можно разрабатывать программы для семейства PIC контроллеров имеющих АЦП/ЦАП, счетчики, таймеры, ШИМ, DMA, интерфейсы UART, SPI, CAN, I2C и др.

Пример Simulink программы PIC контроллера показан на Рис. 10.


Рис. 10. Пример программы на языке графического программирования для PIC контроллера выполненной в среде моделирования динамических систем Simulink.

Взаимодействие средств разработки и компиляции программ для PIC контроллеров в Simulink показано на Рис. 11 [6].


Рис. 11. Структура средств построения адекватной модели PIC контроллера на языке графического программирования.

Для построения среды разработки необходимы следующие компоненты Matlab:

• Simulink
• Real-Time Workshop Embedded Coder
• Real-Time Workshop

И Cи компилятор компании Microchip:

• C30 для контроллеров PIC24, dsPIC30 и PIC33
• или C32 для контроллеров серии PIC32

Установка компонентов Matlab


На сайте имеются Simulink библиотеки (dsPIC Toolbox) для PIC контроллеров и версий Matlab c R2006a по R2012a:

Для скачивания библиотеки необходимо зарегистрироваться. Программы поддерживают работу 100 микроконтроллеров из серий PIC 16MC, 24F, 30F, 32MC, 33F, 56GP, 64MC, 128MC, 128GP.
Бесплатные версии работают с Simulink моделями PIC контроллеров имеющих до 7 портов ввода-вывода.

Для установки dsPIC Toolbox — библиотеки блоков PIC контроллеров для Matlab/Simulink необходимо [4]:

• Скачать dsPIC Toolbox для требуемой версии Matlab.
• Распаковать zip файл в папке, в которой будут установлены Simulink блоки.
• Запустить Matlab.
• Настроить текущий каталог Matlab на папку с распакованным файлом.
• Открыть и запустить файл install_dsPIC_R2012a.m, например, кнопкой меню или клавишей клавиатуры.

Библиотеки dsPIC и примеры Simulink моделей устанавливаются в текущую папку Matlab (Рис. 12). Установленные блоки для моделирования PIC контроллеров доступны в разделе Embedded Target for Microchip dsPIC библиотеки Simulink (Рис. 13).


Рис. 12. Содержимое текущего каталога после выполнения install_dsPIC_R2012a.m.
Рис. 13. Блоки, установленной библиотеки «Embedded Target for Microchip dsPIC».

Для совместной компиляции Simulink модели средствами Matlab и MPLAB необходимо прописать в переменной окружения path Matlab с высшим приоритетом путь к каталогу MPLAB с файлами MplabOpenModel.m, MplabGetBuildinfo.m и getHardwareConfigs.m:

>> path('c:\Program Files (x86)\Microchip\MPLAB IDE\Tools\MATLAB\',path) 

Установка Си компилятора MPLAB


Компиляторы MPLAB находятся на сайте Microchip (Download Archive → MPLAB C Compiler for PIC24 and dsPIC DSCs). Для установки демонстрационной версии компилятора С30 необходимо его скачать по ссылке PIC24/dsPIC v3.25 (Рис. 14) и запустить принятый файл mplabc30-v3.25-comboUpgrade.exe.
Рис. 14. Версии Си компилятора (слева) и режимы его установки (справа).

Примечание. Работа выполнена с версией v3.25 компилятора С30 для PIC24/dsPIC. Проверка показала, что следующая версия v3.30 не поддерживает совместную компиляцию моделей Matlab R2012a (dsPIC Toolbox) без ошибок.

Установочный exe файл создаёт в разделе c:\Program Files (x86)\Microchip\ новый каталог mplabc30 с файлами:


Рис. 15. Каталоги компилятора C30 MPLAB.

Последовательность Simulink программирования для PIC контроллеров

1. Создайте рабочий каталог и скопируйте в него *.mdl примеры из раздела example (см. Рис. 12).
2. Загрузите Matlab. Настройте его на рабочий каталог.
3. Включите в переменную окружения path Matlab с высшим приоритетом путь к MPLAB — каталогу c:\Program Files (x86)\Microchip\MPLAB IDE\Tools\MATLAB\:

>> path('c:\Program Files (x86)\Microchip\MPLAB IDE\Tools\MATLAB\',path) 

Примечание: Использование команды >>path без аргументов приводит к отображению списка путей переменной path в окне команд (Command Window). Удалить путь из переменной path можно командой rmpath, например:
>>rmpath(' c:\Program Files\Microchip\MPLAB IDE\Tools\MATLAB\')

4. Создайте Simulink модель для PIC контроллера, используя блоки библиотеки «Embedded Target for Microchip dsPIC» (Рис. 13), или загрузите готовую модель, например, Servo_ADC.mdl.

Тип контроллера, для которого разрабатывается Simulink модель, выбирается из списка в блоке Master > PIC (Рис. 16, Рис. 10), который должен быть включен в состав модели.


Рис. 16. Выбор типа контроллера в блоке Master модели.

5. Проверьте настройки конфигурации модели: Меню → Simulation → Configuration Parameters <Ctrl+E>. В строке ввода System target file раздела Code Generation должен быть указан компилятор S-функций dspic.tlc (Рис. 17). Выбор dspic.tlc настраивает все остальные параметры конфигурации модели, включая шаг и метод интегрирования.


Рис. 17. Выбор компилятора S-функций dspic.tlc для моделей PIC-контроллеров в разделе «основное меню → Simulation → Configuration Parameters → Code Generation».

6. Откомпилируйте модель tmp_Servo_ADC.mdl. Запуск компилятора показан на Рис. 18.


Рис. 18. Запуск компилятора Simulink модели.

В результате успешной компиляции (сообщение: ### Successful completion of build procedure for model: Servo_ADC) в текущем каталоге создаются HEX файл для прошивки PIC контроллера и MCP проект среды MPLAB (Рис. 19).


Рис. 19. Результаты компиляции модели.

Запуск модели в Matlab/Simulink выполняется в окне модели кнопкой, условное время моделирования устанавливается в строке:


Управление компиляцией Simulink моделей из среды MPLAB

Управление компиляцией Simulink модели можно выполнять командами раздела Matlab/Simulink среды MPLAB, например, в следующем порядке.

1. Разработайте модель PIC контроллера в Matlab/Simulink. Сохраните модель.
2. Запустите MPLAB.
3. Выберите MPLAB меню → Tools → Matlab/Simulink и новый раздел появится в составе меню.


4. В разделе Matlab/Simulink откройте Simulink модель, например, Servo_ADC, командой «Matlab/Simulink → Specify Simulink Model Name → Open → File name → Servo_ADC.mdl → Open». Команда Open запускает Matlab и открывает модель.

5. Откомпилируйте модель и создайте MCP проект командами Generate Codes или Generate Codes and Import Files. Перевод MDL модели в MCP проект выполняется TLC компилятором Matlab.
В результате создаётся проект MPLAB:

со скриптами модели на языке Си.

6. Откройте проект: меню → Project → Open → Servo_ADC.mcp (Рис. 20).


Рис. 20. Структура MCP проекта Simulink модели Servo_ADC.mdl в среде MPLAB.
Проект Simulink модели готов для редактирования, отладки и компиляции в машинные коды контроллера средствами MPLAB.

Подключение программатора PIC-KIT3


Узнать какие программаторы записывают бинарный код в конкретный микроконтроллер можно в разделе меню → Configure → Select Device среды MPLAB 8.92. Например, программатор PIC-KIT3 не поддерживает контроллер PIC12C508A (Рис. 21, левый рисунок), но работает с контроллером PIC12F629 (Рис. 21, правый рисунок).
Рис. 21. Перечень программаторов для прошивки микроконтроллера.

Информацию об установленном драйвере программатора PIC-KIT3 можно запросить у менеджера устройств ОС Windows (Рис. 22).


Рис. 22. Информация об установленном драйвере программатора PIC-KIT3.

Схема подключения микроконтроллера PIC12F629 к программатору PIC-KIT3 показана на Рис. 23.


Рис. 23. Схема подключения микроконтроллера PIC12F629 к программатору PIC-KIT3.

Вывод PGM программатора для прошивки контроллеров PIC12F629 не используется. Наличие вывода PGM для разных типов PIC контроллеров показано на Рис. 24. Вывод PGM рекомендуется «притягивать» к общему проводу (GND), через резистор, номиналом 1К [3].


Рис. 24. Выводы PGM PIC контроллеров.

Индикация светодиодов программатора Olimex PIC-KIT3 показана в ниже:

Желтый — Красный — Состояние программатора
Вкл — Выкл — Подключен к USB линии
Вкл — Вкл — Взаимодействие с MPLAB
Мигает — Включен постоянно — Прошивка микроконтроллера

Не следует подключать питание микроконтроллера VDD (Рис. 23) к программатору, если контроллер запитывается от своего источника питания.

При питании микроконтроллера от программатора на линии VDD необходимо установить рабочее напряжение, например, 5В программой MPLAB (Menu → Programmer → Settings → Power), как показано на Рис. 25.

Примечание. При отсутствии напряжения на линии VDD MPLAB IDE выдает сообщение об ошибке: PK3Err0045: You must connect to a target device to use


Рис. 25. Установка напряжения VDD на программаторе PIC-KIT3 программой MPLAB IDE v8.92.

Если программатор не может установить требуемое напряжение, например, 5В при его питании от USB, в которой напряжение меньше 5В, MPLAB IDE выдает сообщение об ошибке: PK3Err0035: Failed to get Device ID. В этом случае, сначала необходимо измерить напряжение программатора — считать его в закладке меню → Programmer → Settings → Status, а затем установить напряжение (не больше измеренного) в закладке меню → Programmer → Settings → Power.


Рис. 26. Измерение (слева) и установка (справа) VDD напряжения программатора PIC-KIT3 программой MPLAB IDE v8.92.

Пример MPLAB сообщения успешного подключения микроконтроллера к программатору по команде меню → Programmer → Reconnect показан на Рис. 27.


Рис. 27. Сообщение MPLAB об успешном подключении микроконтроллера к программатору.

Можно программировать не только отдельный PIC контроллер, но и контроллер, находящийся в составе рабочего устройства. Для программирования PIC контроллера в составе устройства необходимо предусмотреть установку перемычек и токоограничивающих резисторов как показано на Рис. 28 [3].


Рис. 28. Подключение микроконтроллера в составе электронного устройства к программатору.

Заключение


Малоразрядные PIC-контроллеры имеют широкий диапазон питания, низкое потребление и малые габариты. Они программируются на языках низкого уровня. Разработка программ на языке графического программирования Simulink с использованием многочисленных библиотек значительно сокращает время разработки и отладки в сравнении с программированием на уровне ассемблера. Разработанные для PIC-контроллеров Simulink структуры можно использовать и для компьютерного моделирования динамических систем с участием контроллеров. Однако, из-за избыточности кода такой подход применим только для семейств PIC контроллеров с достаточными ресурсами.
С чего начать в программировании микроконтроллеров? — Хабр Q&A
Привет. Все верно комментаторы говорят — начинать с Ардуино вполне резонно. И не слушайте тех, кто говорит, что Ардуино гуано потому что [и тут разные расплывчатые аргументы]. Ардуинщики в большинстве вырастают в говнокодеров не потому, что Ардуино плоха, а потому что даже не пытаются развиваться дальше. Типичная проблема низкого порога входа(как у 1С, например). То есть проблема в самих человеках, а не в Ардуине.
У вас же, судя по тексту вопроса, мотивация развиваться есть )

Для Ардуины действительно существует куча шилдов и примеров кода на своем упрощенном языке(хотя это по-прежнему C++), что для старта очень даже неплохо — при наличии желания можно разобраться в том, как все устроено еще до того, как возьмете в руки паяльник.
И никто не мешает вам, при достижении определенного уровня, перейти на программирование контроллеров с помощью других компиляторов, исключая Arduino IDE и lazy coding. При этом на первых порах по-прежнему можно использовать Arduino-загрузчик и не париться со всеми проблемами сразу.

Сразу же рекомендую кроме Ардуино купить на будущее что-нибудь типа STM32 Nucleo. У этой платы есть совместимость с Arduino-шилдами, mbed-загрузчик(заливка прошивки происходит простым копированием на виртуальную USB-флешку), а так же полноценный STLink-программатор с пинами для программирования внешних контроллеров — это значит, что в последствии вы можете собрать собственный девайс на STM32 микроконтроллере и с помощью встроенного в Nucleo SLink-программатора его запрограммировать, просто подсоединив пару проводков(SWD).

И впоследствии, если не растеряете желание расти, вполне сможете создавать уже свою электронику и при этом, к примеру если остановитесь на STM32 контроллерах, все еще использовать STLink от Nucleo для программирования своих девайсов.
Выглядеть это будет приблизительно так: 5.101.107.156/Habr/IMG_1235.JPG
Здесь две Nucleo-платы слева используются как STLink-программаторы для двух плат справа соответственно )

Ну а дальше все зависит только от вас.
Удачи )

90000 karlhorky / learn-to-program: Educational resources to learn to program (Foundation in Web Development) 90001 Skip to content Sign up 90002 90003 Why GitHub? Features → 90002 90003 Code review 90006 90003 Project management 90006 90003 Integrations 90006 90003 Actions 90006 90003 Packages 90006 90003 Security 90006 90003 Team management 90006 90003 Hosting 90006 90021 90002 90003 Customer stories → 90006 90003 Security → 90006 90021 90006 90003 Team 90006 90003 Enterprise 90006 90003 Explore 90002 90003 Explore GitHub → 90006 90021 90038 Learn & contribute 90039 90002 90003 Topics 90006 90003 Collections 90006 90003 Trending 90006 90003 Learning Lab 90006 90003 Open source guides 90006 90021 90038 Connect with others 90039 90002 90003 Events 90006 90003 Community forum 90006 90003 GitHub Education 90006 90021 90006 90021.90000 7 Critical Tips to Learn Programming Faster 90001 90002 Whether you’re currently pursuing a degree in computer science, a veteran using the GI Bill to choose their next mission, an aspiring self-taught developer, or a coding boot camp student, mastering the craft of programming is a perpetual struggle. To assist in your learning — courtesy of the Coding Dojo instructors — 90003 here are seven tips on how to learn programming faster. 90004 90005 90006 1. Learn by doing. Always play with the code while learning 90007 90008 90009 90005 90002 90003 With every new subject, the sooner you start playing with the code, the faster you will learn the given concepts.90004 Even if you blaze through an entire chapter of reading and a topic like for loops seems straightforward — so a monkey could do it — you’ll still be scratching your head when tasked to implement the code for the first time. You’ll think, «wait, what was that one piece of syntax again?» As the saying goes, you need to «use it or lose it», because despite the evolution of technology, this ole ‘proverb holds true when learning to code. 90005 90002 90016 Hint: Build a project as you go through the material.A personal project is often the best starting point. 90017 90005 90008 90005 90021 90006 2. Grasp the fundamentals for long-term benefits 90007 90008 90025 90005 90008 As elementary as they may appear at first, 90003 programming fundamentals always need to come first: the better you understand them, the easier it is to learn more advanced concepts 90004. From our experience at Coding Dojo, students who rush through the beginning of our courses — where we focus most on web development fundamentals — are often the first to get stuck as we transition into more advanced material, such as back-end programming.So before you ditch the first class of computer science 101, or skip chapter one of an online tutorial, keep in mind that you are overlooking the most important step in your learning. 90005 90008 90016 Hint: Read this great article about the 5 Basic Concepts of Any Programming Language 90017 90005 90008 90005 90006 3. Code by hand. It sharpens proficiency and you’ll need it to get a job 90007 90008 90040 90005 90008 Computer monitors become thinner, hard drives lighter, and programming languages ​​more powerful, but coding-by-hand still remains one of the most effective methods to learn how to program.Be it on a whiteboard or notebook, coding-by-hand requires further caution, precision, and intent behind every line of code. Because unlike on a computer, you can not run hand-written code midway through the sheet to check if the work is correct. Although more time consuming, this restriction will mold you into a more fundamentally sound developer, both in the classroom and the job market. 90003 For college exams and technical interviews — a critical component of the job interview process — you will have to code-by-hand, because not only is this good for learning, but it’s universally known to be the ultimate test for a programmer’s proficiency.90004 So start early and get used to this old-school practice. 90005 90008 90005 90048 4. Ask for help. You’ll need it 90007 90008 90051 90005 90008 As awesome as it would be to become the next Steve Jobs on your own, the reality is that people learn faster with mentors and peer feedback. 90003 What may seem like an immovable bug or topic could be quickly alleviated by a fresh pair of eyes or a new interpretation of the subject. 90004 Whether it’s online or in-person, ignore the trolls and do not be afraid to ask for help, because every programmer has been in your shoes before.Besides, most developers love to code, and if there’s one thing that passionate individuals enjoy, it’s to share their knowledge with others. 90005 90008 Word of Warning: At Coding Dojo we suggest using the 20 minute rule. Take at least 20 minutes to figure something out on your own before asking for help. There’s a good chance that the answer is already in front of you, and besides, struggling makes you a better programmer overall. 90005 90008 90016 Hint: Stackoverlfow and learn programming are gold mines for online programming assistance.90017 90005 90008 90005 90048 5. Seek out more online resources. There’s a wealth of content 90007 90008 90068 90005 90008 If a particular concept does not make sense, be it on in a textbook, or during class lecture, maintain your confidence and look for alternate online resources to learn the same content. Everyone learns differently, and just because one source does not make sense, does not mean there’s something wrong with you. It means that you’re not clicking with the delivery of the material.The online resources to learn computer programming are endless, and 90003 there’s always tutorial, or blog explanation that will make the material-at-hand crystal clear. 90004 90005 90008 90016 Hint: Do not underestimate the power of search. 90017 90005 90008 90005 90048 6. Do not just read the sample code. Tinker with it! 90007 90008 90083 90005 90008 Reading sample code is not enough to understand how it works. To develop a true understanding, you need to actually run the code and tinker with it.With the additions of comments and instructions, sample code is packaged to be by the reader; but in reality 90003, 90004 it’s pretty difficult to replicate from scratch. 90003 Reading is not the same as understanding, and actually trying to write the code yourself, or at least running it, will facilitate the learning process much more. 90004 90005 90008 90005 90048 7. Take breaks when debugging 90007 90008 90096 90005 90008 When debugging, it’s easy to go down the rabbit hole for hours, and there’s no guarantee that you will fix the problem.To avoid this, it’s best to step away from the for a few hours, and return with a fresh perspective. Not only is this a guaranteed way to help solve the problem, but you’ll also save yourself hours of headache. So if help is not available — to touch on our previous tip about seeking advice — consider taking a break to clear your mind and return later. In the meantime, 90003 the bug will not be going anywhere, and you’ll at least restore some needed sanity to improve productivity. 90004 90005 90008 90005 90048 Conclusion: Keep Calm and Keep On Coding 90007 90008 90003 Despite these 7 tips, the most important ingredient to learn programming faster is to remain confident.90004 To do so, you should expect to fail repeatedly and be patient with your progress; because becoming an expert at anything requires hard work and time. And if a single doubt ever clouds your mind, remember that every programmer this path before — none of them more destined to become a developer than you. Whichever path you are currently on, be it college or coding boot camp, the only barrier to success is your work ethic and confidence to persevere. 90005 90008 Feel like being a developer is something you need to do and wondering «Are coding bootcamps worth it?» Look no further than Coding Dojo.We are the only bootcamp to train you in the 3 stacks used by the world’s best companies in 14 weeks. Just Apply Now (it only takes 2 minutes) — an Admissions Counselor will follow-up to see if Coding Dojo is right for you. 90005 .90000 How to Learn Programming and Launch Your App in 3 Months-with No Programming Experience 90001 90002 90003 90004 90002 If you’ve ever tried to start a software company or build a mobile app, you’ve probably come across these options for getting it out there: 90004 90007 90008 Find a technical cofounder. 90009 90008 Hire a freelancer to build your app. 90009 90008 Learn programming and build it yourself. 90009 90014 90002 When it comes to finding a cofounder, if you do not already know someone with technical abilities, it’s going to be a very long, difficult process to find someone to work with you-if you can successfully do it at all.90004 90002 You need someone who is very technically capable, has time to work on the project, and has a passion for what you’re doing. The type of person you’ll need to partner with is in extremely high demand, so even if you do find someone, it’s going to be difficult to convince them to join your team. 90004 90002 If you have the money, hiring a freelancer can work. However, hiring someone to build the app of your dreams is extremely hard, and will likely take longer than you expect. 90004 90002 During the process of working with a freelancer, you may find they do not build things quite the way you expected-the design will be off, things will not work as fast as you’d like, or there will be small interface elements you did not think would be included.Additionally, you’ll have new ideas for your app that you’ll want to add before or after release, and the app will require bug fixes and maintenance post-launch, which will cost extra money. Because of this, you will be paying your freelancers more than you were quoted simply to finish the project. 90004 90002 90024 90004 90026 My experience with cofounders and freelancers 90027 90002 Three years ago, when I was a 20-year-old business student, I set out to build a music streaming service that was good for both musicians and music fans.90004 90002 For the first year of my startup, I searched for a technical cofounder. I’ve gone through at least three technical cofounders, each of whom I got along with really well, but who either lacked passion or time and commitment to the project. Things moved extremely slowly because we never built something I was confident enough to release. 90004 90002 The next year was spent trying to hire freelancers. The problems here were similar to those that came up during my hunt for a technical cofounder-many freelancers who are affordable also have full-time jobs and little time to commit to a project.In my case, it took six months to get my iOS app built. 90004 90002 Unfortunately for me, someone broke into the freelancers car and stole his laptop with all of the code on it. Six months of work was gone, and I was out of money. Since I could not seem to find a cofounder and did not have money to hire another freelancer, nor could I wait six more months for the one I hired to fix this, I decided I had to do this on my own. 90004 90026 How long does it 90037 really 90038 take to learn programming? 90027 90002 Whatever you do, please do not Google «How long does it take to learn programming?» like I did.You’ll only be discouraged by people who give answers like, «I’ve been programming for five years and I’m still learning,» or «About two years if you do a lesson a day.» This is one of the main things that set me back from learning programming myself. 90004 90002 I always thought, «Two years !? I can definitely find a good cofounder in that amount of time! » 90004 90002 While it’s true that you’ll be constantly learning new things in programming, it is not going to take you two years to learn enough to build the program or app you’re trying to release.90004 90002 During the process of doing tutorials and making mistakes, I spent about six hours a day on programming (while I’d graduated college by this point, I still had a part-time job). At six hours per day, I built and launched my iOS app in three months. Here’s the result if you want to take a look (luckily, previous musician outreach efforts meant I’d already had some music to work with.) 90004 90002 I’m going to walk you through exactly how I did it. 90004 90026 Tutorials and understanding the basics 90027 90002 Having no previous programming experience, I had no idea how to do anything.I did not even know where to write code, or how to put an app on my iPhone. 90004 90002 Luckily, I came across an awesome website that teaches iOS programming to beginners-Code with Chris. You can do the first few lessons for free to see if it’s right for you. Since I had no money, I convinced my parents to pay for the course, and I found it extremely helpful. 90004 90002 90057 Here are some other resources you can take a look at to learn programming. Some are free, some are paid: 90058 90004 90002 Make sure you pick a course that’s for beginners, not for experienced programmers.These programs will teach you the super basic beginner stuff that can sometimes be difficult to figure out. 90004 90002 If you’re learning iOS programming, I highly recommend Code with Chris. It is not free, but the videos make things really easy to follow, and he did a great job explaining things in a way that makes sense to non-technical people. 90004 90026 What to do during the course 90027 90002 During the course, it’s extremely important that you actually write code. If you’re following along on a series of YouTube videos, do not watch the videos thinking you’ll gather information and take notes, then go back and code.This will not work. It has been proven that people learn much faster by making mistakes. 90004 90002 You need to follow along and write the code yourself. When you do this, you’re going to find that sometimes it does not work, even if the code looks exactly like it does in the tutorial, or that some code you wrote earlier in the tutorial is not working anymore. It’s very important that you make mistakes like this and get through them. 90004 90002 Most people become discouraged when they come across a mistake that they think is not solvable.When you come across programming mistakes, Stack Overflow is your best friend. As a beginner, it’s likely that anything you Google related to programming issues will result in links to this site, with amazing answers that will be extremely helpful to you. Do not be afraid to be specific when you Google the issues you come up against. 90004 90002 Plow through the course as fast as possible. It’s likely you’re going to get near the end and still have little to no idea what you’re doing. That’s okay.By the end of a good tutorial, you’ll have a better understanding of the process you need to go through to build something. 90004 90026 What to do after the course 90027 90002 After a programming course, most people would encourage you to start with small programs. Assuming your programming course had you build some small, workable programs, I would discourage this. Building small programs for the sake of programming is going to make you bored. 90004 90002 Alternatively, I’d encourage you to get started building parts of your idea.What I mean by this is, if your app has multiple features, take each of those features one-by-one, and build them as separate programs. 90004 90002 Your idea is the main reason you started learning programming, and it’s what you’re passionate about-your passion will pull you through the experience much faster than building something just to learn. I did not spend so much time each day programming my app because I had to learn; I did it because I wanted to build it. I was excited about it. 90004 90002 By starting on parts of your idea right after the tutorial, you’ll immediately face very big problems, and this will accelerate the learning process.You’ll also get to see your ideas come together in real life, and you’ll get to play with the thing you’ve dreamed about for so long. It’s amazing, and it’s what keeps you going. 90004 90026 Building your program 90027 90002 Once you’ve built all of the parts of your program, you’ll have learned a lot about the programming requirements that are specific to what you’re trying to put together. Going back through these parts, you’ll see how your code will be improved. This is why, as a beginner, it’s important to build the parts of your program before building the whole thing-you want the final product to be well put together, and as a beginner, it’s likely that your initial code will be messy.90004 90002 After examining the parts of your program, it’s time to put it all together. Get started on your product, and put together the parts you built previously. During this process, you’ll explore ways the code can be improved for performance and readability. 90004 90026 Releasing your program 90027 90002 It’s scary releasing a new product. You think people will hate it, you’ll get bad reviews, and you’ll develop a bad reputation among potential users. 90004 90002 These things are unlikely to happen.When I first released my app, it had some issues, but from learning how people used it, I was able to quickly improve it in ways I would never have thought of on my own. 90004 90002 Release it quickly, and improve on it with updates. After releasing our app, it only took me a few weeks to add our music subscription for business use. By this point, you’ll be experienced enough to make quick iterations to your product. 90004 90002 Learning programming is the best option for any entrepreneur looking to get into the technology space.As mentioned above, hiring a freelancer can be expensive, and finding cofounders is extremely difficult. 90004 90002 Do not make the same mistakes I did; they literally held me back by years. Just get started on learning as soon as possible-your passion will carry you through. 90004 90102 Nicholas Rubright 90103 90002 Nick Rubright is the founder and CEO of Dozmia, a music streaming service that aims to help users find their new favorite song.He has a passion for technology, building the perfect playlist, and helping musicians in their careers. 90004 .90000 How To Learn Programming 90001 90002 This post was originally an answer to this question on Quora: 90003 90004 90005 How can I develop programming skills quickly as a rookie.? 90006 90002 I have never actually programmed before. Like I’m a complete beginner. But I’m good at math and also like doing things that make me think 90003 90009 90002 90011 EDIT: I’ve gotten some great feedback from the Quora community and have even added and changed a couple of things based on that feedback.Thank you all for the support and helping make this answer better. 90012 90003 90002 I’m going to give you some advice based on my own experience of teaching myself to code. This will be long, so here’s a quick outline: 90003 90016 Drop the expectation of «quick» 90017 90002 Learning to program is like learning a new language (spoken by people, I mean). It takes time, especially if you have never programmed before. If you try to learn «quick», you will miss a lot and more than likely end up writing some code that 90019 technically 90020 works, but comes out something like this: 90003 90022 90002 «I honestly did not think you could even USE emoji in variable names.Or that there were so many different crying ones. » 90003 90025 90002 «It’s like you tried to define a formal grammar based on fragments of a raw database dump from the QuickBooks file of a company that’s about to collapse in an accounting scandal.» 90003 90002 In other words, not very good code. Take the time to learn it well in the beginning, and you will find that things are easier down the road. 90003 90030 90016 Learn a statically typed language 90017 90002 Most people will recommend starting with Python or JavaScript, since both are easy to program in.You could do that, but I think both end up teaching you some bad programming habits that will lead to trouble in the future (Especially JavaScript. Ugh). Rather, I would start with Java or C #. Unlike Python and JS, Java and C # are «type safe», or «statically typed «. This means that you write a function (yes, like a math one) that expects an integer as input and then write code that calls that function. If you call the function with an integer as a parameter, it will compile and you will be fine.Mostly. (Integer overflows are fun). Try to call the function with a boolean (true / false), string ( «Anything in quotes, aka words»), or anything that is not an integer, the compiler will report an error. 90003 90002 90011 EDIT: Updated with a correction on static / dynamic typing and strong / weak typing. They are not the same. Static / dynamic typing refers to whether a variable can hold one «type» of variable (static) (i.e. only an int or only a string) or multiple «types» (dynamic — a variable holding an int can later hold a string).Strong / weak typing refers to whether types are enforced (only an int can be used where an int is expected) or coerced (whatever type is provided is converted to the expected type, often with weird results). Thanks to Gustavo Bezerra for catching that. The focus here is on strong and weak typing. 90012 90003 90002 With a language like Perl and JS, which are «loosely / weakly typed», you do not have this compile-time checking. Instead, you could write the same function and pass a boolean value to it somewhere else in the code, only to not realize it until the program randomly breaks.This is because (in JS, anyhow) of type coercion, where the runtime tries to convert the value you have into something you can use. 90003 90002 For example: 90042 false + 1 90043 = 90042 1 90043 while 90042 true + 1 90043 = 90042 2 90043. 90042! «» 90043 (the boolean NOT operator) returns 90042 true 90043, while 90042! «hello» 90043 = 90042 false 90043. To take this further, look at the contents of this text file. No really, look at it. Now paste the contents into your browser’s JavaScript console (F12 usually opens it).You’ll see this: 90003 90002 Type coercion at its finest. Starting with Java or C # will teach you much better habits. 90003 90030 90016 Begin with structured learning material 90017 90002 If you’re like me, you’ll find most structured material (like textbooks) boring, slow, and generally irritating. «Yes, I get how to do this, can we move on? » But you have not learned about programming yet. This is more than learning a particular programming language. Learning to program is independent of any language — that’s just implementation.If you learn how to program well, you can pretty easily pick up another programming language without too much effort. 90003 90002 Think of it like having just finished Algebra 1 and then deciding you want to learn Calculus on your own. You could do that, but you would have to go back and learn a great number of things from Algebra 2 and Pre-Calculus and, well, you would not have as complete of an understanding as you would if you took the classes. 90003 90002 As far as which resources to use, CodeCademy is generally considered the best place to pick up the basics.It has interactive lessons with an in-browser code editor to make things easier. Following my previous advice on which languages ​​to learn, here’s a link to the CodeCademy course on Java. 90003 90002 As for learning C # & mldr; Probably the best place to learn it is from Microsoft themselves. I am not a big fan of Microsoft (I prefer to run open source products like Linux, LibreOffice, Firefox, etc.) so it says something when I link to them. 90003 90002 EDIT 01/2020: You may also find CourseDuck’s compiled lists of courses for Java and C # useful.I have not used their site in the past, but it looks like a good place for comparing learning resources. 90003 90030 90016 Do not be an «IDE programmer» 90017 90002 Here’s the thing you need to remember when learning to program, though: Do not be an «IDE Programmer». I’m not saying not to use IDEs — oh, IDE stands for «Integrated Development Environment», basically a code editor with lots of helpful features like code completion, code analysis, etc. 90003 90002 Anyways, IDEs are incredibly useful.It quickens your workflow and helps you keep from making silly mistakes and not catching them. When you are learning, however, do not rely on all of the IDE’s features. You should be able to write a program in a basic text editor like Notepad almost as easily as you do in an IDE. If you rely on the IDE so much that you can not live without it & mldr ;. You do not really know the language. You know the IDE. 90003 90002 In my CS1 class in high school, we learned Java using the Eclipse IDE. My teacher would always say «In Eclipse, you do this.In Eclipse & mldr ;. » — Java is not Eclipse. A Java programmer should be able to use any IDE or even a text editor to write their programs, if needed. Learn the language, not the IDE. 90003 90030 90002 Comment your code. This is something even professional programmers forget to do. Whether it is explaining what some weird line does and why it had to be written that way or documentation explaining what a particular function does, comments help you and other people understand your code. It is tedious work sometimes and you just want to keep on coding away, but when you return to that block of code two weeks later you might not even understand what it does.Comments help explain this. 90003 90002 Going off of that, it is more than comments that help make your code understandable. Variable names should explain their purpose. Function names should summarize what they do. Example: 90003 90002 What does n represent? It’s an integer, but what is it? The number of something? The number (n) ine? This is more clear: 90003 90002 Okay, so this is something to do with apples. Is it the number of apples we have, or is it the ID number of apples, and 90042 int pears 90043 the ID number for pears? 90003 90002 Okay, this is the number of apples we have.90003 90002 In the same way, we have this: 90003 90002 It’s a function called «i» that takes an integer as a parameter. What does it do, though? I dunno. 90003 90002 I can look at this function wherever it appears in my code and assume that it increments the number that I pass to it. So I pass in a variable that equals 7, it comes out equaling 8. 90003 90002 Smart names help a lot in documenting and understanding your code. 90003 90030 90016 Learn to find, read, and create documentation 90017 90002 I talked a little about documenting your code above.But before I expand on that, I should quickly talk about finding and reading documentation. 90003 90002 If you can find official documentation for the language you are using, that is best. For instance, you can find the documentation for Java 8 here and the documentation for C # here. Other times you can not find official documentation, such as in the case of JavaScript (Ugh). Most people will go to W3Schools, but I found that the best documentation is found at the Mozilla Developer Network. It’s just a matter of looking for it.90003 90002 By learning to read documentation, I do not mean learning how to read it. That’s pretty self-explanatory. Rather, learn to actually look at the documentation rather than assuming you know how something is used, 90019 especially 90020 if it’s some function you have not used before that was suggested by your IDE. 90003 90002 Finally, writing your own documentation. This goes along with commenting your code, but goes further. Writing an «official» documentation can make it so that your IDE recognizes your own code and suggests it to you along with information that you provided, such as the summary of what a function does, what parameters it takes and what they represent, and what it returns, if anything.Again following my previous suggestions, you can find how to write documentation for Java here and C # here. 90003 90030 90016 Understand how to use Google in a more advanced way 90017 90002 90011 Added this section on a suggestion from Michał, Brix 90012 90003 90002 Sometimes you are going to have an idea of ​​something you want to do but not know how to write it in code. I do not mean «write a game», but something like «Adding 1 to every number in an array». At first I left this out because it is my personal opinion that Google can become a crutch if used too much.I’ll get to that later, though. 90003 90002 First of all, knowing the specific terms for something is always helpful. «Add 1 to all numbers in an array «will give you better results than» Add 1 to all numbers in a collection of numbers «. In the same way, «Add 1 to all integers in an array «is even more specific (though it works the same for an array of doubles, floats, and other number types: p). 90003 90002 Second, knowing how to use the advanced features of your search engine is helpful. You can usually find these features by searching «{My search engine} advanced search «.Some search engines also have a little link that says «Advanced» that you can click to view a form that allows you to do an advanced search without knowing all of the keywords and symbols. Here’s Google’s. I use DuckDuckGo, so here’s a guide to advanced Ducking as well. 90003 90002 As far as personal tips, aside from using specific terms, the best thing I have found is finding those sites that usually have good information and specifying those sites in the search, such as «Add 1 to all integers in an array stackoverflow «- StackOverflow being a question and answer site that many coders use to ask questions and find answers to questions that have already been asked.90003 90002 An advanced version of that: if I wanted only results from Quora and Stack Overflow, I could search «add 1 to all integers in an array site: quora.com OR site: stackoverflow.com «. The «site:» is used to specify which website to use for results (or a domain — «site: .edu» returns all .edu results) and that uppercase «OR» says to use one or the other. It is necessary, otherwise it will return «Your search did not match any documents». These are some of the cool things you can do with advanced search.90003 90002 Be wary that you do not come to depend on Stack Overflow and other sites for giving you code that works. Understand what the code does in the context of the original question first and 90019 then 90020 use it for your own project. Copying and pasting code you do not understand is never a good idea. 90003 90030 90016 Make a project! 90017 90002 The last bit of advice you’ll need is to give yourself a project to work on to practice what you have learned. A good tutorial / course will give you multiple small projects to build or even a large one, but honestly those are not always interesting.Do them while you are still picking up the basics. Trust me, it’s a smart thing to do — even if they are boring. But when you have completed the course and have a solid understanding of how the basics work, come up with a project to build that encompasses a little of everything you learned (and maybe a little more) and make it. 90003 90002 There’s more to coding than just writing code, though. When you’re building a project, you need to know what you plan to make, what it should do, how the user interacts with it, basically everything.Coding is just implementing this plan. Then, when you start, start small. One basic feature. Test it. Add something. Test it. And so on. Do not write everything in one go. Especially on something large enough to call it a «project». There’s a good chance you will come up against so many errors that you’ll just want to be done. 90003 90002 Do not quit, though. It’s hard and it sucks. Trust me, I’ve made a couple projects of my own. I’m currently working on writing a basic RPG engine in C ++ and I’m still trying to figure out why things are not working.Stick to it though and the feeling at the end of finally fixing it is so worth it. 90003 90002 This is why I suggest making your own project, though. By choosing on your own what you will make, you have a greater interest in seeing it through than being told «Go make a Blackjack game». Unless you like Blackjack. 90003 90002 With this project, you’ll find that the other things I told you above come into play: static typing will catch a good number of mistakes during compilation. The tutorials you went through should have given you a solid foundation to build your knowledge, which you can work from.Knowing the language and not the IDE will lead to much less confusion about why your program is not working. Finally, good commenting and documenting practices will lead to code that you can understand when you come back from taking a break on the project. Nothing kills the desire to get things done like having no clue what any of the code does. 90003 90030 90016 Learn a version control system 90017 90002 Bonus advice! Try picking up and using a version control system like Git. GitHub offers free accounts with public repositories (though private means paying a little).It really helps with those big projects. 90003 90002 Hopefully this answer helps you. Given how long it is, if there is anything you are confused on or do not understand (or do not understand why I suggested it), feel free to leave a comment. 90003 90002 Thanks for the A2A! 90003 90030 90002 And to everyone reading this on the blog, feel free to leave a comment on my answer as well, as comments as disabled on this site. 90003.

Отправить ответ

avatar
  Подписаться  
Уведомление о