Сообщение от SAHA_T
|
Я извиняюсь что морочил голову, Ошибся я сори
|
Ошибки надо смывать... кровью (с)
Долго я не хотел мешать. Ладно, вставлю свой пятак.
Подобную задачу я решал немного иначе. Счетчик тиков запускаем в обратном счете. Тогда легче организовать соответствие кода канала и яркости.
Адаптируя под уже написанное, получится примерно так:
1. Все выводы портов = 0 (светодиоды погашены)
2. начальное значение Tic=127
3. Дальше - перебор всех каналов. Но проверка производится только на равенство:
// Канал 1
if (Tic == Ch_0) sbi(PORTA,0);
// Канал 1
if (Tic == Ch_1) sbi(PORTA,1);
// Канал 2
if (Tic == Ch_2) sbi(PORTA,2);
// Канал 3
if (Tic == Ch_3) sbi(PORTA,3);
............................................
// Канал 15
if (Tic == Ch_15) sbi(PORTC,7);
Tic--; //уменьшаем счетчик тиков
if(Tic==0 {
Tic=127; //начинаем все сначала
Таким образом, код яркости может принимать любое значение, от нуля до 127. При нуле светодиод вообще не засветится. При 127 светодиод погаснет лишь на мгновение, намного меньше длительности тика, и будет максимальная яркость.
Может что-то незначительное и пропустил, я тороплюсь.