Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава 9. Программирование таймеров 269 Теперь о том, как можно обеспечить эффект плавного переливания цветов друг в друга. Это гораздо красивее их раздражающего внезапного переключения, и мо жет быть применено и в рекламе, и в быту- например, в елочных гирляндах. При прямом подключении к каналам А и В двух разных гирлянд светодиодов они будут медленно гаснуть и загораться по очереди, но в середине возникнет пауза, когда обе гирлянды не горят. Чтобы от нее избавиться, хорошо бы сделать так, чтобы по ка одна гирлянда гаснет, вторая уже начинала загораться. Для этого надо включить оба вывода на непрерывную, без пауз, генерацию синуса, но инвертировать их друг относительно друга - так, чтобы второй вывод начинал сразу с максимума (т. е . генерировал бы косинус, а не синус) . Инвертировать можно вывод В, если установить оба бита: сомш1 : сомшо и сомш1 в регистре тccRlA. Установим это прямо в секции Reset и сведем установку обоих регистров сравнения в одно прерывание тrм1_СОМРА. Прерывание при этом упро стится . Изменения в программе (файл в архиве PWM_OC1_Led . asm) будут следую щими (листинги 9. 1 8 и 9. 1 9) . В секции Reset заодно устанавливаем предделитель на 1 : 256 . ldi temp , OЬ1 0 1 1 0 0 0 1 ; COM1Al=bit7 ; COM1Bl=bit 5 , COM1Bl=bit4 , WGM1 0=bit 0 out TCCRlA, temp ldi temp , ОЬ00 0 0 1 1 0 0 ; bit3=WGM12 , CS12 : CS 10=100=1 : 2 5 6 out TCCRlB, temp Прерывание т rм1_сомРв вычеркиваем, прерывание тrм1_СОМРА начинаем с выделе ния каждого четвертого (листинг 9 . 1 9) . TIMl СОМРА : ; каждое 4 -е прерЫБание inc t_count ; увеличиваем счетчик прерЫБаний andi t_count , ObO O O O O O l l ; выделяем младшие два бита breq set_OCR ; если резуль тат равен О - на установку OCRlx reti ; если нет - ничего не делаем set OCR : cpi count 0 , $ 3 8 ; сравниваем с 3 1 2 ldi temp , $ 0 1 ере countl , temp brlo continueA ; если меньше 3 1 2 , на продолжение ldi ZH , HIGH ( N_sin* 2 ) ; адрес таблицы sin в памяти - в Z ldi ZL , LOW ( N_s in* 2 ) clr countO
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==