Цитата(at90 @ Jan 3 2006, 03:52)

Народ! Как сделать на меге 16 регулировку яркости светодиода аппаратным шимом без использования прерываний. Просто записывая значения от 0 до 255(можно больше).

Код
#define bTC2PreStart (0 << CS22) | (1 << CS21) | (0 << CS20)// значение для прескалера (делителя)
#define bTC2ComOutMode (0 << COM20)| (1 << COM21) // выходной сигнал при совпадении инвертируется
#define bTC2WGMMode (1 << WGM21)| (1 << WGM20) // FastPWM, после достижения значения 255 счетчик ТС2 обнуляется (хотя можно использовать FaseCorrectPWM)
......................
// Инициализация таймера-счетчика 2
void TC2_Init(void)
{
DDRD = (1 << PD7); // PD7 - OC2
PORTD = (1 << PD7);
OCR2 = 0x06; требуемое значение (можно изменять в любом месте программы)
TCCR2 = bTC2WGMMode | bTC2ComOutMode | bTC2PreStart;
}
В зависимости от включения светодиода, при увеличениии значения OCR2, светодиод будет гореть ярче или слабее. Вообще рекомендую почитать даташит, там все понятно, как ясный день. И у АТМЕЛА, скорее всего аппноты есть подобные