Перейти к содержанию

Вопросы от начинающих по МК


Рекомендуемые сообщения

  • Ответов 8,9т
  • Создана
  • Последний ответ

Топ авторов темы

@Дмитрий Вас , может скажу грубо, но всё-таки. Почитайте книжки по языку. Переменные и их типы - это краеугольный камень любого языка программирования. Начальные азы.

Как можно начать пользоваться инструментом, не изучив его ? Хотя бы по-диагонали ...

 

PS: Неделю бороться с одной и той же элементарной проблемой, вместо того, чтобы за минуту загуглить, сесть и часик-два почитать ...

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

4 hours ago, Alex said:

... за минуту загуглить, сесть и часик-два почитать ...

Вы не понимаете :D, весь смысл в другом:

9 hours ago, Дмитрий Вас said:

интересен процесс

 

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

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

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

1 час назад, Дмитрий Вас сказал:

Перечитал по переменным. Ничего нового не узнал...

Переменная INT - целочисленная. Поэтому в общем случае, при её делении используются правила целочисленного деления: 2/3 = 0,  4/3=1, 7/3 = 2. Остаток от деления - отбрасывается. Поэтому:

6/3 == 7/3 == 8/3 .

 

Язык Си и иже с ним здесь не сильно прям причем. Читать нужно про системв исчисления. 

ЗЫ. Один из простых и дешевых способов не терять точность - сэмулировать двоично- десятичную систему исчисления. Это когда десятичный разряд записывается двумя байтами. Но переход от двоичных разрядов того же ацп, все равно не гладок и пушист, и как один из способов повышения гладкости - использование правильно опорного напряжения - ну типа 1 в, 2.56, 5.12 ну и тд... в том же вольтметре при опорном 5.12: тогда ...×512/1024 = ... /2, что можно сделать простым "сдвигом вправо".

 

Ссылка на комментарий
Поделиться на другие сайты

Я в курсе что целочисленная отбрасывает остаток. Но...

ADC= 330*1023/500= 675,18 округляем до целочисленного 675. Теперь идём от обратного.

Vin = 675*500/1023= 329,9 округляется до целочисленного 330. По любому 3,3 вольта должно выдать.

Видимо я не до конца понимаю как работают эти переменные.

Ссылка на комментарий
Поделиться на другие сайты

для повышения точности целочисленных расчетов программисты пользуются методом повышения разрядности.

7/8 будет вычислено гораздо грубее нежели ((7*1024)/8)/1024 (записано примитивно, лучше применять сдвиг). По скорости очень мало уступает целочисленным операциям и очень сильно выигрывает у вычислений с плавающей точкой

я думаю смысл понятен

такой же механизм используется для чисел ограниченной разрядности после запятой. Например числа с двумя разрядами точности приводятся к целочисленному виду.

3.31 = 331/100 при использовании их в выражениях. 3.31/2 = (331/2) При выводе на экран просто выводится число 331 и ставится виртуальная точка в двух разрядах с конца

 

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

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

@dasZebraвсе равно мои вычисления так не проходят. В моем случае я получаю результат 400. 

@mail_robotЯ вывожу поразрядно с виртуальной точкой. Я получаю 500 и вывожу на экран 50,0 чтобы предел был 50 вольт. Я должен получить число 330 вывести на экран 33,0 при 3,3 вольтах на входе. Такая задумка. Но получаю 400. И не укладывается в голове в каком месте идёт округление.

Ссылка на комментарий
Поделиться на другие сайты

ну значит придется внимательно смотреть код. А лучше пошаговая отладка с контролем значения на каждом шаге. У меня тоже были такие случаи неочевидных глюков, особенно с волатильными переменными на заре программирования. Потом как то пришло потихоньку, ошибок почти не стало

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Отладка, и только отладка Вам поможет !
На крайняк - тест этой функции, по нескольким входным параметрам. Может, вообще, в неё уже передаётся что-то не то.

Ссылка на комментарий
Поделиться на другие сайты

22 часа назад, Дмитрий Вас сказал:

@Влад Иванович что не так то опять? unsigned long int value

unsigned int volt - 2 байта ! 500*255 не вмещается.

Я делаю так: 5в=500мВ; АЦП 10-ти 1024, правое выравнивание

v*500/1024=v*250/512 т.е. делю на 2 без потери точности. Теперь все влазит в 2 байта.

При использовании АЦП нужно учитывать частоту для выдержки временных интервалов.

Ссылка на комментарий
Поделиться на другие сайты

32 минуты назад, Влад Иванович сказал:

v*500/1024=v*250/512

гениально. просто и гениально.

 

1 час назад, Влад Иванович сказал:

При использовании АЦП нужно учитывать частоту для выдержки временных интервалов.

частота 62кгц, получается по расчетам или вы имеете ввиду среднее высчитать?

Ссылка на комментарий
Поделиться на другие сайты

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

2022-03-02_20-23-51.png

Ссылка на комментарий
Поделиться на другие сайты

Сейчас времени совсем не хватает. Попробовал сдвиг: ADC*500>>10;

При 5в получил 499, это меня устраивает. Но при 3,3в так же 400. Так это уже без деления! Остатков нет! Чтобы округлять. Отладка всего не доступна на моем камне. Пробовать только кусок кода на другом камне смысла не вижу. Попробую другой канал АЦП и сделать через другую переменную которую изначально приравнять к нулю.

u_int a=0;

a=ADC;

a*500>>10;

 

 

Ссылка на комментарий
Поделиться на другие сайты

Господа, посоветуйте, пожалуйста, что почитать на тему радиопротоколов. Хочу сделать обмен между устройствами через приёмники/передатчики на 433 МГц, которые только в on-off-keying умеют. 

Так же хочу нарулить шифрование, чтобы нельзя было просто распарсить/повторить посылку, но чтобы устройства могли прочитать посылку даже если потерялось несколько пакетов (типа наперёд рассчитывать как-то что ли). 

То есть основная идея - защищённый обмен данными по радио с помощью on off keying. Хочу понять принципы и лучшие практики. Ну и закодить самостоятельно. 

Ссылка на комментарий
Поделиться на другие сайты

@Дмитрий Вас , Вы не слышете, что Вам говорят. Или не хотите слушать.
Протестируйте свою функцию по нескольким входным параметрам. Дел на 5 минут. И всё станет понятно.

Ссылка на комментарий
Поделиться на другие сайты

Выведите сырое значение АЦП и рядом посчитанное и проверьте где именно ошибка.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

@COKPOWEHEU хорошая идея. ацп выдал при 3,3в 830 а должен был 676. выходит что и те 5в он показывал скорей просто что больше не мог. спасибо есть о чем думать

Ссылка на комментарий
Поделиться на другие сайты

теперь такой вопрос. измерение тока хочу сделать с помощью усилителя в микроконтроллере. не понятен алгоритм работы, в дш не нашел описания. все что я понял так это: обнулем канал, задаем канал, запускаем преобразование, получаем результат, и последовательно выполняется преобразование по каналам. 

//вычисляем значение напряжения
unsigned int voltage_dimension(unsigned char channel)
{
	static unsigned long int value;
	Start_conv_channel(channel);
	while((ADCSRA & (1<<ADSC)));// ждем окончание преобразования АЦП
	value = ADC;
	volt = value*500>>10;
	return volt;
}
//вычисляем значение тока
unsigned int current_dimension (unsigned char channel)
{
	static unsigned long int value;
	Start_amplified_conv_channel(channel);
	while((ADCSRB & (1<<ADSC)));// ждем окончание преобразования АЦП
	value = ADC;
	amper = value*100>>10;	
	return amper;
}

#define Start_amplified_conv()                (ADCSRB |= (1<<ADSC) )//стр 253 дш (- By setting the ADSC (ADC Start conversion) bit in the ADCSRB register on AT90PWM2B/3B.)

#define Start_amplified_conv_channel(channel) (Select_adc_channel(channel), Start_amplified_conv() )

может нужно каждый раз останавливать измерение?

#define Stop_amplified_conv()                 (ADCSRB &= ~(1<<ADSC) )

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...