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

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


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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

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

 

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

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

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

4 hours ago, Alex said:

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

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

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

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

 

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

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 пользователей онлайн

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

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