Использую PIC18F4550 с кварцем 20 MHz. К нему через сдвиговые регистры(74HC595) подцеплены 48 светодиодов.
Хочу сделать ВАМ на 75 Гц при 255 уровнях яркости.
Посчитал длительность горения первого такта ВАМ: примерно 52 мкс. Т.е. для зажигания всех светодиодов надо затратить меньше 52мкс.
Сперва попробовал в цикле обрабатывать этот массив и выдавать на сдвиговый регистр данные - очень медленно. На установку всех светодиодов надо около 300 мкс.
Отказался от цикла и получил 48 однотипных групп действий(выбор и отправка на регистр данных и щёлканье клоком). Отладчик подсказал, что за 1 мкс контроллер успеет сделать 5 шагов(циклов). Итого, на одну группу действий есть всего 5 шагов(48 мкс).
Вот что у меня получилось:
Данные об уровне яркости хранятся в байтовом массиве.
Код: Выделить всё
asm
BSF RA2_bit+0, 2 // Data := 1
MOVF _iBAM, 0, 1 // W:= iBAM
ANDWF _ledbuf+0, 0, 1 // W:= W AND ledbuf[0]
BNZ l0
BCF RA2_bit+0, 2 // Data := 0
l0:
BSF RA3_bit+0, 3 //Clock:= 1;
BCF RA3_bit+0, 3 // Clock:= 0;
end;
Но этот код затрачивает 7 шагов (67 мкс) на всё, что много.
Может кто-нибудь помочь уложить этот код в 5-6 шагов?
Команды можно посмотреть тут: http://www.microchip.ru/?mid=3&tab=18