CODE:
/* **********************************
ШИМ 4000 Hz на MK ATmega8 8000000 Hz
********************************** */
#include <avr/io.h>
#include <util/delay.h>
int main(void) /* начало основной программы */
{
/* настройка портов */
DDRB |= (1<<1); /* PB1 сконфигурировать как выход, OC1A */
DDRB |= (1<<2); /* PB2 сконфигурировать как выход, OC1B */
/* ===== настройка Timer/Counter 1 ===== */
/* Timer/Counter 1 Control Register A */
/* регистр управления таймером/счетчиком 1 А */
/* биты регистра: COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10 */
TCCR1A=0b10100001;
/* Timer/Counter 1 Control Register B */
/* регистр управления таймером/счетчиком 1 В */
/* биты регистра: ICNC1 ICES1 Reserved WGM13 WGM12 CS12 CS11 CS10 */
TCCR1B=0b00001010;
/* выбран режим Fast PWM, 8-bit [ WGM13=0 WGM12=1 WGM11=0 WGM10=1 ] */
/* максимальное значение таймера/счетчика 1 в этом режиме равно 0x00FF */
/* предделитель таймера/счетчика 1 равен 8 [ CS12=0 CS11=1 CS10=0 ] */
/* ШИМ выдается на OC1A (PB1) [ COM1A1=1 COM1A0=0 ] и OC1B (PB2) [ COM1B1=1 COM1B0=0 ] */
/* Timer/Counter 1 */
/* установка начального значения таймера/счетчика 1 */
TCNT1H=0x00; /* старший байт */
TCNT1L=0x00; /* младший байт */
/* Input Capture Register */
/* регистр захвата ( в выбранном режиме ШИМ не используется ) */
ICR1H=0x00; /* старший байт */
ICR1L=0x00; /* младший байт */
/* Output Compare Register А */
/* регистр сравнения А */
/* установка значения скважности для OC1A (PB1) */
OCR1AH=0x00; /* старший байт */
OCR1AL=0xF0; /* младший байт */
/* Output Compare Register В */
/* регистр сравнения В */
/* установка значения скважности для OC1B (PB2) */
OCR1BH=0x00; /* старший байт */
OCR1BL=0x0F; /* младший байт */
/* ===================================== */
while(1) /* бесконечный цикл */
{
/* пример управления скважностью */
_delay_ms(1000); /* ждем 1 секунду */
OCR1BL=0xF0; /* скважность близка к 100% */
_delay_ms(1000); /* ждем 1 секунду */
OCR1BL=0x80; /* скважность близка к 50% */
_delay_ms(1000); /* ждем 1 секунду */
OCR1BL=0x0F; /* скважность близка к 0% */
} /* закрывающая скобка бесконечного цикла */
} /* закрывающая скобка основной программы */
(Отредактировано автором: 19 Августа, 2010 - 19:51:52) |