Инициализация портов avr: AVR на C — просто? Часть 2

Содержание

Порты ввода-вывода микроконтроллера ⋆ 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 — Конфигурирование портов в 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                               ‘конец программы

 

 


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

 

 

 

 

 

 

 

 

Code vision avr настройка портов

Несмотря на то, что это довольно просто, описано не только в даташите, но и во многих статьях, например [1], поток вопросов не уменьшается. Мощность выходного драйвера более чем достаточна для прямого управления светодиодом LED. Также для всех выводов портов, настроенных как вход, можно селективно подключить внутренний верхний нагрузочный резистор pull-up , встроенный прямо в кристалл микроконтроллера. Pxn — имя ножки порта микроконтроллера, где x буква порта A, B, C или D , n номер разряда порта


Поиск данных по Вашему запросу:

Code vision avr настройка портов

Схемы, справочники, даташиты:

Прайс-листы, цены:

Обсуждения, статьи, мануалы:

Дождитесь окончания поиска во всех базах.

По завершению появится ссылка для доступа к найденным материалам. ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: Learning AVR-C Episode 6: Timers

Мой первый проект на LESO6


Краткий курс — Самоучитель — AVR — быстрый старт с нуля. Как загрузить программу в микроконтроллер. Как запрограммировать микроконтроллер AVR. Скачать весь курс по AVR одним архивом на заглавной странице курса.

Электрический ток. Закон Ома Последовательное и параллельное соединение проводников Правила Кирхгофа для разветвленных цепей Работа и мощность тока Электронно-дырочный переход. МК AVR можно пере- программировать не менее раз, при чем это можно делать прямо в устройстве в котором они будут работать — такое программирование называют «в системе» — «ин систем программин» или ISP.

Компания ATMEL рекомендует установить на плате устройства специальный разъем для подключения программатора. Вид сверху платы на штырьки. Исключения указаны ниже. Для адаптера «5 проводков» этот вывод не подключается. Для ISP программирования достаточно 5 контактов.

Соответственно и разъем который вы будете использовать может быть любым удобным для размещения на плате и имеющий минимум 5 контактов — например в один ряд. Я использую и считаю это очень удобным 6 штырьков расположенные в 1 ряд , в том порядке как расположены ножки программирования у ATmega16 рисунок есть на страничке 6 — при этом разводка линий программирования получается простейшей.

Используются другие выводы МК! Внимательно смотрите ДатаШит вашего МК! Pin Mapping Serial Programming. Extended Fuse Byte. Подробней о фьюзах ниже и на стр. Вариант 1. Только если вы понимаете что такое фьюзы и знаете как правильно их установить!!! После установки параметров программирования нажмите ОК.

Теперь после компиляции программы без ошибок в окне с результатами компиляции вам будет доступна кнопка «Program» — нажмите на нее и, если все подключено правильно, произойдет программирование МК — то есть файл. Вариант 2. Лок биты устанавливают уровень защиты вашей программы от чтения из памяти AVR — это актуально для коммерческих изделий. После прошивания, если вы сделали все правильно, AVR начнет выполнять уже новую программу. Иначе вы можете отключить режим ISP или внутренний RC-генератор и для следующего программирования вам понадобится ставить кварц с конденсаторами или даже искать: Параллельный программатор для AVR Но популярному AT tiny даже параллельный программатор не всегда поможет!

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

Фьюзы ATt iny описаны в конце следующей страницы курса. Меню «сеттингс» — «программер». В этом же диалоге можно понизить частоту с которой программатор будет обмениваться с прошиваемым МК увеличивая множитель задержки. Снижение частоты на SCK повышает помехоустойчивость при прошивке. Для программирования к МК должно быть подключено питание. Либо подать тактовый сигнал 0. Он выводит тактовый сигнал на выв.

Большое спасибо! Лучше все же токоограничительные резисторы от до ом впаять Береженого бог бережет! Проводки не более 15 см длиной! Питать устройство при программировании можно : — сетевым адаптеры от бытовых устройств понизив напряжение до 5 вольт.

Достаточно три батарейки по 1,5 вольт последовательно. Желательно питать устройство от ПК! В этом случае «земля» вашего устройства будет соединена с корпусом ПК и можно будет безопасно подключать и отключать разъем программирующего адаптера. Вначале старайтесь соединять «земли» металлические корпуса , «общие» провода устройств — для уравнивания их потенциалов! Спалите LPT и будете меня ругать! Значит частота на линии SCK, формируемая программатором, не должна быть выше Выше было написано как.

STC создал загрузчик bootloader размером байт с поддержкой быстрого страничного режима записи. Дальше — стр. Назад на стр. И много полезной информации! Это профессиональное средство для программирования и отладки программы МК ATmega фирмы Atmel в реальном устройстве. Пример реализации: на макетке. Cхема в формате P-CAD Печатная плата в формате P-CAD Можно сразу залить в ATmega16 готовую прошивку не надо прошивать через бутлодер.

Большинство контроллеров AVR поддерживает режим внутрисхемного программирования. Это означает, что Вам не нужно вытаскивать микроконтроллер из платы каждый раз, когда Вам необходимо его перепрограммировать. В нашем случае Вы обойдетесь без лишних накладных расходов. С помощью программы PonyProg , Windows или Linux , и свободного параллельного порта Вы сможете создать хороший и простой программатор. И этот программатор представляет собой простой кабель. Сам кабель и его распайка представдены на рис.

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

Источник питания стабилизированный от 4,5 до 5 V или батарейка. Для контроллеров серии ATmega внешний кварцевый резотатор не обязателен. Они могут работать от внутреннего генератора и поставляются призводителем именно в таком режиме. В любом случае, прежде чем совершать какие либо действия с контроллером, необходимо прочитать инструкцию Datasheet конкретно для данного девайса.

Я, avr Напряжение, необходимое для питания схема берёт с разъёма ISP, то есть от программируемого устройства. Программатор можно выполнить на печатной плате и поместить её в корпус разъёма LPT, как показано на рисунках:.

Примеры для микроконтроллеров MCS This Application Note describes the considerations that are required. Includes a description of an add-on board which contains a stereo audio codec, an LCD display and three push buttons.

A software example of an interconnection between two SPIs is also described. The focus is on the verifications to be carried out at the board schematics level, thus assuring the highest probability of a right-first-time system. Пример схемы там. Советую для изготовления адаптера взять » принтерный» шнур — он длинный и экранированный, а не экранированные проводки не стоит делать более см. SPI Serial Programmable Interface Программируемый интерфейс последовательного доступа Используется для внутрисхемного программирования чипа и для связи с другими устройствами.

На Рис. Принципиальная схема программатора на LPT порт показана на рисунке. Светодиод VD1 индицирует режим записи микроконтроллера, светодиод VD2 — чтения, светодиод VD3 — наличие питания схемы. Для работы с этим программатором используйте программу CVAVR Программатор можно выполнить на печатной плате и поместить её в корпус разъёма LPT, как показано на рисунках: Для работы с программатором удобно использовать удлинитель LPT порта, который несложно изготовить самому к примеру, из кабеля Centronix для принтера , главное «не жалеть» проводников для земли ноги разъёма или купить.

Кабель между программатором и программируемой микросхемой не должен превышать см. Сайт управляется системой uCoz. Если вы считаете эту информацию полезной, пожалуйста, помогите информировать в интернете о курсе — просто щелкните по банеру. Для работы с этим программатором используйте программу CVAVR Программатор можно выполнить на печатной плате и поместить её в корпус разъёма LPT, как показано на рисунках:. АпНоуты — примеры применения микроконтроллеров МК — Схемы, исходники, компоненты.

Migration Notes. Design Considerations. Development Tools. General Purpose. Getting Started. Application Example and Algorithms. Flash Programming. Analog Modules. Communication Modules. Timers and Oscillators.


Описание интерфейса компилятора языка С CodeVision AVR

Полученный в результате компиляции исходного кода программы на языке С исполняемый модуль файл прошивки может быть непосредственно записан в память программ микроконтроллера. В среде CodeVision AVR каждая программа для микроконтроллера должна оформляться в виде проекта, представляющего собой совокупность файлов, содержащих исчерпывающую информацию для программатора. Файлы каждого проекта желательно сохранять в отдельном подкаталоге. В результате будет создан пустой проект и на экране появится главное рабочее окно программы CodeVision AVR , имеющее классическую компоновку для интегрированных средств разработки приложений и CAD систем см. В верхней части главного рабочего окна находятся текстовое меню и пиктограммы для быстрого запуска отдельных команд. Назначения пиктограмм, отвечающих за выполнение специализированных функций, приводится на рисунке 1. В левой части главного окна располагается информация о ресурсах проекта, в правой — ресурс, являющийся, в данный момент, активным.

У нас уже есть папка tutorial c файлом all-audio.pro и двумя настроенными Я помнится уже где-то говорил, что любая программа начинается с настройки портов. Устройство портов ввода-вывода в микроконтроллерах AVR Atmel.

Работа с портами AVR в CodeVision

Честно говоря, работа в программе не сильно отличается от PonyProg. Для начала можете микроконтроллер поставить в панельку программатора, и подключить его к LPT порту, затем подавайте питание. И рекомендуется шить сначала программу, затем ПЗУ, затем фьюзы, в принципе что у нас и происходит, когда мы загружаем все файлы для прошивки, и выставляем фьюзы в окошке. Если светодиоды не мигают, значит нам нужно проделать операции после пункта 6, описанные в предыдущей части статьи. Теперь можете проверить МК, поставив его в панельку вашего устройства. Если вы хотите записать другую прошивку на этот же МК, новую прошивку можно записать поверх старой, или же стереть сначала старую, потом записать новую, как вам удобнее, разницы особой нету. Все это в меню Read считать. C разными программаторами, и с разными программами возникают разные ошибки, но некоторые ошибки между собой очень похожи, и устраняются одинаково.

Первый проект для микроконтроллера AVR в CodeVisionAVR

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

Пожалуйста, сообщите об этом — просто выделите ошибочное слово или фразу и нажмите Shift Enter. Давно точил зубы на программатор AVR , поскольку он довольно популярный, и поддерживается многими программами.

AVR GCC :: УПРАВЛЕНИЕ ПОРТАМИ МИКРОКОНТРОЛЛЕРА

Раз уж я буду использовать UART для связки устройств блога с Вашими проектами немного расскажу как он устроен и как им пользоваться. Универсальный асинхронный приемопередатчик UART довольно старый и распространенный интерфейс. Но в виду простоты и популярности интерфейса подавляющее большинство микроконтроллеров имеет UART в составе своей периферии. И если персональный компьютер UART перестает удовлетворять из-за низкой скорости и невозможности расширения, то для микроконтроллеров интерфейс удобен и использование его будет продолжаться. Раз UART есть во многих микроконтроллерах, значит мы его будем использовать как один из интерфейсов связи устройств блога с Вашими электронными устройствами.

Настоящая работа с портом через указатель

Любое устройство на микроконтроллере AVR использует порты ввода вывода. Регистр DDRx — определяет направление выводов микроконтроллера, PINx позволяет читать их состояние, «осязать» внешний мир, а PORTx в зависимости от направления вывода или задает его логический уровень, или подключает подтягивающий резистор. Мы получаем некую «отвязку» от железа и в дальнейшем это позволяет нам переназначать выводы на другие порты. Например, это может выглядеть так. Неудобство такого подхода состоит в том, что для каждого вывода нужно определять три регистра. Существует другой подход, позволяющий сократить число макроопределений. Разберемся в чем он заключается. Тоже самое и с регистрами остальных портов, они тоже расположены друг за другом.

Вот про опрос состояния входных портов мы и поговорим. Рассмотрим в среде CodeVisionAVR. За состояние порта ввода отвечает регистр PINB.

Primary Menu

Code vision avr настройка портов

Для начала переведем данную запись в более понятный нам вид:. Поможет нам в этом калькулятор Windows из набора стандартных программ, сразу переводим его в режим программист. Переключаем его в режим шестнадцатеричной системы галочка HEX , и вводим наше число 0х02 просто как 2. Получили число

Микроконтроллеры AVR для начинающих — 3

Для начала переведем данную запись в более понятный нам вид: приставка 0х означает что число записано в шестнадцатеричной системе исчисления, чтобы легко понять его суть нужно перевести его в двоичную систему. Поможет нам в этом калькулятор Windows из набора стандартных программ, сразу переводим его в режим программист. Переключаем его в режим шестнадцатеричной системы галочка HEX , и вводим наше число 0х02 просто как 2. Получили число

Представление чисел. Побитные операции.

AVR для начинающих.Урок 3.Порты ввода/вывода.

UART — самый популярный интерфейс микроконтроллера. Так сложилось потому, что он может использован для связи с персональным компьютером. В этой статье мы постараемся познакомить вас основными сценариями использования UART. Как вы уже знаете, при подключении, в системе она определяется как COM-порт. То есть для исследования работы нам не понадобится никакого дополнительного оборудования. Мы проверили это только с микроконтроллером Atmega8. Помимо аппаратного обеспечения и среды для программирования, которую мы разворачивали в другой части цикла.

После первых шагов в освоении микроконтроллеров начинающий микроконтроллерщик начинает пытаться применять свои познания в первых самостоятельных поделках, часто пытаясь «моргать светодиодами» в зависимости от состояния входных портов например. Вот про опрос состояния входных портов мы и поговорим. За состояние порта ввода отвечает регистр PINB, который работает только на чтение, опросив который можно узнать состояние входа.


%PDF-1.6 % 1341 0 объект > эндообъект внешняя ссылка 1341 69 0000000016 00000 н 0000002371 00000 н 0000002507 00000 н 0000002840 00000 н 0000002868 00000 н 0000002916 00000 н 0000003058 00000 н 0000003447 00000 н 0000003531 00000 н 0000004103 00000 н 0000004702 00000 н 0000004926 00000 н 0000005155 00000 н 0000005218 00000 н 0000005264 00000 н 0000006305 00000 н 0000007171 00000 н 0000008017 00000 н 0000008845 00000 н 0000009742 00000 н 0000010579 00000 н 0000011493 00000 н 0000011940 00000 н 0000012776 00000 н 0000013477 00000 н 0000013877 00000 н 0000013937 00000 н 0000014054 00000 н 0000014164 00000 н 0000014287 00000 н 0000014474 00000 н 0000014581 00000 н 0000014687 00000 н 0000014893 00000 н 0000015086 00000 н 0000015266 00000 н 0000015426 00000 н 0000015633 00000 н 0000015804 00000 н 0000015974 00000 н 0000016093 00000 н 0000016260 00000 н 0000016447 00000 н 0000016582 00000 н 0000016753 00000 н 0000016953 00000 н 0000017142 00000 н 0000017270 00000 н 0000017441 00000 н 0000017640 00000 н 0000017821 00000 н 0000017975 00000 н 0000018164 00000 н 0000018299 00000 н 0000018436 00000 н 0000018625 00000 н 0000018735 00000 н 0000018891 00000 н 0000019097 00000 н 0000019260 00000 н 0000019404 00000 н 0000019574 00000 н 0000019748 00000 н 0000019912 00000 н 0000020081 00000 н 0000020250 00000 н 0000020382 00000 н 0000002164 00000 н 0000001730 00000 н трейлер ]>> startxref 0 %%EOF 1409 0 объект > поток N

Psz!VR=b.Gxutͬz2ڷ$/j#$‡rDAIʗϲZpF̝h3>Ex>\0V{鴛5]5:ɗԺ68g конечный поток эндообъект 1408 0 obj>/Размер 1341/Тип/XRef>>поток xA

avrdude инициализация не удалась — USBTiny ISP с ATMega328p: avr

Привет всем,

Итак, как следует из названия, я использую карманный программатор AVR, купленный в Sparkfun, который также использует USBTiny ISP и ATMega 328p-pu от Sparkfun и получить ошибку при попытке запустить эту команду:

  avrdude -c usbtiny -p m328p

avrdude: инициализация не удалась, rc=-1
Дважды проверьте соединения и повторите попытку или используйте -F, чтобы переопределить эту проверку. 

Здесь я разместил фотографии своих подключений — я также подключил другой GND (контакт 22) и AVCC (контакт 20), оба из которых не показаны на рисунке. Я провел некоторое исследование, и некоторые сказали, что это проблема с драйвером — пытался удалить и переустановить драйверы, но безрезультатно.

Есть идеи? 🙂

РЕДАКТИРОВАТЬ С РЕШЕНИЕМ:

Итак, после долгих мучительных 3 дней попыток связаться с моим чипом, я обнаружил, что делал неправильно.Во-первых, распиновка программатора на картинке из сообщения на форуме неверна — я нашел эту картинку из Google более полезной, чем официальная схема, предоставленная Sparkfun (и определенно правильная). Для всех новичков, таких как я, вы можете (и должны) найти контакт 5 В с помощью мультиметра и использовать его в качестве эталона для поиска других контактов. Поместите провод «папа-папа» в каждый слот гнездового разъема, поместите красный стержень мультиметра на металл этого провода, а затем поместите черный стержень на заземленную часть программатора.То, что я использовал для карманного программатора AVR, было слотом, в который вставлялась штука, похожая на мини-usb.

Наконец, моя самая большая проблема была совершенно глупой: МОЙ ЧИП НЕ ПОЛНОСТЬЮ ВСТАЛ В МАКЕТНУЮ ПЛАТУ. Это была совершенно новая макетная плата, и вам как бы нужно выломать отверстия, прежде чем все пойдет легко … Я забыл сделать это с отверстиями, в которых был чип. Как только я вынул чип, проткнул все отверстия с проводом «папа-папа» и вставил обратно, тада! Не совершайте этой ошибки, дамы и господа.

ЦЕНТР ПО РЕМОНТУ ЭЛЕКТРОННОГО ОБОРУДОВАНИЯ: DENON AVR-2308 — AVR-888 Инициализация — Сброс к заводским настройкам — Тестовый режим — Отображение ошибок — Регулировка тока холостого хода — Ремонт и обслуживание AV-ресивера

Категория: Ремонт и обслуживание AV-ресиверов 

Содержание этой статьи 

  • Процедура инициализации
  • Доступ к тестовому режиму
  • Регулировка тока холостого хода

ДЕНОН АВР-2308 — АВР-888

Инициализация (сброс к заводским настройкам) 
Инициализация AV SURROUND RECEIVER/AMPLIFIER должна выполняться, когда µcom, периферийные части µcom и Digital P.В.Б. заменены.
1. Выключите устройство.
2. Удерживая следующие кнопки SPEAKERS-A и SPEAKERS-B, включите Единица.
3. Убедитесь, что весь дисплей мигает с интервалом примерно 1 во-вторых, и отпустите пальцы с 2 кнопок, и микропроцессор быть инициализирован.
Примечание: Если шаг 3 не работает, начните заново с шага 1.
# Все пользовательские настройки будут потеряны и эта заводская настройка будет восстановлена ​​при этом режиме инициализации.Так обязательно запомните настройки для восстановления после инициализации. JIG для обслуживания
При ремонте печатной платы можно использовать следующий JIG (удлинитель кабельный комплект). При необходимости закажите у официального дистрибьютора Denon
в вашем регионе.
00D SPK- 561 НАБОР УДЛИНИТЕЛЬНОГО БЛОКА: 1 комплект
00D SPK- 562 TUCP CONN. СОЕДИНИТЕЛЬНЫЙ КОМПЛЕКТ: 1 комплект ПРОВЕРКА В ТЕСТОВОМ РЕЖИМЕ
Режим отображения ошибок ucom/DSP
1. Спецификация работы
Режим отображения версии µcom:
Если в начальном состоянии выполняются следующие условия, возникает ошибка информация отображается перед информацией о версии.
Метод запуска (такой же, как и на дисплее версии µcom):
Модель E3, JP
Нажав 2 кнопки, «СОСТОЯНИЕ» и «DIMMER», включите кнопка включения/выключения.
Затем нажмите кнопку «СОСТОЯНИЕ», чтобы отобразить следующую информацию о FL-дисплей.
Модель E2,E2A
При нажатии двух кнопок «RT» и «PTY» включение/выключение кнопка.
Затем нажмите кнопку «PTY», чтобы отобразить следующую информацию на ФЛ дисплей. 2. Порядок отображения
Информация об ошибке > Информация о назначении > Версия Main-µcom информация > Информация о версии Sub-µcom > Информация о версии DSP 3.Дисплей
Отображается любой из следующего списка с приоритетом 1,2,3,4
Нет ответ от Sub-µcom » SUB ERROR 01 »
» DIR ERROR 01 »
Когда Загрузка DSP, выполнение сброса DSP не влияет на ЗАНЯТЫЙ порт «L». » DSP 1   ERROR 01 »
Нет переключитесь на ЗАНЯТЫЙ порт «L» перед выдачей команды DSP. » DSP 1 ERROR02 »
Когда Чтение данных DSP, выполнение команды WRITE=»L» не изменяет ПОДТВЕРЖДЕНИЕ=»Ч». » DSP 1 ERROR03 »
Когда Прочитанные данные DSP, выполнение команды REQ=»L» не изменяет ПОДТВЕРЖДЕНИЕ=»Л». » DSP 1 ERROR04 »
Когда Запись данных DSP, выполнение команды WRITE=»H» не изменяет ПОДТВЕРЖДЕНИЕ=»Ч». » DSP 1 ERROR 05 »
Когда Запись данных DSP, выполнение REQ=»L» не изменяет ПОДТВЕРЖДЕНИЕ=»Л». » DSP 1 ERROR06 »
Когда Загрузка специального кода DSP, выполнение сброса DSP не изменяет порт
BUSY «L».
» DSP 1 ERROR11 »

Нет переключитесь на ЗАНЯТЫЙ порт «L» перед выдачей специальной команды чтения DSP. » DSP 1 ERROR 12 »
Нет переключитесь на ЗАНЯТЫЙ порт «L» перед чтением версии DSP. » DSP 1 ERROR 13 »

(Нет отображение ошибок, только отображение версии)
РЕГУЛИРОВКА
Аудиосистема
Ток холостого хода (1U-3854-1)
Необходимое измерительное оборудование: Вольтметр постоянного тока
Подготовка
блок при нормальной комнатной температуре 15°C > 30°C (59°F > 86°F).
(2) Предустановка
POWER (переключатель источника питания) OFF
SPEAKER (клемма динамика) без нагрузки
(не подключать динамик, фиктивный резистор и т. д.)
Регулировка
(1) Снимите верхнюю крышку и установите VR401, VR402 , VR403,
VR404, VR405, VR406, VR407, на 1U-3854-1 (усилитель мощности) при полностью против часовой стрелки .
(2) Подключите вольтметр постоянного тока к контрольным точкам (ПЕРЕДНЯЯ ЧАСТЬ: CX063 3,4 контакта, ПЕРЕДНЯЯ ЧАСТЬ: CX063 1,2-контактный, ЦЕНТРАЛЬНЫЙ канал: CX063 5,6-контактный, SURROUND-Lch: TP102 3, 4-контактный, SURROUND-Rch: CX082 1,2-контактный,
SURROUND BACK-Lch: CX082 7,8-контактный, SURROUND BACK-Rch: CX082 5, 6-контактный).
(3) Подсоедините шнур питания к сети переменного тока и включите выключатель питания.
(4) Предварительная настройка.
MASTER VOLUME: «—» против часовой стрелки (мин.) MODE: 7CH STEREO FUNCTION : CD
(5) Подождите 2 минуты и поверните VR401 по часовой стрелке, чтобы отрегулировать ТОЧКУ ПРОВЕРКИ. напряжение до 6,5 мВ ± 0,5 мВ постоянного тока.
(6) Через 10 минут после предварительной настройки поверните VR401, чтобы установить напряжение на 8 мВ ± 0,5. мВ постоянного тока.
(7) Таким же образом отрегулируйте переменные резисторы других каналов.
(8) Через 5 минут после (6) поверните VR401, чтобы установить напряжение на 8 мВ ± 0.5 мВ ОКРУГ КОЛУМБИЯ.
(9) Таким же образом отрегулируйте переменные резисторы других каналов.

НАЖМИТЕ НА ИЗОБРАЖЕНИЕ, ЧТОБЫ УВЕЛИЧИТЬ

таймер

/***************************************************

Эта программа была разработана

CodeWizardAVR V1.23.5 Оценка

Генератор автоматических программ

?Авторское право 1998-2002 HP InfoTech s.r.l.

http://www.hpinfotech.ro

электронная почта: [email protected]ро, [email protected]

 

Проект :

Версия:

Дата    : 25 июня 2003 г.

Автор  :

Компания :

Комментарии:

 

 

Тип микросхемы           : ATmega128

Тип программы        : Приложение

Тактовая частота     : 16,000000 МГц

Модель памяти        : Маленький

Размер внутреннего статического ОЗУ: 4096

Размер внешней SRAM: 0

Размер стека данных     : 1024

*************************************************/

 

#include      

#включить

 

символ без знака led_status=0x00;

символа sbuf[20];

 

// Функции буквенно-цифрового ЖК-модуля

#асм

   .equ __lcd_port=0x1B

#эндазм

#include

        

// Ÿ̸Ӹ ʱȭ ϴ Լ .

// Центральный процессор «ATmega128 ((л)» 102

void         init_timer(void){ 

              TCNT0=-255; /* 64 мкс * 255 = 16.Период 32 мс */

              TCCR0=7; /* CK(16 МГц)/1024 = 15,625 кГц: 64 мкс */

              ТИМСК |= 1; /* ТОИЕ0 = 1 */

}

 

// Служба прерывания переполнения таймера 0 рутина

прерывание [TIM0_OVF] недействительно timer0_ovf_isr(пусто)

{

              TCNT0=-255; /* 64 мкс * 255 = 16.Период 32 мс */

 

              // переместить светодиод

              led_status++;

              //if(led_status>0x01)

Изучите основы контактов ввода-вывода для микроконтроллера AVR | Пользовательский

Разобравшись с нашим регистром DDR, пришло время научиться считывать цифровые значения в наш микроконтроллер из реального мира. Это делается с помощью регистра PINx, где x — считываемый регистр.Чтение из порта довольно просто, как показано в следующем примере кода:

dataValue = PINB;

Когда это выполняется, все контакты PORT B ​​считываются в dataValue, и каждый бит в dataValue теперь будет соответствовать цифровым уровням на каждом контакте во время чтения. Хотя это может быть полезно, иногда мы можем захотеть протестировать отдельные биты, а не все биты одновременно. В PIC член .bits может использоваться для доступа к отдельным битам, но это не относится к устройствам AVR.Вместо этого доступ к отдельным битам требует некоторых манипуляций (простите за каламбур), включая использование логических И, ИЛИ и XOR.

Чтобы проверить, установлен ли бит (логическая 1), можно использовать два следующих оператора. Эти функции выполняют логическое И как с регистром PIN, так и с битом (представленным как 8-битное число). Если результат равен нулю, оператор if не будет выполняться, потому что операторы if выполняются только тогда, когда условие не равно нулю. В первом операторе используется двоичное значение для представления бита для проверки, тогда как во втором операторе используется инструкция логического сдвига для создания битовой маски, которая представляет бит для проверки.Версия с логическим сдвигом, возможно, более удобочитаема и, следовательно, более понятна.

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

Ваш адрес email не будет опубликован.