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

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


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

10 часов назад, Андрей Протаскин сказал:

где найти в Proteus потенциометр с тремя ножками?

Место в протеусе для поиска всех доступных компонентов одно-единственное

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

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

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

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

11 часов назад, IMXO сказал:

набрать в поиске POT-HG ?

может, лучше POT-LIN?

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

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

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

  • 2 недели спустя...

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

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

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

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

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

  • 3 недели спустя...

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

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

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

  if (Command > (S16)(0) ) {
           direction = 0 ;
           OmegaTe = Command;
         }
          else {
            direction = 1 ;
            OmegaTe = (~Command) + 1;
         }

помогите разобрать написанное. конкретно вот это: (S16)(0) и OmegaTe = (~Command) + 1;

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

4 минуты назад, Дмитрий Вас сказал:

конкретно вот это: (S16)(0) и OmegaTe = (~Command) + 1;

первое это ноль в 16-битах для сравнения переменных со знаком (это когда 0xFFFF меньше нуля и любое число вида 0b1xxx xxxx меньше нуля),

второе это взятие абсолютного значения от отрицательного числа (умножение на минус единицу)

почитайте про дополнительный код.

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

Можно сделать все! Но чем больше можно, тем больше нельзя!

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

4 минуты назад, Дмитрий Вас сказал:

помогите разобрать написанное

Интересно, кем это написано было?

4 минуты назад, Дмитрий Вас сказал:

(S16)(0)

Больше всего это похоже на явное приведение типа. S16 - это типа аналог int16_t, но зачем НОЛЬ приводить к знаковому типу - это я понять не могу.

Пока писал ответ, @ruhi опередил.

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

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Только что, ARV сказал:

в этом коде явно видно, что человек, его написавший

я бы сказал, четко понимал сам что он хотел и сделал это понятным всем остальным, а это, по моему, признак профессионализма.

Можно сделать все! Но чем больше можно, тем больше нельзя!

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

2 минуты назад, ruhi сказал:

это ноль в 16-битах для сравнения переменнйх со знаком

т.е. если (command>0) это тоже самое? зачем ноль так представлять?

5 минут назад, ruhi сказал:

второе это взятие абсолютного значения от отрицательного числа (умножение на минус единицу)

не понял вообще, можете как нибудь попроще 

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

Только что, ruhi сказал:

четко понимал сам что он хотел

Тогда поясните и мне: зачем приводить НОЛЬ к какому-то типу?

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Только что, Дмитрий Вас сказал:

т.е. если (command>0) это тоже самое?

нет, этого нельзя утверждать, поскольку тип переменной command мы не видим в данном фрагменте кода!

Можно сделать все! Но чем больше можно, тем больше нельзя!

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

Только что, ruhi сказал:

поскольку тип переменной command мы не видим в данном фрагменте кода!

Для чего нужен тип переменной, если идет сравнение с НУЛЕМ? Независимо от типа command результат очевиден! Или я чего-то не понимаю? Прошу пояснить.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Только что, ARV сказал:

Независимо от типа command результат очевиден! Или я чего-то не понимаю? Прошу пояснить.

дело в том что у меня (например) в голове куча разных диалектов и языков, и я не помню всех этих подробностей, точнее НЕ пытаюсь их запоминать, я пишу вот так как здесь - явно/железобетонно!

 

Можно сделать все! Но чем больше можно, тем больше нельзя!

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

Только что, ruhi сказал:

явно/железобетонно

Но абсолютно бессмысленно.

Только что, ruhi сказал:

точнее НЕ пытаюсь их запоминать

В Си не запоминать что-либо - это верный путь выстрелить себе в ногу... Единственное, что можно безболезненно не запоминать - это приоритеты математических и логических операторов, поскольку всегда можно расставить их скобками в нужном порядке принудительно. А вот с остальным...

В общем, в конкретном участке кода преобразование типа абсолютно лишнее. Как и черезжопное получение абсолютного значения числа (подозреваю, это результат "ручной" оптимизации).

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

3 минуты назад, ARV сказал:

Прошу пояснить.

и есть еще один аргумент так писать : автор обратил наше внимание что он НАМЕРЕННО (то есть со знанием дела) использует знаковое сравнение - это точно не случайность!

3 минуты назад, ARV сказал:

В общем, в конкретном участке кода преобразование типа абсолютно лишнее

А комментарии вам в коде не мешают? Можете рассматривать это как особый тип коментария?

Можно сделать все! Но чем больше можно, тем больше нельзя!

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

2 минуты назад, ruhi сказал:

автор обратил наше внимание что он НАМЕРЕННО (то есть со знанием дела) использует знаковое сравнение

Ноль не имеет знака, и любое число, хоть даже float, сравниваться с ним будет абсолютно одинаково!

Во всяком случае, ваши слова неубедительны пока что... Если есть какой-то нюанс - сообщите о нем, чтобы я тоже знал.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

в общем это часть кода по управлением двигателем

// управление направлением: извлечь знак и абсолютное значение
         if (Command > (S16)(0) ) {
           direction = 0 ;
           OmegaTe = Command;
         }
          else {
            direction = 1 ;
            OmegaTe = (~Command) + 1;
         }


         // ------------------------ V/f закон --------------------------
         amplitude = controlVF(OmegaTe);
         if (amplitude > MAX_AMPLITUDE) { amplitude = MAX_AMPLITUDE ; }


         // ------------ - space vector PWN algorithm -----------------
         SVPWM(amplitude, OmegaTe) ;

         // -------- load the PSCs with the new duty cycles -----------
         if (direction==0)
         {
            PSC_Load (PWM0, PWM0+DeadTime, PWM1, PWM1+DeadTime, PWM2, PWM2+DeadTime);
         }
         else
         {
            PSC_Load (PWM0, PWM0+DeadTime, PWM2, PWM2+DeadTime, PWM1, PWM1+DeadTime);
         }

ну допустим можно понимать (Command > (S16)(0) ) как command>0 , это по простому.

OmegaTe = (~Command) + 1; но как понять это 

а вот эта часть вообще теряет смысл

  if (direction==0)
         {
            PSC_Load (PWM0, PWM0+DeadTime, PWM1, PWM1+DeadTime, PWM2, PWM2+DeadTime);
         }
         else
         {
            PSC_Load (PWM0, PWM0+DeadTime, PWM2, PWM2+DeadTime, PWM1, PWM1+DeadTime);
         }

 

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

Только что, Дмитрий Вас сказал:

OmegaTe = (~Command) + 1; но как понять это 

Да это как раз понять просто... Внутри этого if-а реализовано то, что могло бы быть записано вне этого if-а:

OmegaTe = abs(commands);

abs - это взятие модуля числа.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Только что, ARV сказал:

Ноль не имеет знака, и любое число, хоть даже float

так вы это... что ж как в детском саде то - флоат это не число это тип переменной, разница есть между числом и переменной???

Можно сделать все! Но чем больше можно, тем больше нельзя!

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

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

а вот эта часть вообще теряет смысл

почему теряет?

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Только что, ARV сказал:

почему теряет?

потому как если (direction==0) вносим значения шим, а иначе вносим ТЕЖЕ значения шим

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

Только что, ruhi сказал:

что ж как в детском саде то

Меж нами какое-то недопонимание... Я не вижу разницы ни в логике, ни в математике, ни в алгоритме:

if(var > 0) ...
  
if(var > (int)(0)) ...
  
if(var > (float)(0)) ...
 

Вы видите? Расскажите о разнице.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Только что, ARV сказал:

abs - это взятие модуля числа.

вот ведь как просто оказывается, только вот библиотеку надо к проэкту подключить. 

Вот мне интересно как вы будете объяснять как подключить библиотеку человеку который с дополнительным кодом не знаком!

Можно сделать все! Но чем больше можно, тем больше нельзя!

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

Только что, Дмитрий Вас сказал:

а иначе вносим ТЕЖЕ значения шим

Невнимательны вы: обратите внимание на порядок параметров в функции.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

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

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

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

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

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

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

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

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

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

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

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