Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
10.03.2012, 03:26
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: И снова ШИМ
У меня тоже была мысль что из за задержки так как когда ковырялся с аппаратным шим там применял именно функцию задержки, но когда применил библиотеку по задержке то исходник очень сильно вырос в размере
Сейчас попробуем
|
|
|
|
10.03.2012, 03:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: И снова ШИМ
Нафиг там вообще миллисекунды? с такой точностью отмерять время совсем не обязательно. Можно организовать программный счетчик, который будет тактироваться при каждом полном цикле ШИМ. Если ШИМ с частотой 100Гц, то счетчик будет изменять свое состояние каждые 10 мс. Однобайтный счетчик сможет отрабатывать интервалы до 2,5 секунды. Это уже достаточно много. А если мало - то двухбайтного счетчика хватит с избытком.
Если нам надо отработать временной интервал, задаем начальное значение этого счетчика, в десятках миллисекунд.
При каждом завершении цикла ШИМ проверяем состояние этого счетчика.
Если он равен нулю - ничего не делаем.
Если не равен нулю - декремент счетчика.
Если после декремента счетчик стал равен нулю - выставляем флажок, который показывает, что заданное время истекло.
В основной программе, в том месте, где задана задержка, делаем постоянный опрос этого флажка. Как только обнаружено, что он установлен - сбрасываем его, и переходим к следующему действию.
Такой способ займет намного меньше места. Там даже не килобайты, и не сотни байт, а пару десятков байт, вернее - слов.
|
|
|
|
10.03.2012, 03:51
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: И снова ШИМ
Alex9797 я прочитал то что ты написал и ничего не понял, наверное уже голова не соображает, завтра попробую прочитать и переварить то что ты написал. Просто я не совсем разбираюсь во всяких счетчиках и их вызовах, поэтому для меня это сложно, только я не понял а как же быть с разными задержками ?
Но то, что скачали whoim и Yurkin2007 это действительно правда, именно в задержке было дело, поставил процедуру и вызвал ее и все стало на свое место, спасибо за помощь
Да и вообще Спасибо ВСЕМ ЗА ПОМОЩЬ и за то что тратите свое время на мой геморрой ВСЕМ СПАСИБО !!!
whoim у меня тут простые буквы готовые я как то писал, у меня всего 15 букв т.е 15 выходов 1 буква 1 Пин (1бит)
|
|
|
|
10.03.2012, 17:04
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: И снова ШИМ
Yurkin2007 тут у тебя небольшая помарка, ты забыл _delay_ms(1); взять в скобки как же будет проходить пауза в цикле, Вот так правильно, мелочь но приятно
void delay_ms(int n)
{
int i;
for(i=0;i‹n;i++) { _delay_ms(1);}
}
а то будет делать такой же ламер как я и не поймет как эта задержка работает
whoim если делать каждую букву т.е цикл в виде отдельной функции
void Kanal_0up(int n1)
{
for(i=0;i‹128;i++) {
Kanal_0=i;
delay_ms(n1);
}}
то нех занимает больше чем если делать в int main(void) в виде последовательности циклов
Сейчас у меня возникла такая ситуация. Сделал что бы буквы по очереди появлялись потом гасли и сделал что бы все сразу появлялись и гасли в итоге 13-14кв сейчас я хочу поставить переменную на свечение и гашение светодиода в виде рандома, как это сделать, когдая писал в CV то тупо написал n=rand()%9 9-это максимальное число задержки, тут это не канает и получается задержка постоянно 9 а когда пишу n=rand(9) получается тоже задержка не меняется
Также добавляю функцию rand и сразу к нех добавляется 2кв
Как это рандом тут рабоатет ?
|
|
|
|
10.03.2012, 17:21
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: И снова ШИМ
Сообщение от SAHA_T
|
и уже 60кв, когда ставлю гашение то 90 с чем то весит, почему так много ? и как быть в данной ситуации
|
Ёёёёёёёёёёёё , у меня нет слов .
Плодить кучу одинаковых процедур . У тебя так код и в STM32 не влезет.
Вложенные циклы уже не котируются ?
И косвенную адресацию отменили ?
Код:
|
unsigned char PWM_chanel[16]; // буфер ШИМ
///
//-----------/
///
void fill_PWM (void)
{
unsigned char Counter_chanel=0;
Unsigned char PWM_value =0;
for(Counter_chanel=0;Counter_chanel‹16;Counter_chanel++)
{
for(PWM_value=0;PWM_value‹128;PWM_value++)
{
PWM_chanel[Counter_chanel]=PWM_value;
delay_ms(n1);
}
}
} |
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 10.03.2012 в 17:34.
|
|
|
|
10.03.2012, 17:30
|
|
Прописка
Регистрация: 04.12.2010
Сообщений: 243
Сказал спасибо: 9
Сказали Спасибо 51 раз(а) в 32 сообщении(ях)
|
Re: И снова ШИМ
..извиняюсь, что влажу в ваш разговор, так как на Си я не особо.. но вот тут нечаянно наткнулся на одну реализацию софтвенного шима - 8 каналов, 12 бит для меги 48/88, но как понял с небольшой доработкой подойдет и для меги8...
8channel 12bit ledPWM na C.rar
|
|
|
|
10.03.2012, 17:44
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: И снова ШИМ
Сообщение от Pajatel
|
так как на Си я не особо..
|
У ТС и так каша в голове . А тут вы со своим вариантом.
Информацию ему надо выдавать порциями ...
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 10.03.2012 в 17:47.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
10.03.2012, 17:58
|
|
Прописка
Регистрация: 04.12.2010
Сообщений: 243
Сказал спасибо: 9
Сказали Спасибо 51 раз(а) в 32 сообщении(ях)
|
Re: И снова ШИМ
Сообщение от dosikus
|
А тут вы со своим вариантом
|
..ну я на всякий случай и извинился
Сообщение от dosikus
|
У ТС и так каша в голове
|
..ну это и не вооружённым взглядом видно, потому и подкинул проектик...
Данная реализация хорошо прокоментирована, есть описание.. загружает в мк и трахает его до потери пульса - глядишь и получится чего в результате... всёж лучше чем с нуля изобретать
|
|
|
|
10.03.2012, 18:09
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: И снова ШИМ
dosikus млин я совсем забыл про вложенные циклы
сейчас слеплю, так как же быть с рандомом ?
Pajatel чуть позже посмотрю твою ссылку спасибо
Последний раз редактировалось SAHA_T; 10.03.2012 в 18:14.
|
|
|
|
10.03.2012, 18:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: И снова ШИМ
Сообщение от Pajatel
|
Данная реализация хорошо прокоментирована, есть описание..
|
Ага! Для тех, кто "шпрехен зи дойч"!
Комментарии на простом немецком.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:17.
|
|