Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РГР.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.08 Mб
Скачать

Пример программы с комментариями

Программа генерирует 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 %.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]