Парни! Подскажите,ппожалуйста! почему не работает такой код?
For Led = 0 To 50
Led1 = 50
Portg.4 = 1
Waitms Led
Portg.4 = 0
Led1 = Led1 - Led
Waitms Led1
Next
Portg.4 = 1
Большая дискретность. Вроде должно плавно изменить яркость. частота 8мгц от внешнего кварца.
Програмировал stk200/300(только сегодня спаял). фьюзы трогал- рискнул(когда незнаешь-первый раз программирую)
delay_ms в качестве аргументов позволяет принимать переменные?
Вообще да, но документация настоятельно не рекомендует так делать. В этом случае препроцессор не может отработать корректно, и в коде получается каша - не гарантируется задержка + код раздувается из-за подключения библиотек работы с плавающей точкой.
In order for these functions to work as intended, compiler optimizations must be enabled, and the delay time must be an expression that is a known constant at compile-time. If these requirements are not met, the resulting delay will be much longer (and basically unpredictable), and applications that otherwise do not use floating-point calculations will experience severe code bloat by the floating-point library routines linked into the application.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
YS, а на практике знаешь как это работает? Никогда не приходилось делать задержки с переменной длиной
Можно ли вот так сделать и получить адекватный результат?
Каримов писал(а):Парни! Подскажите,ппожалуйста! почему не работает такой код?
У вас все изменение происходит за 50 мс просто это не видно глазом
Сделайте еще один цикл, в котором изменяется яркость и будет нормально видно
Вроде этого
For Light = 0 To 50
For repeat =0 to 50
Led_delay= Light
Portg.4 = 1
Waitms Led_delay
Portg.4 = 0
Led_delay1 = 50 - Led_delay
Waitms Led1
next
Next
PS Это все равно ШИМ потому что Широтно Импульсная Модуляция не обязательно должна быть аппаратной.
Яркость меняется за счет изменения ширины импульса, значит это ШИМ.