Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

270 clr countl reti Часть 111. Практическое программирование микроконтроллеров А VR continueA : reti lpm temp, Z+ ; в temp - число из таблицы out OCRlAН, temp2 out OCRlAL , temp out OCRlBH, temp2 out OCRlBL, temp adiw соuntО , l ; увеличиваем счетчик Для улучшения эффекта можно также поиграть с таблицей синуса, исказив его форму «по месту», чтобы переход цветов был более выраженным, - у светодиодов нелинейная характеристика зависимости яркости от тока, и визуально нарастание и спад яркости могут казаться происходящими слишком быстро. Размножить этот алгоритм на более, чем два цвета, чисто программным путем можно, если ввести дополнительные выводы с нужным сдвигом фазы, которыми придется уже управ­ лять вручную. Для этого вводят второе прерывание по переполнению (оно вШИМ­ режиме срабатывает в момент достижения значения ТОР) и включают светодиод в нем (т. е. в момент, когда счетчик сбрасывается в ноль), а выключают по старому прерыванию сравнения . Конечно, можно и подключить второй таймер (в АTmega8 это Тimer2, в AТtiny23 1 3 - ТimerO), но тогда для сдвига фазы на 90 (четыре цвета) или 1 20 градусов (три цвета) придется, скорее всего, рисовать отдельные таблицы синуса со сдвигом. Пока заканчиваем с таймерами и попытаемся в следующей главе понять, как обра­ щаться с энергонезависимой памятью EEPROM, а заодно рассмотрим еще пример использования ШИМ (попроще, чем задача с генерацией синуса).

RkJQdWJsaXNoZXIy MTExODQxMg==