Таймер. Основные характеристики таймеров, страница 5

Для программной реализации ШИМ необходимо перепрограммировать таймер на интервал 1 мc. Тогда постоянный период ШИМ 20 мс будет сформирован с помощью дополнительной переменной PWM_count– счетчика периода ШИМ, которая будет инкрементироваться в обработчике прерываний от 0 до 19. Текущее значение переменной должно проверяться и если оно меньше заданного порога (уровня яркости), то светодиод должен быть включен, а если больше, то выключен. В данном примере 4 младших светодиода включаются только при значении переменной меньше 5 (уровень яркости 5/20), а старшие 4 светодиода горят постоянно для визуального сравнения:

char T0_event; //Глобальная переменная - флаг события прерывания от таймера

charPWM_count;//Глобальная переменная - счетчик периода ШИМ

int main (void)

{  

                . . .//Инициализация

                while (1)//Loop forever

                {                             

                               if( T0_event ) //Если прерывание случилось

                               {

                                               T0_event = 0; //Сброс флага до следующего прерывания

                                               if( PWM_count> 5 ) //Если текущее значение интервала больше порога

                                                              FIO2SET = 0xF0;//То выключаем светодиоды (0-3)

                                               else

                                                              FIO2SET = 0xFF;//Включаем светодиоды (0-3), если еще не дошли до порога

                               }

                }

                return 0;

}

__irq __nested __armvoid TimerHandler0() //Прерывание каждую миллисекунду

{    

                T0IR       = 0x01;

                VICADDRESS = 0; //Сброс прерывания

                T0_event = 1; //Устанавливаем флаг события прерывания от таймера

                PWM_count++;//Увеличиваем счетчик периода ШИМ

                if( PWM_count> 19 )

                               PWM_count = 0;//Сбрасываем счетчик периода ШИМ при достижении максимума

}

После проверки работоспособности примера необходимо модифицировать программу следующим образом:

·  Яркость всех светодиодов должна непрерывно увеличиваться от 0 до максимума.

·  Яркость всех светодиодов должна увеличиваться при нажатии на первую кнопку и уменьшаться при нажатии на вторую.

Далее необходимо модифицировать программу используя индивидуальное задание в соответствии с номером бригады:

1.  Светодиод 0 должен увеличивать яркость, светодиод 7 уменьшать, а остальные иметь постоянный максимальный уровень

2.  Светодиоды 0-3 должны увеличивать яркость, а 4-7 одновременно уменьшать

3.  Светодиоды 0-3 должны увеличивать яркость до максимума и с этого момента светодиоды 4-7 должны уменьшать яркость до 0

4.  Светодиод 0 должен увеличивать яркость от 0 до максимума и остаться на этом уровне. Затем тоже должен проделать светодиод 1 и т.д.

5.  Светодиод 0 должен увеличивать яркость от 0 до максимума, после чего уменьшить до 0 и остаться на этом уровне. Затем тоже должен проделать светодиод 1 и т.д.

6.  Светодиод 0 должен увеличивать яркость от 0 до 50% и в этот момент светодиод 1 должен начать увеличивать яркость от 0 до максимума.

7.  Светодиод 0 должен увеличивать яркость, а1одновременно уменьшать. По достижении предела поменять направление изменения яркости.

8.  Светодиод 0 должен увеличивать яркость от 0 до 25%, а светодиод 1 до 50%

9.  Светодиод 0 должен увеличивать яркость от 25 до 50%, а светодиод 1 от 50% до 75%

10.  Светодиод 0 должен увеличивать яркость от 0 до 50%, а светодиод 1 уменьшать от максимума до 50%