Разделы сайта
Выбор редакции:
- Открыть с помощью — как добавить и удалить пункты меню Как сделать открыть с помощью
- Покупаем ноутбук! Какой выбрать для игр? Как выбрать игровой ноутбук Какой ноутбук лучше подойдет для игр
- Как зарегистрироваться в плей маркете?
- Функции VBA для работы с текстом
- Обратная связь на YouTube: как общаться с подписчиками и увеличить их число
- Какие методы существуют и как искать одновременно по нескольким значениям
- Личный кабинет столото Столото как зарегистрироваться не получается
- Телеграмм на андроид Скачать телеграмм по номеру телефона
- Обзор Samsung Galaxy J7 (2017): достойное ли продолжение?
- Пользовательский интерфейс на базе Twitter Bootstrap для начинающих Качаем и устанавливаем bootstrap signed
Реклама
Done at home программирование микроконтроллеров avr. CodeVisionAVR. Общие сведения, для начинающих программировать на языке Си. Какой микроконтроллер выбрать для работы |
Если вы читаете эту статью, вероятно у вас возникло желание понять, как работают микроконтроллеры, и скорее всего появились вопросы: Попробуем ответить на эти вопросы. 1. Какой микроконтроллер выбрать для работы?Большой популярностью у радиолюбителей пользуются 8-битные микроконтроллеры PIC фирмы Microchip Technology и AVR фирмы Atmel, 16-битные MSP430 фирмы TI, а также 32-битные микроконтроллеры, архитектуры ARM .В промышленности, несколько иначе, первое место с большим отрывом занимает Renesas Electronics
на втором Freescale
, на третьем Samsung
, затем идут Microchip
и TI
, далее все остальные. Мы будем изучать 8-битные микроконтроллеры AVR, семейства ATMEGA 8 и 16 серии . Выбор определился, опять же доступностью, наличием множества любительских разработок, огромным количеством учебного материала. Наличием разнообразных встроенных компонентов и функциональностью этого семейства. 2. Какую среду разработки использовать для программирования выбранного микроконтроллера?Для AVR созданы разные интегрированные среды разработки (IDE, Integrated development environment).IDE – это система программных средств, используемая программистами для разработки программного обеспечения (ПО), в состав которой входят: текстовый редактор, компилятор и/или интерпретатор, средства автоматизации сборки, отладчик. Наиболее распространенные из них AVRStudio, ATmelStudio, WINAVR, CodeVision, IAR Embedded Workbench
. ATmelStudio позволяет создавать проекты, и писать программы как в ассемблере, так и на СИ. Изначально всегда стоит вопрос: какой язык программирования выбрать, чтобы писать эффективные программы? Отвечу просто: нужно уметь писать как минимум на двух языках ассемблере и СИ. Ассемблер просто необходим, когда нужно написать быстрые и компактные подпрограммы и макросы, различные драйверы устройств. Но, когда требуется создать объемный проект, построенный на сложных алгоритмах, без знания СИ может быть потрачено очень много времени, особенно в процессе отладки, а если возникнет желание перенести на другую платформу, например PIC18, или STM, может стать неразрешимой проблемой. Чтобы наглядно видеть результат своей работы, не используя паяльник или макетную плату достаточно установить программу Proteus . 3. Как прошивать контроллер, и какие дополнительные приборы и акссесуары нужны для удобной работы с ними?Используем датагорский . Кроме этого, нужно будет приобрести макетные платы, блок питания с выходным напряжением 5 Вольт. Можно в качестве БП с малыми пульсациями использовать , применив стабилитрон на 5 Вольт.Возможно, со временем мы с Игорем предложим проект для сборки отладочной платы. 4. Какую литературу изучать?А вот, например:Практическое программирование AVR на ассемблере. Ревич, 2011 1000 и одна микроконтроллерная схема Вып. 1-2. Рюмик, 2010-2011 10 практических устройств на МК AVR Книга 1-2. Кравченко, 2008-2009 Самоучитель разработчика устройств на МК AVR. Белов, 2008 МК AVR семейств Tiny и Atmega. Ефстифеев, 2008 CodeVisionAVR. Пособие для начинающих. Лебедев, 2008 Микропроцессорное управление устройствами, тиристоры, реле. Белов, 2008 Аналоговые интерфейсы МК. Стюард, Болл, 2007 Создаем устройства на МК AVR. Белов, 2007 МК AVR в радиолюбительской практике. Полный разбор ATTINY2313. Белов, 2007 Сетевой и межсетевой обмен данными с МК. Иди, 2007 МК AVR. практикум для начинающих. Хартов, 2007 Применение AVR Схемы, алгоритмы, программы. Баранов, 2006 Микроконтроллеры AVR. Вводный курс. Мортон, 2006 Измерение, управление и регулирование с помощью AVR. Трамперт, 2006 Программирование на языке С для AVR и PIC МК. Шпак, 2006 Конструирование устройств на МК. Белов, 2005 МK - это же просто, тома 1-3. Фрунзе, 2002-2003 Язык программирования Си, 2-е издание. Керниган, Ритчи, 2009 Программирование микроконтроллеров ATMEL на языке С. Прокопенко, 2012 5. Где в интернете можно задавать вопросы и получать конкретные ответы?Задавать вопросы вы можете на нашем или любом другом форуме, где так или иначе затронуты темы по микроконтроллерам. Главное на форумах правильно формулировать вопросы, чтобы четко получать ответы. Абстрактные вопросы не приветствуются, и скорее всего вместо ответа вы получите жесткую критику, или ваш вопрос останется без внимания!Теперь рассмотрим поближе нашего фаворита, микроконтроллер ATMEGA 88-разрядный высокопроизводительный AVR микроконтроллер с малым потреблениемПрогрессивная RISC архитектура 130 высокопроизводительных команд, большинство команд выполняется за один тактовый цикл 32 8-разрядных рабочих регистра общего назначения Полностью статическая работа Приближающаяся к 16 MIPS (при тактовой частоте 16 МГц) производительность Встроенный 2-цикловый перемножитель Энергонезависимая память программ и данных Встроенная периферия Специальные микроконтроллерные функции Выводы I/O и корпуса Рабочие напряжения Рабочая частота отличия ATMEGA16 от 8
Интерфейс JTAG (совместимый с IEEE 1149.1) Четыре канала PWM / ШИМ 8-канальный 10-разрядный аналого-цифровой преобразователь Шесть режимов пониженного потребления: Idle, Power-save, Power-down, Standby, Extended Standby и снижения шумов ADC 32 программируемые линии ввода/вывода 40-выводной корпус PDIP и 44-выводной корпус TQFP AtmelStudioЕсли Вы только начинаете, то нужно скачать и установить программу AtmelStudio с официальной страницы atmel.comПосле установки программы AtmelStudio можно приступить к созданию проекта. Проект – это ваша программа, которую вы будете писать, отлаживать и прошивать, после компиляции, в память микроконтроллера. Чтобы создать проект, надо открыть программу, появиться такая заставка, и откроется страница создания проекта Чтобы создать новый проект, нужно кликнуть по «New Project…»
Появится следующее окно Выбираем “megaAVR, 8-bit”
и находим нужный нам микроконтроллер, мы выбрали ATmega8.
В правой части заставки появляется список устройств, работающих с этим микроконтроллером, один из которых мы можем подключить. Выбираем ОК.
Появляется страница редактора текста, которая позволяет редактировать и отлаживать программу. Пока страница чистая, указано время и дата создания и название файла проекта, имя пользователя. Есть дополнительные окно устройств ввода-вывода, окно отчетов компиляции программы. Теперь мы можем программировать в ассемблере. Аналогично создается проект для программирования на языке СИ. Для программирования AVR-микроконтроллеров существует немало средств разработки, однако, наиболее популярным, несомненно, следует признать пакет AVR Studio . Есть ряд причин такой популярности – это бесплатный пакет, разработанный фирмой ATMEL , он объединяет в себе текстовый редактор, ассемблер и симулятор. Пакет AVR Studio также используется совместно с аппаратными средствами отладки. В предлагаемой статье на примерах рассматриваются приемы работы с пакетом, что поможет начинающим программистам быстрее понять взаимодействие отдельных компонентов AVR Studio. В следующей части статьи будет рассказано об отладке в среде AVR Studio программ, написанных на языке Си. Пакет AVR Studio имеет солидную историю развития, что отражается в количестве существующих версий. В конце 2003 г. выпущена версия 4.08, которая имеет ряд полезных дополнений, а в начале 2004 г. вышло обновление (Service Pack 1), добавляющее поддержку AVR-контроллеров третьего поколения семейства ATmega48. Производство микросхем этого семейства намечено на вторую половину 2004 г. Дистрибутив пакета и Service Pack можно загрузить с сайта www.atmel.com или получить компакт-диск с этим дистрибутивом у российского дистрибьютора фирмы ATMEL. Работу пакета AVR Studio удобно рассматривать на какой-либо конкретной программе. В качестве илюстрации мы рассмотрим создание проекта для простейшей программы, которая будет по очереди зажигать два светодиода. Для определенности возьмем микросхему Atmega128 и подключим два светодиода в выводам 31 и 32 (это биты 6 и 7 порта D микросхемы ATmega128). AVR-контроллеры имеют мощные выходные каскады, типовой ток каждого вывода составляет 20 мА, максимальный ток вывода – 40 мА, причем это относится как к втекающему, так и к вытекающему току. В нашем примере светодиоды подключены анодами к выводам контроллера, а катоды через гасящие резисторы соединены с землей. Это означает, что светодиод зажигается подачей «1» на соответствующий вывод порта. Принципиальная схема приведена на рисунке. На схеме также показаны две кнопки, которые будут использованы в одной из программ. Здесь уместно сделать небольшое отступление о выборе типа микросхемы для простейшего примера. Действительно, с первого взгляда может показаться странным, зачем нужен такой мощный кристалл в 64-выводном корпусе там, где хватит и 8-выводной микросхемы ATtiny12 ? Однако, в таком подходе есть логика. Известно, что в основе практически любого AVR-контроллера лежит одинаковое ядро. По большому счету, контроллеры различаются объемом памяти, количеством портов ввода/вывода и набором периферийных модулей. Особенности каждого конкретного контроллера – привязка логических имен регистров ввода/вывода к физическим адресам, адреса векторов прерываний, определения битов портов и т.д. описаны в файлах с расширением.inc, которые входят в состав пакета AVR Studio. Следовательно, используя конкретный тип кристалла, можно отлаживать программу как собственно для него, так и для любого младшего кристалла. Далее, если использовать в качестве отладочного самый старший кристалл, на сегодня это ATmega128, можно отлаживать программу практически для любого AVR-контроллера, надо просто не использовать аппаратные ресурсы, которые отсутствуют у целевого микроконтроллера. Таким образом, например, можно отлаживать на ATmega128 программу, которая будет выполняться на ATtiny13 . При этом исходный код останется практически тем же, изменится лишь имя подключаемого файла с 128def.inc на tn13def.inc. У такого подхода также есть свои преимущества. Например, «лишние» порты ввода/вывода можно использовать для подключения ЖК-индикатора , на который можно выводить отладочную информацию. Или, воспользоваться внутрисхемным эмулятором, который подключается к JTAG-порту микросхемы ATmega128 (контроллер ATtiny13 такой порт не имеет). Таким образом, можно использовать единственную отладочную плату, на которой установлен «старший» AVR-контроллер, для отладки любых вновь разрабатываемых систем, естественно, базирующихся также на AVR-микроконтроллерах. Одна из таких плат называется AS-megaM. Именно она использовалась для создания примеров программ, приводимых в статье. Это универсальный одноплатный контроллер на базе микросхемы ATmega128, который содержит внешнее ОЗУ, два порта RS-232 , порт для подключения ЖК-индикатора, внутрисхемного программатора и эмулятора AT JTAG ICE . На плате также есть место для распайки микросхемы FLASH-ПЗУ серии АТ45 в корпусах TSOP32/40/48 и двухканального ЦАП серии AD5302/ AD5312/ AD5322 . Теперь, после объяснения причин использования AVR-монстра для зажигания пары сватодиодов, можно идти дальше. При программировании в среде AVR Studio надо выполнить стандартную последовательность действий: Создание проекта начинается с выбора строки меню Project\New Project. В открывшемся окне “Create new Project” надо указать имя проекта, (в нашем случае – sample1) и имя файла инициализации. После нажатия кнопки “Next” открывается окно “Select debug platform and device”, где выбирается отладочная платформа (симулятор или эмулятор) и тип микроконтроллера. Можно выбрать один из предлагаемых внутрисхемных эмуляторов, заметим, что у каждого эмулятора свой список поддерживаемых микросхем. Для рассматриваемого примера мы выбираем в качестве отладочной платформы AVR Simulator и микросхему ATmega128. После нажатия кнопки “Finish” нашему взору предстают собственно рабочие окна пакета AVR Studio, пока пустые. Следует в правое окно поместить исходный текст программы. Это можно сделать двумя способами, либо набрать весь текст непосредственно в окне редактора, либо загрузить уже существующий файл. Ниже приведен полный текст простейшей программы с комментариями.
Проект может состоять из нескольких файлов, при этом один файл назначается основным. Все операции удобно производить, используя контекстную кнопку мыши. После подключения исходного файла окна имеют следующий вид. Компиляция проекта производится командой \Project\Build или нажатием кнопки F7. Процесс компиляции отображается в окне “Output”. Это окно можно «вытащить» командой \View\Output. В принципе, мы уже получили выходной файл в формате.hex, который уже можно загружать в микросхему и наблюдать перемигивание светодиодов. Однако, цель статьи – показать полный цикл работы в среде AVR Studio, поэтому мы переходим к стадии отладки. Это делается командой \Debug\Start Debugging. Теперь устанавливаем в окне “Simulator Options” частоту кварца 7,3728 МГц для точного измерения времени выполнения программы. Остальные опции следует оставить без изменения. Теперь можно выполнять программу в пошаговом режиме при помощи мыши или кнопки F11. Пакет AVR Studio содержит мощные средства для просмотра и редактирования состояния внутренних регистров и портов ввода/вывода отлаживаемого микроконтроллера, а также время, выполнения программы. Доступ к ним осуществляется через окно “I/O”. На самом деле, количество информации, доступное через окна просмотра пакета AVR Studio настолько велико, что для получения максимального комфорта нужно использовать компьютер в двухмониторной конфигурации. Для отладки нашего примера, чтобы получить доступ к битам порта D, надо раскрыть строку I/O ATMEGA128 и затем строку PORTD. Теперь видны все три регистра этого порта, PORTD, DDRD и PIND. Чтобы увидеть поля Value, Bits и Address, придется расширить правую границу окна, потеснив при этом окно с исходным текстом программы. Теперь, проходя программу в пошаговом режиме, можно видеть изменение текущих состояний этих регистров в поле Bits. Есть возможность оперативного изменения состояния любого бита регистров порта, причем это можно делать либо записью нового кода в поле Value, либо непосредственно, щелкнув мышью на нужном бите регистра. Для самостоятельных упражнений, предлагается следующая программа, которая отличается от предыдущей тем, что зажиганием светодиодов управляют две кнопки.
Таким образом, на примере простейших программ показаны некоторые возможности пакета AVR Studio. Надо понимать, что это лишь первое знакомство, позволяющее быстрее освоиться с базовыми командами пакета. Между тем, возможности рассматриваемого пакета намного шире. Например, здесь можно отлаживать программы написанные на языках высокого уровня. В частности, Си-компилятор фирмы ImageCraft пользуется отладчиком AVR Studio «как родным». Для этого при компиляции исходного кода надо установить опцию генерации выходного файла в формате, совместимом с AVR Studio. При этом появляется возможность производить отладку в исходных кодах. Еще одна из многих характеристик пакета AVR Studio - возможность подключения внешних программ. Например, для обеспечения вызова оболочки внутрисхемного программатора AS2 нужно выполнить несколько простых операций. В меню Tools главного окна AVR Studio надо выбрать пункт Customize; В окне Customize выбрать пункт Tools; Двойным нажатием кнопки мыши или нажав Insert на клавиатуре, добавить новую команду в список и назвать ее "Программатор AS2"; Указать путь к исполняемому файлу программатора, введя его непосредственно в поле для ввода "Command", или нажав на кнопку "…" справа от этого поля; Теперь в меню Tools появился пункт "Программатор AS2". Средства пакета AVR Studio 4.08 позволяют подключать вспомогательные программы – plugins. Первый plugin для AVR Studio – это программа графического редактора, упрощающая процесс инициализации ЖК-индикатора, которым может непосредственно управлять AVR-контроллер ATmega169. Максимальный логический размер ЖК-индикатора составляет 100 сегментов, каждому элементу индикатора ставится в соответствие бит в специальном регистре контроллера. Чтобы упростить рутинную процедуру привязки определенных битов к каждому сегменту, можно использовать вышеупомянутую программу. Во время посещения «родины AVR» - норвежского офиса фирмы ATMEL, один из авторов статьи беседовал с Ларсом Квенилдом, руководителем группы программистов, которая создала и поддерживает пакет AVR Studio. Этот человек, классический программист, с бородой, в свитере и обутый в сандали на носки, рассказал о перспективах развития пакета. В следующую версию (4.09) - будет включен интерфейс для нового внутрисхемного эмулятора – JTAGICE mkII (он называется также AT JTAGICE2), который во второй половине года придет на смену AT JTAGICE. У этого эмулятора есть два существенных отличия. С одной стороны, добавлена поддержка нового однопроводного отладочного интерфейса для младших AVR-контроллеров, debugWIRE. Этот интерфейс интересен тем, что он не занимает для своей работы дополнительные выводы микроконтроллера, так как использует для обмена вывод Reset микроконтроллера! С другой стороны (можно понимать это выражение буквально), у эмулятора AT JTAGICE2 появится, наконец, интерфейс USB для связи с компьютером. Литература
Министерство образования и науки Российской Федерации Государственное образовательное учреждение высшего профессионального образования «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ МОРСКОЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» Е. В. Коротицкий, Ю. Е. Коротицкая Основы языка си для микроконтроллеров avrУчебное пособие Санкт-Петербург 1. Основы языка Си для микроконтроллеров avrУниверсальный язык С был разработан как инструмент для написания операционной среды UNIX. Язык С поддерживает процедурно-ориентированную парадигму программирования, т.е. парадигма – взаимосвязанный набор процедур. Для языка Си характерны лаконичность, современный набор конструкций управления потоком выполнения, структур данных и обширный набор операций.
Препроцессор (макропроцессор) - это составная часть языка Си, которая обрабатывает исходный текст программы до того, как он пройдет через компилятор. Препроцессор читает строки текста и выполняет действия, определяемые командными строками. Если первым символом в строке, отличным от пробела, является символ #, то такая строка рассматривается препроцессором как командная. Командные строки называются директивами препроцессора. Препроцессор компилятора CodeVisionAVRимеет несколько директив. В Табл. 1 даётся их краткое описание. Табл. 1 –Директивы препроцессора компилятора CodeVisionAVR
ВСЕ директивы препроцессора начинаются со знака #. После директив препроцессора точка с запятой НЕ СТАВИТСЯ.
Пример: Директива # include #include "имя_файла" и #include <имя_файла> Имя_файла состоит из имени файла. Директива # include широко используется для включения в программу так называемых заголовочных файлов (файлы с расширением. h ), содержащих определения периферийных устройств и векторов прерываний используемого микроконтроллера, прототипы библиотечных функций, прототипы функций, определённых пользователем, и т. д. #include "имя_файла.h"
Директива # define служит для замены часто использующихся одних лексических единиц языка Си (констант, ключевых слов, операторов или выражений) на другие, так называемыеидентификаторы. Идентификаторы, заменяющие текстовые или числовые константы, называютименованными константами. Идентификаторы, заменяющие фрагменты программ, называютмакроопределениями, причём макроопределения могут иметь аргументы. Директива # define имеет две синтаксические формы: #define идентификатор текст #define идентификатор (список параметров) текст Перед компиляцией программы препроцессор в соответствии с директивой # define заменит все идентификаторы, встречающиеся в программе, на соответствующий им текст. Пример: #define А 15 #define В (А+20) // Эти директивы заменят в тексте программы каждый идентификатор А на число 15, а каждый идентификатор В на выражение (15+20) вместе с окружающими его скобками. Пример: #define X(a,b,c) ((а)*(b)-(с)) // Препроцессор в соответствии с этой директивой заменит фрагмент Y=X(k+m,k-m,n); на фрагмент Побитовые операции основаны на логических операциях, которые мы уже рассмотрели ранее. Они играют ключевую роль при программировании микроконтроллеров AVR и других типов. Практически ни одна программа не обходится без применения побитовых операций. До этого мы намеренно избегали их, чтобы облегчить процесс изучения программирования МК. Во всех предыдущих статьях мы программировали только порты ввода-вывода а и не задействовали дополнительные встроенные узлы, например, такие как таймеры, аналогово-цифровые преобразователи, прерывания и другие внутренние устройства без которых МК теряет всю свою мощь. Прежде, чем перейти к освоению встроенных устройств МК, необходимо научится управлять или проверять отдельные биты регистров МК AVR. Ранее же мы выполняли проверку или устанавливали разряды сразу всего регистра. Давайте разберемся, в чем состоит отличие, а затем продолжим далее. Побитовые операцииЧаще всего при программировании микроконтроллеров AVR мы пользовались , поскольку она имеет большую наглядность по сравнению с и хорошо понятна для начинающих программистов МК. Например, нам нужно установить только 3-й бит порта D. Для этого, как мы уже знаем, можно воспользуемся следующим двоичным кодом: PORTD = 0b00001000; Однако этой командой мы устанавливаем 3-й разряд в единицу, а все остальные (0, 1, 2, 4, 5, 6 и 7-й) мы сбрасываем в ноль. А теперь давайте представим ситуацию, что 6-й и 7-й разряды задействованы как входы АЦП и в это время на соответствующие выводы МК поступает сигнал от какого-либо устройства, а мы, применяемой выше командой, обнуляем эти сигналы. В результате чего микроконтроллер их не видит и считает, что сигналы не приходили. Поэтому вместо такой команды нам следует применить другую, которая бы установила только 3-й бит в единицу, при этом не влияя на остальные биты. Для это обычно применяется следующая побитовая операция: PORTD |= (1<<3); Синтаксис ее мы подробно разберем далее. А сейчас еще один пример. Допустим нам нужно проверить состояние 3-го разряда регистра PIND, тем самым проверяя состояние кнопки. Если данный разряд сброшен в ноль, то мы знаем, что кнопка нажата и далее выполняется код команды, который соответствует состоянию нажатой кнопки. Ранее мы бы воспользовались следующей записью: if (PIND == 0b00000000) { какой-либо код} Однако с помощью нее мы проверяем не отдельный, – 3-й, а сразу все биты регистра PIND. Поэтому даже если кнопка нажат и нужный разряд сброшен, но в это время на какой-либо другой вывод порта D поступит сигнал, то соответствующий быт установится в единицу, и условие в круглых скобках будет ложным. В результате код, находящийся в фигурных скобках, не будет выполняться даже при нажатой кнопке. Поэтому для проверки состояния отдельного 3-го бита регистра PIND следует применять побитовую операцию: if (~PIND & (1<<3)) { какой-либо код} Для работы с отдельными битами микроконтроллера в арсенале языка программирования C имеются , с помощью которых можно изменять или проверять состояние одного или нескольких отдельных бит сразу. Установка отдельного битаДля установки отдельного бита, например порта D, применяется побитовая операция ИЛИ. Именно ее мы применяли в начале статьи. PORTD = 0b00011100; // начальное значение PORTD = PORTD | (1<<0); применяем побитовую ИЛИ PORTD |= (1<<0); // сокращенная форма записи PORTD == 0b00011101; // результат Эта команда выполняет установку нулевого разряда, а остальные оставляет без изменений. Для примера установим еще 6-й разряд порта D. PORTD = 0b00011100; // начальное состояние порта PORTD |= (1<<6); // PORTD == 0b01011100; // результат Чтобы записать единицу сразу в несколько отдельных бит, например нулевой, шестой и седьмой порта B применяется следующая запись. PORTB = 0b00011100; // начальное значение PORTB |= (1<<0) | (1<<6) | (1<<7); // PORTB == 0b1011101; // результат Сброс (обнуление) отдельных битовДля сброса отдельного бита применяются сразу три ранее рассмотренные команды: . Давайте сбросим 3-й разряд регистра PORTC и оставим без изменений остальные. PORTC = 0b00011100; PORTC &= ~(1<<3); PORTC == 0b00010100; Выполним подобные действия для 2-го и 4-го разрядов: PORTC = 0b00111110; PORTC &= ~((1<<2) | (1<<4)); PORTC == 0b00101010; Переключение битаКроме установки и сброса также применяется полезная команда, которая переключает отдельный бит на противоположное состояние: единицу в ноль и наоборот. Данная логическая операция находит широкое применение при построении различных световых эффектов, например, таких как новогодняя гирлянда. Рассмотрим на примере PORTA PORTA = 0b00011111; PORTA ^= (1<<2); PORTA == 0b00011011; Изменим состояние нулевого, второго и шестого битов: PORTA = 0b00011111; PORTA ^= (1<<0) | (1<<2) | (1<<6); PORTA == 0b01011010; Проверка состояния отдельного бита. Напомню, что проверка (в отличии от записи) порта ввода-вывода осуществляется с помощью чтения данных из регистра PIN. Наиболее часто проверка выполняется одним из двух операторов цикла: if и while. С этими операторами мы уже знакомы ранее. Проверка разряда на наличие логического нуля (сброса) с ifif (0==(PIND & (1<<3))) Если третий разряд порта D сброшен, то выполняется Код1. В противном случае, выполняется Код2. Аналогичные действия выполняются при и такой форме записи: if (~PIND & (1<<3)) Проверка разряда на наличие логической единицы (установки) с ifif (0 != (PIND & (1<<3))) if (PIND & (1<<3)) Приведенные выше два цикла работаю аналогично, но могут, благодаря гибкости языка программирования C, иметь разную форму записи. Операция!= обозначает не равно. Если третий разряд порта ввода-вывода PD установлен (единица), то выполняется Код1, если нет ‑ Код2. Ожидание сброса бита с whilewhile (PIND & (1<<5)) Код1 будет выполняться пока 5-й разряд регистра PIND установлен. При сбросе его начнет выполняться Код2. Ожидание установки бита с whileЗдесь синтаксис языка С позволяет записать код двумя наиболее распространёнными способами. На практике применяются оба типа записи. В этом учебном курсе по avr я постарался описать все самое основное для начинающих программировать микроконтроллеры avr . Все примеры построены на микроконтроллере atmega8 . Это значит, что для повторения всех уроков вам понадобится всего один МК. В качестве эмулятора электронных схем используется Proteus - на мой взгляд, - лучший вариант для начинающих. Программы во всех примерах написаны на компиляторе C для avr CodeVision AVR. Почему не на каком-нибудь ассемблере? Потому что начинающий и так загружен информацией, а программа, которая умножает два числа, на ассемблере занимает около ста строк, да и в сложных жирных проектах используют С. Компилятор CodeVision AVR заточен под микроконтроллеры atmel, имеет удобный генератор кода, неплохой интерфейс и прямо с него можно прошить микроконтроллер. В этом учебном курсе будет рассказано и показано на простых примерах как:
Он нам предлагает посмотреть проекты которые идут с ним, мы вежливо отказываемся. Теперь давайте создадим в ней самую простую схему. Для этого кликнем на значок визуально ничего не происходит. Теперь нужно нажать на маленькую букву Р (выбрать из библиотеки) в панели списка компонентов, откроется окно выбора компонентов в поле маска вводим название компонента, который мы хотим найти в библиотеке. Например, нам нужно добавить микроконтроллер mega8 в списке результатов тыкаем на mega8 и нажимаем кнопку ОК . У нас в списке компонентов появляется микроконтроллер mega8 Таким образом добавляем в список компонентов еще резистор, введя в поле маска слово res и светодиод led Чтобы разместить детали на схеме, кликаем на деталь, далее кликаем по полю схемы, выбираем место расположения компонента и еще раз кликаем. Для добавления земли или общего минуса на схему слева кликаем "Терминал" и выбираем Ground. Таким образом, добавив все компоненты и соединив их, получаем вот такую простенькую схемку Все, теперь наша первая схема готова! Но вы, наверное, спросите, а что она может делать? А ничего. Ничего, потому что для того, чтобы микроконтроллер заработал, для него нужно написать программу. Программа - это список команд, которые будет выполнять микроконтроллер. Нам нужно, чтобы микроконтроллер устанавливал на ножке PC0 логический 0 (0 вольт) и логическую 1 (5 вольт). Написание программы для микроконтроллераПрограмму мы будем писать на языке С в компиляторе CodeVisionAVR. После запуска CV, он спрашивает нас, что мы хотим создать: Source или Project Мы выбираем последнее и нажимаем кнопку ОК. Далее нам будет предложено запустить мастер CVAVR CodeWizard (это бесценный инструмент для начинающего, потому как в нем можно генерировать основной скелет программы) выбираем YesМастер запускается с активной вкладкой Chip, здесь мы можем выбрать модель нашего МК - это mega8, и частоту, на которой будет работать МК (по умолчанию mega8 выставлена на частоту 1 мегагерц), поэтому выставляем все, как показано на скриншоте выше. Переходим во вкладку Ports У микроконтроллера atmega8 3 порта: Port C, Port D, Port B. У каждого порта 8 ножек. Ножки портов могут находиться в двух состояниях:
#include Здесь вам может показаться все страшным и незнакомым, но на самом деле все не так. Код можно упростить, выкинув инициализацию неиспользуемых нами периферийных устройств МК. После упрощения он выглядит так: #include Всё хорошо. Но для того, чтобы светодиод замигал, нам нужно менять логический уровень на ножке PC0. Для этого в главный цикл нужно добавить несколько строк: #include Все, теперь код готов. Кликаем на пиктограму Build all Project files, чтобы скомпилировать (перевести в инструкции процессора МК) нашу программу. В папке Exe, которая находится в нашем проекте, должен появиться файл с расширением hex, это и есть наш файл прошивки для МК. Для того, чтобы нашу прошивку скормить виртуальному микроконтроллеру в Proteus, нужно два раза кликнуть на изображении микроконтроллера в протеусе. Появится вот такое окошко кликаем на пиктограму папки в поле Program File, выбераем hex - файл нашей прошивки и нажимаем кнопку ОК. Теперь можно запустить симуляцию нашей схемы. Для этого нажимаем кнопку "Воспроизвести" в нижнем левом углу окна Протеус. |
Читайте: |
---|
Новое
- Покупаем ноутбук! Какой выбрать для игр? Как выбрать игровой ноутбук Какой ноутбук лучше подойдет для игр
- Как зарегистрироваться в плей маркете?
- Функции VBA для работы с текстом
- Обратная связь на YouTube: как общаться с подписчиками и увеличить их число
- Какие методы существуют и как искать одновременно по нескольким значениям
- Личный кабинет столото Столото как зарегистрироваться не получается
- Телеграмм на андроид Скачать телеграмм по номеру телефона
- Обзор Samsung Galaxy J7 (2017): достойное ли продолжение?
- Пользовательский интерфейс на базе Twitter Bootstrap для начинающих Качаем и устанавливаем bootstrap signed
- Как заработать врачу на медицинских консультациях онлайн