Все проекты

1. Помигаем светодиодом по таймеру

-

В прошлом уроке мы подключили отладочный модуль и "заглянули внутрь" микроконтроллера. Среди прочего, мы видели изменение переменной ciklow - и менялась она примерно раз в секунду.

Получается, что если бы нам требовалось сделать еще что-либо, мы не смогли бы сделать это чаще чем 2 раза в секунду. Для обучения это сойдет, для реальной программы такое неприемлемо. Все дело в том, что программа занята длинным циклом ожидания почти все время.

Но у нас в Меге8535 есть аж целых три таймера! Вот давайте один из них и задействуем. Смотрим на программу, что в ней изменилось.

  • Появилась процедура обработчика прерывания - __interrupt void Timer0(void)

  • При старте программы добавилась инициализация таймера - всего две строчки. Таймер настроен на максимальный делитель, но все равно получилось, что прерывание таймера возникает примерно 4 раза в секунду. Если переключать светодиод - он будет моргать не один, а два раза в секунду. Поэтому в обработчике прерывания введен дополнительный делитель на 2 (counter)

  • Зато сам рабочий цикл программы, по сути, теперь пуст - только инкремент ciklow. Соответственно, рабочий цикл теперь занимает всего несколько микросекунд. Вы это увидите по скорости "верчения" переменной ciklow

Что мы можем "пощупать" отладчиком дополнительно? Можно изменить настройки предделителя таймера.

При старте программы мы записали в TCCR0 число 5 - это соответствует максимальному делителю, тактовая / 1024

Запишите в TCCR0 число 4 - светодиод замигает в 8 раз быстрее. Запишите число 3 - еще в 8 раз быстрее... Запишите 2 - наверное, глазом уже мигание будет неразличимо. Ну и - запись в TCCR0 нуля - остановит таймер, светодиод останется в случайном состоянии.

Остановив таймер, можно поуправлять светодиодом вручную. Для этого надо всего лишь записывать в PORTB число 0 (погасить) или 1(зажечь). Также попробуйте записать 1 в PINB несколько раз - при каждой записи светодиод будет переключаться.

Примечание - переключение линии порта таким образом работает не во всех AVR!

Загрузить архив с проектом

Загрузить архив с проектом

В архиве - полный проект для IAR Си с требуемой программой. Распакуйте в отдельную папку и пользуйтесь :-) В тексте программы достаточно много комментариев, прошивка тоже присутствует - можете зашить в МК не компилируя и проверить работоспособность.

В следующем уроке ... наверное, давайте сделаем так - пишите, что бы вам хотелось там увидеть. Желательно - с минимальными перепайками - все же это только начало...

Можно, например, подключить потенциометр и плавно изменять частоту мигания (работа с АЦП). 

Удачи!


Rekl:накрутка подписчиков в группу, бесплатная накрутка друзей | Облицовка Дагестанским камнем в Краснодаре | На сайте http://www.407.ru дом работа.