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

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


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

Реклама: ООО ТД Промэлектроника, ИНН: 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 пользователей онлайн

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

  • Сообщения

    • Да ну нафиг! Это как "раз поехали на рыбалку, а водку забыли...."
    • Похоже вас угораздило на латералы попасть. Они сами себя стабилизируют и никакой дополнительной стабилизации им не нужно. У меня двухкиловаттные Крафты так на металлических Эксиконах работают даже без "эмиттерных" резисторов. Тупо впараллель.
    • @korsaj Попробовал записать код в разных вариантах предложенных тобой. Первый вариант вообще отказался работать. Заработал второй вариант на приём. Теперь уже хотя бы есть полноценный приём. char i = 0; if (rx_buf[i] == 'M'){ i++; if (rx_buf[i] == '1') { //unsigned int n = getDecFromHexStr(rx_buf, i+2); //Выводим на экран номер текущего трека LED_1_ON(); LED_2_OFF(); send_UART('M'); send_UART('1'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); flags = 0; } else if (rx_buf[i] == '2') { //unsigned int n = getDecFromHexStr(rx_buf, i+2); //Выводим на экран количество треков LED_1_OFF(); LED_2_ON(); send_UART('M'); send_UART('2'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); flags = 0; } else if (rx_buf[i] == 'T') { //unsigned int n = getDecFromHexStr(rx_buf, i+2); //Выводим на экран общее время трека LED_1_ON(); LED_2_ON(); send_UART('M'); send_UART('T'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); flags = 0; } else if (rx_buf[i] == 'K') { //unsigned int n = getDecFromHexStr(rx_buf, i+2); //Выводим на экран текущее время трека LED_1_OFF(); LED_2_OFF(); send_UART('M'); send_UART('K'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); flags = 0; } } Но однако есть ещё некоторые вещи которые нужно подкорректировать. Пока я просто разбираю UART поэтому на терминал вывожу так сказать ответ ну и просто видеть потому как индикатора к микре не подключено пока что. Однако такой вариант с ответкой нужен будет мне и для другого проекта где UART лучше всего подойдёт. Это я уже смотрю на будущее. Но тут тоже когда приходит комманда по  UART микроконтроллер отправляет ответ, но он начинает постоянно спамится. Нужно как то сделать чтоб этого не происходило. Я же в свою очередь пробовать сбросить flags = 0;, но это никак не помогло. Может чего подскажешь тут понятно что нужно как то будет обнулить данные чтобы выйти из этого условия программы. Есть вот такая проблемка. И ещё есть одна проблема с строкой  unsigned int n = getDecFromHexStr(rx_buf, i+2); Не спроста я её отключил в коде с помощью комментария. А тут проблема в том что студия не может опзнать этот код. Возможно нужно что подключить из встроенных библиотек самой студии.
    • Зачем закладываться на максимальный ток стабилитрона? Поставьте по два двухкилоомных последовательно или возможно 3-5 килоома что то есть.
    • Здравствуйте. В эту магнитолу захотелось установить модуль блютуз. Вроде бы проблем нет, да? Привод CD выкинут как рудимент,- на нём драйвер сгорел (не хорошие инженеры, на огромной линейке моделей подложили бяку-серво двигатель и на нём платка переходник для распайки на плату обработки, только вот двигатель болтается в пластике посадочном убивая пайку делая плохое самочувствие драйверу-привода-лазера))). Вот. Проблемы начинаются следующие. Тюнер имеет мозги аудиопроцессору по цифре,-отпадает. Разъёма чейнджера нет но есть вся разводка без обвязки,-восстановление мелочи (стаб-рез) и эмуляция подключенного чейнджера не помогает, странно Kasuga Radio Co. Ltd. (это ирония про 1946 год) сэкономила на программном обеспечении . Ага. Подключится на вход УМЗЧ-пошло и глупо. Вопрос. Есть варианты подключить? kenwood_kdc-4590.pdf
    • А здесь всё о том как и чем делать ...
    • "Приходит мужик в магазин одежды, чтоб подобрать себе шляпу. Надевает первую попавшуюся, а она ему - как раз." А вообще не понятно. Он ему дает говорить, даже матюкаться, а анекдот не дает рассказать. Почему? (сори, если вопрос тупой, я просто не в теме радиосвязи и радиохулиганства)
  • Похожий контент

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