"Вы читаете о роботах и программировании и думаете: «Было бы здорово сделать что-то подобное самому!» Теми, кем эта идея овладевает чуть больше просто мыслей смотрят кто и как делал своего робота. Читают статьи, смотрят видео. На картинках все понятно. В видеороликах тоже обычно показываются уже готовые продукты, а также сжато показываются технологии их изготовления. И вроде бы то же всё понятно: отпилил, прикрутил, припаял, соединил, запрограммировал вон на той программе вот этим кодом."

понедельник, 29 января 2018 г.

Зона Ардуино: Движение по линии

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

и два электромотора. В общем алгоритм движения заключается в следующем: 
  • Если центральный датчик находится на линии, а боковые вне линии, то машинка едет прямо.
  • Если левый датчик находится на линии, а правый вне линии, то машинка поворачивает налево (независимо от показаний центрального датчика)
  • Если правый датчик находится на линии, а левый вне линии, то машинка поворачивает направо (независимо от показаний центрального датчика)
  • Если правый и левый датчики находятся на линии (вне зависимости от показаний центрального датчика), то такое состояние является неопределённым, машинка начинает движение назад.
  • Если все три датчика находятся вне линии, то такое состояние является неопределённым (потеря линии).  то машинка сразу остановится.
Можно рассмотреть алгоритм управления с использованием "черного ящика" и таблицы состояний управляющих сигналов, где А,В,С  сигналы аналоговых  датчиков линий переведенные в дискретную форму 1 - есть линия, а 0 нет линии. М1, М2 электромоторы с фиксированной заданной частотой вращения, но 1 движение мотора вперед, а 0 соответственно назад.






Тогда логическая формула управления мотором примет вид:
M1 = noA&B&C or noA&B&noC or noA&noB&C, упростив получим - M1 = noA&C 
M2 = A&B&noC or A&noB&noC or noA&B&noC, упростив получим - M2 = A&noC 
Для перевода аналогового сигнала  в дискретный, необходимо получить пороговые значения по достижению которого сигнал будет 1 или 0.  Такое преобразование выполняется при сравнении полученного сигнала с пороговым после чего ему нужно присвоить значение 1 или 0.
Пороговые значения получаются калибровкой датчика - сравнением двух контрастных условий срабатывания. Такая операция может проводиться вручную, при отладки программы или автоматически если будет написан соответствующий алгоритм.









четверг, 25 января 2018 г.

Домашнее задание кружку робототехника (для всех)

Вам предлагается программа тестового модуля калибровки датчиков Вашего робота написанная в RoboPlus Task показанная ниже 




















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




ЗАДАНИЕ
  1. Построить ДРАКОН схему по предложным скриншотам программы с помощью или ИС ДРАКОН или DRAKON WEB EDITOR. При составление дракон-схемы ОБЯЗАТЕЛЬНО указывать в параметрах Вашу (СВОЮ - АВТОРА) фамилию как показано ниже 
  2. В дракон схемах каждое действие должно иметь комментарий (полка или отдельная икона комментарий)
  3. В отдельном комментарии пояснить что показано на скриншоте программы - прокомментировать каждую строку 
ВНИМАНИЕ выполненное домашнее задание отправить через форму "Пункта приема домашних заданий". В графе Задание указать ДЗ №4

среда, 24 января 2018 г.

Предложения по функциям проекта

Как один из вариантов проекта предлагается функция калибровка и функция движение




понедельник, 22 января 2018 г.

Обновление блога

С 08.00 22.01.18 запущен графическая статистика посещений блога

Домашнее задание к 25.01.18

Принципиальная схема робота
Алгоритм робота - набрать в ИС ДРАКОН (предпочтительно - скачать все доступные файлы) или DRAKON WEB (резервный вариант). Набранные схемы отослать через (пункт сбора домашних заданий для ИС ДРАКОН как текстовый файл, а для DRAKON WEB как графический файл). Образец алгоритма для набора 


понедельник, 15 января 2018 г.

Внимание РЕЙТИНГ Опрос №2

Уважаемые члены клуба для Вас опрос практически обязателен - спасибо за понимание.

Домашнее задание №2

По тексту программы RoboPlus Task построить дракон схему как показано на примере:
программа в  RoboPlus Task


Полученная ДРАКОН - схема



ЗАДАНИЕ
Срок выполнения до 22.01.18

суббота, 13 января 2018 г.

Внимание рейтинг

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

пятница, 12 января 2018 г.

Зона Ардуино: Инвертор для логических формул управления

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

четверг, 11 января 2018 г.

Зона Ардуино: Язык С

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

Язык Си является блочно-структурированным. Каждый блок заключается в фигурные скобки {}.

Основным блоком в программе консольного приложения на языке Си является главная функция, имеющая имя main().

Каждое действие в языке Си заканчивается символом "точка с запятой" - ;. В качестве действия может выступать вызов функции или осуществление некоторых операций.

Имя функции — это коллективное имя группы описаний и операторов,
заключенных в блок (фигурные скобки). За именем функции в круглых скобках указываются параметры функции.

Комментарии в языке Си

В языке Си  для комментариев используются символы

/* - начало комментария;
*/ - конец комментария.


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

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

int a;   /* целая
переменная */
Многострочные комментарии также удобно использовать при отладке для сокрытия от выполнения части кода.

В дополнение к этому, для написания коротких комментариев могут использоваться символы //. При этом комментарием является все, что расположено после символов // и до конца строки:
float b; // вещественная переменная

Главная функция

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

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

Главную функцию можно записать по-разному:
  • int main()
  • void main().
Перед именем функции указывается тип возвращаемого значения. При обращении к главной функции значение возвращается операционной системе. Последняя запись не будет возвращать значения. Однако void main() - не совсем корректная запись, так как сообщает компилятору, что функция main() не возвращает никакого значения.

При этом запись int main() сообщает компилятору о возвращении целочисленного значения, которое необходимо операционной системе и сообщает ей о том, что программа завершилась корректно. Если же это значение не возвращено, то операционная система понимает, что программа завершилась в аварийном режиме.
Для возврата целочисленного значения перед завершением функции добавляется строка
return 0; // вещественная переменная

В фигурные скобки заключены описания и операторы.

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

среда, 10 января 2018 г.

Проект робота и домашнее задание

Цель - создание УЧЕБНОГО РОБОТА, который  должен двигаться по линии. Основная задача стоящая перед Вами это создать робота для отработки предложенных Вами же алгоритмов управления движения по сигнальной линии. Предполагаемый вид робота показан на рисунке 1. 


рисунок 1. 

В состав робота входит контроллер СМ-100, два электромотора, два батарейных отсека. Возможности робота будут расширены за счет добавления в предлагаемую конструкцию кнопки и блока светодиодов, для более информативного процесса управления.
Свой алгоритм управления представить в виде ДРАКОН схемы, используя предложенные иконки на рисунке 2.

рисунок 2

Выполнить домашнее задание в DRACON WEB результат сохранить и загрузить через ПУНКТ ПРИЕМА ДОМАШНИХ ЗАДАНИЙ на блоге клуба рисунок 3. 

рисунок 3

Срок выполнения до 23.00 14.01.18. Любое домашнее задание оценивается добавлением поощрительных балов к текущему рейтингу. Максимальная оценка до 3 балла (1 балл за сдачу Д/З своевременно, 1 балл за правильность выполнения Д/З, 1 балл за уникальность варианта Д/З). 
ВНИМАНИЕ доманее задание ОБЯЗАТЕЛЬНО для членов команды - его отсутствие - 1 балл от рейтинга.





воскресенье, 7 января 2018 г.

Постановка задачи членам клуба робототехники на первую половину 2018 года

Главная задача клуба Робототехника обучение школьников базовым основам робототехники и культуре проектирования технических устройств. Для решения этой задачи необходимо обучить методике разработки и создания робота или иного автоматического устройства. Любая методика это отработанный алгоритм гарантировано приводящий к достижению поставленной цели. Для реализации главной задачи клуба предлагается следующий алгоритм (методика) 
Для успешной реализации данной методики необходимо всем постоянным членам клуба стать постоянными читателями нашего блога - оформить подписку на обновления блога и подписаться в разделе постоянных читателей. 
Для дальнейшего повышения качества получения знаний и навыков, а также создания обстановки состязательности члены клуба условно разделены на три группы - команду, скамейку запасных, и "камчатка". Начнем с "камчатки" - это члены клуба, которые заняты только своими целями и не желают  участвовать в жизни нашего клуба, они только посещают занятия и ничего более. Скамейка запасных - может быть длинной или короткой, все зависит от них самих - хотят активно участвовать - участвуют, добиваясь место в основном составе сиречь команде.  Основной состав - команда, это те члены, которые участвуют в выставках и соревнованиях. Это те, из которых формируются будущие магистры клуба. Некоторым членам команды присваивается звание ЗНАТОК. Кроме того член команды или скамейки запасных обязан быть постоянны читателем блога клуба робототехника, причем активным читателем, который оставляет свои вопросы, замечания, предложения или пожелания через форму связи.
Возвращаясь к нашей методике, в конце марта - апреля, будет проходить "Созвездие", где наша команда может поучаствовать, в качестве приглашенных гостей и международная конференция - "Проблемы школьной информатики" - где мы, команда может быть участниками, призерами и возможно победителями, было бы желание. 
Этим и не только вопросам будет посвящено заседание клуба от 11.01.18

суббота, 6 января 2018 г.

Зона Ардуино: Инструкция по проверке созданного скетча в ИС ДРАКОН

Любая программа это алгоритм зафиксированный на языке понятном исполнителю. Исполнитель наших программ - контроллер, родной язык которого машинный код, для нас недоступен. Соответственно наш человеческий (разговорный) язык тоже недоступен контроллеру. Выход написать программу на каком то промежуточном языке более менее,  понятном человеку и который может быть транслирован или компилирован в машинный код. Для программ управления, такой язык должен быть очень лаконичным, что очень важно для уменьшения размеров машинного кода. Чем меньше программа тем быстрее она работает, а скорость работы программы важнейший параметр в автоматизации управления. С другой стороны лаконичный язык, он не информативен и как следствие мало понятен человеку. Выход? Выход в написании комментариев, которые при переводе с языка программирования в машинный код (трансляции/компиляции) не включаются и следственно на размер машинного кода не влияют. И все было бы хорошо, но запись на языке программирования остается мало понятным текстом содержащим алгоритм. Алгоритм записанный на естественном(разговорном) языке, тоже весьма довольно трудная, для понимания конструкция. Человеку проще работать с образами в целом, чем с текстом описывающим этот образ (лучше один раз видеть, чем сто раз услышать), уже давно доказано, что текст, мы читаем мысленно проговаривая слова, для того чтобы мысленно их услышать.  Выход? Выход в представление текста алгоритма в виде образа - рисунка. Но рисунок не обладает однозначностью. Нарисуйте окружность, а потом ответьте, что это круг или окружность? Именно для этого рисунок нужно сопровождать или дополнять поясняющим текстом - комментарием. Именно так и работает язык программирования ДРАКОН (Дружелюбный Русский Алгоритмический язык Который Обеспечивает Наглядность). Благодаря двум режимам работы - режима создания алгоритма и режима программирования, появляется возможность, даже не у профессиональных программистов, наглядно создать очень быструю программу, практически любой сложности. Но написать программу мало ее нужно загрузить в исполнителя. И вот тут бывает необходим специальный редактор, который сможет разработанную программу в ДРАКОНе загрузить в нашего  исполнителя. Такая загрузка подразумевает трансляцию скомпилированного на языке программирования алгоритма. Одна из функций любого транслятора, это нахождение ошибок, допущенных при записи алгоритма на языке программирования. ВНИМАНИЕ транслятор не исправляет ошибки логики в алгоритме, он только проверяет правильность написания программного кода на языке программирования. Проверка правильности алгоритма со стороны логики выполнения поставленной задачи остается за человеком.
Вашему вниманию предлагается еще один способ применения языка ДРАКОН - создание понятных и наглядных инструкций для выполнения каких либо действий человеком исполнителем.
Предлагаемая Вам инструкция это проверка созданной ДРАКОН - схемы управления, перед трансляцией в исполнителя, связка ИС ДРАКОН и редактора ARDUINO.

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

пятница, 5 января 2018 г.

Архитектура вычислительных машин

Различаются Принстонскую и Гарвардскую архитектуру вычислительных машин. Эти архитектурные варианты были предложены в конце 40-х годов специалистами, соответственно, Принстонского и Гарвардского университетов США для разрабатываемых ими моделей компьютеров.


Принстонская архитектура


Принстонская архитектура, которая часто называется архитектурой фон Неймана, характеризуется использованием общей оперативной памяти для хранения программ, данных, а также для организации стека. Для обращения к этой памяти используется общая системная шина, по которой в процессор поступают и команды, и данные.
Архитектура современных персональных компьютеров основана на
магистрально-модульном принципе.
Любую вычислительную машину образуют три основные компонента:
  • процессор,
  • память,
  • устройства ввода-вывода (УВВ).
Информационная связь между устройствами компьютера осуществляется через системную шину (системную магистраль).
Шина – это кабель, состоящий из множества проводников. Количество проводников, входящих в состав шины, является
максимальной разрядностью шины.
Системная шина, в свою очередь, представляет собой совокупность
  • шины данных, служащей для переноса информации;
  • шины адреса, которая определяет, куда переносить информацию;
  • шины управления, которая определяет правила для передачи информации;
  • шины питания, подводящей электропитание ко всем узлам вычислительной машины.
Системная шина характеризуется тактовой частотой и разрядностью. Количество одновременно передаваемых по шине бит называется
разрядностью шины.
Тактовая частота характеризует число элементарных операций по передаче данных в 1 секунду. Разрядность шины измеряется в битах, тактовая частота – в мегагерцах.
Устройство управления (УУ) формирует адрес команды, которая должна быть выполнена в данном цикле, и выдает управляющий сигнал на чтение содержимого соответствующей ячейки запоминающего устройства (ЗУ). Считанная команда передается в УУ. По информации, содержащейся в адресных полях команды, УУ формирует адреса операндов и управляющие сигналы для их чтения из ЗУ и передачи в арифметико-логическое устройство (АЛУ). После считывания операндов устройство управления по коду операции, содержащемуся в команде, выдает в АЛУ сигналы на выполнение операции. Полученный результат записывается в ЗУ по адресу приемника результата под управлением сигналов записи. Признаки результата (знак, наличие переполнения, признак нуля и так далее) поступают в устройство управления, где записываются в специальный регистр признаков. Эта информация может использоваться при выполнении следующих команд программы, например команд условного перехода.
Устройство ввода позволяет ввести программу решения задачи и исходные данные в ЭВМ и поместить их в оперативную память. В зависимости от типа устройства ввода исходные данные для решения задачи вводятся непосредственно с клавиатуры, либо они должны быть предварительно помещены на какой-либо носитель (дисковый накопитель).
Устройство вывода служит для вывода из ЭВМ результатов обработки исходной информации. Чаще всего это символьная информация, которая выводится с помощью печатающих устройств или на экран дисплея.
Запоминающее устройство или память – это совокупность ячеек, предназначенных для хранения некоторого кода. Каждой из ячеек присвоен свой номер, называемый адресом. Информацией, записанной в ячейке, могут быть как команды в машинном виде, так и данные.
Обработка данных и команд осуществляется посредством арифметико-логического устройства (АЛУ), предназначенного для непосредственного выполнения машинных команд под действием устройства управления. АЛУ и УУ совместно образуют центральное процессорное устройство (ЦПУ). Результаты обработки передаются в память.
 
Основные принципы построения вычислительных машин с архитектурой фон Неймана
  • Принцип двоичности. Для представления данных и команд используется двоичная система счисления.
  • Принцип программного управления. Программа состоит из набора команд, которые выполняются процессором друг за другом в определённой последовательности.
  • Принцип однородности памяти. Как программы (команды), так и данные хранятся в одной и той же памяти (и кодируются в одной и той же системе счисления, чаще всего – двоичной). Над командами можно выполнять такие же действия, как и над данными.
  • Принцип адресуемости памяти. Структурно основная память состоит из пронумерованных ячеек, процессору в произвольный момент времени доступна любая ячейка.
  • Принцип последовательного программного управления. Все команды располагаются в памяти и выполняются последовательно, одна после завершения другой.
  • Принцип условного перехода. Команды из программы не всегда выполняются одна за другой. Возможно присутствие в программе команд условного перехода (а также команд вызова функций и обработки прерываний), которые изменяют последовательность выполнения команд в зависимости от значений данных. Этот принцип был сформулирован задолго до фон Неймана Адой Лавлейс и Чарльзом Бэббиджем, однако был логически включен в указанный набор как дополняющий предыдущий принцип.
 
Архитектура фон Неймана имеет ряд важных достоинств.
  • Наличие общей памяти позволяет оперативно перераспределять ее объем для хранения отдельных массивов команд, данных и реализации стека в зависимости от решаемых задач. Таким образом, обеспечивается возможность более эффективного использования имеющегося объема оперативной памяти в каждом конкретном случае применения.
  • Использование общей шины для передачи команд и данных значительно упрощает отладку, тестирование и текущий контроль функционирования системы, повышает ее надежность.
Поэтому Принстонская архитектура в течение долгого времени доминировала в вычислительной технике.
Однако ей присущи и существенные недостатки. Основным из них является необходимость последовательной выборки команд и обрабатываемых данных по общей системной шине. При этом общая шина становится «узким местом» (bottleneck – «бутылочное горло»), которое ограничивает производительность цифровой системы.
 

Гарвардская архитектура


Гарвардская архитектура была разработана Говардом Эйкеном в конце 1930-х годов в Гарвардском университете с целью увеличить скорость выполнения вычислительных операций и оптимизировать работу памяти. Она характеризуется физическим разделением памяти команд (программ) и памяти данных. В ее оригинальном варианте использовался также отдельный стек для хранения содержимого программного счетчика, который обеспечивал возможности выполнения вложенных подпрограмм. Каждая память соединяется с процессором отдельной шиной, что позволяет одновременно с чтением-записью данных при выполнении текущей команды производить выборку и декодирование следующей команды. Благодаря такому разделению потоков команд и данных и совмещению операций их выборки реализуется более высокая производительность, чем при использовании Принстонской архитектуры.
Гарвардская архитектура
Недостатки Гарвардской архитектуры связаны с необходимостью проведения большего числа шин, а также с фиксированным объемом памяти, выделенной для команд и данных, назначение которой не может оперативно перераспределяться в соответствии с требованиями решаемой задачи. Поэтому приходится использовать память большего объема, коэффициент использования которой при решении разнообразных задач оказывается более низким, чем в системах с Принстонской архитектурой. Однако развитие микроэлектронной технологии позволило в значительной степени преодолеть указанные недостатки, поэтому Гарвардская архитектура широко применяется во внутренней структуре современных высокопроизводительных  микропроцессоров, где используется отдельная кэш-память для хранения команд и данных. В то же время во внешней структуре большинства микропроцессорных систем реализуются принципы Принстонской архитектуры.

Зона Ардуино: Порты ввода-вывода


7-сегментный индикатор

Порт ввода-вывода – логическое объединение сигнальных линий, через которое принимаются и передаются данные.
Каждая линия порта, как правило, обозначается как Pnx, где
  • n – обозначение порта;
  • x – номер бита (линии) в порте.
Каждый порт ввода-вывода обслуживают как минимум 3 служебных регистра:
  • регистр, содержащий данные (уровни сигналов) на всех линиях порта и используется для записи сигналов в порт;
  • регистр, содержащий состояния входов порта, доступен только для чтения, используется при чтении данных из порта;
  • регистр направления линий порта: каждая линия порта может быть сконфигурирована как вход или как выход в зависимости от значения бита этого регистра.
Если какая-то линия порта ввода-вывода в схеме не используется, она должна быть определена как выход (соответствующий бит регистра направления должен соответствовать выходу), и ее выходное значение должно быть равно 0.
Большинство линий ввода-вывода могут быть сконфигурированы для выполнения альтернативных функций, обозначенных в назначении выводов микроконтроллера.
Для всех линий портов ввода-вывода, как правило, доступна программная конфигурация входных подтягивающих резисторов. Подтягивающие резисторы осуществляют доопределение потенциалов «брошенных» входов напряжением высокого (Pull-up) или низкого (Pull-down) уровня.
Подтягивающий резистор
Для обращения к отдельным линиям порта используется маскирование битов.
Входные элементы управления
В качестве входных элементов управления могут использоваться
  • другие элементы схемы(датчики);
  • тумблеры;
  • джамперы;
  • множественные переключатели;
  • кнопки.
Тумблеры предназначены для коммутации цепей управления. Обрабатываемый сигнал с тумблера – потенциальный.
Различают 1-позиционные и 2-позиционные тумблеры:
1-позиционные
Однопозиционный тумблер
2-позиционные
tumbler2
Джамперы, как правило, используются для переключения режима работы, и их состояние проверяется только в момент включения питания микроконтроллера. Установка джампера замыкает 2 вывода, между которыми он установлен.
Джампер
Множественные переключатели представляют собой набор 1-позиционных тумблеров в миниатюрном формате.
Множественный переключатель
Кнопки предназначены для коммутации цепей управления. Обрабатываемый сигнал с кнопки – импульсный и фиксирует момент нажатия кнопки и момент ее отжатия.
Кнопки
Выходные элементы управления
В качестве выходных элементов управления могут использоваться
  • другие элементы схемы;
  • элементы индикации (единичные светодиоды или светодиодные сборки, в частности, - 7-сегментные индикаторы).
Единичные светодиоды
Светодиод7-сегментные индикаторы
Различают 7-сегментные индикаторы с общим анодом и с общим катодом.
При подаче логической единицы на соответствующий сегмент индикатора с общим катодом светодиод сегмента включается. При этом общий вывод сегментов (катод) должен быть соединен с логическим нулем.
При подаче логического нуля на соответствующий сегмент индикатора с общим анодом светодиод сегмента включается. При этом общий вывод (анод) должен быть соединен с логической единицей.
В таблице приведены коды для отображения цифр на 7-сегментном индикаторе

Зона Ардуино: Организация памяти микроконтроллера

Большинство современных микроконтроллеров имеют Гарвардскую архитектуру и содержат 3 вида  памяти:
  • память программ FLASH;
  • оперативная память (ОЗУ) SRAM (Static RAM);
  • энергонезависимая память данных EEPROM.
Адресные пространства указанных видов памяти, как правило, разделены. Способы адресации и доступа к этим областям памяти также различны. Такая структура позволяет центральному процессору работать одновременно как с памятью программ, так и с памятью данных, что существенно увеличивает производительность. Каждая из областей памяти данных (SRAM и EEPROM) также расположена в своем адресном пространстве.
Память программ
Память программ представляет собой электрически стираемое ППЗУ (FLASH) и может поддерживать команды с разрядностью больше 8 бит. В некоторых микроконтроллерах память программ разделена на 2 секции:
  • секцию загрузчика (Boot Program);
  • секцию прикладных программ (Application Program).
Память программ чаще всего является электрически перепрограммиру­емой, количество циклов перезаписи превышает 10 тысяч.
Большинство микроконтроллеров поддерживают внутрисхемное программирование, т. е. загрузку программы в микроконтроллер можно осуществлять после монтажа на плату посредством специального разъема программирования.
Для адресации памяти программ используется счетчик команд (Program Counter – PC).
В памяти программ также находится вектор сброса - в момент подачи питания микроконтроллер начинает выполнение программы с этого адреса, и здесь размещается команда перехода к началу исполняемой программы. Кроме того, память программ содержит таблицу векторов прерываний. При возникновении прерывания после сохранения в стеке текущего значения счетчика команд происходит выполнение команды, расположенной по адресу соответствующего вектора. Поэтому по данным адресам располагаются команды перехода к подпрограммам обработки прерываний.
Положение вектора сброса и таблицы векторов прерываний может быть перенесено из секции прикладных программ в секцию загрузчика.
В некоторых случаях память программ может использоваться не только для хранения кода программы, но и для хранения различных констант.
Оперативная память
Оперативная память, как правило, содержит 3 области:
  • регистры общего назначения;
  • служебные регистры;
  • память для хранения данных.
Регистры общего назначения (РОН) находятся в непосредственной близости к АЛУ. Однако в микроконтроллерах некоторых фирм (в частности, PIC фирмы Microchip) имеется только один рабочий регистр, играющий роль одного из операндов в командах.
Применение набора регистров общего назначения в сочетании с конвейерной обработкой позволяет АЛУ выполнять одну операцию (извлечение операндов из набора регистров, выполнение команды и запись результата обратно в регистр) за один такт.
Служебные регистры имеют свои имя, адрес и назначение. Они предназначены для конфигурации и обслуживания периферийных узлов микроконтроллера. Краткая характеристика служебных регистров должна быть приведена в руководстве по использованию микроконтроллера (Data Sheet).
Среди служебных регистров есть, как правило, один регистр, используемый наиболее часто в процессе выполнения программ. Это регистр состояния. Он содержит набор флагов, показывающих текущее состояние микроконтроллера. Большинство флагов автоматически устанавливаются в «1» или сбрасываются в «0» при наступлении определенных событий (в соответствии с результатом выполнения команд). Все биты этого регистра доступны как для чтения, так и для записи. Эта информация анализируется при выполнении условных переходов. При возникновении прерываний содержимое регистра состояния необходимо сохранять программно (чаще всего это является "заботой" компилятора).
Остальная часть оперативной памяти предназначена для хранения пользовательских данных.
Энергонезависимая память данных
Энергонезависимая память данных (EEPROM) организована таким образом, что содержимое каждого байта отдельно может быть считано или записано. Количество циклов перезаписи энергонезависимой памяти превышает 100 тысяч. Энергонезависимая память предназначена для хранения настроек и конфигурации программы, то есть тех данных, которые должны сохраняться при пропадании питания.
Чтение и запись данных в EEPROM, как правило, осуществляется посредством использования соответствующих регистров из области служебных регистров SRAM. Как правило, это:
  • регистр адреса при обращении к EEPROM;
  • регистр данных, считанных/записанных в EEPROM;
  • регистр управления чтением-записью EEPROM.

понедельник, 1 января 2018 г.

Зона Ардуино: О функциях для программ управления


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

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

Семантика функции определяет способ реализации функции. Обычно представляет собой тело функции.

 Определение функции


Каждая функция в языке Си должна быть определена, то есть должны быть указаны:
  • тип возвращаемого значения;
  • имя функции;
  • информация о формальных аргументах;
  • тело функции.
 
Определение функции имеет следующий синтаксис:
Тип Возвращаемого Значения Имя_Функции(СФА)
{
   ТелоФункции;
  ...
  return(ВозвращаемоеЗначение);
}
//СФА - (Список_Фактических_Аргументов)
Пример: Функция сложения двух вещественных чисел
float function(float x, float z)
{
  float y;
  y=x+z;
  return(y);
}

В указанном примере возвращаемое значение имеет тип float. В качестве возвращаемого значения в вызывающую функцию передается значение переменной y. Формальными аргументами являются значения переменных x и z.

Если функция не возвращает значения, то тип возвращаемого значения для нее указывается как void. При этом операция return может быть опущена. Если функция не принимает аргументов, в круглых скобках также указывается void.

Различают системные (в составе систем программирования) и собственные функции.

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

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

Разбиение программ на функции дает следующие преимущества:
  • Функцию можно вызвать из различных мест программы, что позволяет избежать повторения программного кода.
  • Одну и ту же функцию можно использовать в разных программах.
  • Функции повышают уровень модульности программы и облегчают ее проектирование.
  • Использование функций облегчает чтение и понимание программы и ускоряет поиск и исправление ошибок.
 
С точки зрения вызывающей программы функцию можно представить как некий "черный ящик", у которого есть несколько входов и один выход. С точки зрения вызывающей программы неважно, каким образом производится обработка информации внутри функции. Для корректного использования функции достаточно знать лишь ее сигнатуру.
Общий вид вызова функции:
 
Переменная = Имя_Функции(СФА); 



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

 Возврат в вызывающую функцию


По окончании выполнения вызываемой функции осуществляется возврат значения в точку ее вызова. Это значение присваивается переменной, тип которой должен соответствовать типу возвращаемого значения функции. Функция может передать в вызывающую программу только одно значение. Для передачи возвращаемого значения в вызывающую функцию используется оператор return в одной из форм:

return(Возвращаемое_Значение);
return Возвращаемое_Значение;

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

Оператор return также завершает выполнение функции и передает управление следующему оператору в вызывающей функции. Оператор return не обязательно должен находиться в конце тела функции.

Функции могут и не возвращать значения, а просто выполнять некоторые вычисления. В этом случае указывается пустой тип возвращаемого значения void, а оператор return может либо отсутствовать, либо не возвращать никакого значения:
return;

В языке Си нельзя определять одну функцию внутри другой.

В языке Си нет требования, чтобы семантика функции обязательно предшествовало её вызову. Функции могут определяться как до вызывающей функции, так и после нее. Однако если семантика вызываемой функции описывается ниже ее вызова, необходимо до вызова функции определить прототип этой функции, содержащий:
  • тип возвращаемого значения;
  • имя функции;
  • типы формальных аргументов в порядке их следования.
 
Прототип необходим для того, чтобы компилятор мог осуществить проверку соответствия типов передаваемых фактических аргументов типам формальных аргументов. Имена формальных аргументов в прототипе функции могут отсутствовать.

Рекурсивные функции
Функция, которая вызывает сама себя, называется рекурсивной функцией.

Рекурсия - вызов функции из самой функции.
Математические функции
Математические функции хранятся в стандартной библиотеке math.h. Аргументы большинства математических функций имеют тип double. Возвращаемое значение также имеет тип double.
Углы в тригонометрических функциях задаются в радианах.