Найти - Пользователи
Полная версия: Быстродействие программ на Python и программирование временных интервалов.
Начало » Python для новичков » Быстродействие программ на Python и программирование временных интервалов.
1
zip1982b
Доброго времени суток уважаемые форумчане! Программировать на Python начал недавно, после приобретения Raspberry pi. Раньше программировал (и до сих пор практикую) микроконтроллеры avr (asm, C), ПЛК со средой исполнения CoDeSys (ST, LD, FBD). А посему есть вопросы по быстродействию к программам на python и к применимости python в своих разработках.
Написал я тут недавно простенькую прогу – Диммер для светодиодной ленты (в качестве обучения). В роли устройства выбрал недавно купленный RPi modelB. Идея такая: Нажал на кнопку -> светодиодная лента в течении 3 секунд загорается от 0% до 100%.
Нажал второй раз -> светодиодная лента гаснет (сразу). Вот и всё. Только вот у меня не получилось, зажигать светодиоды в интервале 3 секунд. В итоге получилось что моя программа зажигала светодиоды от 0% до 100% за 7 секунд. Это честно меня расстроило.

листинг во вложении:

По сути я разбил временной интервал 3 секунды на 0,1 секунды получилось 30 частей времени.
И 1024 разбил на 30 частей, для того чтобы – прошло 0,1 секунды, а в функцию LED_Dimmer записалось 34. В следующей итерации соответственно запишутся числа на 34 больше. И чем меньше интервалы времени, тем плавне должны загораться светодиоды, так я думал 

Но почему проц в 700 МГц у RPi решает такую задачу слишком долго. А ATMega16 с кварцем 8МГц в разы быстрее… Возможно решение выбрано не правильно, не исключаю.
У кого какие идеи увеличить скорость выполнения этой программы?
Возможно такие задачи лучше и дешевле решать на мк, но в качестве обучения было бы не плохо выслушать другие мнения.
zip1982b
вложение
doza_and
Может причина в опечатке?
def Led_Time(argX, ragtime):
а должно быть
def Led_Time(argX, argtime):
Не стоит злоупотреблять вызовами функций:
def LED_Dimmer(arg_value):	                      # в эту функцию просто пихаем число от 0 до 1024
	wiringpi.pwmWrite(led, arg_value)
Тем более что в таком контексте она бесполезна. Хотя на такой машине 10 вызвовов функции в секунду думаю совсем не проблема.
Если вы хотите получить правильные временные интервалы то работать надо не со sleep а с абсолютным временем.
zip1982b
def Led_Time(argX, ragtime): - это опечатка когда копипастил и правил в блокноте.

С абсолютным временем? это с системным?

мне и самому sleep() не нравится


This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB