CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Alexen
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб ноя 09, 2013 23:43:50
Откуда: Запорожье

Re: CodeVision AVR в вопросах и ответах

Сообщение Alexen »

uk8amk писал(а):Например использовать часовой генератор(TIM2) или Watchdog для пробуждения проца. В прерывании анализировать состояние компаратора и принимать решение о включении девайса.
См. в datasheet табличку Active Clock Domains and Wake-up Sources in the Different Sleep Modes. чтобы понять какую периферию можно задействовать для этого.
Gudd-Head писал(а):Да. Видимо, либо внешняя схема, либо просыпаться по таймеру и проверять.
А можно пару строк для примера, а то не хочет МК просыпаться (((
Реклама
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: CodeVision AVR в вопросах и ответах

Сообщение FreshMan »

java, а вы все делали по инструкции ??? :)
https://sunduk.radiokot.ru/search/index ... s&x=11&y=9
Tell Me The Truth
Реклама
Аватара пользователя
java
Держит паяльник хвостом
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

Re: CodeVision AVR в вопросах и ответах

Сообщение java »

Ну Не знаю что значит "запускаем прогу от имени администратора", запускаю как обычно, нажатием два раза левой кнопкой мышы:) Установил CV AVR 2.05.0 запустилась без проблем, но не запросила ни номера, ни чего, боюсь как бы в один прекрасный момент не перестала работать, попросив денег.Ну
Последний раз редактировалось java Вт мар 24, 2015 22:06:59, всего редактировалось 2 раза.
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: CodeVision AVR в вопросах и ответах

Сообщение FreshMan »

первыйраз вы ее так запускали ?
Изображение
Tell Me The Truth
Реклама
Эиком - электронные компоненты и радиодетали
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: CodeVision AVR в вопросах и ответах

Сообщение uk8amk »

Alexen писал(а):А можно пару строк для примера, а то не хочет МК просыпаться (((
В качестве примера:
http://www.radiokot.ru/forum/viewtopic.php?f=25&t=50199
Реклама
Аватара пользователя
java
Держит паяльник хвостом
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

Re: CodeVision AVR в вопросах и ответах

Сообщение java »

FreshMan писал(а):первыйраз вы ее так запускали
Нет, на рабочем столе появился ярлык, я на него нажал, ну как обычно.
Сейчас установил заново, от имини администратора тожесамое.
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Реклама
Аватара пользователя
Alexen
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб ноя 09, 2013 23:43:50
Откуда: Запорожье

Re: CodeVision AVR в вопросах и ответах

Сообщение Alexen »

uk8amk писал(а):
Alexen писал(а):А можно пару строк для примера, а то не хочет МК просыпаться (((
В качестве примера:
http://www.radiokot.ru/forum/viewtopic.php?f=25&t=50199
Да я этот пример самый первый перелопатил (как ни как 7 таких часов сделал) но я не пойму что в коде отвечает за пробуждение. За усыпление отвечает прерывание компаратора, а что дальше? Если питание восстановлено нужно считать бит ACO; ни как не пойму((
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: CodeVision AVR в вопросах и ответах

Сообщение uk8amk »

Дальше сон, выход из которого возможен только по прерыванию. Список допустимых источников прерываний в упомянутой выше табличке.
ЗЫ. Некорректно говорить о коде пробуждения, поскольку в режиме сна процессор остановлен и не может выполнять никакой код/инструкции.
Аватара пользователя
Alexen
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб ноя 09, 2013 23:43:50
Откуда: Запорожье

Re: CodeVision AVR в вопросах и ответах

Сообщение Alexen »

uk8amk писал(а):Дальше сон, выход из которого возможен только по прерыванию. Список допустимых источников прерываний в упомянутой выше табличке.
ЗЫ. Некорректно говорить о коде пробуждения, поскольку в режиме сна процессор остановлен и не может выполнять никакой код/инструкции.
А что прописывать в самом прерывании? У меня таймер 2 считает секунды, таймер каждую секунду должен проверять состояние компаратора, но во сне он выключен. Как правильнее сделать?
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: CodeVision AVR в вопросах и ответах

Сообщение uk8amk »

Ну не выключайте таймер2 перед сном(он должен быть в асинхронном режиме).
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: CodeVision AVR в вопросах и ответах

Сообщение FreshMan »

java писал(а): Сейчас установил заново, от имини администратора тожесамое.
такого не может быть потому что такого не может быть, если вы все делаете по инструкции то все должно быть ок
проверенно на себе :))
Tell Me The Truth
Аватара пользователя
Alexen
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб ноя 09, 2013 23:43:50
Откуда: Запорожье

Re: CodeVision AVR в вопросах и ответах

Сообщение Alexen »

uk8amk писал(а):Ну не выключайте таймер2 перед сном(он должен быть в асинхронном режиме).
Вроде разобрался, еще такой вопрос, сколько примерно потребляет ИОН в спящем режиме и стоит ли его отключать?
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

Re: CodeVision AVR в вопросах и ответах

Сообщение eduardo »

Собрался сделать термостат на DS 18B20 с порогом отрицательной температуры,но не знаю как сделать на Си инкремент/декремент отрицательного числа.. Подскажите пожалста как это делается и возможно ли вообще такое???!!! :dont_know: До этого вообще не имел дел с отрицательными числами в программировании.. Спасибо.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение WiseLord »

Не поверите, но a++ и a--. То есть, вообще без разницы, число отрицательное или нет.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

Re: CodeVision AVR в вопросах и ответах

Сообщение eduardo »

Я пробовал так,но не получилось чё-то. Например int a--;
if(a<0)a=-a;
-а--;
:facepalm:
Поправлю.
и тут получается от -а отнять положительное число.
Последний раз редактировалось eduardo Вс мар 29, 2015 22:26:20, всего редактировалось 1 раз.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение WiseLord »

Какую-то ерунду пишете.

Код: Выделить всё

int a = -4;
int b = 7;

a--; // теперь a = -5
b--; // теперь b = 6
Проще ведь некуда. Нет никакой разницы, положительное число или отрицательное.

У Вас же:

Код: Выделить всё

int a--; // Это какой-то бред. Думаю, после этого a, скорее всего, будет равно -1.
if (a<0)
    a = -a; // Тут фактически вычисление модуля, инкрементом и не пахнет
Последний раз редактировалось WiseLord Вс мар 29, 2015 20:40:25, всего редактировалось 2 раза.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

eduardo писал(а):и тут получается от -а отнять положительное число.
У Вас видимо ещё и с математикой проблемы :facepalm:
a=-a; - это инверсия знака у переменной, а не "от -а отнять положительное число".
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

Re: CodeVision AVR в вопросах и ответах

Сообщение eduardo »

Наверно я не совсем правильно задал вопрос. Допустим,при установке в термостате отрицательного порога температуры изначально int a
имеет положительное значение. Тогда будет справедливо а--; И когда а принимает отрицательное значение(а<0),a-- не работает... На дис-
плей выводится неизменно результат +1.
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Volgol_555 »

Всем привет. Возник вопрос....Есть программа с выводом измеряемого сопротивления. Для преобразований используется функция:

Код: Выделить всё

Average_R=Average_R*(0.3384+0.00104*(Average_R-361))
где Average_R типа int
с использованием этого преобразования съедается 97,9% флеша в Atmega8A, когда как:

Код: Выделить всё

Average_R=Average_R*3
обходится в 89% флеша.

Вопрос...как мне оптимизировать преобразование, без видимых потерь точности...Average_R у меня изначально получает значение от ADС, т.е. макс. значение 1024....
Самое гениальное - всегда самое простое
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение WiseLord »

eduardo писал(а):когда а принимает отрицательное значение(а<0),a-- не работает
С чего бы это ему не работать?
Не важно, отрицательное или положительное число. Это просто число, и инкремент/декремент работают всегда, и нулевую точку проходят бесшовно.

Другое дело, что у Вас код может быть кривым и вместо простых сравнений содержать разный ненужный изврат со сменой знака.

И убедитесь, что функция вывода на дисплей корректно умеет выводить отрицательное число, походя не меняя при этом его знак.
Volgol_555 писал(а):Average_R=Average_R*(0.3384+0.00104*(Average_R-361))
Странное выражение, т.к. пересчитывается не линейно, а есть и квадратичная зависимость. Но ладно. Принцип простой - избавиться от double чисел, и, по возможности, от делений. Ну или делить можно на степени двойки, это равносильно сдвигам. Если упростить выражение (сокращу Average_R до просто R).

Код: Выделить всё

R = R * (0.3384 + 0.00104 * (R - 361))
R = R * (0.3384 + 0.00104R - 0.37544)
R = R * (0.00104R - 0.03704)
С большой точностью 0.00104 можно представить как 68/65536, а 0.03704 - как 2427/65536. Поэтому

Код: Выделить всё

R = R * (68 * R - 2427) / 65536;
Ну а для AVR это можно записать уже как (учитывая, что деление на 65536 это сдвиг вправо на 16 знаков.

Код: Выделить всё

R = (R * (68L * R - 2427)) >> 16;
Думаю, что этот код будет гораздо компактнее варианта с double. Префикс L (в константе 68L) важен, так как 68 * R может теоретически выйти за пределы 16-битного целого, да и умножение потом ещё раз на R тоже может привести к этому. Поэтому пусть расчёты лучше будут целочисленные 32-битные.

Задавшись целью, можно ещё сильнее оптимизировать, но, думаю, и этого будет достаточно.
Ответить

Вернуться в «AVR»