
- •6.050702 «Електромеханвка»,
- •Создание нового проекта
- •Организация памяти
- •Сведения о портах ввода/вывода
- •Команды языка Assembler, необходимые для выполнения заданий
- •Контрольные вопросы
- •Описание stk500
- •Порядок выполнения работы
- •Индивидуальные задания
- •Контрольные вопросы
- •Организация памяти мк AtMega16
- •Введение
- •Команды работы с памятью
- •Индивидуальные задания
- •Контрольные вопросы:
- •Система прерываний AtMega16. Таймер/счетчик
- •Введение
- •Индивидуальные задания
- •Индивидуальные задания
- •Контрольные вопросы
- •Управление скоростью «бега» огонька по светодиодной панели микроконтроллера AtMega16
- •Порядок выполнения работы
- •Варианты заданий для студентов
- •Контрольные вопросы
- •Основы работы в среде разработки CodeVisionAvr. Широтно-импульсная модуляция (шим) микроконтроллера AtMega16
- •Введение
- •Среда разработки CodeVisionAvr. Пример генерации начального кода программы
- •Пример программы с комментариями
- •Индивидуальные задания
- •Usart: универсальный синхронный и асинхронный последовательный приемопередатчик микроконтроллера AtMega16
- •1. Введение
- •Генерация внутренней синхронизации – генератор скорости связи
- •Работа с удвоением скорости связи (u2x)
- •Режим синхронной связи
- •Форматы посылки
- •1.1.5 Бит паритета
- •1.1.6. Инициализация усапп
- •1.1.9. Передача данных
- •1.1.10. Передача посылок с 5…8 битами данных
- •1.2. Конфигурирование Atmega16
- •1.2.1. Конфигурирование порта d
- •1.2.2. Описание регистров усапп
- •1.3. Генерация начального кода программы в среде разработки CodeVisionAvr
- •1.4. Работа с терминалом
- •1.5. Описание и листинг программы
- •Контрольные вопросы:
Пример программы с комментариями
Программа генерирует 10-битовую ШИМ с частотой, равной тактовой частоте микропроцессора, в неинвертирующем режиме. Результат выводится на PD5 микроконтроллера. Длительность импульса изменяется в цикле с шагом 10 %, начальное значение – 100 %.
#include <util/delay.h>
#include <avr/io.h>
//подключаем необходимые библиотеки
int main(void)
{
char PWM = 100; // Длительность импульса ШИМ в %
unsigned long int count; // Длительность импульса ШИМ в долях (от 0х0000 до 0х03FF)
PORTD = 0x00;// 0000 0000
DDRD = 0x20; // 0010 0000 Конфигурируем PD5 (выход OC1A)
TCCR1B = 0x00; //0000 0000 Остановка таймера/счетчика 1
OCR1AH = 0x00; //0000 0011 Устанавливаем регистр OCR1A (длительность импульса ШИМ)
OCR1AL = 0xFF; //1111 1111
TCCR1A = 0x83; //1000 0011
//установка неинвертирующего режима: COM1A1:COM1A0 = 10
TCCR1B = 0x09; //0000 1001
//без подавления шума, тактовая частота - частота кристалла, без предделителя
//режим работы 10-битовый PWM WGM13:0 = 0111
//запуск таймера
while (1){
if (PWM > 100) { //если длительность импульса ШИМ больше 100 %
PWM = 0; //обнулим длительность импульса ШИМ
};
count = ((1023 * (unsigned long int)PWM)/100); //зададим длительность импульса ШИМ в долях
OCR1AH = (char)(count>>8); //запишем в старший байт OCR1A значение старшего байта count
OCR1AL = (char)count; //запишем в младший байт OCR1A значение младшего байта count
PWM += 10; //увеличим длительность импульса ШИМ на 10%
_delay_ms(1000); // пауза 1 секунда
};
return 1;
}
Для работы вам понадобится подключить следующие библиотеки: avr/io.h – содержит определения и подключает нужный заголовочный файл (для ATmega16 – avr/iom16.h); util/delay.h – содержит функции формирования задержки. Например, функция _delay_ms(100) позволяет получить задержку в 100 мс.
Индивидуальные задания
Вариант |
Текст задания |
1 |
Cгенерировать 10-битовую ШИМ с частотой, равной тактовой частоте микропроцессора, в неинвертирующем режиме. Выводить результат на OC1A. Длительность импульса изменяется в цикле с шагом 10 %, начальное значение – 100 %. |
2 |
Cгенерировать 9-битовую ШИМ с частотой, равной тактовой частоте микропроцессора, в инвертирующем режиме. Выводить результат на OC1B. Длительность импульса изменяется в цикле с шагом 5 %, начальное значение – 0 %. |
3 |
Cгенерировать 8-битовую ШИМ с частотой, равной 1/64 тактовой частоты микропроцессора, в неинвертирующем режиме. Выводить результат на OC1A. Длительность импульса изменяется в цикле с шагом 10 %, начальное значение – 100 %, длительность уменьшается. |
4 |
Cгенерировать 10-битовую ШИМ с частотой, равной 1/8 тактовой частоты микропроцессора, в инвертирующем режиме. Выводить результат на OC1B. Длительность импульса изменяется в цикле с шагом 20 %, начальное значение – 20 %. |
5 |
Cгенерировать 8-битовую ШИМ с фазовой коррекцией, с частотой, равной 1/8 тактовой частоты микропроцессора. Выводить результат на OC1B в режиме: сброс OC1B при совпадении на подъеме фронта, установка OC1B при совпадении на спаде фронта. Длительность импульса уменьшается в цикле с шагом 10 %, начальное значение – 20 %. |
6 |
Cгенерировать 9-битовую ШИМ с фазовой коррекцией, с частотой, равной 1/64 тактовой частоты микропроцессора. Выводить результат на OC1А в режиме: сброс OC1B при совпадении на подъеме фронта, установка OC1А при совпадении на спаде фронта. Длительность импульса увеличивается в цикле с шагом 20 %, начальное значение – 0 %. |
7 |
Cгенерировать 10-битовую ШИМ с фазовой коррекцией, с частотой, равной тактовой частоте микропроцессора. Выводить результат на OC1А в режиме: установка OC1А при совпадении на подъеме фронта, сброс OC1А при совпадении на спаде фронта. Длительность импульса увеличивается в цикле с шагом 5 %, начальное значение – 50 %. |
8 |
Cгенерировать 9-битовую ШИМ с фазовой коррекцией, с частотой, равной 1/8 тактовой частоты микропроцессора. Выводить результат на OC1В в режиме: установка OC1B при совпадении на подъеме фронта, сброс OC1В при совпадении на спаде фронта. Длительность импульса уменьшается в цикле с шагом 10 %, начальное значение – 100 %. |
9 |
Cгенерировать ШИМ с фазовой и частотной коррекцией, с частотой, равной тактовой частоте микропроцессора. Выводить результат на OC1В в режиме: установка OC1B при совпадении на подъеме фронта, сброс OC1В при совпадении на спаде фронта. Длительность импульса увеличивается в цикле с шагом 10 %, начальное значение – 40 %. |
10 |
Cгенерировать ШИМ с фазовой коррекцией, с частотой, равной 1/8 тактовой частоты микропроцессора. Выводить результат на OC1В в режиме: сброс OC1B при совпадении на подъеме фронта, установка OC1В при совпадении на спаде фронта. Длительность импульса увеличивается в цикле с шагом 20 %, начальное значение – 0 %. |