Начало программирования на практике – для новичков в радиоделе

June 2, 2014 by admin Комментировать »

Почему на практике

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

Если вы ещё не пополнили свою лабораторию генератором прямоугольных импульсов, то мы сейчас займёмся тем, что разработаем достаточно удобный генератор на базе микроконтроллера Каким он будет, в конечном счёте, зависит только от нашей фантазии Но начнём мы с простой задачи, пример которой я уже приводил, когда выше приводил осциллограммы пауз разной длительности Для этой программы я встречал два названия: помигать светодиодом и «Hello world» мира микропроцессоров Второе мне нравится больше

Итак, генератор с частотой 1 кГц должен на 05 мс устанавливать высокий уровень напряжения на выходе, на 05 мс уровень нулевого напряжения, и повторять это бесконечно

Как я уже говорил, упростим выражение: бесконечно, 05 мс 1 на B5, 05 мс на B5

Я намерен использовать, так сложились обстоятельства, ATMega168 в составе модуля Arduino Вы можете повторить это для PIC16F628A (или по вашему выбору) Создавая программу, мы обсудим ряд вопросов, которые включат и работу с кнопками, и работу со светодиодами, и… посмотрим, что ещё мы нафантазируем

Я запускаю программу Flowcode для AVR

Рис 211 Запуск программы Flowcode 4 для AVR

На общем фоне рабочего поля программы появляется диалоговое окно выбора: создание нового проекта или выбор уже существующего Я выбираю создание нового проекта, оставляя всё так, как изображено выше Появляется следующее окно диалога: выбор модели микроконтроллера

Рис 212 Диалоговое окно выбора МК

Модули Arduino создаются на разных моделях контроллеров фирмы Atmel (возможно, бывшей) Мой модуль создан на базе Atmega168 Эту модель я и выбираю Нажимаю кнопку ОК Вы можете выбрать свою модель МК Или использовать программу для работы с PIC-контроллером От этого мало что изменится В появившейся заготовке для программы я начинаю с выбора программного элемента «Цикл (loop)» Все программные элементы находятся (по умолчанию) на левой панели, при наведении на них курсора они дают подсказку своего назначения

Почему выбор начинается с программного элемента «Цикл» И что такое цикл Любая программа – это набор команд или операций Часть этих команд может повторяться многократно Чтобы не переписывать их многократно, программисты и придумали такую конструкцию, как цикл, когда, выполнив последнюю команду  в блоке, программа проверяет условие выполнения цикла, и если условие выполняется, возвращается к первой команде в блоке цикла, иначе выходит из цикла

Есть несколько разновидностей циклов Одни из них повторяются заданное количество раз Удобно, когда вы точно знаете, что нужно выполнить блок команд столько-то раз Такой цикл называют счётным

Есть цикл повторения до выполнения условия, которое может проверяться в начале цикла, есть цикл, когда условие повторяется в конце блока цикла Разница в том, что в первом случае блок цикла может не повториться ни разу, во втором обязательно повторится хотя бы один раз

В нашем случае условие завершения цикла никогда не выполняется

Рис 213 Начало работы над программой

Зачем же нам цикл с условием завершения цикла, если условие никогда не выполняется

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

Рис 214 Использование цикла

Если дважды щёлкнуть по элементу «Цикл» или выбрать из выпадающего меню свойства цикла, то появится  диалоговое  окно настройки  цикла На рисунке  выделено, будет  ли  условие проверяться в начале или в конце блока, и, если поставить галочку в окне «Кол-во циклов:», то цикл станет счётным Пока нам это не нужно, но когда понадобится, мы будем знать, как это сделать

Вы помните, как была «собрана» программа для бесконечного повторения импульсов с заданными параметрами Я собираюсь её  повторить С небольшой  разницей Я добавлю переменную, которая будет управлять длительностью пауз Практически в любой программе есть переменные Они играют роль «носильщиков», переносящих данные из одного места программы в другое

Есть несколько возможностей для добавления переменных в программу Самый очевидный вариант выглядит следующим образом Выбираем в основном меню пункт «Правка (Edit)» Находим раздел «Переменные»

Рис 215 Создание новой переменной в программе

Щёлкаем по этому разделу, открывая диалоговое окно создания переменной

Рис 216 Диалоговое окно создания переменной

Следующий шаг вы видите сами Нажимаем на кнопку Добавить новую… и переходим к выбору типа переменной и заданию имени

Рис 217 Окно задания имени и определения типа переменной

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

Тип переменной определяет, сколько  ячеек памяти требуется для данной переменной А это определяет, какой тип данных может хранить такая переменная Для переменной типа байт (Byte) достаточно одной ячейки памяти В ней могут храниться такие переменные, как «флаги», требующие одного бита, могут храниться символьные переменные, как те, что мы вводим с клавиатуры (латиницей) и тп Переменная целого типа (int) занимает два байта в памяти и предназначена для хранения и переноса целых чисел в диапазоне, который вы видите на рисунке

Объём памяти у микроконтроллеров, с которыми мы будем иметь дело, ограничен Поэтому не следует выбирать для переменных избыточный тип хранения данных, и не следует «плодить» переменные без необходимости

Задав имя переменной, нажав кнопку ОК, мы возвращаемся в диалог создания переменной, где можем нажать кнопку Закрыть (Close)

Многие среды программирования используют механизм задания значения переменной «по умолчанию», то есть, если вы явным образом не задаёте значение, то переменной присваивается нулевое значение В нашем случае мы должны задать значение явным образом И задать его до того,   как   переменная   будет   работать   в   бесконечном   цикле   Для   этой   операции,   её   в

программировании называют операцией присваивания, в программе Flowcode есть программная конструкция, называемая «Вычисление»

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

Когда мы в цикле задаём условие завершения цикла, то очень часто это условие связано с увеличением на единицу (increment) или уменьшением на единицу (decrement) переменной, которую называют индексом Операцию инкремента или декремента осуществляют в этой программной конструкции

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

Рис 218 Программный элемент для операции присваивания

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

Рис 219 Ввод вычислений в окне редактора элемента Вычисления

В данном случае операция – это присваивание переменной значения В разных языках программирования для этой операции используют разные символы В языке Си, как и здесь, используется знак равенства В языке Паскаль используют два символа «:=» двоеточие и знак равенства

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

Для установки вывода порта в единицу используется элемент «Выход (Output)», который мы также мышкой переносим в нужное место программы

По умолчанию этот программный элемент устанавливает уровень 0 для всех выводов порта А

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

Нам нужно использовать только  один вывод, а не весь порт, и порт нам нужен другой

Рис 2110 Добавление элемента вывода в программу

На рисунке ниже показаны все необходимые изменения

Рис 2111 Диалоговое окно изменения свойств вывода данных

Далее добавляем задержку (элемент «Задержка (Delay)»), но  вместо  числа, что  мы делали в прошлый раз, мы используем переменную Для этого есть кнопка Переменные (на рисунке выделена), где в диалоговом окне можно выбрать переменную, если их много

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

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

Рис 2112 Добавление времени задержки как переменной

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

Рис 2113 Программа с использованием переменной

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

Рис 2114 Добавление линейки светодиодов

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

Рис 2115 Настройка подключения светодиодов

Щелчком мышки рядом (как отмечено на рисунке) с разделом «Подключение» открывается диалоговое окно, в котором можно настроить все соединения И теперь можно запустить симуляцию программы

Это первый, пробный запуск, показывающий, что как-то программа работает, то есть, светодиод мигает

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

Рис 2116 Запуск моделирования программы Программа работает Но всё ли мы сделали

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

Задать конфигурацию можно в разделе основного меню:

Одни контроллеры имеют одноадресное положение этого слова конфигурации, другие более многословны

То как выглядит слово конфигурации, можно узнать из datasheet (справочного листка)

Рис    2117    Раздел    задания    конфигурации микроконтроллера

Используя раздел «Конфигурация», вы получаете доступ к окну редактирования

Рис 2118 Окно задания конфигурации микроконтроллера

Если вы знаете, что делаете, можете записать новые значения, если нет, оставьте то, что задано

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

Всё ли теперь готово к продолжению опытов

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

Рис 2119 Задание тактовой частоты МК

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

Рис 2120 Диалоговое окно выбора тактовой частоты Теперь есть надежда, что мы готовы к первой проверке

Источник: Гололобов ВН,- Самоучитель игры на паяльнике (Об электронике для школьников и не только), – Москва 2012

Оставить комментарий

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