Site Loader

Содержание

Порты ввода-вывода микроконтроллера ⋆ diodov.net

В этом статье мы напишем первую программу и научимся программировать порты ввода-вывода микроконтроллера.

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

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

Порты ввода-вывода микроконтроллера

Микроконтроллер ATmega8 имеет 28 выводов, каждый из них выполняет определенные функции. Светодиод можно подключить к большинству выводов, однако, не ко всем, ведь минимум пара выводов занята под питание.

Чтобы четко знать назначение каждого вывода МК воспользуется даташитом. В даташите находим распиновку (обозначение) всех выводов.

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

Для работы микроконтроллера, впрочем, как и любой другой микросхемы, необходимо напряжение. Во избежание ложных срабатываний МК нужно питать только стабильным напряжением от 4,5 В до 5,5 В. Этот диапазон напряжений строго регламентирован и приведен в даташите.

Плюс («+») источника питания подсоединяется в 7-й ножке, обозначенной VCC. Минус («-») – к 8-й или 22-й ножке, которые имеют обозначение GND (GND – сокращенно от ground – «земля»).

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

Микроконтроллер ATmega8 имеет три порта ввода-вывода: B, C и D. Порты могут быть полными и неполными. Полный порт состоит из восьми бит и соответственно имеет столько же одноименных выводов. У неполного порта меньше 8 бит, поэтому число выводов такого порта также менее восьми.

У данного МК порты B и D полные. А порт C неполный и имеет семь бит. Еще раз обращаю внимание, что нумерация битов начинается с нуля, например PB0, PB1, PB2…

Не удивляйтесь, что у ATmega8 отсутствует порт A. Другие МК, имеющие большее число выводов, могут содержать как порт A, так и порт E. У микроконтроллеров с меньшим числом выводов может быть только один порт и тот неполный.

Знакомство с Atmel Studio 7

Теперь перейдем к написанию кода программы. Наша первая программа будет устанавливать + 5 В на нулевом бите порта C PC0, т.е. на 23-м выводе микроконтроллера.

Запускаем Atmel Studio.

Сначала необходимо создать проект. Для этого в открывшемся окне кликаем по вкладке New Project.

Также проект можно создать, кликнув по вкладке File. В выпавшем меню следует выбрать New и далее Project. Или нажать комбинацию клавиш Ctrl+Shift+N.

В появившемся окне выбираем язык программирования C/C++ и кликаем по вкладке.

Далее нам нужно задать имя и место на диске для нашего проекта. Назовём наш первый проект именем 1 в строке для ввода Name. Изменить место расположения файла можно кликнув по кнопке Browse напротив строки Location. Если оставить галочку возле

Create directory for solution, то в выбранном месте автоматически создастся папка с именем проекта. В данной папке помимо проекта будут созданы и другие вспомогательные файлы, поэтому я рекомендую не убирать галочку.

После того, как имя проекта и его место выбраны, нажимаем кнопку OK. Снова появляется окно. В нем нам нужно выбрать тип микроконтроллера. В нашем случае – это ATmega8. Кликаем по вкладке Device Family. В выпавшем меню выбираем серию микроконтроллеров ATmega.

С помощью прокрутки находим и выделяем микроконтроллер ATmega8 и наживаем кнопку OK.

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

 

Рассмотрим все по порядку.

Atmel Studio 7 | Первая программа

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

Цвет комментариев и других элементов программы можно изменять в настройках Atmel Studio.

/*

 * 1.c

 *

 * Created: 07.08.2017 16:57:59

 * Author : ZBL

 */

Комментарии бываю однострочные и многострочные. В данном шаблоне программы применяются многострочные комментарии. Они начинаются косой линией со звездочкой, а заканчиваются звездочкой с косой линией.

/* – начало комментария

.

.

.

.

*/ – конец комментария

Весь текс, который помещен между /* и */ полностью пропускается компилятором.

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

// Здесь пишется однострочный комментарий

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

Директива препроцессора

Следующим элементом программы является строка

#include <avr/io.h>

Эта строка указывает компилятору, что к данному файлу нужно подключить другой файл с именем io.h, который находится в папке avr. В подключаемом файле находится информация о базовых настройках микроконтроллера.

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

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

io – название файла, которое происходит от сокращения input/output – ввод/вывод.

.h – расширение файла, название его происходит от слова header – заголовок.

Теперь все вместе. io.h – это заголовочный файл, в котором записана информация о настройках ввода-вывода микроконтроллера.

Главная функция main 

Ниже нам встречается следующая строка:

int main(void)

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

В синтаксисе языка Си идентификатором функции служат круглые скобки

()

Внутри скобок помещено слово void (void). Оно обозначает пустота. Это указывает на то, что функция main ничего не принимает, т. е. не принимает никаких аргументов. По мере написания более сложных программ, мы детальнее остановимся на этом моменте.

int – это целочисленный тип данных. В данном случае функция работает с целыми числами: как положительными, так и отрицательными. Существуют и другие типы данных, например с плавающей запятой, символьные и др. Более подробно мы будем рассматривать типы данных по мере необходимости или в отдельной статье. Однако для функции main рекомендуется всегда использовать тип данных int, поскольку конструкция int main(void) определена стандартом языка Си и распознается любым компилятором.

Область действия функции определяется фигурными скобками

{

.

.     → тело функции

.

}

Код программы, помещенный между открывающейся и закрывающейся скобками, относится к телу функции.

В общем случае любая функция имеет следующую конструкцию:

тип данных имя функции(агрумент)

{

тело функции (код)

}

Функция while

Внутри функции main находится функция while:

while (1)

    {

    }

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

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

#include <avr/io.h>

int main(void)

{

         while (1)

    {

    }

}

Программирование портов ввода-вывода микроконтроллера ATmega8

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

Мы уже знаем, что МК может, как принимать, так и выдавать сигнал, т.е. выводы (порты) его могут работать как входы и как выходы. Поэтому предварительно нужно настроить вывод МК на соответствующий режим. Для этого в микроконтроллере есть специальный регистр, который называется DDR – direct data register – регистр направления данных.

У каждого порта есть свой такой регистр. Например, регистр порта C называется DDRC, порта B – DDRB, порта D – DDRD.

Чтобы настроить вывод порта на вход в регистр DDR необходимо записать ноль, а на выходединицу.

Команда настройки нулевого бита порта C выглядит следующим образом

DDRC = 0b0000001;

Данной командой в регистр DDRC записывается двоичное число равное десятичному 1. Префикс 0b идентифицирует данное число, как двоичное.

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

Также можно записать в регистр шестнадцатеричное число:

DDRC = 0x1;

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

Давайте рассмотрим еще один пример. Допустим нам необходимо настроить нулевой, третий и седьмой биты порта B на выход, а остальные биты на вход. Для этого случая код имеет такой вид:

DDRB = 0b10001001;

С целью закрепления навыков рекомендую потренироваться настраивать разные порты ввода-вывода микроконтроллера на вход и на выход.

Регистр микроконтроллера PORT

После того, как мы настроили нулевой бит порта C PC0 на выход, нужно еще выполнить настройку, чтобы на данном выводе появилось напряжение +5 В. Для этого необходимо установить нулевой бит в регистре PORT. Если бит установлен в единицу, то на выводе будет +5 В (точнее говоря величина напряжения питания микроконтроллера, которая может находится в пределах 4,5…5,5 В для микроконтроллера ATmega8). Если бит установлен в ноль, – то на выводе будет напряжение, величина которого близка к нулю.

Каждый порт имеет свой регистр: порт A – PORTA, порт B – PORTB, порт C – PORTC.

И так, чтобы получить на выводе PC0 напряжение +5 В, необходимо записать такую команду:

PORT = 0b0000001;

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

Таким образом, чтобы засветить светодиод, нам необходимы всего лишь две команды:

DDRC = 0b0000001;

PORTС = 0b0000001;

Первой командой мы определяем вывод PC0 как вход, а второй устанавливаем на нем напряжение +5 В.

Полный код программы выглядит так:

#include <avr/io.h>

int main(void)

{

     DDRC = 0b0000001;

      

    while (1)

    {

     PORTC = 0b0000001;

    }

}

Здесь необходимо заметить следующее: команда DDRC = 0b0000001; выполнится всего один раз, а команда PORTC = 0b0000001; будет выполняться все время в цикле, поскольку она находится в теле функции while (1). Но даже если мы вынесем команду за пределы функции и поместим ее после DDRC = 0b0000001;, светодиод и в этом случае будет светиться все время. Однако, разместив команду PORTC = 0b0000001; в теле while (1), мы делаем явный акцент на том, что светодиод должен светится все время.

Компиляция файла

Теперь, когда код полностью готов, его нужно скомпилировать. Для этого необходимо нажать клавишу F7 или кликнуть по кнопке Build и в выпавшем меню выбрать Build Solution.

Если ошибок в коде нет, то файл скомпилируется, а в нижней части экрана появится запись о том, что проект скомпилирована успешно: Build succeeded.

Таким образом программируются порты ввода-вывода микроконтроллера практически любого типа. Следующий наш шаг – это запись кода в микроконтроллер. Также можно проверить корректность работы кода с помощью программы-симулятора микроконтроллеров – Proteus.

Скачать файлы Программа 1

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

Устройство и работа портов ввода-вывода микроконтроллеров AVR. Часть 1 / Хабр

Работа портов ввода/вывода

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

Пример будем рассматривать на микроконтроллере ATMega8.

Программу писать будем в Atmel Studio 6.0.

Эмулировать схему будем в Proteus 7 Professional.

С внешним миром микроконтроллер общается через порты ввода вывода. Схема порта ввода вывода указана в даташите:

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

Pxn – имя ножки порта микроконтроллера, где x буква порта (A, B, C или D), n номер разряда порта (7… 0).
Cpin — паразитная емкость порта.
VCC — напряжение питания.
Rpu — отключаемый нагрузочный верхний резистор (pull-up).
PORTxn — бит n регистра PORTx.
PINxn — бит n регистра PINx.
DDRxn — бит n регистра DDRx.

Рассмотрим, что же представляет собой вывод микроконтроллера. На входе микроконтроллера стоит небольшая защита из двух диодов (см.1), она предназначенная для защиты ввода микроконтроллера от кратковременных импульсов напряжения, превышающих напряжение питания. Если напряжение будет выше питания, то верхний диод откроется и это напряжение будет стравлено на шину питания, где с ним будет уже бороться источник питания и его фильтры. Если на ввод попадет отрицательное (ниже нулевого уровня) напряжение, то оно будет нейтрализовано через нижний диод и погасится на землю. Впрочем, диоды там хилые и защита эта помогает только от микроскопических импульсов и помех. Если же на ножку микроконтроллера подать вольт 6-7 при 5 вольтах питания, то внутренние диоды его не спасут.

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

Дальше идут ключи управления (см.3,4). Каждый ключ подчинен логическому условию, которые нарисованы на рисунке. Когда условие выполняется — ключ замыкается.

Каждый порт микроконтроллера AVR (обычно имеют имена A, B и иногда C или даже D) имеет 8 разрядов, каждый из которых привязан к определенной ножке корпуса. Каждый порт имеет три специальных регистра DDRx, PORTx и PINx (где x соответствует букве порта A, B, C или D). Назначение регистров:

DDRx – Настройка разрядов порта x на вход или выход.

PORTx – Управление состоянием выходов порта x (если соответствующий разряд настроен как выход), или подключением внутреннего pull-up резистора (если соответствующий разряд настроен как вход).

PINx –Чтение логических уровней разрядов порта x.

PINхn – это регистр чтения. Из него можно только читать. В регистре PINxn содержится информация о реальном текущем логическом уровне на выводах порта. Вне зависимости от настроек порта. Так что если хотим узнать что у нас на входе — читаем соответствующий бит регистра PINxn. Причем существует две границы: граница гарантированного нуля и граница гарантированной единицы — пороги за которыми мы можем однозначно четко определить текущий логический уровень. Для пятивольтового питания это 1.4 и 1.8 вольт соответственно. То есть при снижении напряжения от максимума до минимума бит в регистре PINx переключится с 1 на 0 только при снижении напряжение ниже 1.4 вольт, а вот когда напряжение нарастает от минимума до максимума переключение бита с 0 на 1 будет только по достижении напряжения в 1.8 вольта. То есть возникает гистерезис переключения с 0 на 1, что исключает хаотичные переключения под действием помех и наводок, а также исключает ошибочное считывание логического уровня между порогами переключения.

При снижении напряжения питания разумеется эти пороги также снижаются.

DDRxn – это регистр направления порта. Порт в конкретный момент времени может быть либо входом либо выходом (но для состояния битов PINxn это значения не имеет. Читать из PINxn реальное значение можно всегда).

DDRxy = 0 – вывод работает как ВХОД.

DDRxy = 1 – вывод работает на ВЫХОД.

PORTxn – режим управления состоянием вывода. Когда мы настраиваем вывод на вход, то от PORTх зависит тип входа (Hi-Z или PullUp, об этом чуть ниже).

Когда ножка настроена на выход, то значение соответствующего бита в регистре PORTx определяет состояние вывода. Если PORTxn=1 то на выводе лог.1, если PORTxn=0 то на выводе лог.0.

Когда ножка настроена на вход, то если PORTxn=0, то вывод в режиме Hi-Z. Если PORTxn=1 то вывод в режиме PullUpс подтяжкой резистором в 100к до питания.

Таблица. Конфигурация выводов портов.

DDRxn PORTxn I/O Comment
0 0 I (Input) Вход Высокоимпендансный вход. (Не рекомендую использовать, так как могут наводится наводки от питания)
0 1 I (Input) Вход Подтянуто внутренне сопротивление.
1 0 O (Output) Выход На выходе низкий уровень.
1 1 O (Output) Выход На выходе высокий уровень.

Общая картина работы порта показана на рисунках:

Рис. DDRxn=0 PORTxn=0 – Режим: HI-Z – высоко импендансный вход.

Рис. DDRxn=0 PORTxn=1 – Режим: PullUp – вход с подтяжкой до лог.1.

Рис. DDRxn=1 PORTxn=0 – Режим: Выход – на выходе лог.0. (почти GND)

Рис. DDRxn=1 PORTxn=1 – Режим: Выход – на выходе лог.1. (почти VCC)

Вход Hi-Z — режим высокоимпендансного входа.
Этот режим включен по умолчанию. Все ключи разомкнуты, а сопротивление порта очень велико. В принципе, по сравнению с другими режимами, можно его считать бесконечностью. То есть электрически вывод как бы вообще никуда не подключен и ни на что не влияет. Но! При этом он постоянно считывает свое состояние в регистр PINn и мы всегда можем узнать что у нас на входе — единица или ноль. Этот режим хорош для прослушивания какой либо шины данных, т.к. он не оказывает на шину никакого влияния. А что будет если вход висит в воздухе? А в этом случае напряжение будет на нем скакать в зависимости от внешних наводок, электромагнитных помех и вообще от фазы луны и погоды на Марсе (идеальный способ нарубить случайных чисел!). Очень часто на порту в этом случае нестабильный синус 50Гц — наводка от сети 220В, а в регистре PINn будет меняться 0 и 1 с частотой около 50Гц

Вход PullUp — вход с подтяжкой.
При DDRxn=0 и PORTxn=1 замыкается ключ подтяжки и к линии подключается резистор в 100кОм, что моментально приводит не подключенную никуда линию в состояние лог.1. Цель подтяжки очевидна — не допустить хаотичного изменения состояния на входе под действием наводок. Но если на входе появится логический ноль (замыкание линии на землю кнопкой или другим микроконтроллером/микросхемой), то слабый 100кОмный резистор не сможет удерживать напряжение на линии на уровне лог.1 и на входе будет лог.0.

Режим выхода.
Тут, думаю, все понятно — если нам надо выдать в порт лог.1, мы включаем порт на выход (DDRxn=1) и выдаем лог.1 (PORTxn=1) — при этом замыкается верхний ключ и на выводе появляется напряжение, близкое к питанию. А если надо лог.0, то включаем порт на выход (DDRxn=1) и выдаем лог.0 (PORTxn=1) — при этом открывается уже нижний вентиль, что дает на выводе около нуля вольт.

РадиоКот :: Настройка портов ввода-вывода

РадиоКот >Обучалка >Микроконтроллеры и ПЛИС >Микроконтроллеры AVR — пишем, компилируем, прошиваем… >

Настройка портов ввода-вывода

У нас уже есть папка tutorial c файлом code.asm и двумя настроенными батниками. Можете писать прямо в этот файл, а можете скопировать папочку tutorial под другим именем. Нопример, у меня папка с этим проектом называется runfire (типа, бегущий огонек :)).

Структура новой папки должна остаться такой же, как у tutorial.
Открываем code.asm (правой кнопкой по файлу -> Правка). Стираем все кроме самой первой строки, в которой написано .include тра-ля-ля…

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

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

.include «d:avravrasmappnotes2313def.inc»

.cseg
.org 0

CSEG — обозначает начало программного сегмента
ORG — задает начальный адрес. В данном случае он = 0.

Кроме программного сегмента, бывает сегмент данных — DSEG.
В нем инициализируется оперативная память. Но об этом мы будем говорить в дальнейшем.

Итак, как вы помните, в нашем контроллере 16 РОН (регистров общего назначения): R16…R31. С любым из них мы можем сделать все что угодно. Просто полная анархия! Однако, я бы не рекомендовал злоупотреблять количеством используемых регистров. Это очень усложняет процесс написания программы. Я обычно использую 4 или 5 регистров - только самое необходимое в данный момент. Остальное — в оперативке (ОЗУ).

Чтобы не запутаться, я по-своему обзываю эти регистры: Temp, Temp1, …, Temp4. И вам того же желаю. Делается это так: до начала программного сегмента необходимо прописать примерно следующее:

.def     Temp=R16
.def     Temp1=R17
и т.д.

Напишем:

.include «d:avravrasmappnotes2313def.inc»

.def     Temp=R16
.def     Temp1=R17
.def     Temp2=R18
.def     Temp3=R19
.def     Temp4=R20

.cseg
.org 0

Все, теперь нам станет проще…

Ах да! Мы ж настраиваем порты… 🙂 Ну ладно — настраиваем!

Я уже говорил, что каждый порт ввода-вывода (ПВВ) состоит из скольки-то каналов.
Каждый канал может быть настроен на вход или на выход.
В нашем контроллере два порта:

PortB — 8 каналов (к нему подключены светодиоды)
PortD — 7 каналов (к нему пока ничего не подключено)

Порты устроены очень хитроумно. Для работы с любым портом используется три регистра:

PortX
PinX
DDRX
(где X — буква порта, например PortB, PinD и т.д.)

PortX содержит информацию, предназначенную для вывода.
PinX содержит вводимую информацию
DDRX содержит информацию о том, какой канал настроен на ввод, какой — на вывод.

То есть, DDRX определяет, грубо говоря, какая ножка микросхемы будет подключена к PinX, какая — к PortX:

0 — ввод
1 — вывод

Соответственно, если, скажем, PX3 настроен на ввод, то бесполезно писать что-либо в 3-й бит PortX, поскольку оно не будет выведено.
И наоборот, если например, PX5 настроен на вывод, то прочитав 5-й бит PinD, мы всегда обнаружим 0.
Порты — дело тонкое…

По умолчанию, все каналы порта настроены на ввод.

Нам же надо, чтобы порт B был целиком настроен на вывод. Значит, все биты DDRB должны равняться 1. То есть, в DDRB надо записать «11111111».

Мы не можем напрямую записать константу в регистр, не являющийся РОН. Но мы можем вывести значение из РОНа в этот регистр.

Знакомимся с первыми операторами:

out — оператор вывода данных из РОН в другие регистры

Пример:
out DDRB,Temp1

ldi — оператор присвоения константы РОН

Примеры:
ldi Temp1,14 — присвоение десятеричной константы (14)
ldi Temp1,0x0E — присвоение шестнадцатеричной константы (0E)
ldi Temp1,0b00001110 — присвоение двоичной константы (00001110)

Итак, операция настройки портов происходит в два шага:
1.Присваиваем РОН константу
2.Выводим данные из РОН в DDRx

.include «d:avravrasmappnotes2313def.inc»

.def     Temp=R16
.def     Temp1=R17
.def     Temp2=R18
.def     Temp3=R19
.def     Temp4=R20

.cseg
.org 0

ldi Temp, 0b11111111  ;присвоение константы
out DDRB,Temp         ;вывод

Все! Порты настроены, я вас поздравляю.
А шуму то было! :)

Теперь можно вывести какое-нибудь число и проверить как работает наша схема.
Выведем двоичное число 11010010

.cseg
.org 0

ldi Temp, 0b11111111  ;присвоение константы
out DDRB,Temp         ;вывод

;выводим число 11010010 на светодиоды

ldi Temp,0b11010010  ;присвоение константы
out PortB,Temp         ;вывод на индикацию

Компилируем. Шьем. Смотрим. Должны загореться соответствующие светодиоды.
Загорелись?
Кричим УРА, идем дальше… 🙂

<<—Вспомним пройденное—-Поехали дальше—>>


Как вам эта статья?

Заработало ли это устройство у вас?

Порты ввода-вывода микроконтроллера

Устройство микроконтроллера:
– назначение, устройство и программирование портов ввода-вывода микроконтроллера

Доброго дня уважаемые радиолюбители!
Приветствую вас на сайте “Радиолюбитель“

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

Порты ввода/вывода микроконтроллера AVR

Порты ввода/вывода (далее я буду писать сокращенно – ПВВ) – предназначены для общения микроконтроллера с внешними устройствами. С их помощью мы передаем информацию другим устройствам и принимаем информацию от них. В зависимости от типа, микроконтроллер может иметь на своем борту от одного до семи ПВВ. Каждому порту ввода/вывода присвоено буквенное обозначение – A, B, C, D, E, F, G. Все порты в микроконтроллере равнозначные, восьмиразрядные (содержат восемь линий, они же выводы, они же разряды, они же биты) и двунаправленные – могут как передавать, так и принимать информацию. ПВВ в микроконтроллере обслуживают все его устройства, в том числе и периферийные. Поэтому, в зависимости от того какое устройство будет работать с портом он может принимать и передавать или цифровую информацию, или аналоговую.

Вообще, порты классифицируются по типу сигнала:
цифровые порты – которые работают с цифровыми сигналами – логическими “нулями” и логическими “единицами”
аналоговые порты – которые работают с аналоговыми сигналами – использующими плавно весь диапазон входных напряжений от нуля вольт до напряжения питания МК
смешанные порты – они и используются в наших МК, могут оперативно переключаться с режима “цифровой порт” в режим “аналоговый порт”, и обратно.

В технической литературе и схемам ПВВ обозначаются следующим образом:
– “Р” – первая буква, означающая слово “порт”
– “А” (В, С, D, E, F, G) – вторая буква, обозначающая конкретный порт
– “0” (1, 2, 3, 4, 5, 6, 7) – третий символ – цифра, обозначающая конкретный вывод (регистр, бит) порта.
К примеру: “порт А” – РА, “пятый разряд порта А” – РА5.
Если в МК есть несколько портов, то не обязательно их имена могут идти по порядку – A, B, C. Может быть и так – В, С, D. Поэтому пугаться и судорожно искать где же порт А не надо.
Кроме того, хотя порты восьмиразрядные, выводов у порта не обязательно должно быть 8, может быть и меньше, к примеру 3 – PA0, PA1, PA2. В таком случае порт называют неполным, или урезанным.
Давайте посмотрим на конкретный МК – ATmega8:


Как видите, в этом МК порта с именем “А” нет (отсутствует как класс ;). Порт РВ и порт PD – полные, имеют по восемь выводов. А порт С – неполный (ущемленный, нет места в корпусе МК для его вывода), в нем отсутствует восьмой разряд (реально, внутри корпуса МК, он есть, но работать мы с ним не можем).

Для управления портами в их электрической схеме имеется два переключателя, которыми мы можем “щелкать” программно, используя специальные регистры ввода/вывода. Такие переключатели имеются для каждого вывода, что означает возможность управлять любым выводом порта. К примеру,  один вывод порта можно настроить на ввод информации, три разряда этого же порта на вывод, а оставшиеся вообще не настраивать, оставить их в “Z- состоянии” .
Давайте разберемся с этим вопросом конкретней, на примере вот этой схемы:

Обратите внимание на два переключателя – Sin и Sout, и сопротивление Rup.
С помощью Sin осуществляется переключение вывода порта или для работы на вход, или для работы на выход. Управляется этот переключатель с помощью регистра ввода/вывода DDRx. У каждого порта свой регистр. Каждый разряд регистра управляет соответствующим разрядом порта (нулевой – нулевым, первый – первым и т.д.). Символ “x” в названии порта заменяется соответствующим именем порта: для порта А – DDRA, для порта С – DDRC. При записи в разряд регистра DDRx “единицы”, соответствующий ему разряд порта переключается на вывод информации, а при записи “нуля” – на ввод информации. Просмотрите рисунки ниже, и вы поймете как работать с регистром DDRx.

1. Переключение всех выводов порта на вывод информации:


2. Переключение всех выводов порта на ввод информации:


3. Переключение части выводов порта на ввод, и части на вывод информации:

В “классическом” Ассемблере настройка выводов портов на ввод и вывод информации выглядит так (просто пример 3-го рисунка):

Idi    R20, 0b01100010 — этой командой мы записываем в РОН R20 двоичное число 01100010, которым определяем – какой вывод порта будет работать на вывод (1), а какой на ввод (0) информации. В данном случаем разряды порта В 1,5,6 – настраиваются на вывод информации, а 0,2,3,4,7 – на ввод информации
Out   DDRB, R20 — этой командой мы переносим содержимое РОН R20 в регистр ввода/вывода порта В.

В Algorithm Builder запись немного отличается:
#b01100010 –> DDRB
Дело в том, что Algorithm Builder несколько более смещен к языкам высокого уровня, поэтому мы просто прописываем “свое желание” одной строчкой, но а при компилировании (переводе в машинные коды), программа сама преобразует эту строчку как и в “классической” записи.

Второй переключатель – Sout. Этот переключатель имеет двойное назначение, в зависимости от настройки разрядов порта на вывод или ввод информации.
Если разряд порта настроен на вывод информации, то с его помощью мы устанавливаем на выходе разряда или логическую “1”, или логический “0”.
Если разряд порта настроен на ввод информации
, то с его помощью подключается так называемый “подтягивающий резистор” – Rup, или “внутренний нагрузочный резистор”. Благодаря этому резистору упрощается подключение внешних кнопок и переключателей, т.к. обычно контакты требуют внешнего резистора.
Как и переключатель Sin, Sout – это регистр ввода/вывода под названием PORTx, где “х” – буквенное обозначение порта (к примеру для порта D регистр будет иметь вид – PORTD).
В семейств МК Mega имеется дополнительный переключатель – PUD, — 2-й разряд регистра ввода/вывода SFIOR (он называется “Регистр специальных функций”). С помощью этого PUD осуществляется общее управление подтягивающими резисторами:
— при записи в этот разряд “1” – все подтягивающие резисторы для всех портов отключаются;
– при записи в этот разряд “0” – состояние подтягивающих резисторов определяется регистром PORTx.
Зачем нужно общее отключение резисторов, да и этот PUD заодно, мы сегодня рассматривать не будем.
В режиме работы разрядов порта на вывод, задача регистра PORTx очень проста – то, что мы в него запишем, то и будет на выходе. Запишем одни “нули” – на выходах буду логические нули, запишем “единицы” – на выходе буду логические “единицы”.
Например:
Настраиваем порт В на вывод информации:
Idi    R20, 0b11111111
Out   DDRB, R20
Выводим в разряды 0-3 логический ноль, а в разряды 4-7 логическую единицу:
Idi    R20, 0b11110000
Out   PORTB, R20
В Algorithm Builder:
#b11111111 –> DDRB
#b11110000 –> PORTB
Надеюсь, что пока все понятно.
Вышеприведенные примеры позволяют настроить весь порт сразу, и вывести нужные значения на все выводы порта за один раз.
Если необходимо настроить только один разряд порта на ввод или вывод, а также вывести “0” или “1” только в один разряд порта, не затрагивая состояние и содержание других разрядов этого порта, существуют следующие команды:
SBI A,b – установить разряд регистра
CBI A,b – сбросить разряд регистра
При этом: “А” – номер регистра, “b” – разряд этого регистра.
Данные команды работают не только с РВВ DDRx и PORTx, но и с теми, которые имеют номера от 0 до 31.

Пример:
— “классический” Ассемблер:
Настраиваем порт В на вывод информации:
Idi R20, 0b11111111
Out DDRB, R20
Нам нужно переключить 1-й разряд порта на ввод информации:
CBI $17, 1 (где $17 – номер РВВ порта В – DDRB, 1 – разряд порта В)
— Algorithm Builder:
#b11111111 –> DDRB
0 –> PORTB.1

У портов ввода/вывода есть еще один регистр: PINx, регистр выводов порта (“х” – буквенное обозначение порта)
Этот регистр предназначен для считывания информации с вывода порта, независимо в какой он конфигурации – на ввод, или на вывод. Записать в этот регистр мы ничего не можем, он предназначен только для считывания. 

Состояние выводов портов в зависимости от их конфигурации:

* PUD нет в МК Tiny и в МК модели ATMega161

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

Некоторые рекомендации по использованию портов ввода/вывода:

При сбросе или включении питания микроконтроллера все выводы всех портов (за очень-очень редким случаем) переводятся в высокоимпедансное состояние – “Z- состояние”. Этот момент следует учитывать в реальных схемах. Если нагрузкой выхода служит транзисторный ключ, то для того, чтобы его база (затвор полевого транзистора) не болтались в воздухе, необходимо ставить дополнительные внешние резисторы сопротивлением 10-100 кОм.

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

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

Подтягивающие резисторы не совсем “резисторы” – их роль выполняют полевые транзисторы, которые имеют большой технологический разброс – номинал подтягивающего сопротивления может колебаться в пределах 30-100 кОм. При мощных помехах, да и в других “критических случаях” рекомендуется (хотя такой рекомендации и нет в даташитах) подключать дополнительные подтягивающие резисторы номиналом 2-5 кОм. Такие резисторы следует устанавливать на вывод “Reset”, на выводы внешних прерываний, если они не используются. Также следует устанавливать резисторы при работе выводов МК на общую шину (I2C, или просто при подсоединении выхода МК к выходу другого устройства с открытым коллектором, при подключении к двухвыводным кнопкам). Сопротивление встроенного резистора в таких случаях слишком велико, чтобы отсеивать электромагнитные помехи.


Создаем программу «мигалку»

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

Для этого нам понадобится среда AVRStudio (о которой упоминалось раньше) и середа для симуляции микроконтроллера – Proteus 7. В сети маса примеров по установке этих программ, так что на этом останавливаться не будем.

Первая наша программа будет состоять из:

Подключения файла директив, инициализации МК;

Настройки портов ввода-вывода МК;

Простейшего цикла переключения портов из логического состояния «0» в «1»;

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

При штатной установке программы AVR Studio, файлы с директивами микроконтроллера располагается по следующему адресу C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes.

В нашем примере будем использовать микроконтроллер Attiny2313. Его inc файл имеет название 2313def.

Для начала откроем программу AVR Studio 4 и создадим проект.

Нажимаем на клавишу создания нового проекта.

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

В последнем окне необходимо выбрать симулятор и тип нашего МК. Далее, нажимаем на клавишу «finish» и можно будет увидеть, как откроется новое окно нашего проекта.

Наш проект уже создан и его можно наполнять программным кодом. Как говорилось раньше, первым делом нужно подключить файл директив данного микроконтроллера. Если возникнет необходимость проводить симуляцию проекта в среде AVR Studio 4, то желательно указать еще и имя нашего МК. Для этого нужно прописать следующую строку «.device ATtiny2313».

Для подключения inc файла, нужно прописать .include “tn2313def.inc”. Тем самым мы разрешим компилятору использовать файл директив данного МК.

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

К примеру, на следующем рисунке обозначена строка значения ОЗУ нашего МК. В программе мы пишем «spl», хотя можно написать и« $3d».

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

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

Итак, на Листинге 1 приведу пример нашей простой программы.

Листинг 1.

.device Attiny2313 ; указываем тип устройства

.include “tn2313def.inc” ; подключаем файл директив МК ATtiny2313

.def temp = r16 ; задаем имя нашему регистру общего назначения

.org 0x0000 ; начало программы с 0 адреса

ldi temp,ramend ; грузим значение ramend в регистр temp

out $3d, temp ;

ser temp ; настраиваем все выводы порта В на выход

out DDRB, temp ;

main:

sbi portb,5; устанавливаем логическую «1» в PORTB5

rjmp main

Итак, разберем все по строкам, что мы сделали.

Первым делом, на всякий случай указали тип устройства .device Attiny2313.

Подключили файл директив .include “tn2313def.inc”.

Для простоты написания программы задали регистру R16 имя .def temp = r16. Такая операция хорошо будет упрощать написание программы в дальнейшем. Ведь словесное название регистра нам проще запомнить, нежели просто писать R16. Таким образом, можно присвоить имя любому регистру начинаю от R0 и заканчивая R31.

Командой ser temp мы грузим в регистр temp значение 255 и выгружаем его в out DDRB. Тем самым конфигурируем порт на выход. В дальнейшем, при симуляции программы в Proteus 7, мы увидем как данные порты приймут состояние логического нуля.

Устанавливаем на порте вывода PB5 логическую единицу с помощью команды sbi portb,5.

В самом конце необходимо организовать какой-то цикл, чтобы микроконтроллер не завис.

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

Открываем среду моделирования Proteus 7 и смотрим результат.

Теперь немного усложним задачу и заставим порт вывода переключаться с логического нуля в единицу. Для этого нам необходимо немного доработать нашу программу, Листинг 2. Все изменения происходит только в цикле «main», так что весь код не будем повторять.

main:

sbi portb,5; устанавливаем логическую “1” в PORTB5

cbi portb,5; устанавливаем логический “0” в PORTB5

rjmp main

Смотрим результат моделирования в среде Proteus 7, пподключив к выводу PB5 осциллограф.

Как видно, сигнал на выходе порта появился. Однако частота переключения близка к частоте микроконтроллера.

Чтобы понизить скорость переключения, нам необходимо воспользоваться простой задержкой. На Листинге 3 показан простой пример реализации задержки.

Листинг 3.

main:

sbi portb,5; устанавливаем логическую “1” в PORTB5

rcall delay ;вызываем подпрограмму задержки

cbi portb,5; устанавливаем логический “0” в PORTB5

rcall delay

rjmp main

delay:

clr r20; очистить регистры

clr r21

d_1:

inc r20; добавить 1

cpi r20,200 ; сравниваем, R20 = 200 ?

brne d_1; если не равно, то переходим по метке d_1, иначе пропускаем

d_2:

inc r21

cpi r21,50 ;

brne d_1

ret

После выполнения данной программы скорость переключения порта снизилась до 100мс. Задавая значения сравнения в регистры R20 и R21 можно регулировать этот интервал. На следующем рисунке видим результат работы программы.

На этом закончим. В следующей части мы разберем примеры программы с подключением кнопок, напишем цикл бегущей строки.

Предыдущие статьи:

♦ Микроконтроллер и как его победить
♦ Микроконтроллер и системы счисления
♦ Микроконтроллер и логические операции
♦ Общее устройство микроконтроллера
♦ Арифметико-логическое устройство и организация памяти – память программ, память данных, энергонезависимая память
♦ Регистры общего назначения, регистры ввода/вывода, стек, счетчик команд
♦ Регистр состояния SREG



Проекты на микроконтроллерах AVR — Конфигурирование портов в Bascom-AVR

 

 Конфигурирование портов в Bascom-AVR

 

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

   Для того чтобы использовать любой порт микроконтроллера, его сперва необходимо сконфигурировать в качестве входа или выхода. На примере самого распространенного микроконтроллера AVR давайте сконфигурируем две его ножки в качестве выхода — PortB.0 (PB0) и входа PortB.1 (PB1)

 

 

 

   В Bascom-AVR конфигурация портов выглядит следующим образом:

 

Config PortB.0 = Output
Config PortB.1 = Input

   здесь мы отдельно указываем для каждого вывода микроконтроллера как он должен работать — как вход (Input) или как выход (Output).
   Такой способ удобен, когда нужно сконфигурировать небольшое количество ножек. 

 

 

   Бывают случаи когда весь порт должен быть сконфигурирован как вход или как выход, тогда пишется та же команда что и выше, но без указания номера порта:

 

Config PortB = Output                   ‘весь порт B сконфигурирован как выход

 

 

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

 

   К примеру, давайте сконфигурируем целиком порт микроконтроллера следующим образом:

PortB.0, PortB.1, PortB.3, PortB.5, PortB.6, PortB.7 на выход 

PortB.2 и PortB.4 на вход. 

 

   Из рассмотренного выше примера, можно записать вот так:

 

Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Input
Config Portb.3 = Output
Config Portb.4 = Input
Config Portb.5 = Output
Config Portb.6 = Output
Config Portb.7 = Output

   это все можно настроить через специальный регистр DDR, настройка займет всего одну строчку кода:
 

DDRB = 11101011       ‘2 и 4 ножки порта B сконфигурированы на вход, остальные — на выход

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

   Давайте рассмотрим самый простой пример: к микроконтроллеру Attiny2313 подключен светодиод и кнопка. Чтобы далеко не ходить, давайте сконфигурируем порты как в первом примере: т.е. PortB.0 — выход, сюда подключим светодиод; и PortB.1 — вход, сюда подключим кнопку. Получаем вот такую схему:

 

   Светодиод будет гореть если на анод (т.е. на PortB.0), будет подана логическая единица. Сразу после конфигурирования в качестве выхода, на ножке устанавливается низкий уровень и светодиод гореть не будет.

   Кнопка подключена таким образом, что при нажатии на входе порта установится логический 0 (говорят, что прижимаем порт к земле). 

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

 

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

 

$regfile = «2313def.dat»          ‘указываем компилятору что работать будем с Attiny2313
$crystal = 1000000                ‘частота работы микроконтроллера 1МГц

Config Portb.0 = Output           ‘устанавливаем PortB.0 в качестве выхода
Config Portb.1 = Input            ‘устанавливаем PortB.1 в качестве входа

Do                                ‘начало главного цикла

If Pinb.1 = 0 Then                ‘условие: если на входе обнаружен низкий уровень
 Portb.0 = 1                      ‘устанавливаем на выходе высокий уровень
 Else                             ‘иначе, если это условие не выполняется
 Portb.0 = 0                      ‘на выходе будет низкий уровень
End If

Loop                              ‘повторяем весь цикл сначала

End                               

‘конец программы
 

   Заметьте, что считывание состояния на входе происходит по команде Pin, а установка нужного уровня на выходе — по команде Port

 

   После компиляции программы (нажимаем F7), полученный *.hex файл прошиваем в микроконтроллер. Программатор, с помощью которого происходит прошивка программатора, можно собрать самостоятельно, схем в интернете очень много. Я лично остановил свой выбор на программаторе USBasp.

 

 

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

 

 

$regfile = «2313def.dat»          ‘указываем компилятору что работать будем с Attiny2313
$crystal = 1000000                ‘частота работы микроконтроллера 1МГц

Config Portb.0 = Output           ‘устанавливаем PortB.0 в качестве выхода
Config Portb.1 = Input            ‘устанавливаем PortB.1 в качестве входа

Led Alias Portb.0                 ‘даем имя порту выхода
Button Alias Pinb.1               ‘даем имя порту входа

Do                                ‘начало главного цикла

If Button = 0 Then                ‘условие: если на входе обнаружен низкий уровень
 Led = 1                          ‘устанавливаем на выходе высокий уровень
 Else                             ‘иначе, если это условие не выполняется
 Led = 0                          ‘на выходе будет низкий уровень
End If

Loop                              ‘повторяем весь цикл сначала

End                               ‘конец программы

 

 


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

 

 

 

 

 

 

 

 

Порты ввода/вывода микроконтроллеров AVR, их конфигурирование

В данной статье я хочу подробно остановится на портах ввода-вывода. Как основной элемент для получения информации микроконтроллером всегда используется порт. Порт в микроконтроллере может быть настроен на вход:
DDRB = 0x00; или на выход DDRB = 0xFF;

Синтаксис Си подразумевает конфигурацию портов именно таким, так сказать оператором DDR(я так подозреваю аббревиатура от дословного перевода Data Direction, может и нет :-))
То есть для того чтобы сконфигурировать весь порт B на вход или выход достаточно указать следующий код:

  1. ...

  2. int main (void)

  3. {

  4. DDRB = 0x00;

  5.  

  6. ...

  7. }

  8. ...


«…» — подразумевает какой-то код.

код 0x00 — соответствует шестнадцатиричному коду «00000000», для тех кто впервые сталкивается с микроконтроллерами будет полезно знать, что есть несколько вариантов записи числа, то есть, несколько вариантов в двоичной системе и в шестнадцатиричной. Для обозначения двоичного ввода числа в синтасисе Си предусмотрено использование опаретора:
0byyyyyyyy — где «y» 8 бит порта микроконтроллера. Для шестнадцатиричного вида записи числа в синтаксисе Си предусмотрен следующий оператор:
0xyy — где «y» 4 тетрады порта микроконтроллера. Для справки: тетрада — 4 бита, то есть «0000» к примеру, байт — 8 бит или соответственно 2 тетрады, то есть «00000000».
Для конвертирования кода из двоичной системы исчисления в шестнадцатиричную, из шестнадцатиричной в десятичную рекомендую использовать программу BinHexDec Converter.

Порт не обязательно настраивать полностью на вход или на выход. Возможны варианты частичного конфигурирования, такие как:
DDRB = 0x0F; (равносильно 0b00001111 — 4 бита на вход, 4 бита на выход)
Для удобства я иногда записываю побитово конфигурацию порта:

  1. DDRD &= ~_BV(PD2);//вход

  2. DDRD &= ~_BV(PD3);//...

  3. DDRD &= ~_BV(PD4);//...

  4. DDRD &= ~_BV(PD5);//вход

  5.  

  6. DDRB |= _BV(PB0);//выход

  7. DDRB |= _BV(PB1);//...

  8. DDRB |= _BV(PB2);//...

  9. DDRB |= _BV(PB3);//выход



На рисунке пример работы с BinHexDec Converter.

Порты ввода/вывода у каждого контроллера по своему мощны, некоторые могут выдержать нагрузку светодиода напрямую подключенного к выводу порта(например AtTiny2313 а некоторые не могут ATmega8), в результате чего порт просто выгорает. Поэтом, очень советую на, те же светодиоды, ставить ограничивающий ток резистор, номиналом от 750 Ом до 1кОм. И будете уверены что ни порт, ни светодиод не сгорит.

Честно говоря существует еще два вида записи конфигурации порта на ввод/вывод, но они уже устарели, да и они менее наглядные чем пред идущие с использованием операторов «0x..» и «0b……..».

  1. DDRB |= 1<<2; - сконфигурировать бит номер 2 порта B на выход то же самое означает запись:

  2. DDRB |= _BV(PB2);

Управление приборами через USB-порт компьютера на ATmega8. Рябенький В.М

Одним из наиболее простых и часто используемых способов организация обмена данными между компьютером и внешними устройствами является использование стандартных портов ввода-вывода — таких, как COM, LPT, IrDA и USB, а также промышленных интерфейсов SPI,12С, I-Wire. Данная книга посвящена объяснению принципов их работы и созданию управляющих пользовательских программ. Рассмотрены вопросы сопряжения устройств с компьютером по указанным интерфейсам. Рассмотрены вопросы сопряжения устройств с компьютером по указанным интерфейсам. Приводятся примеры схем, а также исходные коды программ для компьютера и микроконтроллеров семейства AVR, Пособие ориентировано на разработчиков электронной аппаратуры, у которых возникает необходимость в обеспечении программной поддержки своих устройств.

2. ПРОГРАММИРОВАНИЕ LPT-ПОРТА
2.1. Установка драйвера giveio sys
2:2. Управление состоянием линий LPT-порта
2.3. Схема стенда для отладки программы
2.4. Сопряжение микроконтроллера с LPT-портом
2.5. Аппаратно-программные средства снятия вольт-амперных характеристик полупроводниковых приборов
2.5.1. Снятие вольт-амперных характеристик биполярных транзисторов
2.5.2. Снятие вольтамперных характеристик полевых транзисторов
2.5.3. Снятие вольт-амперных характеристик диодов
2.5.4. Снятие вольт-амперных характеристик стабилитронов
2.5.5. Блок управления
2.5.6. Описание программных средств

3 ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ
3.1. Аппаратная организация порта
3.2. Интерфейс RS-232C
3.3. Электрический интерфейс
3.4. Управление потоком передачи
3.4. Интерфейс «токовая петля»
3.6. Инфракрасный интерфейс
3.7. Интерфейс MIDI
3.8. Конфигурирование СОМ-портов
3.9. Использование СОМ-портов
3.10. Неисправности и тестирование СОМ-портов
3.10.1. Проверка конфигурирования
3.10.2. Функциональное тестирование
3.11. Программирование UART для микроконтроллеров
3.11.1. Передача данных
3 11.2. Прием данных
3.11.3. Управление UART
3.11.4. Бод-генсратор (Baud Rate Generator)
3.12. Сопряжение компьютера с микроконтроллером по СОМ-порту
3.13. Программа для микроконтроллера

4. ПРОГРАММИРОВАНИЕ СОМ-ПОРТОВ
4.1. Открытие порта
3.2. Настройка параметров порта
4.3. Настройка тайм-аутов
4.4. Использование стандартного диалога настроек порта
4.5. Прием и передача данных
4.6. Использование потоков

5. ШИНА USB
5.1. Аппаратная организация шины
5.2. Преобразователи USB-FIFO
5.3. Подключение микросхемы FT245BM к USB
5.4. Преобразователи USB-RS232
5.5. Подключение микросхемы FT232BM к USB

6. ПРОГРАММИРОВАНИЕ USB-ШИНЫ
6.1. Установка драйверов
6.2 .Определение подключенных устройств. Получение информации об устройстве
6.3. Организация обмена данными
6.4. Программа для контроллера AVR
6.5. Использование тайм-аутов
6.6. Программирование устройств на базе FT232
6.7. Программирование EEPROM
6.8. Коды ошибок при работе с USB

7. ОБЗОР ПРОГРАММНЫХ СРЕДСТВ ДЛЯ РАБОТЫ С ПОРТАМИ
7.1. Proteus
7.2. SCADA-снстемы
7.2.1. Принцип работы SCADA систем
7.2.2. Система Genie
7.3. Teiminat
7.4. Wtnscope

8. ПРИНЦИПЫ ОРГАНИЗАЦИИ СЕТЕВЫХ КОММУНИКАЦИЙ
8.1. Использование Windows Sockets
8.2. Инициализация Winsock
8.3. Создание гнезда и открытие соединения
8.4. Отправление и получение сообщений
8.5. Управление процессом генерации сообщений
8.6. Пример разработки программы
ПРИЛОЖЕНИЯ
ЛИТЕРАТУРА

Издательство: Олди-плюс
Год издания: 2008
Страниц: 380
ISBN: 978-966-8447-51-8
Язык: русский
Формат: PDF
Размер: 8,5 Мб
Скачать: Рябенький В.М. Компьютерное управление внешними устройствами через стандартные интерфейсы

13-01-2014

ATiny2313

Захаров Денис, Украина

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

Причина такого выбора очевидна — практически все контроллеры имеют аппаратные модули UART, с помощью которых можно передавать информацию при минимальном расходе ресурсов МК. Кроме того, существует множество хорошо зарекомендовавших себя программ, предназначенных для работы с COM-портом. Поскольку сигналы МК имеют уровни TTL, для согласования с интерфейсом RS-232 необходим преобразователь уровней. Часто его выполняют на основе доступной и популярной микросхемы MAX232 .

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

Прибор состоит из вполне доступных и распространенных элементов. Обе микросхемы — микроконтроллеры ATtiny2313 семейства . Первый контроллер подключен к USB-порту компьютера и выполняет функцию конвертора форматов USB-COM. Второй подключается к первому и все время сканирует команды, которые посылаются с ПК через терминальную программу Terminal v1.9b.

Подключенный к выводу 2 USB резистор R4 переводит устройство в низкоскоростной режим LS, позволяющий при обмене данными со скоростью 1.5 Мбит/с с помощью программы выпонять расшифровку посылок от ПК.

С помощью резисторов R2 и R3 происходит устранение переходных процессов. Конденсатор С5 блокирует импульсные помехи в цепи питания. Стабилитроны D1 и D2 необходимы для согласования логических уровней МК и USB входа ПК. Для безошибочной передачи данных между контроллерами частоты кварцевых резонаторов должны быть равны 12 и 4 МГц.
К выводам /RESET следует подключить подтягивающие резисторы, чтобы в дальнейшем избежать произвольного сброса МК из-за влияния помех и статических напряжений. В данной схеме все команды отображаются на светодиодах, подключенных к порту В. Чтобы управлять какими-либо устройствами, необходимо подключать выходы контроллера к реле (Рисунок 2).

Собрать устройство можно на макетной плате, хотя лучше, все же, на полноценной печатной плате. Элементы можно разместить, например, так, как показано на Рисунке 3.

Программа для микроконтроллера U1 разработана товарищем GetChiper в среде Bascom-AVR. Для работы с шиной USB использована библиотека swusb.LBX . С ее помощью выполняется программное декодирование USB протокола в режиме реального времени. Для работы устройства с ПК, нужно установить соответствующие драйверы, скопировав их на жесткий диск. При первом подключении устройство опознается и запросит драйвер. Далее нужно указать путь к папке с файлами, и все заработает.

Программа микроконтроллера U2 была написана мною в среде AVRStudio на языке ассемблера. Блок-схема алгоритма работы МК представлена на Рисунке 4. Аппаратный модуль UART следует настроить на прерывание по завершению приема данных. Сам МК не будет выполнять ни одной функции, пока не наступит прерывание. Для снижения энергопотребления можно воспользоваться режимом sleep, но в данной конструкции этого делать не понадобилось. Как только из терминала ПК последуют команды, МК мгновенно перейдет к их сканированию. На данный момент контроллер поддерживает следующую систему команд:

-on1, on2, on3, on4, on5, on6, on7, on8 — команды установки портов в «лог. 1»;
-off1, off2, off3, off4, off5, off6, off7, off8 — команды установки портов в «лог. 0»;
-ser — установить все порты в активное состояние «лог. 1»;
-clr — сбросить все порты в состояние «лог.0».

После окончания ввода каждой команды необходимо нажимать Enter. Таким образом МК сможет определить конец команды и приступить к ее сканированию. На каждую верную команду контроллер будет отвечать «ok». Если ввести неверные данные, то в терминальную строку вернется «error». Пример выполнения команды показан на Рисунке 5.

Версия прошивки 1.0. Выставлять фьюзы необходимо в соответствии с Рисунком 6. Разрабатывается следующая версия прошивки, где будет происходить самообучение МК и изменение систем команд в терминале.

Программное обеспечение МК, виртуальная модель Proteus и драйвер для ПК —
Протокол передачи данных между МК и ПК- скачать

Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться .

  • ….вообще-то хотелось увидеть соопрежение м/у USB-портом одного компьютера с COM-портом второго…или LPT-порта третьего…
  • Спасибо! Опечатка исправлена:)
  • Зачем использовать 2 МК? Неужели у Attiny2313 мало flash? Или просто не хватает портов I/O? Тогда ладно, видно, что USB висит на INT0/INT1.
  • Сопротивление катушек маломощных реле в районе 100-200 Ом, не учитывая насыщенный транзистор (это же не пускатель, и не контактор). Так что 50-200 мА подходящий ключ не испугается. Материал очень интересен в плане привязки МК к USB без всяких интерфейсных микросхем и без присутствия в структуре МК аппаратного USB. Но учитывая цели и задачи первоисточника http://www.recursion.jp/avrcdc/cdc-232.html, из двух МК один выполняет всё же функции преобразователя USB-COM. И весьма дешёвого преобразователя, что безусловно радует.
  • Вот интересный гражданин попался с «дворянскими замашками», судя по нику. О каких экстремумах идёт речь? Вроде в материале нет даже упоминания о типе реле или транзисторов. И если реле запитывается от 5В USB то, безусловно, хотелось бы минимизировать потребление со стороны хоста на ПК. Этого можно добиться оптронами и дополнительным питанием реле со стороны нагрузки, что усложняет схему. Или ещё пару вариантов. Разве акцент в статье сделан на оптимизации? Автор добился своего и правильно делает, что не выкладывает конкретную плату. Для того, кто будет повторять, данного узла достаточно.
  • Да, статейка еще та… но стоит ли так опситраться? Я тоже хотел кое что прокомментировать сразу как ее прочел, и диод в том числе. Но анонимно тут нельзя. Вот зачем автору AVR-CDC? Я не заметил что где-то в схеме используются сигналы DTR, DTS, RTS, CTS. V-USB не хватило? Про два «кирпича» уже написали выше, — хватило бы и одного. А про диод уже исправлено, слава Будде! Диод нужен для защиты транзистора от импульса напряжения самоиндукции обмотки реле, в момент размыкания тока. Вот, кстати, вспомнил одну реализацию. Статья была в журнале Радио, но и в интернетах нашлась, кому интересно можете глянуть.

Управление устройствами через USB-порт компьютера.

П. ВЫСОЧАНСКИЙ, г. Рыбница, Приднестровье, Молдавия
Устройство компьютерного управления различными приборами, схема которого показана на рис. 1, функционально подобно описанному в , но подключается к USB-порту компьютера, который (в отличие от СОМ-порта) сегодня есть в каждом из них. Единственная микросхема устройства — распространенный микроконтроллер ATmega8. Он необходим для организации связи по шине USB. Хотя в нем и отсутствует специализированный аппаратный модуль, эта функция выполняется программно.

Резистор R1, подключенный между положительным выводом источника питания и линией D-шины USB, переводит ее в низкоскоростной режим LS со скоростью обмена 1,5 Мбит/с, что и позволяет расшифровывать посыпки компьютера программным способом. Резисторы R4 и В5 устраняют переходные процессы, возникающие при обмене информацией, что увеличивает стабильность работы. Конденсатор С1 блокирует импульсные помехи в цепи питания, что также улучшает стабильность работы устройства. Диоды VD1 и VD2 служат для понижения напряжения питания микроконтроллера приблизительно до 3,6 В — это требуетсядля согласования уровнен с шиной USB.
Сигналы управления приборами формируются на выходах РВ0-РВ5 и РСО, РС1 микроконтроллера. Высокий логический уровень — напряжение около 3,4 В.
Напряжение низкого уровня близко к нулю. К выходам можно подключать приборы, потребляющие ток не более 10 мА (от каждого выхода). Если требуются большие значения тока или напряжения, то следует использовать узлы согласования, показанные в на рис. 5 и 6. Устройство собрано на макетной плате, печатная не разрабатывалась Применены резисторы МЛТ, конденсаторы С2 и СЗ — керамические высокочастотные, С1 — К50-35 или аналогичный импортный. Диоды кремниевые с падением напряжения на переходе около 0,7 В. Программа для микроконтроллера разработана в среде Bascom-AVR версии 1.12.0.0. Для работы с шиной USB использована библиотека swusb.LBX, которая выполняет программное декодирование сигналов USB в режиме реального времени. Полученный в результате компиляции код программы из файла с расширением HEX следует загрузить во FLASH-память микроконтроллера. Для этого был использован программатор совместно со встроенной в Bascom-AVR утилитой. Состояние разрядов конфигурации микроконтроллера должно соответствовать показанному на рис.2


При первом подключении устройства к компьютеру операционная система обнаружит новое USB HID совместимое устройство с именем «uniUSB» и установит необходимые драйверы. Через несколько секунд устройство настроено и готово к использованию. Для работы с ним была создана программа UniUSB. Она представлена в двух вариантах: для 32-разрядных (х86) и 64-разрядных (х64) операционных систем семейства Windows. Работа 32-разрядной версии проверена в операционных: Windows 98, Windows XP, Windows 7, а 64-разрядной — только в Windows XP х64. Программа UniUSB написана иа языке PureBasic (версия 4.31) с использованием библиотеки пользовательских функций HID Lib, поддерживающей работу с USB HID устройствами. Внешний вид окна программы показан на Рис.3


В одной папке с ее исполняемым файлом должен находиться файл, называющийся UniUSB_код.txt или UniCOM_код.txt. Последний вариант необходим для совместимости с программой UniCOM, предложенной в . В этом файле хранится сценарий управления внешними приборами. При запуске программы данные из файла загружаются в таблицу, расположенную в главном окне, а при завершении работы сохраняются в файле. Щелчок левой кнопкой мыши по ячейкам таблицы позволяет изменять их состояние: 1 — высокий логический уровень, 0 или пусто — низкий логический уровень. Для добавления или удаления столбца таблицы нужно по ней щелкнуть правой кнопкой мыши и в появившемся меню выбрать требуемое действие. При подключении устройства к USB-порту программа обнаружит его и активирует кнопку, расположенную в верхней части окна на панели инструментов. Нажатием на эту кнопку запускают процесс перебора столбцов таблицы и установки указанных в них состояний выходов. Для большей наглядности слева от таблицы подсвечиваются номера выходов, на которых в данный момент установлен высокий логический уровень. Скорость перебора (время в миллисекундах между переходами от столбца к столбцу) задают в поле «Скорость, мс». Учтите, операционная система Windows — многозадачная! Это означает, что процессорное время делится между множеством иногда скрытых от пользователя процессов, которые выполняются по очереди с учетом установленных в системе приоритетов. По этому не стоит ожидать большой точности выдерживания интервалов времени менее 100 мс.
Для кратковременной остановки перебора столбцов используйте кнопку, Повторное нажатие на нее продолжит перебор с места остановки. Кнопка полностью прекращает перебор столбцов таблицы. Если в процессе обмена информацией между компьютером и устройством произойдет сбой либо устройство будет отключено от разъема USB компьютера, программа сообщит об ошибке, выведя в строке состояния соответствующее сообщение.

ЛИТЕРАТУРА

1. Носов Т. Управление приборами через СОМ-порт компьютера — Радио, 2007, № 11,с.61,62.
2. Рыжков A. US-программатор микроконтроллеров AVR и AT89S, совместимый с AVR910. — Радио, 2008, № 7, с. 28, 29.

По материалам журнала «Радио 2`2011»
Скачать прошивку микроконтроллера и программу для PC можно

Устройство компьютерного управления
различными приборами, схема которого показана на рис. 1, функцио­нально подобно
описанному в , но подключается к USB-порту компьюте­ра, который (в отличие
от СОМ-порта) сегодня есть в каждом из них. Единственная мик­росхема устройства
— распространенный мик­роконтроллер ATmega8. Он необходим для орга­низации
связи по шине USB. Хотя в нем и отсут­ствует специализирован­ный аппаратный
модуль, эта функция выполняется программно. Резистор R1, подклю­ченный между
положи­тельным выводом источ­ника питания и линией D-шины USB, переводит ее в низкоскоростной
режим LS со скоростью обмена 1,5 Мбит/с, что и позво­ляет расшифровывать по­сылки
компьютера про­граммным способом. Ре­зисторы R4 и R5 устра­няют переходные
процес­сы, возникающие при об­мене информацией, что увеличивает стабильность работы.
Конденсатор С1 блокирует импульсные по­мехи в цепи питания, что также улучшает
стабиль­ность работы устройства. Диоды VD1 и VD2 служат для понижения напряже­ния
питания микроконт­роллера приблизительно до 3,6 В — это требуется для
согласования уровней с шиной USB. Сигналы управления приборами формируются на
выходах РВ0-РВ5 и РС0, РС1 микроконтроллера. Высокий логический уровень —
напряжение око­ло 3,4 В. Напряжение низкого уровня близко к нулю. К выходам
можно под­ключать приборы, потребляющие ток не более 10 мА (от каждого выхода).
Если требуются большие значения тока или напряжения, то следует использовать узлы
согласования, показанные в на рис. 5 и 6.

Устройство собрано на макетной плате,
печатная не разрабатывалась. Применены резисторы МЛТ, конденса­торы С2 и С3 —
керамические высоко­частотные, С1 — К50-35 или аналогич­ный импортный. Диоды
кремниевые с падением напряжения на переходе около 0,7 В. Программа для микро­контроллера
разработана в среде Bascom-AVR версии 1.12.0.0. Для работы с шиной USB
использована библиотека swusb.LBX, которая выполняет программное декодирование сигналов
USB в режиме реаль­ного времени. Полученный в результате компиляции код программы
из файла с расши­рением HEX следует загрузить во FLASH-память микроконт­роллера.
Для этого был ис­пользован программатор совместно со встроенной в Bascom-AVR
утилитой. Состоя­ние разрядов конфигурации микроконтроллера должно со­ответствовать
показанному на рис. 2. При первом подключении устройства к компьютеру опе­рационная
система обнаружит новое USB HID совместимое устройство с именем
“uniUSB” и установит необходимые драйверы. Через несколько се­кунд
устройство настроено и готово к использованию.

Для работы с ним была создана программа
UniUSB. Она пред­ставлена в двух вариантах: для 32-разрядных (х86) и 64-раз­рядных
(х64) операционных систем семейства Windows. Работа 32-разрядной версии проверена
в операционных системах Windows 98, Windows ХР, Windows 7, а 64-разрядной —
только в Windows ХР х64. Программа UniUSB написана на языке PureBasic (версия
4.31) с исполь­зованием библиотеки пользовательс­ких функций HID_lib,
поддерживающей работу с USB HID устройствами. Внеш­ний вид окна программы
показан на рис. 3. В одной папке с ее исполняемым файлом должен находиться
файл, называющийся UniUSB_Код.txt или UniCOM_Код.txt. Последний вариант необходим
для совместимости с про­граммой UniCOM, предложенной в . В этом файле
хранится сценарий управ­ления внешними приборами. При запуске программы данные
из файла загружаются в таблицу, расположенную в главном окне, а при завершении
рабо­ты сохраняются в файле. Щелчок левой кнопкой мыши по ячейкам таблицы поз­воляет
изменять их состояние: 1 — высокий логический уровень, 0 или пусто — низкий
логический уровень. Для добавления или удаления столбца таблицы нужно по ней
щелкнуть правой кнопкой мыши и в появившемся меню выбрать требуемое действие.

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

Учтите, операционная система Windows
— многозадачная! Это означает, что процессорное время делится между множеством
иногда скрытых от пользователя процессов, которые вы­полняются по очереди с
учетом уста­новленных в системе приоритетов. По­этому не стоит ожидать большой
точно­сти выдерживания интервалов времени менее 100 мс. Для кратковременной
остановки пе­ребора столбцов используйте кнопку Повторное нажатие на нее
продолжит перебор с места остановки. Кнопка полностью прекращает перебор столб­цов
таблицы. Если в процессе обмена информацией между компьютером и устройством
произойдет сбой либо уст­ройство будет отключено от разъема USB компьютера,
программа сообщит об ошибке, выведя в строке состояния соответствующее
сообщение.

ЛИТЕРАТУРА

1. Носов Т. Управление приборами
через СОМ-порт компьютера. — Радио, 2007, № 11,0.61,62.

2. Рыжков А. US-программатор
микро­контроллеров AVR и AT89S, совместимый с AVR910. — Радио, 2008, № 7, с.
28, 29.

От редакции . Программы для микро­контроллера и компьютера находятся
на нашем FTP-сервере по адресу ftp:// ftp.radio.ru/pub/2011/02/uniUSB.zip

Facebook

Twitter

Вконтакте

Одноклассники

Google+

Статьи по теме

Порты ввода-вывода

AVR — ATMega32 AVR

Микроконтроллеры

AVR — это современные микроконтроллеры. С 1996 года они появляются. В семействе AVR доступно очень много контроллеров. В основном семейство AVR подразделяется на ATmega, ATtiny, Xmega, UC3, SAM3 и SAM4. В этой форме доступны контроллеры от 8 до 32 бит. Все контроллеры имеют некоторые общие и некоторые различные функции, которые переходят к общим функциям, все имеют порты ввода-вывода, таймеры / счетчики, прерывания и т. Д., Переходя к особым функциям, таким как аналого-цифровые преобразователи, ШИМ, цифро-аналоговый преобразователь. , на микросхеме I2C, интерфейсах последовательной связи, на микросхеме EEPROM и т. д.мы можем использовать все эти функции в соответствии с нашими требованиями путем программирования.

Сначала мы должны обсудить порты ввода / вывода. Обычно микроконтроллеры AVR имеют четыре порта ввода-вывода, называемые PORTA, PORTB, PORTC, PORTD. Возьмем, к примеру, микроконтроллеры ATMEGA8, ATMEGA 16 или ATMEGA32, любой из которых имеет четыре порта ввода-вывода, каждый порт имеет 8 линий ввода-вывода, а в целом каждый контроллер имеет 32 линии ввода-вывода. Эти 32 линии ввода-вывода являются двунаправленными, что означает, что мы можем использовать эти линии ввода-вывода как для ввода, так и для вывода.В дополнение к каждому этот вывод имеет некоторые другие функции, такие как АЦП, таймеры, прерывания, выводы последовательной связи и другие выводы. Для выполнения любой операции с выводами ввода-вывода общего назначения (GPIO) необходимо настроить три регистра. Эти регистры называются DDRx, PORTx, PINx (здесь «x» обозначает имя регистра A, B, C или D).

Каждый регистр этих трех регистров является 8-битным регистром, что обычно означает, что каждый порт имеет 8 контактов, так как каждый регистр имеет 8 бит, и каждый контакт ссылается на бит регистра.Если мы хотим настроить какой-либо вывод порта, мы можем настроить соответствующие биты всех трех регистров. В этой статье я использую в качестве примера микроконтроллер ATMEGA32. Теперь, если мы хотим настроить эти 8-контактные контакты 22-29 микроконтроллера, необходимо настроить соответствующие три 8-битных регистра. Здесь понятно объяснение, в ATMEGA32 пин 22-29 относится к PORTC. Поэтому, если мы хотим настроить PORTC, нам нужно настроить регистры DDRC, PORTC и PINC.

Эти 8 бит разделены на две группы по 4 бита и называются нижними полубайтами и верхними полубайтами.0-3 биты называются младшими полубайтами, а 4-7 битов называются старшими полубайтами.

Настройка ПОРТА:

Выше мы обсуждали, что если вы хотите настроить один порт; необходимо настроить соответствующие три регистра порта. Итак, теперь мы настраиваем PORTc, поэтому нам нужно настроить регистры DDRC, PORTC и PINC. Теперь мы можем подробно обсудить эти три регистра здесь.

Регистр DDRx:

Имя регистра — Регистр направления данных.Название указывает только на полное использование регистра, который является направлением данных. Есть только два направления. Это контроллер к модулю и модуль к контроллеру. Если направление данных — от модуля к контроллеру, это ввод, если данные передаются от контроллера к модулю, который выводится. Таким образом, два направления — это входное направление и выходное направление.

Этот регистр используется для назначения вывода порта либо как направление ввода, либо как направление вывода. В этом регистре порт и вывод обозначены как «DDRxn», здесь «x» указывает имя порта, а «n» указывает номер контакта.Например, вывод 26 относится к 4 -м. Вывод PORTC определяется как DDRC4. Как правило, эти выводы GPIO являются выводами цифрового ввода / вывода, что означает, что они имеют только две логики: logic0 и logic1. То же, что и эти DDR. Если DDRxn записан как логическая единица, вывод конфигурируется как вывод. Если DDRxn записан как логический ноль, вывод конфигурируется как входной вывод.

Глубин Атмела Атмега | AVR — 8051 Учебники

Подготовка ПК

Чтобы начать работу с микроконтроллерами серии Atmel Atmega, вам необходимо установить Atmel Studio вместе с подходящим программатором .Также должны быть установлены драйверы используемого программатора. После установки Atmel Studio при открытии вы увидите экран, показанный ниже:

Щелкните значок New Project слева. Появляется новый экран:

Выберите GCC C Исполняемый проект. Вашему проекту можно дать любое имя. В примере это «Мигание». Также установите каталог, в котором будет сохранен проект, и нажмите OK.

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

Наконец, появляется окно, как показано ниже, где можно записать коды:

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

После того, как код был написан, необходимо нажать F7, чтобы скомпилировал код и сгенерировал шестнадцатеричные файлы. Теперь, чтобы передать шестнадцатеричные файлы на чип, к компьютеру должен быть подключен аппаратный программатор.При этом убедитесь, что микроконтроллер подключен к программатору.

Перейти к Инструменты > Добавить цель . Вы увидите следующее:

Под последовательным портом выберите COM-порт, к которому подключен ваш программатор. Его можно найти в диспетчере устройств вашей системы. Нажмите «Применить».

Теперь перейдите к Инструменты > Программирование устройства:

В разделе «Устройство» выберите микросхему, которую необходимо запрограммировать, и нажмите «Применить».Это подключит ваш компьютер к микроконтроллеру. Чтобы запрограммировать чип, перейдите в раздел памяти и найдите шестнадцатеричный файл во флэш-памяти. Не связывайтесь с предохранителями и запорными битами. Выполнение этого без соответствующих знаний может сделать ваш чип бесполезным. Он будет находиться в папке отладки, в которой вы сохранили свой проект. После того, как вы выбрали файл, нажмите программу. Светодиоды на программаторе будут мигать соответствующим образом, и по завершении вы получите сообщение, подтверждающее мигание… ОК….

Вы закончили с основами загрузки программы в свой чип.

Цифровые входы / выходы Atmega8

Наиболее широко используемая периферия любого микроконтроллера — это его цифровые порты ввода-вывода. Это позволяет микроконтроллеру принимать сигналы из внешней среды и посылать сигналы туда же. Будет очень мало приложений микроконтроллеров, которые не используют цифровые порты. Объяснения будут основаны на Atmega8, недорогом чипе от Atmel.

Atmega8 имеет два 8-битных цифровых порта B, D и семибитный порт C.Все они имеют возможность двунаправленной передачи данных (могут использоваться как ввод или вывод). Всегда полезно обратиться к техническому описанию, которое можно найти здесь:

http://www.atmel.com/images/atmel-2486-8-bit-avr-microcontroller-atmega8_l_datasheet.pdf

Ниже приведена схема контактов Atmega8 :

.

Как показано на рисунке, выводы PB0 (вывод 14) — PB5 (вывод 19) — это 6 из 8 бит порта B. Точно так же выводы PC0-PC6 являются 7 битами порта C.Аналогично случаю с портом D. Каждый из этих битов может быть установлен как входной контакт или выход независимо от состояния других битов в порту, то есть PB0 может быть входным контактом, даже если PB1 является выходным контактом. Следует отметить, что большинство цифровых выводов служат для других целей, таких как MISO, MOSI и т. Д. PC6 является выводом сброса по умолчанию и не может использоваться как обычный цифровой вывод, если вы не измените настройки предохранителя.

Каждый порт имеет Регистр направления данных (DDR), содержимое которого определяет, является ли каждый бит порта входом или выходом.

Рассмотрим PORTB. Соответствующий регистр направления данных — DDRB. Графическое изображение показано ниже:

Присваивая биту в регистре DDRB значение 0, устанавливает соответствующий бит порта на входной бит и, делая его равным 1, устанавливает этот бит на выход. Таким образом, если DDRB равен 10101010, PB7, 5, 3,1 становится выходом, а 6,4,2,0 становится входом.

Входной порт

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

Установка для DDRB значения 00000000 делает его входным портом и по умолчанию будет находиться в состоянии высокого импеданса. Теперь пины PB0-7 готовы принимать вводы напряжения. Максимальное входное напряжение должно быть ограничено до 5 В.

PINB — это регистр, который будет содержать входные значения порта B.

Если вы подключите логическую 1 к контакту PB0 и PB7, когда он является входом, регистр PINB станет 10000001.

Выходной порт

Когда бит порта определен как выход, он может иметь два состояния, то есть логическая 1 (5 В) или логический 0 (0 В). Значение по умолчанию — логический 0. Еще раз возьмем, например, цифровой порт B, установка DDRB на 11111111 делает его выходом.

Значение регистра PORTB определяет логические уровни выходных контактов. Если PORTB — 11111111, все контакты PB0-7 будут иметь логическую 1, а если это 00000000, все контакты будут иметь логический 0.

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

Предположим, что DDRB — 00000000. Это устанавливает B как вход. Теперь, если PORTB установлен равным 11110000, тогда подтягивающие резисторы будут активированы в PB0-3 и PB4-7, которые перейдут в состояние высокого импеданса (три состояния).

Программирование цифровых входов / выходов

Теперь мы собираемся сделать что-нибудь реальное с выводами ввода / вывода Atmega8 .Мы будем управлять светодиодом одним нажатием кнопки.

Схема

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

Программа

 # включить  // Базовая библиотека ввода / вывода для микроконтроллеров AVR
 int main (void) // основная функция
 {
     int switch = 0; // сохраняет статус переключателя
     DDRB = 0b00000001; // PB0 настроен на вывод
     DDRC = 0b00000000; // весь регистр C настроен на ввод, но мы используем только PC0
     while (1) // бесконечный цикл
         {
         переключатель = PINC; // содержимое регистра PINC сохраняется
         PORTB = переключатель; // содержимое переменной switch копируется в регистр PORTB
         }
 }
 

В приведенном выше фрагменте кода регистры DDR B и C установлены так, что PB0 выводится, а PC0 — ввод.Префикс «0b» означает, что следующие данные находятся в двоичном формате. То же самое можно сделать в шестнадцатеричной системе счисления, используя «0x» или в десятичной системе (без префикса). Бесконечный цикл используется для поддержки выполнения кода, пока микроконтроллер находится под напряжением.

Состояние входного регистра PINC: 00000000, пока переключатель не нажат, и 00000001, когда переключатель нажат. Значение сохраняется во временной переменной «switch», которая затем копируется в выходной регистр PORTB. Светодиод подключен к 0-му биту PORTB.Следовательно, светодиод светится при нажатии переключателя и гаснет при отпускании.

Теперь подключите цепь, и все готово. Если вы использовали тот же код и схему, что и выше, вы увидите, что светодиод загорается, когда вы нажимаете кнопку, и гаснет, когда вы ее отпускаете.
Вы можете скачать файл C и шестнадцатеричный файл из документации.

AVR ATmega8 Microcontroller Serial Communication (UART) Tutorial

В этом руководстве мы собираемся установить последовательную связь между двумя микроконтроллерами ATMEGA8. Здесь устанавливается связь типа UART (универсальный асинхронный приемный передатчик). Благодаря этому данные последовательной связи могут совместно использоваться двумя микроконтроллерами, что требуется в различных встроенных системах.

Необходимые компоненты

Аппаратное обеспечение: ATMEGA8 (2 шт.), Источник питания (5 В), ПРОГРАММАТОР AVR-ISP, конденсатор 100 мкФ (подключен к источнику питания), резистор 1 кОм (два шт.), Светодиод, кнопка.

Программное обеспечение: Atmel studio 6.1, прогисп или флеш-магия.

Принципиальная схема и пояснения

Давайте разберемся с последовательной связью в микроконтроллерах AVR . Здесь ATMEGA последовательно отправляет данные другому ATMEGA. У него другой режим связи, но для облегчения связи мы выбираем RS232. Вывод RS232 первого ATMEGA8 подключен к выводу RXD второго ATMEGA8.

Установленная передача данных запрограммирована следующим образом:

  1. Восемь бит данных
  2. Два стопорных бита
  3. Нет бита проверки на четность
  4. Скорость передачи 2400 бит / с (бит в секунду)
  5. Асинхронная связь (нет разделения часов между двумя ATMEGA8)

Итак, у нас есть два установленных регистра для двух ATMEGA8 по-разному, где один действует как ПЕРЕДАТЧИК, а другой — как ПРИЕМНИК.

Теперь для интерфейса RS232 между двумя микроконтроллерами ATmega должны быть выполнены следующие функции для ПЕРЕДАТЧИКА и ПРИЕМНИКА:

1. Вывод TXD (функция приема данных) первого контроллера должен быть включен для ПЕРЕДАТЧИКА, а вывод RXD второго контроллера должен быть включен для ПРИЕМНИКА.

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

3. ДАННЫЕ передаются и принимаются контроллеру в 8-битном режиме. Таким образом, контроллеру будут отправляться два символа одновременно.

4. В данных, отправленных модулем, нет битов четности, одного стопового бита.

Вышеуказанные функции устанавливаются в регистрах контроллера; обсудим их кратко,

ТЕМНО-СЕРЫЙ (UDRE): (СТОРОНА TRASMITTER) Этот бит не устанавливается во время запуска, но используется во время работы для проверки готовности передатчика к передаче.Смотрите программу на TRASMITTER SIDE для более подробной информации.

СВЕТЛО-СЕРЫЙ (RXC): (ПРИЕМНАЯ СТОРОНА) Этот бит не устанавливается во время запуска, но он используется во время работы, чтобы проверить, готов ли приемник к приему данных или нет. Смотрите программу на ПРИЕМНОЙ СТОРОНЕ для более подробной информации.

VOILET (TXEN): (TRASMITTER SIDE) Этот бит установлен для включения вывода передатчика на TRASMITTER SIDE.

КРАСНЫЙ (RXEN): (ПРИЕМНАЯ СТОРОНА) Этот бит представляет функцию приема данных, этот бит должен быть установлен, чтобы данные от модуля были получены контроллером, он также включает вывод RXD контроллера.

КОРИЧНЕВЫЙ (RXCIE): этот бит должен быть установлен для получения прерывания после успешного приема данных. Включив этот бит, мы узнаем об этом сразу после получения 8-битных данных. Мы не собираемся здесь использовать этот бит, поэтому оставим его в покое.

PINK (URSEL): этот бит должен быть установлен перед включением других битов в UCSRC, после установки других необходимых битов в UCSRC; URSEL должен быть отключен или обнулен. Мы не собираемся здесь использовать этот бит, поэтому оставим его в покое.

ЖЕЛТЫЙ (UCSZ0, UCSZ1, UCSZ2): (ПРИЕМНАЯ СТОРОНА И СТОРОНА TRASMITTER) Эти три бита используются для выбора количества битов данных, которые мы получаем или отправляем за один раз.

Связь между двумя ATMEGA устанавливается как восьмибитная связь. Сопоставив связь с таблицей, мы имеем UCSZ0, UCSZ1 к единице и UCSZ2 к нулю.

Мы должны установить их как на приемной, так и на передающей стороне.

ОРАНЖЕВЫЙ (UMSEL): (ПРИЕМНАЯ СТОРОНА И СТОРОНА ТРАЗМИТТЕРА) Этот бит устанавливается в зависимости от того, обменивается ли система асинхронно (обе используют разные часы) или синхронно (обе используют одинаковые часы).

Оба контроллера не используют общие часы.Поскольку оба они используют собственные внутренние часы. Поэтому нам нужно установить UMSEL на 0 в обоих контроллерах.

ЗЕЛЕНЫЙ (UPM1, UPM0): (ПРИЕМНАЯ СТОРОНА И СТОРОНА TRASMITTER) Эти два бита настраиваются на основе битовой четности, которую мы используем при обмене данными.

ATMEGA запрограммирован на отправку данных без контроля четности, поскольку длина передачи данных мала, мы явно не можем ожидать потери данных или ошибок. Таким образом, мы не устанавливаем здесь паритет. Итак, мы устанавливаем оба UPM1 и UPM0 на ноль, или они остаются, потому что все биты по умолчанию равны 0..

СИНИЙ (USBS): (ПРИЕМНАЯ СТОРОНА И СТОРОНА TRASMITTER) Этот бит используется для выбора количества стоповых битов, которые мы используем во время связи.

Установленная здесь связь асинхронного типа, поэтому для более точной передачи и приема данных нам нужно использовать два стоповых бита. Следовательно, мы установили USBS на «1» в обоих контроллерах.

Скорость передачи устанавливается в контроллере путем выбора соответствующего UBRRH.

Значение UBRRH выбирается путем перекрестной ссылки на скорость передачи данных и частоту кристалла процессора.

Таким образом, по перекрестной ссылке значение UBRR отображается как «25», и поэтому устанавливается скорость передачи.

Как показано на схеме, кнопка подключена на стороне передатчика. Когда эта кнопка нажата, ПЕРЕДАТЧИК отправляет восьмибитные данные, а ПРИЕМНИК принимает эти данные. При успешном получении этих данных он включает и выключает подключенный к нему светодиод, что показывает успешную передачу данных между двумя контроллерами.

Компактность

, порт GCC для ОС Atmel AVR (MegaAVR).На этой странице описан демонстрационный проект исходного кода FreeRTOS для микроконтроллера Atmel MegaAVR.


В настоящее время существует два порта для ATmega323 / ATmega32 и ATmega128: один использует IAR Embedded Workbench TM для AVR, а другой — WinAVR (GCC). На этой странице представлена ​​информация только о порте WinAVR.

Также доступны порты для ATmega320x / 480x и AVR Dx, для WINAVR (AVR GCC), MPLAB XC8 и IAR Embedded Workbench для AVR.

Демонстрационное приложение AVR WinAVR настроено для работы на Atmel. STK500 макетная плата с использованием встроенного процессора AVR ATMega323, работающего на частоте 8 МГц (инструкции предоставляются на случай, если вы захотите использовать альтернативную плату для разработки). Если Используется ATMega32, частота может быть увеличена до 16 МГц. Порт также используется с процессорами ATMega128.

2 КБ ОЗУ на ATMega323 достаточно для выполнения 10 задач в реальном времени, включая задачу бездействия.

Начиная с версии V4.1.0, демонстрационное приложение AVR демонстрирует использование совместных подпрограмм.


ВАЖНО! Примечания по использованию порта AVR / WinAVR RTOS:

Пожалуйста, прочтите все следующие пункты перед использованием этого порта.
  1. Исходный код Организация
  2. Демо-приложение
  3. Сведения о конфигурации и использовании
См. Также FAQ. Мое приложение не запускается, что может быть не так?

Исходный код Организация

Загрузка FreeRTOS содержит исходный код для всех портов FreeRTOS.

См. Раздел «Организация исходного кода» для описания скачанные файлы и информация о создании нового проекта.

Файл сборки демонстрационного приложения AVR WinAVR находится в каталоге Demo / AVR_ATMega323_WinAVR.


Демонстрационное приложение

Загрузка исходного кода FreeRTOS включает полностью вытесняющее многозадачное демонстрационное приложение для порта Mega AVR GCC RTOS.

Настройка оборудования демонстрационного приложения

Демонстрационное приложение включает задачи, которые отправляют и получают символы через последовательный порт.Персонажи отправлены одним заданием должен быть получен другим — если какой-либо символ пропущен или получен не по порядку, помечается состояние ошибки. А Для работы этого механизма необходим коннектор обратной связи на последовательном порту (просто соедините контакты 2 и 3 вместе на разъем последовательного порта).

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

Следующие ссылки должны быть на макетной плате STK500 для работы демонстрационного приложения — они могут быть видно на фотографии выше:

  1. PORTB для светодиодов
  2. PORTD биты 0 и 1 по RS
  3. SPROG3 на ISP6PIN (правильная ссылка для программирования AVR ATMega323

Демонстрационное приложение включает задачи, которые отправляют и получают символы через последовательный порт.Персонажи отправлены одним заданием должен быть получен другим — если какой-либо символ пропущен или получен не по порядку, помечается состояние ошибки. А Для работы этого механизма необходим коннектор обратной связи на последовательном порту (просто соедините контакты 2 и 3 вместе на разъем последовательного порта).

Создание демонстрационного приложения ОСРВ

FreeRTOS V3.0.0 заменил пакетные файлы, ранее использовавшиеся для сборки демонстрационного приложения, одним файлом makefile.Этот стало возможным благодаря улучшениям в поддержке форматов ELF и COFF в более поздних версиях WinAVR.

Чтобы создать демонстрационное приложение:

  1. Убедитесь, что WinAVR правильно установлен и доступен из среды PATH.
  2. Откройте командную строку и перейдите в каталог Demo / AVR_ATMega323_WinAVR.
  3. Введите make, чтобы построить проект. Проект должен строиться без ошибок и предупреждений.
  4. Чтобы принудительно выполнить полную перестройку, введите «make clean»
  5. Уровень оптимизации (параметр -O) и уровень отладки (параметр -g) можно настроить в файле makefile на соответствовать требованиям вашего приложения.
В процессе сборки будет создан файл с именем RTOSDemo.elf, который подходит для выполнения и отладки в бесплатную среду разработки Atmel AVR Studio и файл RTOSDemo.hex, который подходит для записи в процессор.

Убедитесь, что параметр -g используется в файле makefile при создании файлов для отладки и моделирования.

Функциональность

Демонстрационное приложение ОСРВ создает 10 стандартных демонстрационных задач.
  1. Светодиоды от 0 до 2 находятся под управлением стандартных совместных подпрограмм «мигания» и мигают с регулярной частотой.Каждый светодиод мигает отдельной задачей.
  2. Светодиоды 4 и 5 находятся под управлением стандартных задач comtest. Светодиод 4 переключается каждый раз при передаче символа RS232. Светодиод 5 переключает каждый раз, когда принимается и проверяется символ RS232.
  3. Не все задачи обновляют светодиод, поэтому нет видимых признаков того, что они работают правильно. Поэтому создается задача «Проверка», задача которой состоит в том, чтобы убедиться, что ошибки не были обнаружены ни в одной из другие задачи.

    Светодиод 7 находится под контролем задачи «проверка». Светодиод 7 будет мигать каждые несколько секунд, если ошибок не было. обнаружен в любых других задачах в реальном времени. Если в какой-либо другой задаче обнаружена ошибка, загорится светодиод 7. перестать мигать.

См. Раздел стандартного демонстрационного приложения для получения полной информации о задачи демонстрационного приложения.


Конфигурация порта ОСРВ

Элементы конфигурации, относящиеся к этому порту, содержатся в Demo / AVR_ATMega323_WinAVR / FreeRTOSConfig.час Константы, определенные в этом файле, можно редактировать в соответствии с вашим приложением. В частности — определение configTICK_RATE_HZ используется для установки частоты тика RTOS. Поставляемое значение 1000 Гц полезно для тестирование функциональности ядра ОСРВ, но быстрее, чем требуется большинству приложений. Понижение этого значения повысит эффективность.

Каждый порт # определяет «BaseType_t», чтобы соответствовать наиболее эффективному типу данных для этого процессора. Этот порт определяет BaseType_t должен иметь тип char.

Для использования микроконтроллера, отличного от AVR ATMega323

  1. Измените определение MCU в верхней части make-файла.
  2. Установите правильную тактовую частоту в Demo / AVR_ATMega323_WinAVR / FreeRTOSConfig.h
  3. Убедитесь, что определение configTOTAL_HEAP_SIZE настроено так, чтобы соответствовать доступному ОЗУ.
  4. Тиковый ISR генерируется из сравнения на таймере 1. Конфигурация таймера не идентична. на всех устройствах AVR.Проверьте функцию prvSetupTimerInterrupt () в Source / portable / GCC / ATMega323 / port.c, чтобы увидеть если требуются какие-либо модификации для выбранного вами устройства.
Независимо от того, какая часть используется, убедитесь, что предохранители MCU перегорели, чтобы обеспечить правильную тактовую частоту (это можно сделать из Инструменты разработки AVR Studio).

Переключение между упреждающим и кооперативным ядрами ОСРВ

Задайте определение configUSE_PREEMPTION в Demo / AVR_ATMega323_WinAVR / FreeRTOSConfig.ч до 1 использовать преимущественное право покупки или 0 использовать кооператив.

Управление памятью

Source / Portable / MemMang / heap_1.c включен в make-файл демонстрационного приложения MegaAVR для обеспечения памяти распределение, требуемое ядром ОСРВ. Пожалуйста, обратитесь к разделу «Управление памятью» в документации по API. полная информация.

Опции средств разработки

Как и в случае со всеми портами, важно использовать правильные параметры компилятора.Лучший способ убедиться в этом — основать свой application в предоставленном make-файле демонстрационного приложения.

Драйвер последовательного порта демонстрационного приложения ОСРВ

Драйвер последовательного порта, включенный в демонстрационное приложение, использует расчет, подробно описанный в руководстве AVR ATMega323, для установки скорости передачи. регистры тарифов. При некоторых скоростях передачи данных я счел необходимым немного изменить расчетную настройку. Я подозреваю, что это из-за из-за неточности кристалла 8 МГц, установленного в моей макетной плате, и ошибок округления при вычислении скорости передачи.

Следует также отметить, что драйверы последовательного порта написаны для тестирования некоторых функций ядра ОСРВ, но они не предназначен для представления оптимизированного решения.

Примечания для пользователей Linux

Я тестировал только make-файл с хоста Windows 2000, но, надеюсь, он также совместим со сборками GCC для Linux.

Авторские права (C) Amazon Web Services, Inc. или ее аффилированных лиц. Все права защищены.

КОНФИГУРАЦИЯ

XPIN

Настраивает дополнительные функции порта процессора или вывода.

КОНФИГУРАЦИЯ XPIN = ПОРТ | ПИН, ВЫХОД = ВЫХОД

КОНФИГУРАЦИЯ XPIN = ПОРТ | ПИН, ИНВЕРЦИЯ = invio, SLEWRATE = поворот, OUTPULL = тяга, SENSE = смысл

КОНФИГУРАЦИЯ XPIN = ПОРТ | PIN, ИНВЕРЦИЯ = invio, OUTPULL = pull, SENSE = sense

Нормальные контакты порта AVR могут быть настроены как вход или выход. Когда они сконфигурированы как вход (CONFIG PIN = INPUT), они также могут быть установлены в три состояния (записать 0 в регистр PORT) или активировать подтягивающий резистор (записать 1 в регистр PORT).

Некоторые новые процессоры AVR используют специальный регистр PUD для управления подтягиванием. CONFIG XPIN автоматически использует соответствующие регистры для управления подтягивающим состоянием.

ПОРТ

PIN

Конфигурируемый штырь. Например PORTC.0

При настройке всего порта (все контакты должны иметь одинаковую функциональность) используйте ПОРТ. Например: PORTD

ВЫХОДНОЙ

Устанавливает режим вывода или вытягивания.Доступны следующие варианты:

— ВЫКЛ: без подтягивания

— PULLUP: входное подтягивание

Обычные процессоры AVR (крошечные, мега) имеют только одну опцию: ВЫХОД.

Компилятор запишет либо 1, либо 0 в регистр PORT или PUEx.

Вы можете управлять одним выводом, используя имя вывода порта, например PORTB.0, или весь регистр, например PORTB.

Нормальный код AVR, который использует: PORTX.Y = 1, чтобы активировать подтягивание, следует записать как: CONFIG XPIN = PORTX.Y, OUTPULL = PULLUP

Вам по-прежнему необходимо использовать PORTx = state или PINx.y = state для настройки направления данных этого порта или вывода в дополнение к CONFIG XPIN.

У xmega гораздо больше возможностей. Руководство Xmega объясняет все варианты.

Оператор CONFIG XPIN устанавливает правильные регистры.

ПОРТ

PIN

Конфигурируемый штырь.Например PORTC.0

При настройке всего порта (все контакты должны иметь одинаковую функциональность) используйте ПОРТ. Например: PORTD

ИНВЕРТИО

Эта опция инвертирует данные как для режима ввода, так и для режима вывода.

Возможные значения: ENABLED (инвертирует данные), DISABLED (нормальный режим)

РУЧНОЙ

Включение или отключение скорости нарастания.Включение скорости нарастания увеличит время нарастания / спада на 50% -150%. Возможные значения: ENABLED, DISABLED

Для серии Xmega E скорость нарастания устанавливается для всего порта. В то время как другая серия Xmega допускает установку гильзы для отдельного вывода.

ВЫХОДНОЙ

Устанавливает режим вывода или вытягивания. Доступны следующие варианты:

— TOTEM: выходной тотемный столб

— BUSKEEPER: выходной тотемный столб, входной шинный хранитель

— ВЫТЯЖКА: выходная опора, входная тяга

— PULLUP: выходной тотемный столб, входной подтягивающий

— ПРОВОД: выход с проводным подключением ИЛИ

— ПРОВОДНАЯ И: выход проводной И

-WIREDORPULL: выходное ИЛИ, понижающее входное напряжение

-WIREDANDPULL: выход подключен И, вход подтягивает

Смысл

В режиме ввода можно настроить определение триггера.Возможные значения:

— ОБА: распознавать оба края

— RISING: определение фронта нарастания

-ПАДЕНИЕ: определение спадающего фронта

-LOW_LEVEL: определение низкого уровня

-INP_DISABLED: буфер цифрового входа отключен (только PORTA-PORTF)

Вам по-прежнему необходимо использовать PORTx = state или PINx.y = state для настройки направления данных этого порта или вывода в дополнение к CONFIG XPIN.

У xtiny гораздо больше возможностей.

Оператор CONFIG XPIN устанавливает правильные регистры.

ПОРТ

PIN

Конфигурируемый штырь. Например PORTC.0

При настройке всего порта (все контакты должны иметь одинаковую функциональность) используйте ПОРТ. Например: PORTD

ИНВЕРТИО

Эта опция инвертирует данные как для режима ввода, так и для режима вывода.

Возможные значения: ENABLED (инвертирует данные), DISABLED (нормальный режим)

ВЫХОДНОЙ

Устанавливает режим вывода или вытягивания. Доступны следующие варианты:

— ОТКЛЮЧЕНО или ВЫКЛЮЧЕНО: подтягивание отключено

— PULLUP: выходной тотемный столб, входной подтягивающий

Смысл

В режиме ввода можно настроить определение триггера.Возможные значения:

— INT_DISABLED: прерывание отключено, но входной буфер включен

— ОБА: распознавать оба края

— RISING: определение фронта нарастания

-ПАДЕНИЕ: определение спадающего фронта

-LOW_LEVEL: определение низкого уровня

-INP_DISABLED: буфер цифрового входа отключен

КОНФИГУРАТОР ПИН, КОНФИГУРАЦИЯ INT

Config Porte.5 = Input
Config Xpin = Porte.5, Outpull = Pullup, Sense = Falling ‘enable Подтягивание вверх и реакция на спадающий фронт

$ regfile = «xm256a3budef.dat»
$ Crystal = 32000000 ’32 МГц

Config Xpin = Portc.0, Slewrate = Enabled, Outpull = Buskeeper, Sense = Low_level
Config Xpin = Portc.1, Slewrate = Enabled, Outpull = Buskeeper, Sense = Low_level

‘настраивает сразу весь порт
Config Xpin = Portd, Slewrate = Enabled, Outpull = Buskeeper, Sense = Low_level

Что такое регистр TRIS и LAT? — MVOrganizing

Что такое регистр TRIS и LAT?

TRIS используется для управления направлением (ввод или вывод) каждого вывода IO, в то время как PORT используется для записи или чтения данных с выводов ввода-вывода.Регистр LAT используется для записи вывода, а регистр PORT используется для чтения входов.

Какая польза от Триса в микроконтроллере?

#pragma config используется для установки битов конфигурации микроконтроллера. В PIC16F690 они хранятся в регистре CONFIG. Некоторые устройства имеют более одного регистра конфигурации.

Что такое Трис в программировании?

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

Что означает «Трис» для микроконтроллера?

TRIS означает TRIState. Это означает, что порт ожидает ввода, а не выводит сигнал высокого или низкого уровня.

Что такое Трис и порт?

Я быстро скажу, что регистр TRIS служит для установки «направления» ПОРТА и его контактов (вход или выход), в то время как регистр PORT позволяет вам считывать состояние контактов при использовании в качестве входов или выходов. Также есть регистр LAT, который позволяет правильно управлять выходами.

В чем разница между LAT и портом?

Различия между регистрами PORT и LAT можно резюмировать следующим образом: Запись в регистр PORTx записывает значение данных в защелку порта.Запись в регистр LATx записывает значение данных в защелку порта. Чтение регистра PORTx считывает значение данных на выводе ввода-вывода.

В какой области памяти находится порт A и Trisb?

Банк 1

Как я могу установить порт как вход изображения?

Аналогичным образом запись 0 в TRISx сделает соответствующие выводы PORTx как Output. TRISB = 0xff; // Настраиваем PORTB как вход. TRISC = 0x00; // Настроить PORTC как выход… Регистры .GPIO.

Регистр Описание
TRISx Используется для настройки соответствующего ПОРТА как выхода / входа
PORTx Используется для чтения / записи данных с / на контакты порта

Какой регистр используется для установки направления порта?

Объяснение: С портом связаны три регистра.Это ПИН, ПОРТ, DDR. Регистр PIN используется для передачи данных в ЦП с контактов, регистр PORT используется для отправки данных на контакты, а регистр DDR используется для управления направлением передачи данных.

Сколько портов в PIC18F458?

Количество контактов отдельного порта Например, для PIC18F458 порт A имеет 7 контактов; Порты B, C и D имеют по 8 контактов; а порт E имеет только 3 контакта. С каждым портом связаны три SFR. — PORTx, TRISx (TRIState) и LATx (LATch).

Какой регистр используется для настройки контактов как входа или выхода?

Этот регистр используется для настройки контактов ПОРТА как входа или выхода.Запись единиц в DDRx сделает соответствующие выводы PORTx выходными… .GPIO регистры.

Регистр Описание
PORTx Используется для записи данных на контакты порта
PINx Используется для чтения данных с контактов порта

Какова функция регистра DDRx?

Регистр DDRD устанавливает направление порта D. Каждый бит регистра DDRD устанавливает соответствующий вывод порта D как вход или выход.1 делает соответствующий вывод выходом, а 0 делает соответствующий вывод входом.

В чем разница между Tris и регистром портов?

Выводы

PORT E мультиплексированы с аналоговыми входами. При выборе аналогового входа эти контакты будут отображаться как «0». TRIS E управляет направлением выводов RE, даже когда они используются как аналоговые входы. Пользователь должен убедиться, что контакты настроены как входы при использовании их в качестве аналоговых входов.

Что такое регистр DDR?

Регистр DDR определяет, является ли вывод INPUT или OUTPUT.Регистр PORT контролирует, является ли вывод HIGH или LOW, а регистр PIN считывает состояние контактов INPUT, установленных для ввода с помощью pinMode (). Карты микросхем ATmega8 и ATmega168 показывают порты.

Что означает DDR?

означает «двойная скорость передачи данных». Это усовершенствованная версия SDRAM, разновидности компьютерной памяти. DDR-SDRAM, иногда называемая «SDRAM II», может передавать данные в два раза быстрее, чем обычные микросхемы SDRAM. Это связано с тем, что память DDR может отправлять и получать сигналы дважды за такт.

Что такое устройство AVR?

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

Что такое вывод AVR?

8-разрядные микроконтроллеры

AVR® управляют приложениями через свои цифровые входы и выходы (I / O). Эти контакты могут контролировать любое напряжение, присутствующее на входе с высоким импедансом, и ток питания или потребителя в качестве цифрового выхода высокого или низкого напряжения.Эти контакты обычно объединяются в группы по восемь и называются портами.

Как я узнаю, что мой вывод AVR высокий?

Контакты в каждом порту пронумерованы 0-7, и мы устанавливаем их высокий или низкий уровень, записывая 1 или 0 в соответствующий бит в регистре. Например, чтобы установить на выводе 3 высокий уровень, нам нужно убедиться, что бит «3» порта PORTB равен единице. Бит «3» на самом деле четвертый справа. Биты нумеруются от 0 справа налево.

[PDF] Плата разработки AVR ATmega8

1 AVR ATmega8 Development Board Campus Component Pvt.Ltd.2 ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ Представленная информация считается точной …

Плата разработки AVR ATmega8

Campus Component Pvt. Ltd. www.campuscomponent.com

Периферийная плата AVR

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ Представленная информация считается точной и надежной на момент публикации. Однако Campus Component Pvt. Ltd. не несет ответственности, связанной с использованием описанных спецификаций. Упомянутые здесь приложения используются исключительно в целях иллюстрации, а компонент Campus Pvt.Ltd. не дает никаких гарантий и не делает заявлений, что такие приложения будут подходить без дальнейших изменений, и не рекомендует использовать свои продукты для приложений, которые могут представлять риск для жизни человека из-за неисправности или иным образом. Campus Component Pvt. Ltd. не несет никакой ответственности, возникающей в связи с применением или использованием любого продукта или схемы, описанных в данном документе; он также не передает никаких лицензий на свои патенты или права других лиц. Campus Component Pvt. Ltd. оставляет за собой право изменять свои продукты без предварительного уведомления.Для получения самой последней информации посетите наш веб-сайт по адресу http://www.campuscomponent.com. Изображения являются только репрезентативными, и фактический продукт может отличаться.

Авторские права © 2011CAMPUS COMPONENT Pvt. Ltd. Все права защищены. Campus Component Pvt. Ltd.®, логотип и их комбинации являются зарегистрированными товарными знаками CAMPUS COMPONENT Pvt. Ltd. Другие термины и названия продуктов могут быть товарными знаками других компаний.

www.campuscomponent.com

Периферийная плата AVR

Плата разработки AVR

Введение: Плата разработки AVR ATmega8 изготовлена ​​из двусторонней печатной платы PTH, чтобы обеспечить дополнительную прочность соединениям разъемов и повысить надежность.Плата может работать от питания от 7 до 15 В переменного или постоянного тока. Имеет встроенную защиту от обратной полярности. Регулятор напряжения 7805 имеет радиатор для отвода тепла, поэтому он может непрерывно подавать ток 1 А без перегрева. Он имеет переключатели для сброса и питания. Все порты подключены к стандартным 10-контактным разъемам Box Header.

Характеристики: Двухсторонняя печатная плата PTH для обеспечения дополнительной прочности соединительных соединений для повышения надежности · Поддержка следующего 40-контактного микроконтроллера AVR от Atmel Corporation § ATmega8 § ATmega8L § ATmega48 § ATmega88 § ATmega168 § ATmega328 · Поддерживает ЖК-дисплей с линейной распиновкой 16×1 § ЖК-дисплей 16×1, ЖК-дисплей 16×2 и ЖК-дисплей 16×4 § ЖК-дисплей 20×1, ЖК-дисплей 20×2 и ЖК-дисплей 20×4 § ЖК-дисплей 32×2 и ЖК-дисплей 32×4 § 40×2 ЖК-дисплей Гнездо переменного / постоянного тока для переменного / постоянного тока от 7 до 15 В · Защита от обратной полярности с помощью встроенного мостового выпрямителя · Регулировка напряжения с помощью регулятора напряжения 7805 · Обеспечивает 8 желтых светодиодов SMD для тестирования ввода / вывода · Обеспечивает возможность сброса платы при необходимости · ЖК-дисплей регулировка контрастности с помощью потенциометра. • Встроенный зуммер на 5 В для тестирования. • Индикатор включения питания (красный или желтый светодиод). Предупреждение: рассеяние тока по хряку. Все компоненты и разъемы не должны превышать 1 А ·

www.campuscomponent.com

Описание оборудования:

Порт светодиодов

Порт D

Зуммер переключателя сброса

VCC GND VIN

Периферийная плата AVR

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

Светодиод для тестирования I / O

Разъем AC / DC Microcntroller IC Регулятор напряжения Разъем ЖК-дисплея

Порт ISP

Потенциометр для регулировки контрастности для ЖК-дисплея B Порт

Порт C

Порт ЖК-дисплея

Выводы команд ЖК-дисплея

·

Разъем источника питания: это гнездо источника питания который на самом деле называется разъемом переменного / постоянного тока и предоставляет пользователю возможность подключать внешний источник питания от трансформатора, аккумулятора или адаптера через разъем постоянного тока.Пользователь может обеспечить максимум 15 В переменного / постоянного тока через розетку переменного / постоянного тока. Этот источник питания разработан с учетом максимальной защиты, так что он может даже предотвратить источник питания постоянного тока с обратной полярностью, а также источник питания переменного тока. Он также включает в себя регулятор напряжения 7805, который обеспечивает регулируемое напряжение 5 В постоянного тока для микроконтроллера и других разъемов ввода / вывода.

·

Разъем GND, VCC и VIN: Эта плата также предоставляет пользователю дополнительные контакты для источников питания, как показано на рисунке. Эти контакты — GND (0 В), VCC (5 В от регулятора напряжения) и VIN (напряжение, подаваемое на гнездо переменного / постоянного тока минус 1.4 В на плате обозначается как +12 В). Для каждого типа питания предусмотрено четыре контакта. Пользователь может подключить эти контакты к внешнему устройству с помощью одиночного провода Berg.

·

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

·

10-контактный разъем заголовка коробки: разъемы с пластиковыми направляющими вокруг них известны как «заголовки коробки» или «закрытые заголовки» и обычно используются только в сочетании с разъемом для плоского ленточного кабеля (FRC).Паз (ключ) в направляющей коробке обычно предотвращает неправильную установку разъема. Заголовок коробки может быть подключен с помощью FRC, а также одиночных проводов Berg для подключения отдельных контактов.

Notch

www.campuscomponent.com

Периферийная плата AVR Ÿ Кабель FRC:

Два разъема FRC могут быть соединены с помощью кабеля FRC. Кабель FRC имеет следующую конфигурацию контактов.

·

Разъем порта A, B, C, D: 40-контактный микроконтроллер серии ATmega обычно имеет четыре порта ввода-вывода.Эти четыре порта расширяются от ИС микроконтроллера отдельно, используя 10-контактный заголовок коробки для каждого порта (порт A, B, C и D). Среди 10 контактов 8 контактов представляют собой контакты ввода / вывода соответствующего порта th, а 9 и 10 контактов представляют GND и VCC соответственно. Это показано на рисунке.

·

Разъем для светодиодов Восемь светодиодов, используемых для тестирования входов / выходов, подключены по общей катодной конфигурации. Другой вывод (анод) светодиода подключен к порту светодиода. Этот светодиодный порт может быть напрямую подключен к любому из портов A, B, C или D с помощью плоского ленточного кабеля (FRC).

·

Разъем ЖК-дисплея Эта плата имеет два типа подключения ЖК-дисплея. Один — это линейно расположенный 16-контактный штекерный разъем Berg. Этот разъем используется для установки ЖК-дисплея с 16 контактами. Другой разъем — это 10-контактный заголовок коробки, через который пользователь может подключить порт ЖК-дисплея к любому порту ввода-вывода (A, B, C или D). Есть также три других контакта штыревого разъема Berg, которые представляют собой контакты RS, RW и EN ЖК-дисплея, так что пользователь может подключить эти контакты к любому из контактов ввода / вывода с помощью одиночного провода Berg.D7 LED + LED-

D3 D6

D2 D5

D4

D1

EN VEE RW VCC D0 RS GND

RS RW EN

Потенциометр для регулировки контрастности LCD

000 LCD Port

com

Периферийная плата AVR ·

Разъем ISP Порт ISP (в системном программировании) обеспечивает соединение между платой разработки AVR и комплектом программатора AVR. Имеет следующую конфигурацию. Он также используется в качестве источника питания от кабеля USB (универсальная последовательная шина).Поскольку эта функция обеспечивается самой микросхемой микроконтроллера, контакты напрямую подключаются к соответствующим контактам.

·

Конфигурация контактов порта C: Порт C в 28-контактном микроконтроллере серии ATmega имеет только семь контактов ввода / вывода, как указано в таблице данных. PC6, который является седьмым контактом порта C, фактически работает как контакт сброса. Если пользователь выполняет какие-либо операции ввода-вывода на этом выводе, микроконтроллер будет сбрасываться каждый раз. Таким образом, этот вывод недоступен на этой плате, чтобы предотвратить невозможность эксплуатации или применения.

Штырь PC6 удален для предотвращения прерывания операции сброса

www.campuscomponent.com

Установка программного обеспечения периферийной платы AVR: Это руководство поможет пользователю установить программное обеспечение, рекомендованное для компиляции и загрузки программ. Шаг 1. Дважды щелкните программное обеспечение WinAVR, пользователь увидит такое окно. Выберите язык и нажмите «ОК».

Шаг 2: после нажатия OK появится окно приветствия, нажмите «Далее>»

Шаг 3: Прочтите лицензионное соглашение и нажмите «Я согласен»

www.campuscomponent.com

Периферийная плата AVR Шаг 4: Выберите папку для установки. Нажмите «Далее>»

Шаг 5: Установите все флажки и затем нажмите кнопку «Установить».

Шаг 6: Появится окно установки. Полностью заполните индикатор выполнения.

www.campuscomponent.com

Периферийная плата AVR Шаг 7: После завершения установки нажмите «Готово».

Установка WinAVR завершена. Теперь установите AVR Studio4. Шаг 1: Дважды щелкните установочный файл AVRStudio4, затем появится окно приветствия, нажмите «Далее>»

www.campuscomponent.com

Периферийная плата AVR Шаг 2: Нажмите «Я принимаю условия соглашения», а затем нажмите «Далее>»

Шаг 3: Если пользователь хочет изменить папку назначения для установки, нажмите «Изменить» в противном случае или после того, как нажмите «Далее>»

www.campuscomponent.com

Периферийная плата AVR Шаг 4: Отметьте «Установить / обновить драйвер Jungo USB» и затем нажмите «Далее>»

Шаг 5: Нажмите «Установить» ‘Кнопка

www.campuscomponent.com

Периферийная плата AVR Шаг 6: Дождитесь завершения установки

Шаг 7: После завершения установки нажмите кнопку «Готово»

www.campuscomponent.com

Периферийная плата AVR

Создание программ в AVR Studio 4 Далее Эти шаги показывают, как поэтапно должно развиваться программирование в AVR Development Board. Эти шаги продемонстрируют пользователю программу, которая последовательно светит восемью светодиодами. Пользователю рекомендуется использовать компилятор WinAVR и редактор AVRStudio4.Шаг 1. Перейдите в меню «Пуск»> «Выбрать все программы».

Щелкните папку инструментов Atmel AVR> щелкните левой кнопкой мыши на AVR Studio 4

www.campuscomponent.com

Периферийная плата AVR Шаг 2: на рабочем столе появится окно загрузки

Выберите Примечание о новом проекте: однако, если пользователь хочет открыть существующий проект, ему необходимо щелкнуть o Открыть проект

Шаг 3: В разделе «Тип проекта» выберите параметр AVR GCC. Примечание: GCC используется для компиляции программы, написанной на встроенном языке C, тогда как AVR Assembler используется. для компиляции программы, написанной на языке ассемблера.

www.campuscomponent.com

Периферийная плата AVR Шаг 4: Дайте проекту имя, которое хочет пользователь. Предупреждение: не оставляйте места в имени вашего проекта; он будет рассматривать это как недопустимое имя. Отметьте флажки для исходного файла Crete и Создать папку. Нажмите кнопку «Далее»

Шаг 5: Появятся два списка, выберите вариант AVR Simulator из списка слева

Шаг 6: Выберите микроконтроллер, для которого пользователь хочет напишите программу, здесь в качестве примера показана ATmega8. Нажмите кнопку «Готово»

www.campuscomponent.com

AVR Peripheral Board IDE сгенерирует несколько окон, которые создают платформу для написания программы для выбранного микроконтроллера, то есть ATmega16. Пользователь должен написать программу в среднем окне.

Шаг 7: Запишите программу для последовательного свечения восьми светодиодов на встроенном языке C Примечание. Это пример программы. Пользователь может написать программу любого типа в соответствии с приложением.

Шаг 8: После того, как пользователь завершил программу, перейдите в главное меню и выберите «Построить» option> Щелкните Build, чтобы скомпилировать программу

www.campuscomponent.com

Периферийная плата AVR Шаг 9: Если программа не содержит ошибок, она выдаст сообщение, как показано на рисунке, и сгенерирует файл .hex, иначе файл .hex не будет. Не учитывайте предупреждения, если пользователь получает любое количество предупреждений, программа все равно может сгенерировать файл .hex

Шаг 10: Теперь подключите плату разработки микроконтроллера и USB-программатор AVR только через порт ISP. Предупреждение: Программатор должен быть подключен только к порту ISP, если вы подключите программатор через FRC к любому другому порту, это может повредить ваш программатор, а также вашу плату разработки.

Шаг 11: Теперь откройте программное обеспечение Sinaprog, окно будет выглядеть так.

www.campuscomponent.com

Периферийная плата AVR Шаг 12: Выберите файл .hex соответствующей программы Путь, чтобы найти файл .hex. Папка вашего проекта> Открыть папку с именем вашего проекта> открыть папку по умолчанию> выбрать файл .hex

Шаг 13: Нажмите кнопку «Программа» в разделе Flash. После завершения программы появится сообщение «Programming Flash… OK»

www.campuscomponent.com

Периферийная плата AVR Шаг 14: Возьмите один FRC и подключите его один конец к порту для светодиодов.

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *