Си для avr: AVR. Учебный Курс. Программирование на Си. Часть 1

AVR Пишем код на СИ. Зажигаем светодиод

&nbsp

&nbsp

&nbsp

Урок 3

 

 

Сегодня мы научимся писать код на C в среде Atmel Studio, для примера мы возьмём тот же проект, который мы создали на прошлом занятии.

Прежде чем мы начнём непосредственно заниматься написанием кода, мы изучим те строки кода, которые нам уже сгенерировала студия в нашем файле Test01.c.

В самом начале кода мы видим строку в виде следующей директивы

#include <avr/io.h>

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

Директива #include просит препроцессор (компилятор) включить файл, объявленный после нее в исходный код. Имя файла может заключаться либо в треугольные скобки <> либо в кавычки ””. Треугольные скобки используются в случае включения в код файла из самой среды разработки, а кавычки – пользовательского файла.

#include <имя файла>

В нашем случае в текст кода включается файл io.h. Если мы откроем данный файл, то мы увидим, что в зависимости от каких-то условий в наш код включаются ещё определённые заголовочные файлы. В нашем частном случае условием является использование нами определённого микроконтроллера. Так как мы используем Atmega8a, то соответственно включится следующий файл:

#elif defined (__AVR_ATmega8A__)
# include <avr/iom8a.h>

В данном файле находятся макросы для векторов прерываний, для определённых шин. Что такое макросы и как их использовать, мы разберём немного позднее. Движемся дальше по файлу io.h и видим, что в него также включены ещё 3 файла, но нам будет интересен следующий файл:

#include <avr/portpins.h>

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

/* Port Data Register (generic) */
#define PORT7  7
#define PORT6  6
#define PORT5  5
#define PORT4  4
#define PORT3  3
#define PORT2  2
#define PORT1  1


#define PORT0  0

Данные строки нам говорят о том, что, например, если при компиляции проекта препроцессор (интерпретатор команд) встретит в коде слово PORT4, то он его сразу заменит на цифру 4.

Тем самым мы постепенно с вами подошли к изучению ещё одной директивы

Директива #define

Просит препроцессор (компилятор) в случае появления в тексте кода буквосочетания 1 заменить его на буквосочетание 2.

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

#define <буквосочетание 1> <буквосочетание 2>

Вернёмся в наш код. Далее мы видим следующее

int main(void)
{

}

То, что мы с вами наблюдаем в языке C и C++ называется функция. Функциями мы будем пользоваться постоянно. Функция – это такая подпрограмма, которая вызывается из какого-нибудь участка кода. Самое важное у функции – это её имя (в нашем случае main). По имени мы будем вызывать функцию из другого участка кода. Также у функции существуют входные аргументы, возвращаемые аргументы, а также тело. Входные аргументы находятся сразу после имени в скобках и перечисляются один за другим, а разделяются запятыми. В нашем случае стоит один тип "void", обозначающий, что у нашей функции вообще нет входных аргументов. Поэтому если мы подобную функцию будем вызывать в другом участке кода, то мы в скобках вообще ничего не ставим. Возвращаемый аргумент у функции один. Если нам потребуется больше чем один тип переменных, то мы будем пользоваться глобальными переменными, о которых мы узнаем позже. Изучение переменных вообще не входит в рамки наших уроков, как правило это объясняется непосредственно в уроках и литературе по языкам программирования. Тип возвращаемого аргумента указывается перед именем функции. В нашем случае – это int (целочисленная знаковая переменная). Также у функции существует тело – это участок кода, находящийся между открывающей и закрывающей фигурными скобками. Вот этот участок кода и будет выполняться в случае вызова функции.

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

Давайте же что-нибудь сюда и напишем. Мы пока не будем обращать внимание на строки, уже содержащиеся в теле данной функции.

У программистов, которые пишут программы под ПК, начинать занятия принято с вывода строки "Hello World!", а у тех программистов, которые пишут под мелкие чипы, принято начинать работу с подключения и управления свечением светодиодами. Затем они учат их мигать просто, мигать по очереди, а уже после этого приступать к программированию каких-то более серьёзных вещей. Мы также не будем отступать от данного правила.

Давайте сначала подключим светодиод к какой-нибудь ножке контроллера, например к ножке 0 порта D

 image001

У порта D, как мы видим из данной распиновки, существует как раз 8 ножек, что соответствует байту (8 бит). Также как биты в байты, ножки портов отсчитываются от 0.

Напишем мы сначала следующую строку

int main(void)

{

DDRD = 0xFF;

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

DDRD – это команда, которая устанавливает состояние лапок порта D. Состояние лапки порта – это то, в каком направлении данная лапка будет работать – на выход или на вход, что соответствует установке определённого бита в 0 или в 1. Но так как мы будем зажигать светодиод, мы должны на определённой ножке порта выставить высокий логический уровень (в нашем случае 5 вольт). А чтобы управлять уровнями ножки, она должна быть определена, как работающая на выход или на вывод. То есть состоянием лапки мы будем управлять из контроллера, а не из внешнего источника уровня. Так как у нас лапка нулевая, то и бит мы и должны выставить в ноль нулевой бит нашего байта, соответствующего нашему порту D. Так как мы не пользуемся сегодня остальными лапками порта, то нам их состояние будет не важно и мы выставляем все лапки портов на вывод. Поэтому мы присваиваем переменной

DDRD значение 0xFF. Данное значение мы написали в шестнадцатиричном виде. Этот вид очень удобен для программистов, так как визуально о многом говорит. FF – это в десятичной системе 255, а в двоичной – 11111111, что говорит о том, что все биты в данном числе выставлены в единицу. Также мы видим, что наша строка заканчивается точкой с запятой (;). Данный оператор – это разделитель команд, так как в одной строке мы можем писать не обязательно одну только команду, а можем и несколько, если они небольшие. Также в данной строке мы видим оператор "=" (знак равенства). Данный оператор заставляет наш препроцессор присвоить значение, находящееся справа возле него переменной, находящейся слева.

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

DDRD = 0xFF;

PORTD = 0b00000001;

 

 

Данная команда или переменная PORTD управляет записью или считыванием значений в порт или из порта в зависимости от состояния. То есть данной командой мы включили нулевую лапку в высокое логическое состояние (в единицу). Здесь мы с вами уже попробуем использовать написание значения в двоичном виде. Чтобы писать значения в данном виде, мы используем префикс 0b. Данный вид удобен тем, что мы здесь видим полностью, как выглядит наш байт побитно. Лапки портов в байте, также как и биты считаются справа налево. То есть данной командой мы выставили в высокое состояние нулевую лапку порта D, а остальные мы выставили в низкое. Вообщем, арифметическо-логическое устройство микроконтроллера сначала включит все ножки порта на выход, а затем установит на нулевой ножке высокое логическое состояние, и после этого у нас должен будет зажечься светодиод, так как через токоограничивающий резистор мы его анодом подключим к данной ножке, а катодом к общему проводу. Тем самым на контактах светодиода появится разность потенциалов, которая заставит его светиться. Кроме написанных нами двух строк далее в коде присутствует команда

while. Данная команда является командой условного цикла.

PORTD = 0b00000001;
while(1)

{

}

В скобочках указывается условие, которое должно либо выполняться либо не выполняться. Также как у функции есть тело, то у условия также есть тело, также заключенное в фигурные скобки. И код, находящийся в теле цикла, будет выполняться бесконечно, пока условие, находящееся в скобках будет выполняться, то есть будет истинным. Как только условие перестанет выполняться, а проверяется это тогда, когда код выполнится до конца (до закрывающей фигурной скобки), то мы выходим из цикла и код продолжает выполняться уже дальше тот, который находится уже не в теле цикла, а после закрывающей фигурной скобки. А истина в информатике – это TRUE или 1. Поэтому в данном случае цикл будет бесконечным, так как там стоит единице, а единица всегда равна единице. Бесконечный цикл организован для того, чтобы код, написанный для контроллера, выполнялся постоянно, то есть чтобы наш контроллер постоянно работал и не останавливался. В нашем случае тело пустое, и наш контроллер, вернее его АЛУ, будет всё время висеть в данном цикле и ничего не делать до тех пор, пока мы не отключим питание, либо нам его не отключат в розетке, либо, не дай Бог, сгорит контроллер. То есть светодиод наш будет светиться постоянно.

Сегодня мы не будем пробовать нашу программу прошивать в микроконтроллер, и даже не будем пробовать ещё в виртуальном контроллере, то есть в программе симуляции, а попробуем симуляцию запустить в самой студии, так как на прошлом занятии мы в качестве отладчика и выбрали симулятор. Двойным щелчком мыши либо клавишей F9 мы установим точку останова на команде PORTD = 0b00000001; и, когда мы запустим отладку, то отладчик, как только увидит данную точку, должен будет в этом месте остановить выполнение программы, и мы сможем посмотреть, какие уровни и где у нас установились.

002

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

003

Здесь мы наблюдаем, что ещё у нас открылась карта нашей памяти, в которой нам пока ещё ничего не понятно. Если бы мы писали на ассемблере либо на машинном коде, то нам бы это было понятнее. Поэтому нас интересует другая. Карта. Для этого мы нажмём вот эту кнопочку

004

Данная кнопочка (I/O View) откроет нам окно с данными наших портов ввода-вывода и прочей периферии

 005

Нажмем в данном окне на строку PORTD и увидим в нижней половине окна, что весь наш регистр DDRD, отвечающий за направление отдельных ножек порта выставился весь в единички, то есть на выход

006

А дальше уже проблема. Чтобы нам посмотреть, как сработает следующая команда, которая включит нам нулевую ножку, отладчику необходимо остановиться на следующей строке кода, а у нас её нет, у нас только бесконечный цикл, который для отладчика – не строка. Поэтому мы пока остановим отладчик следующей кнопкой

007

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

PORTD = 0b00000001;

PORTD = 0b00000010;

Конечно всё это на практике у нас не сработает, так как мы не успеем заметить свечение предыдущего светодиода. Чтобы задумка заработала практически, мы должны ещё с вами включить между данными командами задержку, а это тема уже других более поздних занятий. Но тем не менее мы данную команду включим, чтобы отладчику было где остановиться. Затем мы запустим заново отладку. Точка останова у нас также находится пока на той строке, на какой и была до этого. Запустим опять отладчик. Собирать проект перед отладкой необязательно, так как отладчик сам его пересоберет. Дожидаемся остановке отладчика на точке. В окошке с вводом-выводом опять нажмём на строке с нашим портом. Дальше начинаем шагать по программе. Для этого нажимаем следующую кнопку или функциональную клавишу F10, о чем нам подсказывает студия, как только мы подносим указатель мыши к данной кнопке

008

Теперь отладчик остановится на следующей строке

009

И теперь в окне ввода-вывода мы видим уже следующую картину

010

Мы видим, что самый левый бит, соответствующий нулевой ножке порта переключился в высокое логическое состояние, причём мы это видим не только в регистре PORTD, но и в регистре PIND, который отвечает за считывание состояния ножек порта D при его работе на ввод. Вот таким вот образом мы и отлаживаем наши программы.

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

После этого текст кода у нас должен будет остаться вот таким

011

 

Предыдущий урок Программирование МК AVR Следующий урок

 

Исходный код

 

 

Купить программатор можно здесь (продавец надёжный) USBASP USBISP 3.3

 

Смотреть ВИДЕОУРОК

 

AVR Урок 3. Пишем код на СИ. Зажигаем светодиод

 

Post Views: 27 880

Книга по СИ для AVR. / AVR / Сообщество EasyElectronics.ru

Нарыл недавно клевую книженцию автора Романа Абраша. Называется Книга по работе с WinAVR и AVR Studio. Книга автором не дописана. Но хоть что то есть, и то что есть, мне понравилось.

Вот цитата из его книги:

Как известно, программы разрабатываются на языках программирования, среди которых наибольшей популярностью пользуется Си. Благодаря основам, заложенным в этот язык, разработка программ для микроконтроллеров мало отличается от разработки программ для обычных компьютеров. Поэтому проще всего переключиться на микроконтроллеры смогут те, кто уже умеет хоть немного программировать для персонального компьютера. А все остальные желающие могут прочесть специальные книги, посвященные как самому языку Си, так и процессу алгоритмизации. Литературы на этот счет достаточно, равно как и литературы об аппаратном строении микроконтроллеров. А вот книг, которые целенаправленно рассматривали бы аспекты «сопряжения» языка программирования и микроконтроллера, явно недостаточно. Восполнить этот пробел хоть в какой-то мере – вот главная цель и задача этой книги.

Вот существующие главы его книги.

А вот ссылка на спец книгу по СИ.
Загружать эти файлы.

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

P.S
Вот еще нарыл очень четкий справочник по СИ. Чтоб справочник запустить, нужно в открыть файл main.htm

А вот он же, только в онлайн режиме.

А вот книга «Программирование микроконтроллеров ATMEL на языке С — Прокопенко Вадим».

Введение в язык программирования С (Си) для микроконтроллеров

В этой статье будут рассмотрены основные сведение о языке С, структура программы на языке С, дано понятие о функциях, операторах и комментариях данного языка программирования.

Почему стоит выбрать язык С

История создания языка C (Си)

Язык программирования C (Си) появился «стихийно» – ни одна компания не заказывала создания подобного языка. Его первая версия появилась на свет в 1972 г. в фирме Bell Laboratories, написал ее теперь уже всемирно известный программист Деннис Ритчи (Dennis MacAlistair Ritchie).

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

Деннис Ритчи - создатель языка программирования С

Название C (Си) появилось так же стихийно, как и сам язык. Фактически, он стал преемником ранее созданного языка В (Би), разработанного автором операционной системы UNIX Кеном Томпсоном. В свою очередь, язык Би во многом был похож на языке BCPL, разработанный в Кембриджском университете. А язык BCPL основывался на идеях «старого как мир» Алгола-60.

Первым неформальным стандартом языка Си стало издание в 1978 г. книги Брайана Кернигана и Денниса Ритчи с названием «The ‘C’ Programming Language». Первоначально книга была издана в США, но потом была переведена и многократно переиздавалась во многих других странах мира. В 1989 г. язык Си был стандартизован ANSI (American National Standards Institute – американский национальный институт стандартов) и ISO (International Standard Organization — международная организация по стандартизации).

Но время шло и у пользователей языка Си появилась потребность в реализации новых функций, не поддерживавшихся языком. Учитывая все это, Бьерн Страуструп в начале 80-х (работавший все в той же самой Bell Laboratories) принял решение о расширении возможностей языка Си, который первоначально назвали как «Си с классами». Но в дальнейшем за его модификацией языка закрепилось другое название — Си++. Это название сохранилось за ним вплоть до настоящего времени.

Бьерн Страуструп - создатель С++

Общие сведения о языке C (Си)

В настоящие дни C (Си) является многофункциональным языком программирования высокого уровня, подобным таким языкам как Pascal или Python, но в отличие от них он имеет возможность работы с командами низкого уровня, подобно языку ассемблера. Программу на языке С можно скомпилировать в машинный код практически для любого известного микропроцессора. Не исключением стали и микроконтроллеры – сейчас по популярности использования (особенно для начинающих) язык Си обогнал в них доминировавший до этого язык ассемблера. Программирование на языке С поддерживает и самая популярная в настоящее время программная платформа Atmel Studio (!!!!!!) для микроконтроллеров семейства AVR.

Сейчас уже можно с уверенностью сказать, что язык С стал своеобразным фундаментом, на котором строится все современное программирование – чего стоят хотя бы «Visual C» и «C Sharp». Основанные на нем языки программирования сейчас занимают доминирующее положение в мире программирования. А все началось с удачной структуры языка, разработанной в 1972 г. Деннисом Ритчи.

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

#include <avr/io.h> /* заголовок */

int main(void) /* главная функция: начало программы */

{ /* открывающая скобка в начале программы */

оператор программы;
оператор программы;

оператор программы;

} /* закрывающая скобка в конце программы */

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

Назначение основных элементов программы на языке C (Си)

Заголовки

В представленной на рисунке структуры программы на языке С строка #include <avr/io.h> является заголовком. Заголовки содержат специализированную информацию для компилятора об общих условиях выполнения программы и требуемых ей ресурсах. В рассмотренном случае мы указываем компилятору на то, чтобы при выполнении программы он учел информацию, содержащуюся в файле io.h – забегая вперед скажем что этот файл содержит инструкции для портов ввода/вывода микроконтроллера.

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

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

Функции

По сути программа на языке С представляет собой набор функций, каждая из которых может вызывать для выполнения любые другие функции. Функций в программе может быть много, но обязательной является только одна из них, называемая «main» («главная»). Выполнение программы на языке С начинается всегда с нее. Программист не может изменить название главной функции «main», но названия для всех других функций программы он может выбирать произвольно.

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

Идущая следом за названием функции фигурная скобка { отмечает начало последовательности операторов, образующих тело функции. Закрывающая фигурная скобка } отмечает конец этой последовательности операторов. На этой скобке выполнение функции завершается.

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

Операторы

Как правило, тело функции в языке Си представляет собой набор операторов, в конце каждого из которых стоит точка с запятой ;. Можно размещать каждый оператор на своей строке или несколько операторов на одной строке – компилятору это неважно, главное чтобы они разделялись точкой с запятой (этот символ свидетельствует о конце оператора). Но для восприятия человеком, конечно, удобнее чтобы каждый оператор располагался на отдельной строке. Допускается использование и пустых строк чтобы визуально отделить структурные элементы программы.

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

Комментарии

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

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

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

Внутри комментариев нельзя использовать символы, определяющие начало и конец комментариев. К примеру, неправильная запись внутри комментария:

/* комментарии к программе /* управления электродвигателем */ */

или

/* комментарии к программе управления */ электродвигателем */

Язык Си для микроконтроллеров AVR поддерживает и другой метод записи комментариев — строка, начинающаяся с символов //. К примеру

// Это комментарий в одну строку

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

  • размещайте один оператор на строке;
  • применяйте пустые строки для «отделения» одной логической части программы от другой;
  • используйте комментарии.

AVR Знакомство с семейством AVR

&nbsp

&nbsp

&nbsp

Урок 1

 

 

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

Почему именно с этой линейки?

Ну, может кто знает, может кто-то не знает, микроконтроллер AVR – это продукт компании Atmel.

Ну почему же всё-таки именно с линейки AVR?

Во-первых, микроконтроллеры AVR – они повсеместно доступны, они есть в любых магазинах, цена их невысока.

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

То есть, при написании программ вы не будете нарушать ни чьих авторских прав.

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

Поэтому, будем программировать мы именно под микроконтроллеры AVR.

Начнём мы с такого представителя этой линейки, как микроконтроллер Atmega 8.

ATMEGA 8A

image002

Почему именно с него, с Atmega 8?

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

Имеет на своём борту три порта ввода-вывода. Мы не будем здесь вдаваться в подробности, что такое порты. Вкратце, порты – это такие шины данных, которые работают в двух направлениях – и на вывод, и на ввод.

 

 

Порт B.

У порта B, он у нас неполный, имеет 6 ножек.

0, 1 ножка, 2, 3, 4 и 5. То есть, 6 ножечек.
Порт C также у нас неполный, от нулевой до шестой ножки.
А вот порт D у нас полноправный порт, имеет все 8 ног, т.е. байт данных от 0 до 7.
Питается микроконтроллер от 5 вольт. Можно питать его также от 3,3 вольта, он также будет отлично работать. Но единственное, частота тактирования может быть выставлена только 8 мегагерц максимально. 16 мы не можем выставить при трёх вольтах, можем только при пяти вольтах. Подается питание на 7 ножку. Общий провод – восьмая.
Ну теперь давайте посмотрим, откуда мы можем взять программное обеспечение для программирования.
У компании Atmel имеется свой сайт www.atmel.com. На главной страничке, далеко ходить не нужно, в правой части страницы под главным баннером находится вот Download Atmel Studio.

image004

Вот эту вот программку мы скачиваем, устанавливаем. Впоследствии мы будем создавать в ней свои проекты. А как создавать проекты, как писать код, мы с вами познакомимся на следующих занятиях. Так что пока, скачивайте, устанавливайте.
Прошивать контроллер мы поначалу будем вот в такой вот программе – avrdude.
Ссылка на скачивание avrdode 3.3    avrdudeprog33
Ну, на этом, с вашего позволения, я пока закончу Продолжение будет в следующих уроках.

 

Программирование МК AVR  Следующий урок

 

Смотреть ВИДЕОУРОК

 

AVR Знакомство с семейством AVRAVR Знакомство с семейством AVR

 

Post Views: 17 124

Циклы в языке C и структуры, синтаксис, примеры.

Сразу хочу предложить скачать два полезных документа:
- Хороший букварь по синтаксису языка Си

- Краткая шпаргалка по синтаксису языка Си для микроконтроллеров.

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

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

Цикл For.
В языке C как и в других Си подобных языках, таких как PHP циклы делятся на некоторые типы.

Самый простой цикл for:

  1. for(i=A; i<B; i++)

  2. {

  3. ...

  4. действие при участии переменной "i"

  5. ...

  6. }

Таким образом
A - начальное значение которое будет инкрементировано(присвоено) переменной "i",
B - конечное значение которое будет инкрементировано переменной "i".
Данный пример показывает цикл от меньшего значения к большему, так же можно сделать уменьшение переменной "i" с каждым шагом, пример:

  1. for(i=A; i<B; i--)

  2. {

  3. ...

  4. действие при участии переменной "i"

  5. ...

  6. }


И так итог:
1. Цикл for имеет четыре аргумента, три из которых указаны в скобках и четвертый указан в теле цикла.
2. Все три аргумента указанные в скобках являются необязательными, то есть каждый из них может в зависимости от задачи присутствовать или отсутствовать.
3. В первую очередь выполняется проверка условия, если условие выполняется, то цикл продвигается на один шаг вперед, если условие не выполняется цикл останавливается.
4. Изменение аргумента, который указан в скобках инициализации цикла выполняется только после выполнения тела цикла.
5. Отсутствие значения принимается как истинное.

Цикл While.
Цикл while выполняется пока один из аргументов существует или пока не достигается определенное значение арифметического сравнения между двумя переменными.
Пример:

  1. #include <io.h>//Библиотека ввода/вывода

  2.  

  3. int A=1, B=5;//Перечисляем переменные и присваиваем им значения

  4.  

  5. int main(void)//основная программа

  6. {

  7. while (A!=B)//логическое отрицание (подр. см. Логические операторы)

  8. {

  9. ...

  10. действие

  11. ...

  12. }

  13. }

Цикл Do While.
В самом названии цикла понятно, что он будет выполнять определенные действия до определенного события.
Пример цикла do while:

  1. do

  2. {

  3. PORTD = 0xFF;//Выдаем на порт D лог. 1-цу.

  4.  

  5. i=i+1;//Прибавляем к переменной "1" единицу

  6. }

  7. while (i<5)//Цикл прекратиться при достижении переменной "1" значения "5"

Памятка:
1. Тело цикла выполняет как минимум 1 раз.
2. Проверка выполнения условия выполняется один раз, после выполнения тела цикла.
3. Если условие не выполняется то есть оно ложное, то тело цикла больше не выполняется.
4. В данном примере последним значением при котором будет выполнятся тело цикла является число "5".

Условный оператор If Else
Структура выглядит:

  1. if(условие)

  2.  

  3. Выполняем действие 1

  4.  

  5. else

  6.  

  7. Выполняем действие 2

Так же возможна следующая структура, которая содержит в себе до "n" процедур сравнения:

  1. if (условие 1)

  2.  

  3. {действие 1};

  4.  

  5. else if (условие 2)

  6.  

  7. {действие 2};

  8.  

  9. else if (условие 3)

  10.  

  11. {действие 3};

  12.  

  13. .....

  14.  

  15. else if (условие n)

  16.  

  17. {действие n};

Памятка:
1. Условный оператор If Else следует использовать, когда необходимо проверить выполнение нескольких условий, но выполнить всего одно действие.
2. Необходимо ставить скобки с обеих сторон условия.

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

  1. switch (выражение)

  2.  

  3. {

  4.  

  5. случай выполнения условия 1

  6.  

  7. случай выполнения условия 2

  8.  

  9. }

Пример кода:

  1. switch (i/10)

  2. {

  3.  

  4. case 0: PORTD = 0x10; // A

  5.  

  6. break;

  7.  

  8. case 1: PORTD = 0x20; // B

  9.  

  10. break;

  11.  

  12. case 2: PORTD = 0x30; // C

  13.  

  14. break;

  15.  

  16. default: PORTD = 0x40; // D

  17.  

  18. break;

  19. }

Памятка:
1. При использовании конструкции выбора switch необходимо использовать только целочисленные значения.
2. Выражение после оператора case должно быть уникальным и не должно дублироваться после другого оператора case с другим номером.
3. Проверка выполнения условия выполняется сверху-вниз. От оператора case 1 до оператора case n.
4. Существует условие по умолчанию default, которое выполняется если ни одно из вышеперечисленных условий не было выполнено.

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги
Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги
Современное радиолюбительство невозможно представить без микроконтроллеров, и это очевидно. В последние десятилетия микроконтроллеры различных производителей стали широко распространены в разных сферах деятельности человека. Нередко их можно встретить в самых неожиданных устройствах и конструкциях. Мы с вами являемся свидетелями компьютеризации и автоматизации окружающих нас процессов. Истина такова, что без знания основ программирования создавать современные конкурентоспособные устройства стало практически невозможно…

Содержание / Contents

Если вы читаете эту статью, вероятно у вас возникло желание понять, как работают микроконтроллеры, и скорее всего появились вопросы:
1. Какой микроконтроллер выбрать для работы?
2. Какую среду разработки использовать для программирования выбранного микроконтроллера?
3. Как прошивать контроллер, и какие дополнительные приборы и акссесуары нужны для удобной работы с ними?
4. Какую литературу изучать?
5. Где в интернете можно задавать вопросы и получать конкретные ответы?

Попробуем ответить на эти вопросы.

Большой популярностью у радиолюбителей пользуются 8-битные микроконтроллеры PIC фирмы Microchip Technology и AVR фирмы Atmel, 16-битные MSP430 фирмы TI, а также 32-битные микроконтроллеры, архитектуры ARM.

В промышленности, несколько иначе, первое место с большим отрывом занимает Renesas Electronics на втором Freescale, на третьем Samsung, затем идут Microchip и TI, далее все остальные.
Популярность определяется ценой и доступностью, немалую роль играют наличие технической информации и стоимость программного сопровождения.

Мы будем изучать 8-битные микроконтроллеры AVR, семейства ATMEGA 8 и 16 серии. Выбор определился, опять же доступностью, наличием множества любительских разработок, огромным количеством учебного материала. Наличием разнообразных встроенных компонентов и функциональностью этого семейства.

Для AVR созданы разные интегрированные среды разработки (IDE, Integrated development environment).
IDE – это система программных средств, используемая программистами для разработки программного обеспечения (ПО), в состав которой входят:
• текстовый редактор,
• компилятор и/или интерпретатор,
• средства автоматизации сборки,
• отладчик.

Наиболее распространенные из них AVRStudio, ATmelStudio, WINAVR, CodeVision, IAR Embedded Workbench.
Для того, чтобы писать программы, мы воспользуемся бесплатной IDE ATmelStudio версии 6 и выше.
Скачать Atmel Studio можно с официального сайта после регистрации (регистрация абсолютно бесплатная и ни к чему не обязывает!)

ATmelStudio позволяет создавать проекты, и писать программы как в ассемблере, так и на СИ.

Изначально всегда стоит вопрос: какой язык программирования выбрать, чтобы писать эффективные программы?

Отвечу просто: нужно уметь писать как минимум на двух языках ассемблере и СИ. Ассемблер просто необходим, когда нужно написать быстрые и компактные подпрограммы и макросы, различные драйверы устройств. Но, когда требуется создать объемный проект, построенный на сложных алгоритмах, без знания СИ может быть потрачено очень много времени, особенно в процессе отладки, а если возникнет желание перенести на другую платформу, например PIC18, или STM, может стать неразрешимой проблемой.
Кроме этого, сейчас появились аппаратные вычислительные платформы Arduino, работа с которыми требует знаний языка СИ++.
Поэтому будем писать программы как в ассемблере, так и на СИ.

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

Используем датагорский кит — программатор Project-005 «D-AVR910». Кроме этого, нужно будет приобрести макетные платы, блок питания с выходным напряжением 5 Вольт. Можно в качестве БП с малыми пульсациями использовать наш кит Project-006 «POWER FILTER», применив стабилитрон на 5 Вольт.
Возможно, со временем мы с Игорем предложим проект для сборки отладочной платы.

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шагиА вот, например:
• Практическое программирование 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Задавать вопросы вы можете на нашем или любом другом форуме, где так или иначе затронуты темы по микроконтроллерам. Главное на форумах правильно формулировать вопросы, чтобы четко получать ответы. Абстрактные вопросы не приветствуются, и скорее всего вместо ответа вы получите жесткую критику, или ваш вопрос останется без внимания! • 8-разрядный высокопроизводительный AVR микроконтроллер с малым потреблением
• Прогрессивная RISC архитектура
130 высокопроизводительных команд, большинство команд выполняется за один тактовый цикл
32 8-разрядных рабочих регистра общего назначения
Полностью статическая работа
Приближающаяся к 16 MIPS (при тактовой частоте 16 МГц) производительность
Встроенный 2-цикловый перемножитель

• Энергонезависимая память программ и данных
8 Кбайт внутрисистемно программируемой Flash памяти (In-System Self-Programmable Flash)
Обеспечивает 1000 циклов стирания/записи
Дополнительный сектор загрузочных кодов с независимыми битами блокировки
Обеспечен режим одновременного чтения/записи (Read-While-Write)
512 байт EEPROM
Обеспечивает 100000 циклов стирания/записи
1 Кбайт встроенной SRAM
Программируемая блокировка, обеспечивающая защиту программных средств пользователя

• Встроенная периферия
Два 8-разрядных таймера/счетчика с отдельным предварительным делителем, один с режимом сравнения
Один 16-разрядный таймер/счетчик с отдельным предварительным делителем и режимами захвата и сравнения
Счетчик реального времени с отдельным генератором
Три канала PWM
8-канальный аналого-цифровой преобразователь (в корпусах TQFP и MLF)
6 каналов с 10-разрядной точностью
2 канала с 8-разрядной точностью
6-канальный аналого-цифровой преобразователь (в корпусе PDIP)
4 канала с 10-разрядной точностью
2 канала с 8-разрядной точностью
Байт-ориентированный 2-проводный последовательный интерфейс
Программируемый последовательный USART
Последовательный интерфейс SPI (ведущий/ведомый)
Программируемый сторожевой таймер с отдельным встроенным генератором
Встроенный аналоговый компаратор

• Специальные микроконтроллерные функции
Сброс по подаче питания и программируемый детектор кратковременного снижения напряжения питания
Встроенный калиброванный RC-генератор
Внутренние и внешние источники прерываний
Пять режимов пониженного потребления: Idle, Power-save, Power-down, Standby и снижения шумов ADC

• Выводы I/O и корпуса
23 программируемые линии ввода/вывода
28-выводной корпус PDIP, 32-выводной корпус TQFP и 32-выводной корпус MLF

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шагиПрограммирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

• Рабочие напряжения
2,7 — 5,5 В (ATmega8L)
4,5 — 5,5 В (ATmega8)

• Рабочая частота
0 — 8 МГц (ATmega8L)
0 — 16 МГц (ATmega8)

отличия ATMEGA16 от 8
• 16 Кбайт внутрисистемно программируемой Flash памяти (In-System Self-Programmable Flash)

• Интерфейс JTAG (совместимый с IEEE 1149.1)
Возможность сканирования периферии, соответствующая стандарту JTAG
Расширенная поддержка встроенной отладки
Программирование через JTAG интерфейс: Flash, EEPROM памяти, перемычек и битов блокировки

• Четыре канала PWM / ШИМ

• 8-канальный 10-разрядный аналого-цифровой преобразователь
8 несимметричных каналов
7 дифференциальных каналов (только в корпусе TQFP)
2 дифференциальных канала с программируемым усилением в 1, 10 или 200 крат (только в корпусе TQFP)

• Шесть режимов пониженного потребления: Idle, Power-save, Power-down, Standby, Extended Standby и снижения шумов ADC

• 32 программируемые линии ввода/вывода

• 40-выводной корпус PDIP и 44-выводной корпус TQFP

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шагиЕсли Вы только начинаете, то нужно скачать и установить программу AtmelStudio с официальной страницы atmel.com
После установки программы AtmelStudio можно приступить к созданию проекта.
Проект – это ваша программа, которую вы будете писать, отлаживать и прошивать, после компиляции, в память микроконтроллера.

Чтобы создать проект, надо открыть программу, появиться такая заставка,

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

и откроется страница создания проекта

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Чтобы создать новый проект, нужно кликнуть по «New Project…»
В этом случае откроется новое окно, где можно выбрать язык программирования, название проекта, его месторасположение, название пакета с файлами проекта и возможность создания каталога для дальнейшего использования в других перекрестных проектах. Чтобы создать проект, где мы будем программировать в ассемблере, нужно выбрать — Assembler, после этого поменяем название проекта, его расположение, и выбираем ОК.

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Появится следующее окно

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Выбираем “megaAVR, 8-bit” и находим нужный нам микроконтроллер, мы выбрали ATmega8. В правой части заставки появляется список устройств, работающих с этим микроконтроллером, один из которых мы можем подключить. Выбираем ОК.

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

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

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги
можем программировать в ассемблере.
Аналогично создается проект для программирования на языке СИ.
Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Выбираем семейство микроконтроллеров “megaAVR, 8-bit”

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Далее, наименование микроконтроллера и выбираем ОК.

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Появляется страница редактора текста. Здесь мы можем программировать в СИ.

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

У нас есть возможность загрузить демонстрационные проекты для работы с платами разработки, выпускаемыми корпорацией ATMEL.
Для этого нужно при создании проекта выбрать пункт “New Examle Project from ASF…”

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Откроется окно следующего вида:

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

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

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Так же есть возможность управлять проектом, для этого нужно выбрать название проекта под пунктом “Recent Projects” и кликнуть по правой клавише мыши. Появится меню из 3-х пунктов:

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Open Project – запускает проект.
Open Containing Folder – просмотор содержимого папки проекта
Remove From List – удаление из списка проектов. Сам проект не удаляется, и попытка создать новый проект с таким же именем выдаст ошибку. Полностью удалить проект можно в папке, где он был создан.

Как создается новый проект и про перенос старых проектов, созданных в AVR Studio 4, можно посмотреть на видеоролике от Александра Писанца

Камрад, рассмотри датагорские рекомендации

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Радик (galrad)

РФ. Республика Башкортостан. г.Уфа

1964г.р. Врач. Ученая степень - кандидат медицинских наук. Второе высшее образование - инженер-электроник.

 

Краткий Курс - Самоучитель - Программирование микроконтроллеров AVR - быстрый старт с нуля

 

Страница 4 - Краткий учебный курс - Самоучитель - AVR - быстрый старт с нуля.

 

ПРОГРАММА  для  AVR

ПО для микроконтроллеров AVR

Компиляторы  Си и     Симуляторы для микроконтроллеров AVR
ATmega ATtiny 

 

Книги и учебники по электронике и микроконтроллерам

 

Страницы курса :   заглавная    1   2   3   4   5   6   7   8   9

Задачи-упражнения курса по AVR  -   там

Микроконтроллыры AVR - параметрическая таблица


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

 

Это уже 4-я страница краткого курса !

Вы уже должны представлять себе  

1) что такое МК AVR и в чем его особенности 

2) как МК взаимодействует с электроникой подключенной к нему 

3) как МК преобразует напряжения на его ножках  в  "1" или "0"

4) что является посредником в общении программы с МК

5) какие напряжения на своих выводах может создавать МК  AVR

6) с чего нужно начать разработку эл. устройства

7) какая документация по МК особенно полезна и необходима

8) где найти книги и дополнительные материалы


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

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

 

Список микроконтроллеров AVR

ВСЕ  АКТУАЛЬНЫЕ !
 

Итак ...

- вы определились с тем какое электронное устройство творите, 

- понимаете что оно должно делать, 

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

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

 

Регистры...  регистры...  регистры... 


Короче - 

хотите что-то включить, выключить, поменять в МК - найдите
в ДШ те регистры и биты которые за это отвечают 
и выясните что именно нужно записать в них ! 

и у вас все получится...

Особенно просто и правильно вы этого добьетесь с помощью мастера интерактивного создания кода программы.

Про мастерконфигурации МК написано ниже.

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


Если кроме компилятора в пакете есть отладчик-симулятор и/или программатор то это уже IDE (интегрированная среда разработки). 

Компилятор позволяет написать программу для МК на универсальном языке программирования - одинаковом
и для ПК и для различных МК (кстати для МК требуется всего 3-5%
всех возможностей языка программирования). 

Текст программы набранный вами (или другими добрыми людьми) в компиляторе называют исходным кодом (или исходником или сырцом - англ: source code

Компилятор по вашей команде проверяет отсутствие ошибок в набранном исходнике и, если ошибок нет, преобразует исходник (компилирует его) в специальный файл обычно с расширением .hex  - его называют  "прошивка". 

Прошивку с помощью программатора  (для AVR это например 5 проводков с параллельного порта ПК) помещают во FLASH память программ МК и при
необходимости частично в его EEPROM.

 

Реклама недорогих радиодеталей почтой:

 

Очень трудно написать программу 
сразу правильно и без ошибок

поэтому 

Важнейшим этапом разработки электронного устройства является отладка программы МК.  

(программа МК называется - firmware).

 

Для отладки вы : 

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

И так до победного конца - т.е. до тех пор 
 

пока устройство заработает так как вам нужно.

 

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

Иногда требуется проверить работу МК не имея его и 
вообще какой либо реально спаянной схемы и самого МК. 

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

 

Симулятор приблизительно моделирует на ПК работу "прошитого" вашей программой МК и его обвязки - т.е. электронных компонентов окружающих МК по схеме устройства. 

Кроме того симуляторы позволяют вам: 

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

- делать еще много полезного !

 

 

Теперь подробнее ...

 

 

Компиляторы Си для AVR


Не пугайтесь ! я не предлагаю вам изучить еще и язык Си - мы просто будем использовать по мере необходимости несколько инструкций из него - всего несколько процентов языка. 

Я сам начинал изучать и применять МК сразу 
на Си - и очень доволен ...

 

Считаю, что 

Для начинающих наиболее удобен в работе 

компилятор Си для AVR   CodeVisionAVR  ( или CVAVR)

Если вы еще не установили эту программу то скачайте на заглавной странице курса.

Именно для начинающих ! - Компилятор CVAVR содержит очень понятный и очень мощный генератор начального кода программы по вашим потребностям в конфигурации AVR и его периферии - встроеных электронных модулей МК - называется он :

CodeWizardAVR

 

 

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

Затем  мастер ("визад") создаст файл проекта .prj и файл  исходного текста программы на языке Си с расширением .c - в нем уже будет содержаться код на Си конфигурирующий МК по сделанному вами "заказу". 

Вам нужно будет добавить лишь код реализующий нужный вам алгоритм работы устройства.

Используйте этот мастер и далее по ходу работы программы - точно так же как и в начале, но не генерируйте новые файлы а просто откройте меню "файлы - просмотр" и посмотрите нужный кусок программы на Си, возьмите что вам нужно и вставьте в вашу программу.

 

     
 

Подробно и с картинками работу с КодВизадом - мастером начального кода CodeVisionAVR
я описал в задаче 1

 
     

 

 

Обязательно читайте Help  к компилятору - по сути это одновременно и учебник  по Си для AVR и именно в нужном вам объеме ! 

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

Читайте инструкцию и помощь !

Смотрите пробуйте изучайте ПРИМЕРЫ к программе ! 

 

Компилятор CodeVisionAVR  имеет и встроенный программный модуль  для прошивки МК  и конфигурирования фьюзов AVR fuse прямо в схеме устройства.

 


Компания Atmel подсказывает как начать работать 
с этим компилятором Си для AVR: 

AN AVR033  "Getting Started with the CodeVisionAVR C Compiler"

Это  АпНоуто Atmel - надеюсь вы уже скачали хотя бы их список ! 
Если нет то скачайте обязательно их перечень.

Они ВСЕ нужны ВАМ !!! как справочник конкретно по AVR.

 

Для  полного цикла разработки устройства достаточно
только одного компилятора CodeVisionAVR. 

Однако, я рекомендую вам, скачать 
еще один компилятор: 

ICC AVR  от ImageСraft


Я использую и его генератор начального кода на Си - 
конфигуратор периферии AVR - в паре с CodeWizardAVR.

Работая в паре, два мастера конфигурирования МК -
идеально дополняют друг друга! 

Например конфигурация Таймеров МК по моему лучше, понятней
и наглядней сделана в мастере ICC. 

Atmel - подсказывает как начать работать и с этим 
компилятором Си для AVR в Апликейшн Ноуте: 

AN AVR031 "Getting Started with ImageCraft C for AVR"

 

     
 

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

в CodeVisionAVR примеры в папке - CVAVR\Examples 

в ICC примеры находятся в папке - ICC\examples.avr

Примеры - это исходные тексты программ на Си для управления периферией МК и интерфейса (общения) с популярными внешними устройствами. 

Исходники снабжены подробными комментариями! 

Комментарии это то что написано :
- после двух косых черточек // - в одну строку !
- либо между  /*  и  */  -  в одну или несколько строк 

Не забывайте и вы комментировать тексты ваших программ! 

Иначе, буквально через пару месяцев, вам будет очень затруднительно понять, что делает тот или иной кусок даже ВАШЕЙ программы!

 
     

 

 

 

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


БЕСПЛАТНЫЙ и  великолепный WinAVR

Бесплатный пакет на основе компилятора GCC - о нем очень хорошие отзывы.

Создает очень правильный и компактный код!

Есть версия и под Linux. Есть вариант WinAVR в USB-флэшке.

Этот компилятор хорошо интегрируется с симулятором VMLAB
и фирменной средой разработки  Atmel - AVRstudio  

Вы ставите на ПК WinAVR и далее работаете в AVR Studio или из симулятора VMLAB. 

В нем есть пример такой интеграции, находится в папке:
C:\VMLAB\WinAVRdemo 

 

 

Работать с самим WinAVR тоже очень просто.

Компиляция проекта в WinAVR

- запустите "пуск" -> "WinAVR" -> "Programmers NotePad"

- откройте демо проект   C:\WinAVR\examples\demo\demo.c

- затем меню "Tools" и "Make All"

Проект откомпилируется и в папке C:\WinAVR\examples\demo\   появятся:

demo.hex - файл для прошивки в микроконтроллер AVR

demo.lst - это листинг на ассемблере с привязкой к Си коду программы

demo.elf - файл содержит информацию для отладки программы в симуляторе.
                          Например в PROTEUS.


Подробней

о настройке WinAVR читайте в низу этой страницы.

 

 

AtmanAVR   C/C++ Compiler AVRGCC  - он как и WinAVR основан
на GCC но имеет отладчик и ГЛАВНОЕ для начинающего:
прекрасный мастер генератор начального кода ! 

 

 

Возможно лучший и самый дорогой !

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

Компилятор IAR генерирует самый 
быстрый и компактный код.

Demo версия на 30 дней - полностью рабочая без ограничений, нет только не нужных начинающему исходников включенных в пакет библиотек.  Вы можете скачать DEMO с сайта производителя - примерно 105 Мб.  
А некоторые не брезгуют и полный IAR стянуть ТАМ

 

 

     
 

Примеры программ на Си подходят 
с незначительными изменениями для 
любых компиляторов и для любых МК ! 

Так как язык Си машино не зависимый - т.е. программы мало 
зависят от того для какого процессора они написаны.

Огромное количество НУЖНЫХ исходников 
(примеры программ) для AVR на Си здесь - AVRLib  

 
     

 

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

 

 

 

 

- записывайте возникающие вопросы ! 
    и лучше на бумагу - моторная память !

- найдите в DataSheet (ДШ) регистры и устройства МК о которых шла речь, прочитайте о  них подробней.

- если вопросы остались перечитайте снова !

- если вопросы не разрешены, ищите ответ:

1) в help и документации компилятора, симулятора, других используемых программ!

2) поиском Windows в папках и help компилятора и симулятора.

3) поиском Windows в папке где сохранен у вас курс. 

4) в моем не структурированном AVRFAQ - это сборник ответов на часто задаваемые мне по курсу вопросы и советы по применению МК от знающих людей.

 

 

 

 

 

Средства отладки программ 
и устройств содержащих МК AVR 

 

 

Симуляторы для AVR и электроники


Вы скачали компилятор Си для AVR CodeVisionAVR  (и надеюсь очень - АпНоуты !) инсталлировали его и получили  файл прошивку для МК. Естественно вы хотите узнать - будет ли прошивка, а значит ваша программа работать в МК так как вам нужно.  Для этого удобно использовать специальные программы для ПК называемые симуляторами.  Не имея МК, не покупая эл. компонентов и без пайки 

Без риска спалить что либо ! 

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

В задачах-упражнениях курса я использую 

Бесплатный симулятор-эмулятор 
для AVR   -   VMLAB

скачайте и установите на ПК
  

Несмотря на небольшой размер (около 4.2 Мб),  программа является самостоятельным средством разработки ПО на ассемблере для МК сразу двух производителей: ATMEL.com и ST.com !!! 
В одном флаконе! 

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

Юзер дефайн компонентс - в общем если вам нужен какой либо электронный компонент отсутствующий в списке VMLAB, вы можете создать его сами! 
в соответствии с ДШ или по вашим потребностям - даже 
не существующий в природе!

 

Если вы считаете эту информацию полезной, пожалуйста, помогите информировать в интернете о курсе - просто щелкните по банеру. Большое спасибо !
Electronic Banner Exchange (ElBE)

 

Я сделал упражнение - задачу 3 в которой очень подробно рассмотрел симуляцию программы на VMLAB с картинками. 

Симуляция в VMLAB используется и в других задачах курса

 

     
  В поставку VMLAB включено множество примеров программ и прошивок для немедленной симуляции - эмуляции устройства с МК.

Примеры находятся в папках:  Tutorial  и  AVR_demo

Запустите их и освойтесь, поиграйте 
с симулятором на досуге ...

 
     

 

Есть пример работы VMLAB с CodeVisionAVR ! 
откройте файл проекта 

C:\VMLAB\AVR_demo\codevisi.prj

и по-симулируйте !

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


Уже упоминал: пример работы VMLAB с WinAVR вы устанавливаете winavr в папку по умолчанию и больше ни когда не заглядываете в неё ! 

Вся работа от написания кода на Си до отладки выполняется 
из VMLAB - это очень удобно.  

C:\VMLAB\WinAVRdemo\файлы.prj

захотите попробуете ... 

 

 

     
 

Совет !

Скачайте мою заготовку (Шаблон, "РЫБА", темплэйт) 
для быстрого старта в совместном использовании 

компилятора CodeVisionAVR и 
симулятора VMLAB с МК ATmega16

Скриншот симуляции программы в VMLAB  
посмотрите здесь: http://proavr.narod.ru/vmlab.png

Распакуйте файлы из архива в папку:

С:\VMLAB\WORK

Теперь откройте проект cv.prj в компиляторе CodeVisionAVR.
Вы можете править текст программы (исходник) и
перекомпилировать его.

Для эмуляции работы устройства откройте 
в VMLAB проект vmlab.prj

Вы можете проверить работу программы на Си для МК ATmega16 мигающей светодиодами и посылающей сообщение через USART на монитор-терминал VMLAB.

Если добавить адаптер MK- rs232 (описан в задаче 6 курса, там же и рекомендации) то сообщения можно будет увидеть на экране ПК. 

В общем качайте ! - это нужно ВАМ !

 

Такая же по сути заготовка - но для компилятора 
ICC - это файлы к задаче 6

 
     

 

 

  • AVR Studio Stimulus/Logger - Создание входных и захват выходных сигналов и их сохранение при симуляции в стиле AVR Studio
     
  • Verilog VCD Logger - Компонент позволяет сохранять в файл данные длительной симуляции.
     
  • WAV Analog Stimulus/Logger - Позволяет вводить в схему сигналы из звукового файла WAV и сохранять в таком же виде результат.
     
  • Break On Edge - Точки останова по изменению сигнала - очень мощно для симуляции.
     
  • Digital Signal Delay - Цифровая пауза для сигналов - позволяет сдвигать сигнал на нужное время.
     
  • COM Port Exchanger - "Квази Уно Фантазия" теперь VMLAB может работать с ваши физическим COM портом в ПК !  Свершилось.  Раньше такое только PROTEUS мог вытворять. Но PROTEUS конечно прекрасен.
     
  • LED 7-Segment Display - 7-сегментный индикатор с десятичной точкой - несколько. Очень популярные и недорогие средства индикации.
     

 


повторю :

На софт-эмуляторе симуляторе VMLAB мы будем проверять работу программы для разрабатываемого устройства.  


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

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


Этот процесс называется - отладка программы или дебагинн - очистка от всякой нечисти - "тараканов" и "жучков"...

 

 

Скачав рекомендованные программы - установите 
их на диск С:\  в каталоги :  

CVAVR      ICCv7avr         VMLAB

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

Значит будет проще помочь, ответить на ваши вопросы.

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

 

     
 

Хелпы во всех рекомендуемых программах качественные  и подробные!

НЕ забывайте их читать! 

Они написаны для ВАС ! 

Как, в прочем, и этот курс ... 

 
     

 

 

 

ОБЯЗАТЕЛЬНО используйте !

Пакет для разработки электронных устройств 
от схемы до печатной платы 

PROTEUS

Действительно супер программа ! 

Очень советую !

Во первых PROTEUS может симулировать несколько МК  в одном устройстве, причем не только AVR но и PIC и Motorola и 8051 и даже ARM7 вперемешку !  

Во вторых в поставку PROTEUS входит очень много моделей компонентов. 

В третьих  вы можете симулировать любые электронные устройства и не 
содержащие МК и очень сложные и электро-механические системы - это очень полезно.

Вам нужно проверить какую то идею 
или вариант реализации чего либо ? 

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

Просто "соберите" вашу схему на ПК в PROTEUS и посмотрите как 
она будет работать, каковы будут её параметры.

PROTEUS - симулирует очень реалистично ! 

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

В четвертых  

PROTEUS - по сути справочник электронных компонентов 

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

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

 

в пакет включены отличные 
примеры работы в  PROTEUS  

примерно 80 устройств готовых к симуляции.

Это : 

- дата логер на жесткий диск (есть модель IDE HDD ! ) 
- можно поиграть в шахматы с ATmega128 !!! (есть модель "точскрина" ) 
- есть пример работы с графическим LCD дисплеем 
- управление шаговым двигателем 
- управление электродвигателем
- управление servo

- радиочастотные схемы, трансформаторы, линии передачи.

- конечно кнопки, индикаторы, светодиоды, связь с ПК, разные датчики, память

- конечно есть виртуальные приборы.

- отладка интерфейсов UART  i2c  TWI  SPI

 

 

Читайте - Краткий учебный Курс  Самоучитель    PROTEUS                     

Симулятор электронных устройств ПРОТЕУС, поддерживает микроконтроллеры   AVR , 8051, PIC10, PIC16, PIC18, ARM7, Motorola MC68HC11 

Полная система проектирования !

От идеи до результатов работы устройства 
и файлов для платы.

Быстрый старт, самые первые шаги ...

 

 

А если нет модели нужного 
вам компонента ?

     
 

Вот что я придумал ! 

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

Дело в том что симуляторы не против не реально высокой частоты работы симулируемого МК - я пробовал 500 МГц в PROTEUS и все работает. 

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

 

Преимущество моего метода 

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

Кроме того теперь PROTEUS не работает с моделями созданными без специально полученного кода для создания модели !  А по моему  методу вы сможете делать модели и при желании продавать их не имея такой лицензии и законно!

Надеюсь вы попробуете такой финт ушами ...

 
     

 

 


Итог этой страницы курса :

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

 

 

 

<- Назад                    Дальше ->

 
 

 

В низу этой страницы есть описание
настройки   WinAVR  и  AVRstudio
etherkit / si5351-avr-tiny-minimal: небольшая, но функциональная библиотека для управления Si5351 с микроконтроллерами AVR ATtiny с флэш-памятью 8 КБ.
перейти к содержанию Зарегистрироваться
  • Почему GitHub? Особенности →
    • Обзор кода
    • Управление проектами
    • Интеграция
    • Действия
    • Пакеты
    • Безопасность
    • Управление командой
    • Хостинг
    • Мобильный
    • Отзывы клиентов →
    • Безопасность →
  • команда
  • предприятие
  • Проводить исследования
    • Исследуйте GitHub →
    учиться и внести свой вклад
    • Темы
    • Коллекции
    • Тенденции
    • Learning Lab
    • Руководства с открытым исходным кодом
    Общайтесь с другими
    • События
.
Радиобиблиотека Si4463 для AVR и Arduino - Блог Электроники Зака ​​~ *

Это библиотека для использования с радиосигналом Si4463 от Silicon Labs, используемая (или скоро будет) в некоторых моих проектах. Si4463 конфигурируется множеством различных способов с опциями модуляции, формата пакета, алгоритмов CRC и имеет высокую выходную мощность до + 20 дБм (100 мВт). Si4463 используется в ряде готовых модулей, таких как HopeRF RFM26W и Dorji_Com DRF4463F. Весь диапазон приемопередатчиков Si446x также должен работать с этой библиотекой.

Эта библиотека конфигурирует микросхему для отправки и получения пакетов переменной длины длиной до 128 байтов и использует функции обратного вызова для случаев, когда происходят события, такие как получение нового пакета и завершение передачи пакета. Функции обратного вызова выполняются прямо из подпрограммы прерывания, что позволяет программе гораздо быстрее реагировать на события, чем при опросе библиотеки.

Скачать с GitHub
Документация

Распиновка

Si4463 ATmega328 Arduino Uno Arduino Mega Описание
VCC 3.3В 3,3 В 3,3 В Мощность (3,3 В)
GPIO0 - - - -
GPIO1 - - - -
SDO B4 (18) 12 50 SPI MISO
SDI B3 (17) 11 51 SPI MOSI
SCLK B5 (19) 13 52 SPI SCK
NSEL B2 (16) 10 10 SPI SS
NIRQ D2 (4) 2 2 Прерывание
SDN D5 (11) 5 5 Отключение / сброс - Высокий = вкл., Низкий = выкл.
GND GND GND GND Земля

Si4463 не совместим с напряжением 5 В, вам нужно будет выполнить какое-то преобразование уровня, чтобы снизить напряжение на входе 5 В до 3.3V.

Обратные вызовы
Эта библиотека использует обратные вызовы, которые запускаются при возникновении событий. Поскольку обратные вызовы запускаются из подпрограммы прерывания, убедитесь, что любые глобальные переменные, которые вы используете в них, объявлены как «volatile», так же, как если бы вы работали с обычными ISR. Эти события разбудят микроконтроллер, если он спит. Некоторые обратные вызовы можно включать и выключать с помощью Si446x_setupCallback () и Si446x_setupWUT ().

Событие Обратный звонок Настройка по умолчанию
Новый пакет входящих SI446X_CB_RXBEGIN Выкл
Действительный пакет получен SI446X_CB_RXCOMPLETE Всегда включен
Получен неверный пакет SI446X_CB_RXINVALID Всегда включен
Передача пакета завершена SI446X_CB_SENT Выкл
Таймер пробуждения истек SI446X_CB_WUT Выкл
Напряжение питания ниже порога SI446X_CB_LOWBATT Выкл

Таймер пробуждения (WUT)
Si4463 можно настроить на периодическое пробуждение с использованием таймера пробуждения (WUT).Когда таймер пробуждения активен и радиостанция переведена в спящий режим, она потребляет крошечные 900 нА. Когда WUT истекает, выполняется обратный вызов SI446X_CB_WUT. Детектор разряженной батареи использует таймер пробуждения, чтобы инициировать измерение напряжения питания. Если напряжение питания ниже порога, установленного Si446x_setLowBatt (), будет выполнен обратный вызов SI446X_CB_LOWBATT.
Расчет правильных значений мантиссы (M) и показателя степени (R) для WUT может быть немного сложным, поэтому вот калькулятор:

Совместимые чипы / модули

Устройство Проверено
Si4460 Не проверено
Si4461 Не проверено
Si4463 Работает
Si4467 Не проверено
Si4468 Не проверено
HopeRF RFM26W Работает
Dorji_Com DRF4463F Работает

Конфигурация радио
Конфигурация радио довольно сложна.Wireless Development Suite (WDS) можно использовать для создания различных файлов заголовков конфигурации:

  1. Откройте WDS (иногда загрузка может занять некоторое время, также попробуйте нажать на логотип в центре)
  2. Выберите «Симулировать радио»
  3. Прокрутите вниз и выберите «Si4463»
  4. Убедитесь, что для Revision установлено значение «C2».
  5. Нажмите кнопку «Выбрать радио»
  6. Выберите «Приложение для настройки радиосвязи»
  7. Нажмите кнопку «Выбрать приложение»
  8. Нажмите Открыть (в правом верхнем углу окна) и выберите config_normal.XML из репозитория GitHub

Области, чтобы избежать изменения

  • Вкладка пакета
    • Ничего не меняйте на вкладках «Конфигурация пакета» и «Конфигурация переменной длины»
  • Вкладка прерывания
    • Не меняйте эти настройки
  • Вкладка GPIO и FRR
    • Изменяйте GPIO 2 и 3 только в том случае, если в вашем модуле используются разные выводы для коммутатора TX / RX RF
    • Не меняйте NIRQ и SDO
    • Не меняйте регистр быстрого ответа A и B

Для создания файла заголовка, содержащего новый конфиг

  1. Нажмите «Создать источник» (внизу справа)
  2. Выберите «Сохранить файл заголовка конфигурации радиоустройства»
  3. Сохранить файл где-нибудь
  4. Сгенерированный файл конфигурации еще не может быть использован, в WDS отсутствуют некоторые опции.Сценарий Perl (и его версия для Windows .exe) предоставляется в репозитории GitHub - perl radio_config.pl radio_config_Si4463.h radio_config.h будет читать radio_config_Si4463.h и выводить в radio_config.h. С Windows .exe входной файл заголовка можно перетащить поверх исполняемого файла и он выведет в radio_config.h. Или сделать это вручную, следуя инструкциям по исправлению, приведенным ниже, хотя ручной способ не удалит ненужные настройки.

Ручная настройка заголовка исправить

  1. Удалите все строки '#include' (обычно только 1 вокруг строки 41)
  2. В 'RF_POWER_UP' определите, измените второе значение с 0x81 на 0x01 (нормальное включение без каких-либо исправлений)
  3. В 'RF_GLOBAL_CONFIG_1' определите изменение 5-го значения (GLOBAL_CONFIG) с 0x20 на 0x30 (переводит FIFO в режим одиночного 129-байтового режима)
  4. В 'RF_PKT_RX_THRESHOLD_12' определите изменение шестого с последнего значения (PKT_FIELD_2_LENGTH_7_0) с 0x3F на 0x80 (устанавливает максимальную длину пакета на 128)
  5. Удалите строки «SI446X_PATCH_CMDS» и «RF_GLOBAL_CONFIG_1_1» из определения «RADIO_CONFIGURATION_DATA_ARRAY»

Иногда определения могут не называться RF_GLOBAL_CONFIG_1 и RF_PKT_RX_THRESHOLD_12, в этом случае вместо этого ищите имя поля (GLOBAL_CONFIG или PKT_FIELD_2_LENGTH_7_0) и изменяйте соответствующее значение.

GPIO
Si4463 имеет 4 вывода GPIO (от 0 до 3), которые можно настроить несколькими способами, однако 2 из GPIO используются для управления переключателем RF TX / RX на большинстве готовых модулей. По умолчанию библиотека настраивает GPIO2 = HIGH при получении и GPIO3 = HIGH при передаче, это работает для RFM26W и DRF4463F. Большинство других модулей используют эту же конфигурацию, но все равно проверяют.

Советы по кодированию библиотеки

  • Когда радиостанция переведена в спящий режим с помощью Si446x_sleep (), она автоматически проснется, когда будет подтверждена линия выбора SPI.По завершении связи SPI необходимо снова вызвать функцию Si446x_sleep (), чтобы перевести ее в спящий режим.
  • Si446x_setupWUT () для завершения потребуется 300 мсек, если WUT был ранее отключен.

Range Testing
Используя конфигурацию config_longrange_500 в репозитории GitHub и проезжая по довольно ровной деревне / сельской местности, мне удалось получить действительный пакет на 2,2 км (1,37 мили) и 3,79 км (2,36 мили) для недопустимого пакета. Это было сделано с использованием антенны 3dBi, показанной ниже, вместо того, который обычно поставляется с радиомодулями.

Настройка передатчика


,

zkemble / Si446x: радиобиблиотека Si4463 для AVR и Arduino

перейти к содержанию Зарегистрироваться
  • Почему GitHub? Особенности →
    • Обзор кода
    • Управление проектами
    • Интеграция
    • Действия
    • Пакеты
    • Безопасность
    • Управление командой
    • Хостинг
    • Мобильный
    • Отзывы клиентов →
    • Безопасность →
  • команда
  • предприятие
  • Проводить исследования
    • Исследуйте GitHub →
    учиться и внести свой вклад
    • Темы
    • Коллекции
    • Тенденции
    • Learning Lab
    • Руководства с открытым исходным кодом
    Общайтесь с другими
    • События
    • Общественный форум
    • GitHub Education
.

eziya / AVR_SI4703: Библиотека SI4703 для AVR

перейти к содержанию Зарегистрироваться
  • Почему GitHub? Особенности →
    • Обзор кода
    • Управление проектами
    • Интеграция
    • Действия
    • Пакеты
    • Безопасность
    • Управление командой
    • Хостинг
    • Мобильный
    • Отзывы клиентов →
    • Безопасность →
  • команда
  • предприятие
  • Проводить исследования
    • Исследуйте GitHub →
    учиться и внести свой вклад
    • Темы
    • Коллекции
    • Тенденции
    • Learning Lab
    • Руководства с открытым исходным кодом
    Общайтесь с другими
    • События
    • Общественный форум
    • GitHub Education
.

Отправить ответ

avatar
  Подписаться  
Уведомление о