Цитата(Starick @ Apr 2 2006, 18:49)

Уважаемый, а он и небудет плавно регулировать. Так, как зависимоть угла открытия тиристора (сисмистора) и получаемое напряжение (а соответственно и мощности и энергии) не линейна. Тут нужен алгоритм, который бы эту зависимость немного линеаризировал.
Непонятно что автор подразумевал под словом "плавно". Может, не "равномерно", а "монотонно"? Может, у него яркость скачет?
k почему-то меняется от 30 до 3500; скорость этого изменения (при нажатии на кнопку), похоже, велика; функция delay_us(1) дает непонятно какую задержку. При 50 Гц полупериод 10000 мкс, чтобы все работало монотонно delay_us(1) должна обеспечивать задержку не более 10000/3500=2.85 мкс. Если больше, то после минимальной яркости будет прыжок на максимальную.
Если delay_us(1) дает 2.85мкс, то delay_us(30) даст задержку всего в 85.5мкс, и при нажатии на кнопку счетчик k установится в 3500 или отмотает в 30 примерно за 350 мс, считая что полный цикл выполнится примерно за 100мкс. Глазом не успеешь моргнуть.
PS: На самом деле все гораздо хуже, т.к. прерывание не отдает управление сразу же, как должно было бы делать, а "держит" до тех пор пока не зажжет симистор. Поэтому время исполнения основного цикла зависит от угла поджига, чем меньше яркость - тем "инерционнее" становятся кнопки. Лучше бы так не делать.