Eddy_Em Опубликовано 10 ноября, 2021 Поделиться Опубликовано 10 ноября, 2021 (изменено) 26 minutes ago, LiVit said: На гражданина это заклинание не действует Прискорбно. Он прямо как тот "хирург", который по советам с форумов делает операцию на мозге, и уже на вскрытии черепной коробки застрял… Изменено 10 ноября, 2021 пользователем Eddy_Em 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Юрий_Нд Опубликовано 10 ноября, 2021 Поделиться Опубликовано 10 ноября, 2021 (изменено) Yurkin2015, зачем ворошить старое. По-моему, я достаточно ясно сказал, что в этой теме я разобрался и принёс извинения Всем участникам форума: 06.11.2021 в 03:37, Юрий_Нд сказал: 1. Извиняюсь, был неправ, заблуждался. Теперь я знаю почему (1<<0) = 0b0000 0001. И теперь я в это не просто верю, как делал это раньше, а точно знаю это и могу объяснить/пояснить любому желающему. 2. Интернетом не пользовался, книжки умные по этому вопросe не читал, просто взял листочек с карандашиком и написал: (1<<6)=(16<<2)=(4<<4)=64 верно? 3. LiVit, как Вы думаете Керниган и Ричи могут мне сказать что-либо новое и неизвестное именно по этому вопросу? ---------- Уважаемый LiVit, а от Вас я ждал хоть какой-то реакции на мой анализ относительной погрешности в переменных типа float. Жаль, что так и не дождался... 8 часов назад, Yurkin2015 сказал: float даёт 7 ... а почему не 8 значащих цифр? Изменено 10 ноября, 2021 пользователем Юрий_Нд 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
LiVit Опубликовано 10 ноября, 2021 Поделиться Опубликовано 10 ноября, 2021 (изменено) 1 час назад, Юрий_Нд сказал: Уважаемый LiVit, а от Вас я ждал хоть какой-то реакции на мой анализ относительной погрешности в переменных типа float. Жаль, что так и не дождался... Вам за меня ответили. Погрешности и ошибки имеют свойство накапливаться. Плюс непонятно, зачем микроконтроллер заставлять ворочать эту тяжелую математику. И лично меня убивает эта чУдная математика 2.20000005 + 1.10000002 = 3.30000019 И это при том, что вам не нужны эти float. Я могу понять, когда их используют в каких-нибудь сложных ЦОС (цифровая обработка сигналов), но при измерении тока, напряжения, времени.... PS. не удивляйтесь, что вам скоро вообще перестанут отвечать. Изменено 10 ноября, 2021 пользователем LiVit 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Юрий_Нд Опубликовано 10 ноября, 2021 Поделиться Опубликовано 10 ноября, 2021 (изменено) 08.11.2021 в 19:11, Юрий_Нд сказал: Допустим число нужно умножить на 0.384. Вы предлагаете умножить на 384, а потом разделить на 1000? LiVit, а это Вы поддерживаете? 08.11.2021 в 19:38, Eddy_Em сказал: ... нужно умножить на пять и разделить на 13. Что Вы по этому поводу можете сказать? Изменено 10 ноября, 2021 пользователем Юрий_Нд 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
COKPOWEHEU Опубликовано 10 ноября, 2021 Поделиться Опубликовано 10 ноября, 2021 14 часов назад, Огонёк сказал: Си есть си, какая разница? В AVR модификатор const не означает размещение во флеш, нужен еще PROGMEM. 32 минуты назад, Юрий_Нд сказал: 08.11.2021 в 20:11, Юрий_Нд сказал: Вы предлагаете умножить на 384, а потом разделить на 1000? LiVit, а это Вы поддерживаете? Вариантов много. Самый простой - да, умножить на 384 и делить на 1000 - тогда коэффициент можно задать в человеко-читаемом виде. Если же это просто число, чье представление не несет особого смысла - коэффициент резистивного делителя, например - можно умножить на 98 и поделить на 256. Или умножить на 25166 и поделить на 65536. Домашнее задание: разобраться почему для делителей я выбрал именно эти числа. Кстати, на соседнем форуме сейчас обсуждается подобный подход как замена делению на 10. Потому что умножение действительно оказывается быстрее. 0 Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз. Часть моих наработок. Ссылка на комментарий Поделиться на другие сайты Поделиться
Eddy_Em Опубликовано 10 ноября, 2021 Поделиться Опубликовано 10 ноября, 2021 (изменено) 1 hour ago, Юрий_Нд said: Что Вы по этому поводу можете сказать? Могу сказать, что налицо полный профан. Тут, похоже, не только С надо изучать, но и элементарный матан! Я уже писал, что там, где нет флоатов, заменяю умножение на некую нормировочную константу двумя действиями: умножением и делением. Однако, в STM32F0 даже деления нет, поэтому для них лучше эту операцию реализовать как умножение и сдвиг, пусть даже uint32_t может понадобиться расширить до uint64_t. Правда, считать коэффициенты так лихо не получится. Вот, допустим, хочу я с точностью до 0.001 получить значения числителя и знаменателя для коэффициентов 1.23, 3.25 и 7.11. Я просто в октаве пишу: [n d]=rat([1.23 3.25 7.11], 0.001) n = 16 13 711 d = 13 4 100 Вот и сразу три числителя и три знаменателя. Можно проверить: n./d ans = 1.2308 3.2500 7.1100 - просто превосходно! Однако, в случае, когда деление хочется заменить сдвигом, придется покумекать, т.к. через цепные дроби подбирать эти числа нереально! Могу разве что предложить последовательный перебор. Вот так: K=1.23; for x=0:31; N=round(K*bitshift(1,x)); printf("a*%g approx a*%d>>%d (*%g)\n",K, N, x, bitshift(10000*N,-x)/10000); endfor a*1.23 approx a*1>>0 (*1) a*1.23 approx a*2>>1 (*1) a*1.23 approx a*5>>2 (*1.25) a*1.23 approx a*10>>3 (*1.25) a*1.23 approx a*20>>4 (*1.25) a*1.23 approx a*39>>5 (*1.2187) a*1.23 approx a*79>>6 (*1.2343) a*1.23 approx a*157>>7 (*1.2265) .... Можно функцию написать, которая будет подбирать коэффициенты с наибольшей точностью. Вот так: function [N Shift] = findNR(K, dk) N = 1; Shift = 1; delta = 1; Ngood = 1; Shiftgood = 1; deltagood = 1; Nmax = bitshift(1,32)-1; for Shift = 3:31; N = round(K*bitshift(1,Shift)); if(N > Nmax) break; endif delta = abs(bitshift(1e6*N, -Shift)/1e6 - K); if(delta < dk) break; endif if(delta < deltagood) deltagood = delta; Ngood = N; Shiftgood = Shift; endif endfor if(delta > dk) printf("tolerance %g not found, use %g\n", dk, deltagood); Shift = Shiftgood; N = Ngood; endif endfunction И в этом случае: [N S] = findNR(1.23, 0.001) N = 315 S = 8 Т.е. можно было бы просто умножить на 315 и сдвинуть вправо 8 раз! А вот если я захочу 10¯⁶ получить, то уже может быть переполнение uint64_t, так что придется точность понизить: [N S] = findNR(1.23, 1e-6) tolerance 1e-06 not found, use 1e-05 N = 40305 S = 15 Изменено 10 ноября, 2021 пользователем Eddy_Em 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Юрий_Нд Опубликовано 10 ноября, 2021 Поделиться Опубликовано 10 ноября, 2021 COKPOWEHEU, а Вы видели мою тему, где я считал относительные погрешности при расчётах с числами типа float? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
COKPOWEHEU Опубликовано 10 ноября, 2021 Поделиться Опубликовано 10 ноября, 2021 3 часа назад, Юрий_Нд сказал: COKPOWEHEU, а Вы видели мою тему Я много ваших тем видел. Смысла они обычно не несут. 8 часов назад, Eddy_Em сказал: Вот, допустим, хочу я с точностью до 0.001 получить значения числителя и знаменателя для коэффициентов Эти коэффициенты - теоретические константы или калибровки, специфичные для конкретной железяки? 8 часов назад, Eddy_Em сказал: Однако, в случае, когда деление хочется заменить сдвигом Зачастую можно выбрать сдвиг на 1, 2, 3 и т.д. байтов в зависимости от требуемой точности. 8 часов назад, Eddy_Em сказал: Я просто в октаве пишу: Вот использование стороннего софта для генерации констант мне не нравится: //доступно для изменения юзеру #define KOEFF1 1.23 #define KOEFF2 3.25 //внутренние константы, рассчитываемые препроцессором #define KOEFF1_8 ((unsigned int)((KOEFF1)*256)) #define KOEFF2_16 ((unsigned long)((KOEFF2)*65536)) ... x = (x*KOEFF1_8)>>8; y = (y*KOEFF2_16)>>16; 0 Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз. Часть моих наработок. Ссылка на комментарий Поделиться на другие сайты Поделиться
Eddy_Em Опубликовано 10 ноября, 2021 Поделиться Опубликовано 10 ноября, 2021 3 minutes ago, COKPOWEHEU said: Эти коэффициенты - теоретические константы или калибровки, специфичные для конкретной железяки? Второе — калибровки по платиновому термометру, сглаженные, аппроксимированные полиномом пятой или шестой степени и в соответствии с желаемой точностью (±0.5℃ — все равно NTC лучше никогда не даст) разложенные кусочно-линейной аппроксимацией. 4 minutes ago, COKPOWEHEU said: Вот использование стороннего софта для генерации констант мне не нравится: Октава - свободный софт, так что все ОК. Не на пытхоне же [censored] писать! Но кое-что я рассчитывал и на сях, и прямо в репу вкладывал в отдельную директорию сишный файлик, который компилируется даже без Makefile'а (просто gcc file.c) и позволяет в случае необходимости нужный заголовочный файл сгенерировать. Еще, бывает, баш-скрипты вкладываю: для того, чтобы сгенерировать, допустим, заголовочный файл с макросами, позволяющими удобно шрифты описывать (в виде X___XX_X, а не менее наглядных 0b10001101). Ну или просто в комментах содержимое этих скриптов пишу: вдруг в другой раз (или кому-то еще) захочется что-то подобное сделать... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
dodik Опубликовано 26 ноября, 2021 Поделиться Опубликовано 26 ноября, 2021 (изменено) Здравствуйте ! История такая - инициализация прерываний по компаратору: ldi temp,(0<<ADEN) out ADCSRA,temp ; 0<<ADEN выключение АЦП in temp,SFIOR sbr temp,(1<<ACME) out SFIOR,temp ; 1<<ACME подключенгие инвертирующего входа AIN1 к входу АЦП ldi temp,(0<<MUX3)+(0<<MUX2)+(0<<MUX1)+(0<<MUX0)out ADMUX,temp ; AIN1 к входу АЦП (ADC0) 23 нога/(ADC1) 24 нога ldi temp,(0<<ACD)+(1<<ACBG)+(1<<ACIE)+(0<<ACIS1)+(0<<ACIS0) out ACSR,temp инициализация АЦП: ldi temp,(1<<REFS1)+(1<<REFS0)+(1<<adlar)+(1<<MUX2)+(0<<MUX1)+(0<<MUX0); Выбор ADC4(27н), выравнивание влево, ИОН=2.56 out ADMUX, temp ldi temp,(1<<ADEN)+(1<<ADSC)+(1<<ADPS1)+(1<<ADPS2) out ADCSRA,temp ; 8МГц:64=125 кГц включение и однократный запуск sbic ADCSRA,ADSC rjmp PC-1 ожидание конца преобразования in temp ,ADCH Основной вопрос - правильно ли при инициализации АЦП с однократным преобразованием - сначала переключать канал , а потом включать сам АЦП и преобразование ? Проблема в том, что АЦП хватает мусор более 4-10% от максимальной шкалы , но не всех процессорах , а на некоторых . процессор - ATmega8 Изменено 26 ноября, 2021 пользователем dodik 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alexeyslav Опубликовано 7 декабря, 2021 Поделиться Опубликовано 7 декабря, 2021 В 08.11.2021 в 13:13, Юрий_Нд сказал: Вполне приемлемая для моих расчётов ошибка в одну сотую даёт погрешность 0.3 процента. Тогда какое мне дело, что ошибка, связанная с типом переменных даёт относительную погрешность 5-6 миллионых процента. Наверное это может интересовать только тех, кто собирается решать систему уравнений из 50 неизвестных. Хотя не уверен, насколько это важно для них. Ответ на это вопрос нужно спрашивать у "чистых математиков". Я конечно извиняюсь что поднял столь древний пост, но... я делал решатель систем уравнений до 20 порядка, так вот при размере уравнения в 20 неизвестных ошибка "ответа" составляла в несколько единиц!!! Попробуете догадаться почему? Использование 192-битного числа с плавающей запятой в вычислениях снизило ошибку до сотых долей единиц... но это по прежнему чудовищно много. Проблема не в самой погрешности, а в том что ОНА НАКАПЛИВАЕТСЯ по мере вычислений. Мощность вы вычисляете произведением двух величин, погрешность здесь будет тысячные доли процента. Теперь вы просуммировали 1000 раз это произведение и... погрешность увеличилась ровно в 1000 раз! Причем она увеличится больше чем в 1000 раз, 1000 раз - это только на произведениях, а есть ещё и сумма, которая тоже даёт погрешность. Любая ваша операция с плавающим числом накапливает погрешность. И то что она изначально не очень большая нивелируется количеством операций. Float хватит чтобы умножить два числа, или сложить. Ну пусть даже 1000 раз, но на миллионе он уже даст ощутимую погрешность. И для каждой величины есть число меньше которого сумма не будет меняться. Т.е. 1.0 + 1Е-30 будет по прежнему равен 1.0 это иногда тоже выплывает неожиданно для программиста. И хоть миллион раз прибавь... 0 Учение - изучение правил. Опыт - изучение исключений. Ссылка на комментарий Поделиться на другие сайты Поделиться
_abk_ Опубликовано 7 декабря, 2021 Поделиться Опубликовано 7 декабря, 2021 1 hour ago, Alexeyslav said: Я конечно извиняюсь что поднял столь древний пост, но... я делал решатель систем уравнений до 20 порядка, так вот при размере уравнения в 20 неизвестных Загадочная фраза. Я, конечно, извиняюсь, но вы в курсе, что означает термин "порядок уравнения"? Если же речь о решении систем уравнений, то слышали ли вы о сходимости численных методов решения? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alexeyslav Опубликовано 7 декабря, 2021 Поделиться Опубликовано 7 декабря, 2021 В контексте этой темы это не важно. Да имне тогда было это не важно, нужно было решать лишь СЛАУ до 8 неизвестных, а 20 - это предел удобства ввода на одном экране, пробовал чисто только потому что можно было. И результат запомнился. 0 Учение - изучение правил. Опыт - изучение исключений. Ссылка на комментарий Поделиться на другие сайты Поделиться
Нэцкэ Опубликовано 18 декабря, 2021 Поделиться Опубликовано 18 декабря, 2021 Где в ATtiny13A находятся калибровочные ячейки генератора ? 0 У меня есть мысль , и я её думаю ... Ссылка на комментарий Поделиться на другие сайты Поделиться
_abk_ Опубликовано 18 декабря, 2021 Поделиться Опубликовано 18 декабря, 2021 $31 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alexeyslav Опубликовано 26 января, 2022 Поделиться Опубликовано 26 января, 2022 AVRDUDE 0 Учение - изучение правил. Опыт - изучение исключений. Ссылка на комментарий Поделиться на другие сайты Поделиться
sasherb Опубликовано 28 января, 2022 Поделиться Опубликовано 28 января, 2022 Здравствуйте. Собираю штуку на атмега8а. К прошивке идет такой скрин,как выставить правильно фьююзы.Такой программы нету,есть avrdude. Как правильно выставить фьюзы в ней? я попробовал выставить какие были пункты и залочил мк. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Нэцкэ Опубликовано 28 января, 2022 Поделиться Опубликовано 28 января, 2022 @sasherb вверх ногами выставил и залочил ... 0 У меня есть мысль , и я её думаю ... Ссылка на комментарий Поделиться на другие сайты Поделиться
sasherb Опубликовано 28 января, 2022 Поделиться Опубликовано 28 января, 2022 (изменено) @Нэцкэ прямые ставил Изменено 28 января, 2022 пользователем sasherb 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Нэцкэ Опубликовано 28 января, 2022 Поделиться Опубликовано 28 января, 2022 Верно указатель это SPIEN он как правило всегда включен ... 0 У меня есть мысль , и я её думаю ... Ссылка на комментарий Поделиться на другие сайты Поделиться
sasherb Опубликовано 28 января, 2022 Поделиться Опубликовано 28 января, 2022 @Нэцкэ Так как на скрине правильно? можно попробовать шить? или чего изменить? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Нэцкэ Опубликовано 28 января, 2022 Поделиться Опубликовано 28 января, 2022 не спеши ... Погоди,может более опытыне подскажут верный путь... 0 У меня есть мысль , и я её думаю ... Ссылка на комментарий Поделиться на другие сайты Поделиться
sasherb Опубликовано 28 января, 2022 Поделиться Опубликовано 28 января, 2022 @Нэцкэ там простой паяльник на т12 собираю,без кварца. может какие стандартные фьюзы подойдут. скачал эту программу для прошивки(что на скрине) и так и не смог ее подружить с программатором за $1 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Нэцкэ Опубликовано 28 января, 2022 Поделиться Опубликовано 28 января, 2022 (изменено) Лучше дай нам ссылку и мы поможем тебе , пока нажми в программе кнопочку по умолчанию и программа покажет верное положение галочек Изменено 28 января, 2022 пользователем Нэцкэ 0 У меня есть мысль , и я её думаю ... Ссылка на комментарий Поделиться на другие сайты Поделиться
sasherb Опубликовано 28 января, 2022 Поделиться Опубликовано 28 января, 2022 (изменено) @Нэцкэ ссылки нету,по умолчанию так выходит. схему приложил схема.spl7 Изменено 28 января, 2022 пользователем sasherb 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.