техника

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

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

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

Главная проблема с микроконтроллерами, если ими заниматься любительски, не постоянно -- в том, что нативный язык программирования у них либо ассемблер, либо достаточно низкоуровневый Си. И это сильно ездит (мне) по мозгам. Чтобы, например, подать единицу на одну ногу, надо писать в регистр, ответственный за эту ногу. От такого программирования я хочу находиться как можно дальше.

Но есть такая штука как Ардуино Си -- где группа граждан нарисовала туеву хучу макросов, и сделала таким образом вполне удобноваримые микроконтроллерные плюсы. Ну да, в теории там оно занимает больше места, но за пределы доступных восьми килобайт флеша как в ATTiny85, я пока не выходил даже с довольно сложными проектами. Мне скорее ног у микросхемы перестанет хватать, чем восьми килобайт. И если это произойдёт -- велика проблема, взял микроконтроллер побогаче, и всё. Например, ATMega328P. Там 32 килобайта под хранение программы есть. И стоит он копейки.

Основная проблема с Ардуино -- из коробки оно не умеет работать с серией микроконтроллеров ATTiny. Только с платами разработки типа Ардуино Уно и т.д. Но это не беда, втыкается штепсель, и гуляй-не-хочу. Вот тут написано, как: http://highlowtech.org/?p=1695

Вторая проблема с использованием Ардуино для программирования микроконтроллеров -- нужен отдельный программатор. На плате разработки он встроен, а тут надо покупать. Рекомендую купить официальный USBASP Томаса Фишла: http://www.ebay.de/itm/-/321829837505 . Он работает с официальной ATMEL Studio, если потом захочется попрограммировать на "настоящем" AVR C.

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

Третья проблема с Ардуино для микроконтроллеров -- ЧУДОВИЩНАЯ среда разработки. Как на этом чуде вообще можно что-то более-менее серьёзное сваять -- я вообще не понимаю. Но эта проблема решается проще всего. Берётся Микрософтовская Вижуал Студио (2013 или 2015, я использую рабоче-крестьянскую коммунальную версию), и на неё накатывается штепсель VisualMicro: http://www.visualmicro.com

Затем надо накатить штепсель на этот штепсель (отсюда же, что и штепсель для среды разработки Ардуино: http://highlowtech.org/?p=1695), чтобы оно сумело работать с контроллерами ATTiny и радоваться жизни в человеческой среде разработки с нормальным редактором кода с автотабуляцией, закрытием скобочек, и прочим бильярдом с профурсетками. Кто хоть раз серьёзно программировал, понимает.

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

Рекомендую.
собственно два вопроса:

1. в чем проблема записать что-то в регистр ноги?


> С ними можно сделать столько всякого классного.

2. a тут, если можно, поподробней
> 1. в чем проблема записать что-то в регистр ноги?

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

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

Вот посмотри, например, на исходник простого проекта, нарисованного на AVR C:

http://www.nongnu.org/avr-libc/user-manual/group__demo__project.html

Много ты там вот так сходу поймёшь?

А вот практически то же самое, но написанное на Ардуино Си:

https://www.arduino.cc/en/Tutorial/Fade

КМК, после такого сравнения вопрос, "на чём проще писать", вообще не стоит.

> 2. a тут, если можно, поподробней

Да тут, как бы, всё ограничено только собственной фантазией.

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

Можно сделать навалом всяческих проектов для домашней автоматизации. Например, кодовый замок на дверь. Можно сделать роботов любой сложности, благо к микроконтроллеру можно подключить практически любой датчик -- ультразвуковой измеритель дистанции, акселерометр... Можно сделать свой собственных трекер GPS... Короче, я говорю -- тут ты ограничен только своей фантазией.
>Много ты там вот так сходу поймёшь?
>"на чём проще писать", вообще не стоит.

А что там понимать, си он и в африке си - всегда один и тот же (с незначительными загибонами) один раз понял, потом все работает.

>всё ограничено только собственной фантазией.

только вот к сожалению работы на эту тему мало
> си он и в африке си

Только по синтаксису.

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

> только вот к сожалению работы на эту тему мало

Да какая тут работа, это так, хобби :)
>>Третья проблема с Ардуино для микроконтроллеров -- ЧУДОВИЩНАЯ среда разработки.
С этим не поспоришь. Сама по себе среда разработки не плохая, но вот как IDE оно просто никакое и главное от версии к версии ничего не меняется. Хотя есть подвижки, сейчас можно в Ардуино-ИДЕ, без всяких костылей, писать на чистом С. В старых версиях можно было только с танцем и бубнами. Вообще для быстрой разработки Ардуинка - класс, ей бы оболочку приличную...