Работа в CodeVisionAVR. Написание первой программы

26.09.2015 20:09

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

 

В чем же плюсы этой программы?

CodeVisionAVR - это среда разработки, которая поддерживает все операции с МК AVR. В ней мы можем написать заготовку кода, скомпилировать ее и с помощью программатора "залить" в нужный нам МК. И не надо отдельно качать программку-прошиватель, компилятор и другие ненужные программы. А зачем, если все это есть в КодВижне? Также КодВижн поддерживает почти все известные программаторы для AVR, будь это китайские клоны или оригинальные программаторы. Большой плюс КодВижена в том, что он сам создает готовый шаблон программы, из которого нам нужно удалить все лишнее, что является несомненным плюсом для новичков.

 

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

 

 

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

 

 

После вылезет вот такое окошко. Ставим маркер-точку на AT90, Atiny, FPSLIC и нажимаем "ОК".

 

 

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

 

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

Также можно поменять частоту "Clock". По умолчанию она устанавливается на 8 МегаГерц.

 

 

Далее нажимаем в этом же окошке на значок "шестеренки":

 

 

Вышло вот такое окошко. Первым делом мы выбираем папку, в которую будем сохранять наш проект. Я создал папку на рабочем столе и назвал ее MK AVR. Потом написал название нашего проекта "lesson 1", ну типа "первый урок" ). Ну и потом нажимаем кнопку "Сохранить". Обратите внимание на расширение файла, которое я обвел фиолетовым цветом:

 

 

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

 

 

И потом выйдет точно такое же завершающее окошко ;-). Также не теряемся, прописываем название файла и снова нажимаем кнопку "Сохранить".

 

 

Ну вот мы и готовы к созданию нашего первого проекта ;-)

 

 

КодВижен для нас приготовил шаблон. Здесь явно много лишнего барахла. Первым делом сносим шапку

Выделяем, нажимаем Del.

 

 

Текст, который находится после двух косых черточек "// любой текст "   или  /* любой текст */ называется комментарием. Они нужны для удобного восприятия писанины и никак не сказываются на работу МК. Всех их мы выделяем и тоже сносим:

 

 

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

 

1) При подаче питания на МК зажечь первый светодиод.

2) Через 1 секунду зажечь второй светодиод, но первый светодиод при этом продолжает гореть.

3) Через 1 секунду зажечь третий светодиод, но два предыдущих также горят , то есть у нас горят сразу 3 светодиода.

4) Через 2 секунды тухнет третий светодиод.

5) Через секунду тухнет второй светодиод.

6) Еще через секунду тухнет первый светодиод.

7) Через 2 секунды весь этот цикл повторяется с пункта 1.

 

 

Алгоритм мы с вами согласовали. Осталось дело за малым: написать программку ;-)

 

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

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

То есть мы с вами присоединяем к  нашей программе библиотеку "tiny 2313.h" для МК Atiny 2313, так как именно на нем  будет работать наша схема.  А также подключаем библиотеку "delay.h". Delay - c англ. откладывать, отсрочивать. То есть грубо говоря, подключаем еще и задержку.

 

 Уф, две строчки кода вроде бы написали).

 

Сама программа пишется  после void main (void) между фигурными скобками. Там мы  будем писать нашу программу.

 

Давайте внимательно глянем на наш МК:

Здесь мы видим  основное название ножек, а в скобках их двойное предназначение. Двойное предназначение нас пока не интересует. Для нас в данный момент интересны обозначения PA, PB, PD. Их еще называют портами Ввода-Вывода. То есть на них можно что-то вводить и с них можно что-то выводить). В данном случае я хочу использовать ножки РВ0, РВ1, РВ2 для того, чтобы управлять светодиодами. На каждую из этих ножек я повешу по одному светодиоду, итого получается три. Остальные ножки нас не интересуют, так как мы не будем их использовать.

 

 

Наша схема будет выглядеть вот таким  образом:

 

 

Следовательно, я должен настроить эти ножки для управления светодиодами.

Итак, в фигурных скобках пишем:

 

PORTB=0b00000000

0b - это бинарная система счисления. Настраивать в бинарной системе удобно тем, что  каждый бит - это одна ножка МК. Поэтому счет идет справа-налево. Присмотритесь к рисунку выше. Здесь мы видим PORTB и нули при двоичной ситеме исчисления. Что это означает? А означает это то, что эти выводы при неиспользовании их в программе будут притянуты к нулю, то есть на них будет низкий потенциал или ноль Вольт. В случае, если мы видим единички установленные на каком-либо из битов, то это значит, что на этом порту при неипользовании в программе у нас будет высокий потенциал или плюс 5 вольт, или, говоря другими словами, этот вывод у нас будет принят к плюсу питания.

 

DDRB=0b00000111

Это означает, что PB0, PB1, PB2 настроены на выход. Считаем справа-налево, если вы не забыли. А если ноль, то значит настроены на вход.

 

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

 

 

Теперь рассмотрим while (1). Он означает, что кусочек программы, который будет написан после него, будет зацикливаться, то есть повторяться бесконечное количество раз.

 

Ну и собственно можно начать писать саму программу...

 

Итак, как она будет выглядеть?

 

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

 

Давайте разберем саму программу...

PORTB.0=1;  Это означает, что при подачи питания на МК, у нас ножка PB0 будет иметь  логическую единицу , то есть на выходе этой ножки будет 5 Вольт, которые зажгут светодиод.

delay_ms(1000);  Ждем 1000 миллисекунд, то есть 1 секунду.

 

PORTB.1=1; Через одну секунду на ножке PB1 появляется логическая единица, то есть 5 вольт, которые и зажгут второй светодиод

 delay_ms(1000); Ждем еще одну секунду.

 

 PORTB.2=1; Как только прошла секунда, у нас на ножке PB2 появляется логическая единичка, и, следовательно, зажигается третий светодиод.

 

delay_ms(2000); Ждем 2  секунды...Итого у нас горят все разом три светодиода в течение двух секунд.

 

 

Но потом как пройдут эти две секунды...

 PORTB.2=0;  На ножке PB2 появляется логический ноль, то есть напряжение исчезает. Третий светодиод  тухнет.

delay_ms(1000); Ждем секунду

 

 PORTB.1=0; Исчезает напряжение на ножке PB1. Светодиод второй тоже перестает источать свет.

delay_ms(1000); Ждем секунду.

 

 PORTB.0=0; И  на ножке PB0 напряжение тоже стает равно нулю. Первый светодиод тухнет тоже.

 delay_ms(2000);  Ждем две секунды и возвращаемся на начало программы, то есть  к 

 

PORTB.0=1;

delay_ms(1000);

 

Вот так выглядит полностью сама программа. Ее можно даже  тупо скопировать и скомпилировать.


#include <tiny2313.h>

#include <delay.h>
 

void main(void)
{
PORTB=0b00000000;                                                 
DDRB=0b00000111;                                                 

while (1)                                             
      {
          PORTB.0=1;
          delay_ms(1000);       
          
          PORTB.1=1;
          delay_ms(1000);   
           
          PORTB.2=1;
          delay_ms(2000);  
            
          PORTB.2=0;
          delay_ms(1000);
         
          PORTB.1=0;
          delay_ms(1000);
                
          PORTB.0=0;
          delay_ms(2000);
      }     
}

 

 

Ну все, программа написана. Осталось дело за малым: преобразовать нашу писанину в машинный код, чтобы его понимал МК. Для этого мы нажимаем  на кнопочку "создать все файлы проекта"

 

После нажатия на эту кнопку, у нас выскакивает окошко, в котором говорится о том, успешно ли прошла компиляция и тд. Если все  нормально, то нажимаем ОК.

 

Если что-то не так, то отобразятся  ошибки. Я специально убрал знак " ; " после одной строчки. Ругается примерно как-то так, и это не есть хорошо:

 

Если все ОК,  то у вас  в папке "Exe", там где у вас все проекты будет лежать готовый файлик, в данном случае "lesson 1. hex".

 

Теперь этот файлик с удовольствием скушает  наш МК AVR и будет выполнять программку, которая находится в этом файле.

 

Продолжение