Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Подключение кнопки к Atmega8 – №5

Как я изучал микроконтроллеры AVR

  1. Вы здесь:  
  2. Главная
  3. Программирование
  4. Как я изучал микроконтроллеры AVR
  5. Подключение кнопки к Atmega8 – №5

 

 

 Начнем с алгоритма работы нашей программы!

1. Если нажать кнопку КН1 подключенную к порту PB1, то на ножке микроконтроллера №15 появится минус источника питания и включится бегущий огонек.

2. Написать программу бегущего огонька с использованием циклы for.

Перейдем к написанию программы и рисованию электрической схемы!

1. Создаем новый проект в Atmel Studio 7 по пути

File > New > Projec…, выбираем C/C++ и тип проекта GCC C Executable Project, вводим название проекта (Name: и Solution name:).

2. Выбираем тип микроконтроллера с которым будем работать, в нашем случае Atmega8.

Программа нам выдает код в файле main.c*

 Приводим его к читабельному виду, удаляем лишние комментарии.

Добавим в электрическую схему из статьи Бегущие огни Atmega8 программа на СИ кнопку включения:

И так схема у нас есть, на ней обозначены микроконтроллер, источник напряжения 5В, 7 резисторов, 7 светодиодов, к порту PB1  ножки микроконтроллера №15 подключена кнопка КН1, а также обозначены выводы для подключения программатора, вернемся к программе.

Светодиоды у нас подключены к порту РD, настроим в программе ножки порта РD на выход, допишем в программе DDRD = 0b11111111;, так как кнопка у нас подключена к порту В настроим его ножки на вход DDRB = 0b00000000;, затем выключим порт D командой PORTD = 0b00000000;, по алгоритму наш микроконтроллер должен понимать, что когда мы подали минус – замкнув кнопку, для этого подтянем ножки порта В к +5в через внутренние резисторы микроконтроллера PORTB = 0b11111111;, можно использовать внешние подтягивающие резисторы, но об этом поговорим в другой раз когда будем бороться с дребезгом контактов.

С настройкой портов закончили, добавим переменную char r; для работы нашего бегущего огонька, присвоим директиве #define имя S которое будет хранить данные о задержке на 0,2 секунды. Чтобы наши светодиоды замигали, добавим в программу библиотеку задержек #include <util/delay.h>, а для мигания будем использовать функцию _delay_ms(), далее с помощью оператора #define укажем программе, что наш контроллер будет работать от внутреннего генератора с частой 8МГц допишем в код #define F_CPU 8000000UL.

Вот получился код:

Запишем в наш бесконечный цикл while код опроса порта на котором подключена кнопка и цикл мигания светодиодов:

Для опроса кнопки воспользуемся операторами if и else, строка if (PINB == 0b11111101) означает, если ножка порта PB1 равна минусу, то выполним код выделенный красным на рисунке ниже, иными словами запустим мигание светодиодов:


 В противном случае else, выключим порт D:

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

 

 

Исходный код программы Скачать архив

  • Назад
  • Вперед

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

Порты ввода-вывода микроконтроллера ⋆ 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

авр – ATMega8: зачем нужно связывать VCC и AVCC?

спросил

9 лет, 6 месяцев назад

Изменено 2 года, 10 месяцев назад

Просмотрено 38 тысяч раз

\$\начало группы\$

Я часто читаю, что рекомендуется подключать VCC к AVCC. Даже в даташите на ATMega8 написано так:

AVCC — вывод напряжения питания для аналого-цифрового преобразователя, порт C (3..0), и АЦП (7..6). Он должен быть внешне подключен к VCC, даже если АЦП не используется. Если используется АЦП, его следует подключить к VCC. через фильтр нижних частот. Обратите внимание, что порт C (5..4) использует цифровое питание. напряжение, Вкз.

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

Мне просто нужно принять это или есть веская причина?

  • авр
  • атмега
  • базовый

\$\конечная группа\$

3

\$\начало группы\$

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

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

Разработчики Atmel решили, что наличие отдельных аналоговых VCC и заземления является лучшим способом обеспечения относительно бесшумной аналоговой секции, позволяя пользователям добавлять фильтрацию и разделение цифровых и аналоговых плоскостей даже внутри ATmega.

Это не только ATMega8, на самом деле все ATMega и даже некоторые ATTiny имеют этот дизайн.

\$\конечная группа\$

1

\$\начало группы\$

Молодец, что спросил причину!

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

Простые проекты “мигалки” не предъявляют требований к шуму и точности.

Теперь, если вы имеете в виду, должны ли они быть подключены к одному и тому же НАПРЯЖЕНИЮ, ответ – да в пределах +/- 0,3 В от VCC

Из полного описания ATMega8:

«АЦП имеет отдельный вывод аналогового напряжения питания, AVCC. AVCC не должен отличаться от VCC более чем на ±0,3 В». и «AVCC — вывод напряжения питания для аналого-цифрового преобразователя»

Резюме: AVCC и VCC должны иметь одинаковое напряжение (в пределах +/- 0,3 В), и он идентифицируется как отдельный контакт, чтобы позволить разработчику разместить дополнительные фильтры на этом входе, чтобы исключить шум из чувствительного A. /D преобразователь часть микросхемы.

Надеюсь, это поможет!

\$\конечная группа\$

\$\начало группы\$

Часто на цифровых контактах питания и заземления появляются небольшие помехи. Трудно устранить все эти шумы, когда цифровая схема переключает значительный ток, а шум источника питания 150 мВ или около того вряд ли повлияет на схему, питаемую цифровыми контактами питания. Однако наличие шума 150 мВ на аналоговых выводах питания очень затруднило бы или сделало бы невозможным достижение аналоговой схемой точности в доли процента. Тот факт, что аналоговые контакты разделены, означает, что можно получить точные показания, даже если в цифровом источнике питания есть шум 150 мВ, при условии, что цифровой источник не колеблется более чем на 300 мВ, а аналоговый источник находится где-то. в пределах 300 мВ от обоих крайних значений диапазона цифрового питания. Устранение 99% шума от источника питания, который питает только аналоговый вывод питания, и обеспечение того, чтобы напряжение источника было близко к цифровому напряжению питания, часто намного проще, чем пытаться устранить все шумы от цифрового питания.

\$\конечная группа\$

\$\начало группы\$

Просто чтобы добавить еще одну причину, по которой AVCC следует подключать даже в простых проектах.

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

Я только что столкнулся с этой проблемой в одном из моих “быстрых и грязных” хакерских проектов с использованием ATmega88P.

После подключения AVCC напрямую к VCC проблема с тем, что БПК не сбрасывал сброс, была решена. Так как я не использую никакую другую аналоговую периферию в своем проекте, я не стал заморачиваться с правильной развязкой. Это решение найдено в одной из тем форума avrfreaks после долгих поисков.

См.: http://www.avrfreaks.net/comment/349747#comment-349747

\$\конечная группа\$

\$\начало группы\$

Причина связана с внутренним процессом устройства и его конструкцией. Поскольку они указывают, что AVCC и VCC должны быть в пределах 0,3 В, это похоже на напряжение защиты внутренних диодов, используемых в микросхемах. Если диоды смещены выше 0,3 В (например, если AVCC не подключен), эти диоды могут проводить ток, вызывая проблемы и, возможно, повреждая устройство.

\$\конечная группа\$

\$\начало группы\$

Я полагаю, что некоторые контакты, включая PORTC:0-3, на самом деле питаются от Avcc, и если вы не подключите Avcc, эти контакты не будут работать.

\$\конечная группа\$

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie

.

Как настроить микроконтроллер ATmega8 с низким энергопотреблением – Anwar’s Tech.

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

Для этих простых приложений ATmega8 обычно достаточно хорош. Этот чип имеет только 8 КБ флэш-данных. Но для небольших приложений, приведенных выше, этого более чем достаточно. Для программ, требующих больше памяти, вы можете выбрать ATmega с более высоким номером, например ATmega328.

В настоящее время вы можете найти ATmegas (обычно типа 328) на платах Arduino. Для них требуется определенное входное напряжение 5–12 В, и они не обязательно являются энергосберегающими. Требуемое входное напряжение означает, что если вы хотите, чтобы он работал от батарей, вы должны комбинировать его таким образом, чтобы получить хотя бы близкое к 5 В. Это может быть сложно, если вы хотите построить что-то компактное и не обязательно много власти.

Рисунок 1: Типичное использование микроконтроллера ATmega. Датчики измеряют температуру, относительную влажность и давление окружающей среды.

В этом блоге я кратко опишу, как настроить ATmega8 на малое энергопотребление с помощью Arduino IDE. Также я опишу процесс работы ATmega8 всего от 2-х батареек ААА или даже кнопочного элемента. Процесс включает в себя разгон ATmega8 с 16 МГц до 1 МГц с помощью внутреннего генератора. В конечном итоге это значительно снижает энергопотребление и позволяет ATmega8 работать при более низких напряжениях.

Запись загрузчика

Я купил пустые ATmega8 на Ebay. Они должны быть загружены загрузчиком в первую очередь. Для этого я буду использовать Arduino UNO в качестве внутрисхемного последовательного программатора (ISP). Мы предполагаем, что вы уже использовали Arduino UNO на своем компьютере и установили Arduino IDE. Для настройки провайдера нам нужно

  • Сначала подключите Atmega8 к Arduino UNO, чтобы запрограммировать устройство следующим образом.

    Обратите внимание на ориентацию микрочипа. Полукруглая выемка в данном случае находится слева и определяет ориентацию штифта.
  • В Arduino IDE добавьте
    https://raw.githubusercontent.com/carlosefr/atmega/master/package_carlosefr_atmega_index.json
    в «Дополнительные URL-адреса диспетчера платы:» в разделе «Настройки». Это позволит найти пакет, необходимый для микросхемы ATmega8.
  • Чтобы установить плату, перейдите в
    «Инструменты» -> «Плата: (..)» -> «Диспетчер плат»,
    затем выполните следующие действия
    «Тип» -> «Участие» -> «Barebones ATmega…» – > Установить
  • Далее нам нужно настроить Arduino UNO в качестве интернет-провайдера.
    Выберите плату UNO, соответствующий COM-порт и программатор (в моем случае AVRISP mkII) в меню «Инструменты».
    Это значения по умолчанию для запуска кода с вашего Arduino UNO.
  • Выберите скетч «ArduinoISP» в меню «Файл» -> «Пример».
    Это должно быть установлено по умолчанию в Arduino IDE.
    Загрузите это в ООН.
  • Для записи загрузчика нам нужно изменить некоторые вещи в разделе «Инструменты»:
    «Программист» -> «Arduino as ISP»
    «Плата» -> «Atmega8»
    «Часы» -> «1 МГц (внутренняя)» ( Вы можете выбрать любой конечно, я выбираю 1 МГц для работы с низким энергопотреблением и низким напряжением)
  • Теперь мы можем записать загрузчик в меню «Инструменты» -> «Записать загрузчик». Если это не работает, подключение Arduino UNO к Atmega8 может быть неправильным. Дважды проверьте это. Добавление резистора 10 кОм к контакту 1 и 5 В может помочь.

    Или для ATmega8 по умолчанию требуется генератор с частотой 16 МГц. Это тот случай, если загрузчик уже есть. Так что добавьте его (нужен только в первый раз) и несколько конденсаторов и попробуйте снова записать загрузчик с помощью вышеуказанных опций. После того, как это сработает, вы можете удалить осциллятор.

  • Вы можете проверить, все ли работает нормально, добавив светодиод к одному из контактов цифрового выхода и запустив пример «Мигание». Настройки из предыдущих шагов (настройка провайдера) должны остаться прежними.

Если все работает, поздравляю! Теперь вы настроили ATmega8 с минимальным количеством компонентов и низким энергопотреблением для использования в небольших и эффективных проектах! ATmega8 может работать от низкого напряжения, такого как 3 В, требующего только 2 AA/AAA. С дополнительными библиотеками с низким энергопотреблением можно перевести чип в режим ожидания, чтобы он мог работать даже от кнопочного элемента в течение приличного времени! («Приличное количество» можно рассчитать, получив заряд батареи (обычно мАч или Ач) и измерив ток активного ATmega.)

Переход к еще более низкому напряжению

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

Для того, чтобы удалить обнаружение отключения питания, мы должны изменить «настройки предохранителей» ATmega8:

  • Установите WinAVR (если он не установлен).
  • В командной строке введите:
     avrdude -c arduino -p m8 -P COM4 -b19200 

    Это может отличаться, если вы используете другой программатор (-c arduino), другую микросхему (-p m8) или другой порт (-P COM4). Это скажет нам, если выбранный программатор и микросхема исправны и работают.

  • Тип:
     avrdude -c arduino -p m8 -P COM4 -b 19200 -v 

    , чтобы посмотреть еще кое-что и проверить настройки предохранителей.

    Теперь, если есть проблема с «Подписью устройства». Вы можете «взломать» его, отредактировав «avrdude.conf» (ищите в каталоге вашей программы AVR) для вашей данной подписи микрочипа. Я изменил подпись под ATmega8, чтобы она соответствовала моему конфликту, и прокомментировал исходную строку. Не уверен, почему это отличалось, но это помогло. Хотя может это и не нужно.

  • Используйте этот замечательный веб-сайт http://www.engbedded.com/fusecalc , чтобы рассчитать настройки предохранителя для отключенного обнаружения отключения. Мои были: 0xE1 и 0xCD. Вы также можете проверить, каким настройкам соответствуют текущие значения предохранителей. Проверка будет состоять в том, чтобы увидеть, действительно ли он установлен на тактовую частоту 1 МГц. Вы можете проверить соответствующее изменение в настройках предохранителя, просто сняв флажок для обнаружения отключения питания.
  • Теперь мы пишем эти настройки предохранителей с помощью avrdude в командной строке как:
     avrdude -c arduino -p m8 -P COM4 -b19200 -U lfuse:w:0xe1:m -U hfuse:w:0xcd:m -F 

    -F может не понадобиться.

  • Проверьте правильность настройки предохранителей с помощью
     avrdude -c arduino -p m8 -P COM4 -b 19200 -v 

Теперь вы можете проверить, можете ли вы снизить напряжение питания до 2 В.

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

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