WinAVR

WinAVR

Сообщение ZuykovAV MEPhI » 09 окт 2011, 20:14

Порядок действий:

1. Загрузка и установка WinAVR;
2. Загрузка файла "Makefile";
3. Написание первой программы, её компиляция в WinAVR и получение "*.hex" файла (этот файл записывается в микроконтроллер).

1. Загрузка и установка WinAVR

Перейдите по ссылке http://sourceforge.net/projects/winavr/ ... /20100110/
SourceForge - один из самых больших в мире веб-сайтов для разработчиков открытого программного обеспечения.
Там нужно нажать на файл WinAVR-20100110-install.exe.
На момент написания инструкции сайт выглядел так:
Изображение

На следующей странице через несколько секунд должна стартовать загрузка программы на компьютер.
После загрузки программы на ПК выполните её установку.

2. Загрузка файла "Makefile".

Чтобы скомпилировать программу в WinAVR нужно кроме файла с кодом программы (расширение .c) создать ещё так называемый Makefile. Находиться эти два файла должны в одной папке. Для создания Makefile в WinAVR есть специальная утилита MFile. Сейчас не обязательно создавать самим Makefile и разбираться во всем, что написано в нём. Пока можно скачать Makefile уже готовый и обратить внимание в нём только на те строчки, которые в ближайшее время могут изменяться:

...
MCU = attiny13 // наш микроконтроллер
...
F_CPU = 1200000 // его частота в герцах
...
TARGET = sz // имя файла программы
...
SRC = $(TARGET).c // расширение файла программы
...

Обязательно обратите внимание, что сохраняемый Makefile не должен иметь расширения !

Как сохранить файл без расширения :

Курсор мышки подведите к скачать Makefile,
Нажмите правую кнопку – в окне выбираете Сохранить ссылку как
В окне Сохранить как укажите :
Имя файла – Makefile (обязательно добавьте кавычки)
Тип файла – выбираете Все файлы
И выбрав нужную папку жмите на Сохранить.

3. Первая программа и Как скомпилировать в WinAVR :

Открываем Programmers Notepad [WinAVR]:
Изображение

Левое и правое окошки можно закрыть (или задвинуть по краям как на изображениях ниже), чтобы было больше места:
Изображение

Выбираем в раскрывающемся списке на панели инструментов - C/C++, и для удобства разворачиваем центральное окошко:
Изображение

Вводим код программы, например, для схемы с ATtyny13 (включение светодиода, подключённого к PB0) :

#include <avr/io.h>
int main (void) {
PORTB=0b11111110;
DDRB= 0b00000001;
while (1) {}
}

и жмем кнопку с изображением дискетки на панели инструментов (или File->Save):
Изображение

Вводим имя программы (оно должно совпадать со значением TARGET в Makefile!) и
не забывайте, что в папке, куда сохраняем, должен быть и Makefile:
Изображение

Компилируем - Tools->[WinAVR] Make All:
Изображение

В нижнем окошке Output будет отображаться отчет о процессе компиляции.
И если в конце отчета будет написано Process Exit Code: 0 – это значит, что всё хорошо, грубых ошибок нет.
Изображение

После успешной компиляции в папке появится ещё много разных файлов:
Изображение

Среди них есть и "sz.hex" файл.
ZuykovAV MEPhI
 
Сообщений: 110
Зарегистрирован: 06 мар 2011, 15:52

Re: WinAVR

Сообщение ZuykovAV MEPhI » 16 окт 2011, 11:59

Пояснения к программе:

Обычно программа пишется для микроконтроллера, который работает в конкретной схеме:

- текст программы (скомпилированной ранее) с краткими комментариями :

Изображение

- и схема с микроконтроллером :

Изображение

После подачи питания на микроконтроллер с функции main начинается построчное выполнение программы. В начале происходит инициализация (настройка) микроконтроллера. В этой программе строчки 7-8 выполняют настройку разрядов порта ввода-вывода (PORTB) в соответствии с условием : включить светодиод VD1 после подачи питания:

Изображение

Изображение

Разряд PB0.

В регистре DDRB на месте 0-го разряда записана 1-ца, так как согласно электрической схеме вывод 5 микроконтроллера является выходом - он управляет состоянием светодиода VD1.

Обратите внимание, в регистре PORTB разряд B0=0. Его значение (здесь нулевое) устанавливает на выводе 5 микроконтроллера низкий уровень напряжения и поэтому после подачи питания светодиод VD1 должен включиться.

Подумайте, что необходимо написать вместо нуля, чтобы светодиод не включался ?

Разряд PB1.

Согласно электрической схеме к выводу 6 микроконтроллера подключена кнопка и поэтому он должен быть входом. Соответственно в регистре DDRB на месте разряда PB1 записан 0.

Обычно к выводу кнопки подключают сопротивление (к плюсу питания, вспомните ранее выполняемые работы). Здесь дополнительно устанавливать сопротивление не надо, так как они находятся уже внутри самого микроконтроллера; его необходимо только подключить программно. Если разряд порта ввода-вывода микроконтроллера является входом (здесь PB1 вход), то для подключения внутреннего сопротивления в разряд PB1 регистра PORTB записывается 1 (если записывается 0, то внутреннее сопротивление отключено от входа).

Разряды PB2, PB3, PB4.

Если убрать шлейф от программатора (линии SCK, MISO, MOSI), то тогда разряд PB2 в схеме также остаётся не задействованным, аналогично разрядам PB3, PB4. А все не используемые входы порта ввода-вывода при инициализации должны устанавливаться входами (в соответствующие разряды регистра DDRB записываются 0) и к ним программно подключаются внутренние сопротивления (в соответствующие разряды регистра PORTB записываются 1).

Разряды PB5, PB6, PB7.

В данной схеме вывод 1 микроконтроллера выполняет функцию RESET и не задействован как разряд порта ввода-вывода, а разряды PB6, PB7 вообще отсутствуют. Запись для них в регистрах DDRB и PORTB выполнена по аналогии к не задействованным разрядам.
ZuykovAV MEPhI
 
Сообщений: 110
Зарегистрирован: 06 мар 2011, 15:52


Вернуться в Микроконтроллеры - Программы для ПК

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0