Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 05.03.2019, 13:48  
IOPA4
Почётный гражданин KAZUS.RU
 
Аватар для IOPA4
 
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,300
Сказал спасибо: 461
Сказали Спасибо 526 раз(а) в 273 сообщении(ях)
IOPA4 на пути к лучшему
По умолчанию Re: Амперметр Atmega. Как устаканить??

Сообщение от my504 Посмотреть сообщение
Наверное не стоит плодить деление...
А, что вы так за МК переживаете. Если есть место, быстродействие удовлетворяет, пусть себе делит на здоровье. Мы тут решаем супер задачу, а мультиметры True RMS
обходятся в основном аналоговой схемой.
Реклама:
IOPA4 вне форума  
Непрочитано 05.03.2019, 14:15  
my504
Прописка
 
Аватар для my504
 
Регистрация: 30.07.2006
Адрес: Фрязино, М.О.
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
my504 на пути к лучшему
По умолчанию Re: Амперметр Atmega. Как устаканить??

Сообщение от IOPA4 Посмотреть сообщение
А, что вы так за МК переживаете.
Я переживаю не за МК, а за свойства того или иного алгоритма.
И с быстродействием все не так однозначно. Дело не столько в быстродействии, сколько в ПОТРЕБЛЕНИИ.
Каждая выполненная инструкция в МК - это определенное количество электроэнергии. Либо можно понизить тактовую у МК, либо быстро исполнять код измерения и падать в сон до следующего измерения.
Из этого следует, что код должен быть плотным. То есть минимальным по количеству исполняемых инструкций.
В части измерения RMS это дает уменьшение тепловыделения балластом питающим МК прямо от сети, либо уменьшение мощности изолирующего источника для измерения тока в высоковольтном фазном проводе. И много чего еще...
Раз уж речь идет о перфекционизме, то не стоит скатываться на решение из кубиков.
Иначе это либо непрофессионально, либо неинтересно (это в случае с хобби).
my504 вне форума  
Сказали "Спасибо" my504
parovoZZ (06.03.2019)
Непрочитано 05.03.2019, 14:17  
my504
Прописка
 
Аватар для my504
 
Регистрация: 30.07.2006
Адрес: Фрязино, М.О.
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
my504 на пути к лучшему
По умолчанию Re: Амперметр Atmega. Как устаканить??

Сообщение от МВА Посмотреть сообщение
Я это понял.
Можно, где у меня есть вычисления в float, заменить деления умножением.
Деление заменяется умножением, только если это деление на константу.
my504 вне форума  
Сказали "Спасибо" my504
МВА (05.03.2019)
Непрочитано 06.03.2019, 22:46  
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: Амперметр Atmega. Как устаканить??

Как то не хотелось подымать тему... но...
Сообщение от МВА Посмотреть сообщение
Видно хреновый из меня программист.
Сегодня поэкспериментировал, в студии.
Хрен тоже разный бывает, Хреновуха она еще та.... Главное экспериментировать...и дрожжей побольше, ну и сахару...
Ты просто не то нашел...
То что ты сделал это кусок кода из стандартной функции старых версий компилятора HI-TECH... типа такого
PHP код:
{
.....
        
ng = (x/og og)/2.0;
        if(
ng == og)
            break;
        
og ng;
    } while(--
niter);
return 
og
А ты, например, вот это попробуй (сделай под себя)...
PHP код:
MX_UINT FCM_isqrt(MX_UINT32 FCL_X)
{
    
//Local variable definitions
    
MX_UINT32 FCL_M;
    
MX_UINT32 FCL_B;
    
MX_UINT FCR_RETVAL;

    
FCL_M 0x40000// // 0x40000000 Порядок
    
FCR_RETVAL 0;

    while (
FCL_M != 0)
    {
        
FCL_B FCR_RETVAL FCL_M;
        
FCR_RETVAL FCR_RETVAL ›› 1;

        if (
FCL_X ›= FCL_B)
        {
            
FCL_X FCL_X FCL_B;
            
FCR_RETVAL FCR_RETVAL FCL_M;
        }
        
FCL_M FCL_M ›› 2;
    }
    return (
FCR_RETVAL);

Ни одного явного умножения и деления...
Главное определиться с необходимым порядком вычислений..
Вот что получается...
Миниатюры:
Нажмите на изображение для увеличения
Название: SQ1.jpg
Просмотров: 0
Размер:	202.9 Кб
ID:	139552   Нажмите на изображение для увеличения
Название: SQ2.jpg
Просмотров: 0
Размер:	201.5 Кб
ID:	139553   Нажмите на изображение для увеличения
Название: SQ3.jpg
Просмотров: 0
Размер:	198.7 Кб
ID:	139554  

mimuh64 вне форума  
Непрочитано 08.03.2019, 15:34  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Амперметр Atmega. Как устаканить??

Конечно, алгоритм вычисления я не понял, но функцию проверил.
Точность примерно такая же как и в тех функциях, что я использовал раньше, но трассировка показала, что не самая лучшая. Стандартная функция, вычисляющая с плавающей точкой, работает быстрей.

PS. Упс... Заметил, что в функции от mimuh64 когда я присваиваю принудительно 0xFFFFFFFF, результат квадрата равен 255 в то время, как у стандартной функции - 65536. И такая ситуация возникает, когда я присваиваю и 0хFFFF, и 0xFFFFFF. Я думал, что это дело в студии, но протез выдает аналогичные результаты. Хотя без присваивания программа вроде работает адекватно.
Что бы это значило?
Миниатюры:
Нажмите на изображение для увеличения
Название: Рисунок4.png
Просмотров: 0
Размер:	161.0 Кб
ID:	139586   Нажмите на изображение для увеличения
Название: Рисунок5.png
Просмотров: 0
Размер:	150.5 Кб
ID:	139587   Нажмите на изображение для увеличения
Название: Рисунок1.png
Просмотров: 0
Размер:	300.8 Кб
ID:	139592  

Нажмите на изображение для увеличения
Название: Рисунок2.png
Просмотров: 0
Размер:	297.9 Кб
ID:	139593  

Последний раз редактировалось МВА; 08.03.2019 в 16:20.
МВА вне форума  
Непрочитано 08.03.2019, 17:05  
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: Амперметр Atmega. Как устаканить??

Сообщение от МВА Посмотреть сообщение
Что бы это значило?
Это значит не внимательный... Например, что бы это значило -
PHP код:
// 0x40000000 Порядок 
.
А также изменить размер переменной "возврата"... Но, здесь большое но... Я написал - нужно определиться с порядком.
Все это оптимизировано для диапазона вычислений программы, тогда получаем выгоду... в противном случае это только мышиная возня.
Успехов.

ЗЫ да... я бы еще ковырнул тырнет... например там... , в конце...

Последний раз редактировалось mimuh64; 08.03.2019 в 17:21.
mimuh64 вне форума  
Непрочитано 08.03.2019, 19:23  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Амперметр Atmega. Как устаканить??

Что-то меня данный алгоритм не вдохновляет. Если присмотреться к трассировке в студии, в моем предыдущем посте, то видно, что стандартная функция выполняется за в 2 раза меньшее количество машинных тактов, а следовательно и время. Я не думаю, чтобы студия могла ошибиться в этом случае.
МВА вне форума  
Непрочитано 10.03.2019, 10:30  
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: Амперметр Atmega. Как устаканить??

Сообщение от МВА Посмотреть сообщение
Я не думаю, чтобы студия могла ошибиться в этом случае.
Студия не ошибается.... Там такой же компилятор каким и я пользуюсь...
Сделай следующий пример в протеусе (два действия в одном).
1. A=sqrt(0xFFFF);
2. В=sqrt(переменная);
Переменную читай с АЦП

Поставь метки, измерь время и спроси себя почему? в первом случае наносекунды, во втором микросекунды...? Думаю что придет переосмысление - оптимизация при компиляции...

Нельзя так сравнивать как ты сравнивал...
mimuh64 вне форума  
Непрочитано 10.03.2019, 11:56  
my504
Прописка
 
Аватар для my504
 
Регистрация: 30.07.2006
Адрес: Фрязино, М.О.
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
my504 на пути к лучшему
По умолчанию Re: Амперметр Atmega. Как устаканить??

Для МК с умножением извлечение квадратного корня последовательным приближением из 32 разрядов в 16 разрядов занимает примерно 160 м. ц. в 16-разрядной платформе и от 200 до 300 в 8-разрядной.
Учитывая, что извлечение корня производится один раз за период накопления, экономия на этой функции выглядит достаточно странной.
my504 вне форума  
Непрочитано 10.03.2019, 14:24  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Амперметр Atmega. Как устаканить??

Сообщение от my504 Посмотреть сообщение
Учитывая, что извлечение корня производится один раз за период накопления, экономия на этой функции выглядит достаточно странной.
Если измерения производятся с целью отображения на индикатор, то да. А если с целью работы защиты, например от перегрузки, то тогда сокращение времени имеет смысл, и большой.
На счет сравнения вычисления из константы или переменной... Но если Вы заметили, то я сравнивал две функции в одинаковых условиях. Правда обе без оптимизации. И стандартная функция, несмотря на вычисления в float, показала себя более быстродействующей.
Сообщение от mimuh64 Посмотреть сообщение
1. A=sqrt(0xFFFF);
2. В=sqrt(переменная);
Переменную читай с АЦП
И еще, стандартная sqrt() - Время выполнения зависит от величины переменной. Я это еще раньше заметил в AVR studio при работе симулятора студии, АЦП все время выдает 0, тогда sqrt() выполняется за 58 тактов (7,25 us при 8 MHz), а при переменной 0xFFFFFFFF - за 750 тактов.

Последний раз редактировалось МВА; 10.03.2019 в 14:38.
МВА вне форума  
 

Закладки

Метки
adc, atmega, atmel studio, lm358, вольтамперметр
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глушилка громкой музыки у соседей VVK Отвлекитесь, эмбеддеры! 355 10.01.2019 20:09
Ностальжи по школе... Ar-Gen-Tum Отвлекитесь, эмбеддеры! 141 27.02.2015 16:10
Читать с закрытыми глазами, чего я не понимаю в этой жизни? e_one Отвлекитесь, эмбеддеры! 1083 15.04.2014 11:57
Гравитационное замедление времени alder Отвлекитесь, эмбеддеры! 775 15.11.2013 16:45
Особенности звучания УМЗЧ с полевыми транзисторами falkonist Аудиотехника 42 22.01.2009 02:05


Часовой пояс GMT +4, время: 17:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot