Оглавление:
- Шаг 1. Написание программы и компиляция шестнадцатеричного файла с помощью Atmel Studio
- Шаг 2: Изменение стандартной конфигурации битов предохранителей микроконтроллера
- Шаг 3: Запись программы в память микроконтроллера ATMega328P
- Шаг 4: Проверьте работу микроконтроллера в соответствии с инструкциями нашей программы
- Шаг 5: Заключение
Видео: Конфигурация предохранителей микроконтроллера AVR. Создание и загрузка во флэш-память микроконтроллера программы мигания светодиода: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
В этом случае мы создадим простую программу на языке C и запишем ее в память микроконтроллера. Мы напишем нашу собственную программу и скомпилируем шестнадцатеричный файл, используя Atmel Studio в качестве интегрированной платформы разработки. Мы настроим биты предохранителей и загрузим шестнадцатеричный файл в память микроконтроллера AVR ATMega328P, используя собственный программатор и программное обеспечение AVRDUDE.
AVRDUDE - это программа для загрузки и выгрузки внутренней памяти микроконтроллеров AVR компании Atmel. Он может программировать флеш-память и EEPROM, а если поддерживается протоколом последовательного программирования, он может программировать предохранители и биты блокировки.
Шаг 1. Написание программы и компиляция шестнадцатеричного файла с помощью Atmel Studio
Если у вас нет Atmel Studio, вам следует загрузить и установить его:
Этот проект будет использовать C, поэтому выберите параметр GCC C Executable Project из списка шаблонов, чтобы сгенерировать простой исполняемый проект.
Далее необходимо указать, для какого устройства будет разработан проект. Этот проект будет разработан для микроконтроллера AVR ATMega328P.
Введите код программы в области главного редактора исходного кода Atmel Studio. Главный редактор исходного кода - это окно является основным редактором исходных файлов в текущем проекте. В редакторе есть функции проверки орфографии и автозаполнения.
1. Мы должны сообщить компилятору, с какой скоростью работает наш чип, чтобы он мог правильно вычислять задержки.
#ifndef F_CPU
#define F_CPU 16000000UL // сообщение частоты кристалла контроллера (16 МГц AVR ATMega328P) #endif
2. Мы включаем преамбулу, куда мы помещаем нашу включаемую информацию из других файлов, которая определяет глобальные переменные и функции.
#include // заголовок для включения управления потоком данных по контактам. Определяет контакты, порты и т. Д.
#include // заголовок для включения функции задержки в программе
3. После преамбулы идет функция main ().
int main (void) {
Функция main () уникальна и отличается от всех других функций. Каждая программа на C должна иметь ровно одну функцию main (). Main () - это то место, где AVR начинает выполнение вашего кода при первом включении питания, поэтому это точка входа в программу.
4. Установите вывод 0 порта PORTB в качестве выхода.
DDRB = 0b00000001; // Установить PORTB1 как вывод
Мы делаем это, записывая двоичное число в регистр направления данных B. Регистр направления данных B позволяет нам вводить или выводить биты регистра B. Запись 1 делает их выводом, а 0 - вводом. Поскольку мы подключаем светодиод для работы в качестве выхода, мы записываем двоичное число, делая вывод 0 ПОРТА B выходом.
5. Петля.
в то время как (1) {
Этот оператор представляет собой цикл, часто называемый основным циклом или циклом событий. Этот код всегда верен; поэтому он выполняется снова и снова в бесконечном цикле. Это никогда не прекращается. Следовательно, светодиод будет мигать бесконечно, если микроконтроллер не отключит питание или код не будет стерт из памяти программ.
6. Включите светодиод, подключенный к порту PB0.
PORTB = 0b00000001; // включает светодиод, подключенный к порту PB0
Эта строка дает 1 PB0 порта B. PORTB - это аппаратный регистр на микросхеме AVR, который содержит 8 контактов PB7-PB0, идущих слева направо. Если поставить 1 в конце, PB0 получит 1; это устанавливает высокий уровень PB0, который включает его. Таким образом, светодиод, подключенный к выводу PB0, включится и загорится.
7. Задержка
_delay_ms (1000); // создает задержку в 1 секунду
Этот оператор создает задержку в 1 секунду, так что светодиод включается и горит ровно 1 секунду.
8. Отключите все контакты B, включая PB0.
PORTB = 0b00000000; // Отключает все контакты B, включая PB0
Эта линия отключает все 8 контактов порта B, так что даже PB0 выключен, поэтому светодиод гаснет.
9. Еще одна задержка.
_delay_ms (1000); // создает еще одну задержку в 1 секунду
Он выключается ровно на 1 секунду, прежде чем снова запустить цикл и встретить линию, которая снова включает его, повторяя процесс полностью. Это происходит бесконечно, так что светодиод постоянно мигает и гаснет.
10. Заявление о возврате
}
возврат (0); // эта строка фактически никогда не достигается}
Последняя строка нашего кода - это оператор return (0). Несмотря на то, что этот код никогда не выполняется, потому что существует бесконечный цикл, который никогда не заканчивается, для наших программ, работающих на настольных компьютерах, важно, чтобы операционная система знала, правильно они работают или нет. По этой причине GCC, наш компилятор, хочет, чтобы каждый main () заканчивался кодом возврата. Коды возврата не нужны для кода AVR, который работает автономно с любой поддерживаемой операционной системой; тем не менее, компилятор выдаст предупреждение, если вы не завершите main с помощью return ().
Заключительный шаг - построение проекта. Это означает компиляцию и, наконец, связывание всех объектных файлов для создания файла исполняемого файла (.hex). Этот шестнадцатеричный файл создается в папке Debug, которая находится внутри папки Project. Этот шестнадцатеричный файл готов к загрузке в микросхему микроконтроллера.
Шаг 2: Изменение стандартной конфигурации битов предохранителей микроконтроллера
Важно помнить, что некоторые предохранители могут использоваться для блокировки определенных аспектов микросхемы и потенциально могут заблокировать ее (сделать ее непригодной для использования)
Всего в ATmega328P используется 19 битов предохранителей, которые разделены на три разных байта предохранителей. Три бита предохранителя содержатся в «Расширенном байте предохранителя», восемь - в «старшем байте предохранителя», а еще восемь - в «младшем байте предохранителя». Также есть четвертый байт, который используется для программирования битов блокировки.
Каждый байт составляет 8 бит, и каждый бит представляет собой отдельную настройку или флаг. Когда мы говорим о настройке, а не о настройке, запрограммированных, а не запрограммированных предохранителях, мы фактически используем двоичные данные. 1 означает, что не установлено, не запрограммировано, а ноль означает, что установлено, запрограммировано. При программировании предохранителей вы можете использовать двоичное представление или, чаще, шестнадцатеричное представление.
Микросхемы ATmega 328P имеют встроенный RC-генератор с частотой 8 МГц. Новые микросхемы поставляются с этим набором в качестве источника тактовой частоты и активным предохранителем CKDIV8, что обеспечивает системную тактовую частоту 1 МГц. Установлено максимальное время запуска и включен период ожидания.
Новые чипы ATMega 328P обычно имеют следующие настройки предохранителей:
Низкий предохранитель = 0x62 (0b01100010)
Высокий предохранитель = 0xD9 (0b11011001)
Расширенный предохранитель = 0xFF (0b11111111)
Мы будем использовать чип ATmega 328 с внешним кристаллом на 16 МГц. Следовательно, нам необходимо соответствующим образом запрограммировать биты «Fuse Low Byte».
1. Биты 3-0 управляют выбором генератора, а значение по умолчанию 0010 - использовать откалиброванный внутренний RC-генератор, который нам не нужен. Мы хотим, чтобы кварцевый генератор с низким энергопотреблением работал в диапазоне от 8,0 до 16,0 МГц, поэтому биты 3-1 (CKSEL [3: 1]) должны быть установлены на 111.
2. Биты 5 и 4 управляют временем запуска, а значение по умолчанию 10 соответствует задержке запуска в шесть тактовых циклов от отключения питания и режима энергосбережения, плюс дополнительная задержка запуска в 14 тактовых циклов плюс 65 миллисекунд после сброса.
Чтобы быть в безопасности для кварцевого генератора с низким энергопотреблением, мы хотим максимально возможную задержку в 16 000 тактов от отключения питания и энергосбережения, поэтому SUT [1] должен быть установлен в 1, плюс дополнительная задержка запуска. 14 тактовых циклов плюс 65 миллисекунд после сброса, поэтому SUT [0] должен быть установлен в 1. Кроме того, CKSEL [0] должен быть установлен в 1.
3. Бит 6 управляет выводом тактовых импульсов на PORTB0, о чем мы не заботимся. Итак, бит 6 можно оставить равным 1.
4. Бит 7 управляет операцией деления на 8, а значение по умолчанию, равное 0, включает эту функцию, чего мы не хотим. Итак, бит 7 нужно изменить с 0 на 1.
Следовательно, новый младший байт предохранителя должен быть 11111111, что в шестнадцатеричной системе счисления равно 0xFF
Для программирования битов «младшего байта предохранителя» мы можем использовать наш программатор (https://www.instructables.com/id/ISP-Programmer-fo…) и программное обеспечение AVRDUDE. AVRDUDE - это утилита командной строки, которая используется для загрузки и выгрузки на микроконтроллеры Atmel.
Загрузите AVRDUDE:
Во-первых, мы должны добавить описание нашего программатора в конфигурационный файл AVRDUDE. В Windows файл конфигурации обычно находится в том же месте, что и исполняемый файл AVRDUDE.
Вставьте текст в конфигурационный файл avrdude.conf:
# ISPProgv1
программист id = "ISPProgv1"; desc = "гудение последовательного порта, сброс = dtr sck = rts mosi = txd miso = cts"; type = "serbb"; connection_type = серийный; сброс = 4; sck = 7; mosi = 3; мисо = 8;;
Перед запуском AVRDUDE мы должны подключить микроконтроллер к программатору, согласно схеме
Откройте окно командной строки DOS.
1. Чтобы просмотреть список программистов, поддерживающих avrdude, введите команду avrdude -c c. Если все в порядке, в списке должен быть идентификатор программиста "ISPProgv1".
2. Чтобы просмотреть список устройств Atmel, поддерживаемых avrdude, введите команду avrdude -c ISPProgv1. В списке должно быть устройство m328p для Atmel ATMega 328P.
Затем введите avrdude -c ISPProgv1 –p m328p, команда сообщит avrdude, какой программатор используется и какой микроконтроллер Atmel подключен. Он представляет подпись ATmega328P в шестнадцатеричной системе счисления: 0x1e950f. В нем представлено программирование битов предохранителей, которые сейчас используются в ATmega328P, также в шестнадцатеричной системе счисления; в этом случае байты предохранителей запрограммированы в соответствии с заводскими настройками по умолчанию.
Затем введите avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m. Это команда, которая сообщает avrdude, какой программатор используется и какой микроконтроллер Atmel подключен, а также для изменения младшего байта предохранителя на 0xFF.
Теперь тактовый сигнал должен исходить от кварцевого генератора малой мощности.
Шаг 3: Запись программы в память микроконтроллера ATMega328P
Сначала скопируйте шестнадцатеричный файл программы, которую мы создали в начале инструкции, в каталог AVRDUDE.
Затем введите в окне командной строки DOS команду avrdude –c ISPProgv1 –p m328p –u –U flash: w: [имя вашего шестнадцатеричного файла]
Команда записывает шестнадцатеричный файл в память микроконтроллера. Теперь микроконтроллер работает в соответствии с инструкциями нашей программы. Давай проверим!
Шаг 4: Проверьте работу микроконтроллера в соответствии с инструкциями нашей программы
Подключите компоненты в соответствии с принципиальной схемой цепи мигающего светодиода АРН
Во-первых, нам нужна мощность, как и всем схемам AVR. Для работы микросхемы AVR достаточно мощности около 5 вольт. Вы можете получить это либо от батарей, либо от источника постоянного тока. Мы подключаем +5 В к контакту 7 и подключаем контакт 8 к земле на макетной плате. Между обоими контактами мы помещаем керамический конденсатор емкостью 0,1 мкФ, чтобы сгладить мощность источника питания и обеспечить бесперебойную работу микросхемы AVR.
Резистор 10 кОм используется для сброса питания при включении (POR) устройства. При включении питания напряжение на конденсаторе будет равно нулю, поэтому устройство сбрасывается (так как сброс активен на низком уровне), затем конденсатор заряжается до VCC, и сброс будет отключен.
Подключаем анод нашего светодиода к выводу PB0 AVR. Это вывод 14 ATMega328P. Поскольку это светодиод, мы хотим ограничить ток, протекающий к светодиоду, чтобы он не перегорел. Вот почему мы размещаем резистор 330 Ом последовательно со светодиодом. Катод светодиода подключается к земле.
Кристалл 16 МГц используется для обеспечения тактовой частоты микроконтроллера Atmega328, а конденсаторы 22 пФ используются для стабилизации работы кристалла.
Это все соединения, необходимые для включения светодиода. Источник питания.
Ok. Светодиод мигает с задержкой в одну секунду. Работа микроконтроллера соответствует нашим задачам
Шаг 5: Заключение
По общему признанию, это был долгий процесс для простого мигания светодиода, но правда в том, что вы успешно преодолели основные препятствия: создание аппаратной платформы для программирования микроконтроллера AVR, использование Atmel Studio в качестве интегрированной платформы разработки, использование AVRDUDE в качестве программного обеспечения для настройка и программирование микроконтроллера AVR
Если вы хотите быть в курсе моих базовых проектов микроконтроллеров, подпишитесь на мой YouTube! Просмотр и обмен моими видео - это способ поддержать то, что я делаю
Подпишитесь на канал YouTube FOG
Рекомендуемые:
Создание вашей первой программы на C ++ (Windows): 12 шагов
Создание вашей первой программы на C ++ (Windows): Здравствуйте, начинающие программисты! Вы хотите иметь возможность рассказать своим друзьям, что вы создали программу? Может быть, вы просто ищете хорошее место, чтобы посмотреть, будет ли это интересным хобби? Неважно, насколько вы знакомы с навигацией
Создание вашей первой программы на Visual Basic: 7 шагов
Создание вашей первой программы на Visual Basic: это руководство покажет вам, как программировать Microsoft Visual Basic 2005 Express Edition. Пример, который вы создадите сегодня, - это простая программа для просмотра изображений. Если вам нравится эта инструкция, нажмите кнопку + в верхней части инструкции. Благодарить
Загрузка и запуск Ubuntu с флэш-накопителя: 6 шагов
Загрузка и запуск Ubuntu с флэш-накопителя: запуск операционной системы, например Windows, с флэш-накопителя, иногда может быть очень полезным. Вы можете восстановить данные с жесткого диска и скопировать их на внешний жесткий диск, если этот компьютер не загружается, или не сканирует его на вирусы и
Создание программы в Visual Basic: веб-браузер: 9 шагов
Создание программы в Visual Basic: Веб-браузер: это руководство объясняет процесс создания простого приложения веб-браузера на VB.NET. Оно разработано как продолжение моего первого руководства по VB.NET: Создание вашей первой программы на Visual Basic. Рекомендуется прочитать этот инст
Зажигание светоизлучающего диода (светодиода) с помощью микроконтроллера C Stamp: 5 шагов
Зажигание светоизлучающего диода (светодиода) с помощью микроконтроллера C Stamp: это первый проектный проект и мероприятие из справочного руководства CS310XXX (μ C 101) от A-WIT Technologies, Inc. светоизлучающий диод (LED) с микроконтроллером C Stamp. C & n