Конфигурация ШИМ AVR

Я знаю, что это глупо, но я действительно запутался.

Я хочу сделать импульс ШИМ с 3 режимами на Atmega16: 1- 1 кГц с рабочим циклом 100% 2- 4 кГц с рабочим циклом 100% 3- 1 кГц с рабочим циклом 50%

Я был в отрыве от AVR почти 2 года, и я все забыл, поэтому мне просто нужны вычисления Таймера 1. любая вещь, которую я прочитал, делает меня более запутанным. Есть ли что-то, что может мне помочь? Я использую Codevision AVR.

2 ответа

Решение

Я сделал это, но я сдал экзамены, поэтому было слишком долго его публиковать. Я установил Fcpu на 4 МГц

и вот код:

void set1KhzDC100()
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 500.000 kHz
// Mode: Fast PWM top=0x01FF
// OC1A output: Non-Inv.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x82;
TCCR1B=0x0A;
TCNT1H=0;
TCNT1L=0;
ICR1H=0x00;
ICR1L=0x00;
OCR1A=511;
}

void Set4KhzDC100()
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 4000.000 kHz
// Mode: Fast PWM top=0x03FF
// OC1A output: Non-Inv.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x83;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1A=1023;
OCR1BH=0x00;
OCR1BL=0x00;
}

void Set1KhzDC50()
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 500.000 kHz
// Mode: Fast PWM top=0x01FF
// OC1A output: Non-Inv.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x82;
TCCR1B=0x0A;
TCNT1H=0;
TCNT1L=0;
ICR1H=0x00;
ICR1L=0x00;
OCR1A=255;
}

1- 1 кГц с рабочим циклом 100%

2-4 кГц с рабочим циклом 100%

это одно и то же. Фактического ШИМ нет вообще. Выходной сигнал постоянно высокий, частота не имеет значения.

3-1 кГц с рабочим циклом 50%

на самом деле ШИМ. Есть несколько типов на выбор, но если рабочий цикл будет составлять ровно 50%, то есть простые способы добиться этого с помощью переключателя. Из руководства,

Частотный (с коэффициентом заполнения 50%) выходной сигнал в режиме быстрого ШИМ может быть достигнут путем настройки OC1A на переключение своего логического уровня при каждом сопоставлении сравнения (COM1A1:0 = 1). Это применимо, только если OCR1A используется для определения значения TOP (WGM13:0 = 15).

То есть установите биты COM1A1 и COM1A0 в TCCR1A равными 01и установите все биты WGM TCCR1A и TCCR1B равными 1, Выберите OCR1A и прескалярные биты CSx TCCR1B, чтобы OCR1A достигался каждые 0,5 мс.

Другие вопросы по тегам