Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Тема 1.1 Генерация импульсных последовательностей





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

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

Схема подключения светодиодов к выводам МК показана на рисунке 1.3. Рассмотрим элементы схемы. Светодиод VD1 имеет красное свечение, VD2 – желтое свечение, а VD1 – зеленое свечение. Резисторы R1 – R3 ограничивают ток, протекающий через светодиоды так, что его значение не превышает 10мА. Светодиоды подключены между выводами микроконтроллера и общим проводом питания схемы, следовательно, для того, чтобы один из светодиодов начал излучать свет, на соответствующем ему выводе необходимо сформировать высокий электрический уровень.


Рисунок 1.3 – Схема подключения светодиодов

Для управления состоянием электрического уровня на выводах МК, к которым подключены светодиоды, будем использовать модуль параллельного порта D. Разряды этого порта, управляющие светодиодами следует настроить на вывод. Для этого запишем логические единицы в соответствующие разряды регистра DDRD, а состояние разрядов регистра PORTD будут определять электрические уровни на выводах микросхемы.

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

Заголовочный файл mega8.h содержит описание памяти используемого микроконтроллера. В нем произведено именование адресов памяти в диапазоне регистров ввода/вывода в соответствии с именами, предложенными к использованию компанией производителем Atmel в фирменной документации.

В заголовочном файле delay.h представлены прототипы функций delay_ms() и delay_us(), формирующих интервалы времени программным методом соответственно в мили и микро секундах.

Листинг, описывающий процесс формирования одиночного импульса, содержится в главной функции main() (строки 13 – 16) и весьма прост. Формирование импульса на выводе микроконтроллера происходит в результате выполнения следующих операций:

1. delay_ms(2000); – вызов функции формирования временного интервала, в качестве параметров которой передано значение длительности паузы между импульсами;

2. PORTD.7=1; – формирование фронта импульсного сигнала, устанавливает высокий электрический уровень на выводе МК;

3. delay_ms(1000); – вызов функции формирования временного интервала, в качестве параметров которой передано значение длительности импульса;

4. PORTD.7=0; – формирование фронта импульсного сигнала, устанавливает высокий электрический уровень на выводе МК.

Листинг 1.1 – Формирование одиночного импульса

  //-----подключение библиотек--------------------------- //----------------------------------------------------- #include <mega8.h> //описание памяти микроконтроллера #include <delay.h> //временные задержки //*****************************************************   //=====ГЛАВНАЯ ФУНКЦИЯ================================= //===================================================== void main (void){ //-----настройка портов ввода/вывода------------------- DDRD=0x80; //7 разряд - выход //-----фоновая программа------------------------------- delay_ms(2000); //длительность паузы PORTD.7=1; //формирование фронта импульса delay_ms(1000); //длительность импульса PORTD.7=0; //формирование среза импульса }//END MAIN //=====================================================

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

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

Листинг 1.2 – Формирование непрерывной импульсной последовательности

  //-----подключение библиотек--------------------------- //----------------------------------------------------- #include <mega8.h> //описание памяти микроконтроллера #include <delay.h> //временные задержки //*****************************************************   //=====ГЛАВНАЯ ФУНКЦИЯ================================= //===================================================== void main (void){ //-----локальные объекты------------------------------- const unsigned int Tp=2000,//длительность паузы Ti=1000;//длительность импульса //-----настройка портов ввода/вывода------------------- DDRD=0x80; //7 разряд - выход //-----фоновая программа------------------------------- while(1){ //бесконечный цикл delay_ms(Tp); //длительность паузы PORTD.7=1; //формирование фронта импульса delay_ms(Ti); //длительность импульса PORTD.7=0; //формирование среза импульса }//while(1) }//END MAIN //=====================================================

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

В листинге 1.3 приведен пример программы, которая формирует заданное количество серий импульсов.

При реализации поставленной задачи недостаточно просто формировать импульсы с определенными параметрами, необходимо также производить подсчет их количества. Для этого в программе введены две переменные – счетчики i и j. Счетчик j считает количество пакетов импульсов, а i – импульсов в пакете.

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

С помощью счетчика i производится подсчет количества импульсов в каждом формируемом пакете. В начале выполнения оператора цикла с счетчиком for переменной i присваивается нулевое значение. При каждом повторном выполнении тела цикла ее содержимое сравнивается с предельным значением. После чего содержимое счетчика i увеличивается на единицу.

Для разделения пакетов импульсов следующих друг за другом перед каждым повторным выполнением оператора for формируется дополнительная пауза.

Листинг 1.3 – Формирование пакетов импульсов

  //-----подключение библиотек--------------------------- //----------------------------------------------------- #include <mega8.h> //описание памяти микроконтроллера #include <delay.h> //временные задержки //*****************************************************   //=====ГЛАВНАЯ ФУНКЦИЯ================================= //===================================================== void main (void){ //-----локальные объекты------------------------------- const unsigned int Tp=2000,//длительность паузы Ti=1000,//длительность импульса T=3000; //задержка между пакетами const unsigned char n=4, //количество пакетов m=5; //количество импульсов unsigned char i, //счетчик импульсов j=n; //счетчик пакетов //-----настройка портов ввода/вывода------------------- DDRD=0x80; //7 разряд - выход //-----фоновая программа------------------------------- while(j--){ //формирование пакетов импульсов for(i=0;i<m;i++){ //формирование импульсов в пакете delay_ms(Tp); //длительность паузы PORTD.7=1; //формирование фронта импульса delay_ms(Ti); //длительность импульса PORTD.7=0; //формирование среза импульса }//for(;;) delay_ms(T); //задержка между пакетами }//while() }//END MAIN //=====================================================

Вопросы для сома контроля

1. Опишите особенности схемы включения индикационных светодиодов лабораторного макета.

2. Как осуществляется управление светодиодами схемы?

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

4. Поясните назначение подключаемых файлов mega8.h и delay.h, используемых в приведенных примерах.

5. Как в рассмотренных примерах происходит формирование интервалов времени?

6. Опишите процесс формирования одиночного импульса на выводе микроконтроллера.

7. Как происходит формирование одного пакета импульсов?

8. Как происходит формирование пакетов импульсов?


Date: 2015-07-17; view: 353; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию