Category Archives: AVR. Учебный курс

AVR. Учебный курс. Макроассемблер

Перед изучением системы команд микроконтроллера надо бы разобраться в инструментарии. Плох тот плотник который не знает свой топор. Основным инструментом у нас будет компилятор. У компилятора есть свой язык — макроассемблер, с помощью которого жизнь программиста упрощается в разы. Ведь гораздо проще писать и оперировать в голове командами типа MOV Counter,Default_Count вместо MOV R17,R16 и помнить что у нас R17 значит Counter, а R16 это Default_Count. Все подстановки с человеческого языка на машинный, а также многое другое делается средствами препроцессора компилятора. Его мы сейчас и рассмотрим.
(далее…)

Read More »

AVR Studio в Linux.

Печально, но факт, что Atmel штампует свое замечательное IDE только для семейства OS Windows. Поэтому пользователям Linux приходится по-всякому извращаться, чтобы заполучить себе на машину этот удобнейший инструмент разработчика. Существует два очевидных решения этой задачи. Первый — запускать студию в Windows, которая крутится на виртуальной машине (отдельную машину с Win не рассматриваем). Второй — запускать программу посредством Wine.

Первый способ хорош 100%-й совместимостью и полным отсутствием софтверных граблей. Железные же практически полностью висят на разработчиках виртуальных машин и обычно стремятся к нулю. Однако, виртуальная машина отжирает у хост-машины ценные системные ресурсы. Кроме того, стоит учесть, что налог на Windows не зависит от того насколько виртуальна машина, на которой бегает эта операционная система. Ну и окно-в-окне, особенно при неудачно реализованном механизме переключения между системами, удовольствия не доставляет. Если вас эти ограничения не смущают, это вполне себе вариант. В Википедии есть прекрасная сводная таблица виртуальных машин, которая может вам пригодиться.

Способ запуска программ (любых) посредством Wine — вполне себе самодостаточен. Стоит помнить, что проект постоянно развивается. Сегодняшний Wine не чета тому, который мне довелось пощупать при первом знакомстве. Сайт проекта: http://www.winehq.org/. Этот вариант распишу подробно.
(далее…)

Read More »

AVR Studio ликбез

Установка.
Сначала надо с сайта atmel.com скачать последнюю версию AVR Studio. Весит она что то около 30 метров. Можно и старые релизы использовать, не преступно, но там может не оказаться новых микроконтроллеров. AVR Studio, как и многие буржуйские программы, крайне хреново понимает русские имена и длинные пути. Поэтому ставь ее по максимально простому пути, что то вроде C:\AVR\ А сами проекты тоже держи как можно ближе к корню, У меня, например, это D:\Work\AVR — никаких имен длинней 8 символов и, конечно же, никаких русских символов. Привет родимый DOS, как говорится.

Да, если планируешь (если не планируешь, то все равно скачай и поставь, не помешает) писать на Си, то рекомендую скачать GCC aka WinAVR и установить ее ДО студии, туда же, поближе к корню. Тогда студия подхватит ее в качестве своего плагина. Если поставить после, то тоже, может быть подхватит, но возможны проблемы.
(далее…)

Read More »

AVR. Учебный курс. Архитектура.

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

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

Итак, что же у нас в основе микроконтроллера, взгляни на диаграмму:

Ядро состоит, в первую очередь, из памяти программ (Flash Programm Memory) и Арифметико-логического устройства (ALU), блока управления (на диаграмме не показан) и программного счетчик (Program Counter). Также есть тактовый генератор, задающий импульсы относительно которых работают блоки микроконтроллера. Тактовый генератор можно сравнить с маятником и собачкой в будильнике: маятник туда сюда, собачка тикает по одному зубчику — шестеренки крутятся. Встала собачка — встал весь будильник.

При старте микроконтроллера значение программного счетчика равно 0000 — это адрес первой команды в нашей flash ROM. Микроконтроллер хватает оттуда два байта (код команды и ее аргументы) и отдает на выполнение в декодер команд (Instruction Decoder).

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

Read More »

C vs Assembler

Если ты впервые столкнулся с микроконтроллерами, то наверняка у тебя стал выбор на чем писать.

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

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

Read More »

AVR. Учебный Курс. Вводная. Что такое микроконтроллер.

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

Но, если сильно все упростить, то основной функцией микроконтроллера является «дрыганье ножками». Т.е. у него есть несколько выводов (от 6 до нескольких десятков в зависимости от модели) и на этих выводах он может выставить либо 1 (высокий уровень напряжения, например +5вольт), либо 0 (низкий уровень напряжения, около 0.1 вольта) в зависимости от программного алгоритма зашитого в его память. Также микроконтроллер может определять состояние сигнала на своих ножках (для этого они должны быть настроены на вход) — высокое там напряжение или низкое (ноль или единица). Современные микроконтроллеры также почти поголовно имеют на борту Аналогово Цифровой Преобразователь — это штука подобная вольтметру, позволяет не просто отследить 0 или 1 на входе, а полноценно замерить напряжение от 0 до опорного (обычно опорное равно напряжению питания) и представить его в виде числа от 0 до 1024 (или 255, в зависимости от разрядности АЦП)

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

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

Read More »

AVR. Учебный курс. Постановка задачи

Этот пост можно смело считать кратким описанием того безобразия, что я называю AVR. Учебный Курс.

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

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

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

Read More »