Страница 118 из 132
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 18:59:25
WishMasterMax
Ну я все свойства проекта обошел но не увидел

Есть только в симуляторе, когда выбрать его как утилиту для прошивки и все
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 19:31:45
Pink-Pank
Там в диалоге прошивки есть отдельная строка фьюзы. И там непосредственно выбираются нужное значение частоты и время запуска МК, а фьюзы выставляются автоматом под заданные значения.
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 19:34:33
WishMasterMax
Так в том то и прикол что я шью кодевижином без создания проекта, использую сип программер и все. А там только фьюзы...
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 19:37:00
Pink-Pank
Ладно, это все лирика.. Давайте так. Не работает именно интервал 20 мсек? Как Вы это определили?
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 19:43:28
WishMasterMax
Я пробовал разные интервалы, пытался задать шим с помощью генератора случайных чисел но с дилеем 100 он делал это раз секунд 10, там у меня есть макрос для рандома, я не верю что он может дать подряд раз 10 одно и тоже значение
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 19:57:04
Pink-Pank
Я посмотрел Ваш код повнимательнее - это что-то феерическое.
Вы либо задавайте задержку таймером, либо функцией delay. Но никак не одновременно. Когда Вы задаете одновременную работу и того, и другого, то у Вас прерывание от таймера время от времени вклинивается в основной цикл и немного увеличивает программную задержку (правда не очень сильно, но все-таки). К тому же, таймером Вы задаете задержку примерно 2,6 мкс (1/8000000*(20+1)), а программная задержка рассчитывает 20 мс. И все это работает зачем-то в параллель.. А в обработчике прерывания от таймера переменные от этих двух задержек сравниваются. А в силу их различных временных интервалов результирующая задержка может скакать туда-сюда +/- километр.
Для Ваших переменных, значение которых не бывает больше 255 вполне подойдет размер unsigned char. (как раз 255 -максимальное значение) Т.к. контроллер 8-битный, то это значительно сэкономит его ресурсы. К тому же Вы сможете избавится от обнуления по достижению значения 255, т.к. следущее добавление 1-цы вызовет переполнение - и переменная сама обнулится.
К тому же, Вы должны понимать, что нет позможности создать сколь-нибудь правдоподобный генератор случайных чисел программным путем. Есть ПСЕВДОгенераторы (обычно делаются определенным количеством сдвигов и суммой с определенным числом), которые имеют период повторяемости. В первом приближении генератором случайных чисел может быть шум на входе АЦП, но он обычно не превышает 2-3 младших значащих разрядов. Этого редко бывает достаточно. Но можно схитрить и сделать 3-4 измерения со сдвигом. Но опять-таки такой генератор будет далек от идеального, потому что распределение вероятностей выпадания разных значений будет различна (должна быть равномерна). И можно сказать, что у такого генератора почти никогда не будет значения 0 или 0xFF.
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 20:07:08
WishMasterMax
Хм, ну я не отрицаю что руки у меня с очень высоким коэффициентом кривизны) Я учусь и надебсь когда то на своих ошибках научусь))) Ну генератор то по сути фигня, я его подсмотрел в чем то проекте электронной свечи или чем то подобном, мне он по сути и не был нужен. Если я правильно понял то либо я делаю шим аппаратно и юзаю дилеи либо програмный шим но без задержек? Ну про чар тупанул, как то постоянно забываю о этом типе переменных, всегда интами пользовался на чем бы не писал)
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 20:09:42
Pink-Pank
нет, Вы не поняли. Либо ШИМ аппартано без делеев, либо программно с делеями. Либо, если хотите аппаратно с делеями, то останавливаете таймер на время делея.
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 20:12:07
WishMasterMax
Хм, да, не понял совершенно

Я понял только о что нельзя с одной и той же переменной работать в двух задержках одновременно
А если нагрузить все остальное на таймер1 это страшно?
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 20:18:30
Pink-Pank
Считайте таймер как отдельное устройство, которое работает в параллель с АЛУ (ЦП, ядро) МК. Т.е. Если Вам нужна задержка, то Вы можете сформировать ее либо таймером, либо АЛУ (намолачивая нужное количество тактов). Если Вам нужны две разные задержки, которые работают по очереди, Вы можете также использовать либо отдельно каждое из этих устройств (при этом таймер нужно будет перенастроить), либо оба, настроенных на разное время (тогда таймер должен быть выключен, пока отрабатывает задержка от АЛУ). У Вас же эти две задержки работают параллельно и точки их пересечения посчитать можно, но.. нужен ли Вам этот геморрой?
Или Вы там какие-то спецэффекты делаете?
Можете сформулировать, что должно получиться на выходе?
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 20:21:30
WishMasterMax
Думаю нет

А как такты считать?
ну по идее случайный цвет для ргб ленты, но пока вариантов реализации не нашел) рлюс надо еще прикрутить работу с нековскими пультами и возможно уарт
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 20:34:23
Pink-Pank
В смысле как считать? Вас в школе считать не научили?
Берете точку отсчета. Условный 0. прикидываете, что для реализации программной задержки в 20 мсек (1/0,020=50 Гц) Вам потребуется 8000000/50=160 000 тактов ядра. Далее таймер, который работает параллельно. у Вас сброс по числу 20. коэффициент предделителя 1. Т.к. в счете таймера число 0 тоже участвует, то каждые 21 такт (8000000/21=2,6 мксек) таймер будет выдавать прерывание. итого, пока АЛУ 1 раз посчитает 20 мсек, таймер сработает 160000/21=7619,048 раз (без учета прерываний). А теперь давайте посчитаем с прерываниями. Компилятор СИ пишет пролог и эпилог в обработке прерывания. Это ряд команд по сохранению используемых регистров (и некоторых других на всякий случай), а потом, по окончании, восстановления их значений. + сам обработчик. По моим прикидкам пролог+эпилог примерно равны 50 тактам. + обработчик ~10-20 тактов. Т.е. Время обработки прерывания по таймеру превосходит время срабатывания самого прерывания. Таким образом, основная программа (подсчет Вашей задержки программным путем) практически не выполняется (всего по 1 команде после выхода из каждого прерывания, а потом опять в обработчик). Т.е. 99,999% системного времени уходит на обработчик таймера.
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 21:05:35
WishMasterMax
Не ну так я могу считать, я думал есть особые регистры какие то
Я так понимаю таймеры это плохо?
А как тогда все будет выглядеть при наличии второго таймера?
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 21:08:08
Pink-Pank
Никаких регистров нет. Есть возможность в некоторых симуляторах при симуляции отображать количество тактов, прошедших с момента старта контроллера (точно не помню в каких, по моему, в студии есть).
Таймеры - хорошо, когда умеете ими пользоваться.
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 21:09:26
WishMasterMax
Да вот же пытаюсь освоить

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 21:12:18
Pink-Pank
Если хотите генератор случайных чисел (ПСЕВДО), то поищите примеры алгоритмов в просторах инета. Сильно сложные алгоритмы вводить смысла нет, потому как градации долей цвета не будут сильно заметны на глаз, тем более, при динамическом изменении его (цвета). Достаточно будет вообще задавать цвет 1 байтом, где средние три бита - зеленый (к этому цвету наиболее чувствителен глаз человека), а каждые два крайних - красный и синий. генерируете случайный байт - и переводите его в цвет.
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 21:18:38
WishMasterMax
так а как будет работать мк если оба таймера будут работать, как они будут делить ресурсы?
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 21:22:59
Pink-Pank
Так же будут работать параллельно. Только существует приоритет прерываний на случай их одновременного возникновения. Прерывание с бОльшим приоритетом выполнится первым. Затем по выходу из него выполнится обработчик второго прерывания. Если во время обработки первого (более приоритетного) прерывания, оно произойдет снова, то обработчик второго прерывания не запустится, а будет повторно запущен обработчик первого и т.д.
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 21:23:56
WishMasterMax
А эти приоритеты зависят от номера таймера или от вектора?
Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Пн июл 21, 2014 21:52:55
Pink-Pank
Да. Даташит смотрите. Чем ближе адрес прерывания к 0-му адресу, тем выше приоритет.