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

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


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

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

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

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

2 hours ago, Юрий_Нд said:

у них есть проверенный прием

Желаю, чтобы этот прием был и вас. Книжку надо читать, прежде чем бежать на форум с глупым вопросом, а потом упорно демонстрировать свои безграмотность, "остроумие" и нежелание учиться. 

Лентяям напомню, что выражение (1<<0) - это бинарная операция, результат которой равен числу, полученному в результате сдвига первого операнда (число 1) влево на количество битов, равное второму операнду (0). Оба операнда должны быть целыми числами. Например, (254<<122) или (b10011101<<b10000111).  Из этого следует, что число "1" взялось не из воздуха или божественного промысла, оно в явном виде прописано в выражении в скобке.

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

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

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

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

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

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

2 часа назад, LiVit сказал:

Компилятор, дорогой гражданин, немного умнее вас будет. И размерность данных будет подогнана под контекст.

Меня часто спрашивают, почему мы просрали космос, электронику и прочее машиностроение.  Я честно отвечаю, что виноват лично  я и то, что у нас появился  интернет. Теперь всем умным людям некогда работать, потому что они очень заняты, обучаяя в интернете меня неразумного. Да, вот так и живем.

Вопрос к  @LiVit, а как Ваш умный компилятор "подгонит под контест", если объявить Ваши переменные каким нибудь  float или double? 

 

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

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

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

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

1 час назад, dasZebra сказал:

а как Ваш умный компилятор "подгонит под контест", если объявить Ваши переменные каким нибудь  float или double? 

никак, он пошлет вас в эротическое путешествие в поисках целочисленного типа.

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

1 час назад, dasZebra сказал:

Вопрос к  @LiVit, а как Ваш умный компилятор "подгонит под контест", если объявить Ваши переменные каким нибудь  float или double? 

Зёбра, зачем вы просрали космос? Да и всё остальное тоже? Нехорошо...

Вы лично, что хотите тут доказать? Напомню, разговор шел про целые числа, которые в микроконтроллерах представляются байтами, 16 и 32 битными словами. Float штука синтетическая. При помощи 32 бит пытаются изобразить не целые числа. И "умный" компилятор воспринимает выражение float a = (1<<0); как единицу в представлении float. Удивительно, правда?  Это называется неявное приведение типа. Почитайте на досуге.

А вот сделать a = a<<1; в данном случае не получится. Потому что это логическая, побитовая операция. Можно вот так: a = (float)((uint32_t)a<<1); Число сначала приведется к целочисленному типу uint32_t (при этом, дробная часть будет отброшена), потом сдвинется на 1 бит, а затем опять приведется к типу float.

Надеюсь, вам теперь стало немного понятнее? И теперь можно не беспокоиться за космос и прочее?

Замечу, что число 1 в float представлено в виде 0x3F800000. И до него конечно же можно добраться средствами Си, хотя он изо всех сил сопротивляется.
Например:
    float a = 1;
    uint32_t *b;
    b = (uint32_t*)&a;
    //теперь b указывает на число 0x3F800000

Если сделать так: *b = *b<<1; то a после этого будет содержать чУдную цифру 1.70141183e+038

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

30 минут назад, IMXO сказал:

никак, он пошлет вас в эротическое путешествие в поисках целочисленного типа.

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

Однако присвоить ему занчение (x<<y) нельзя. Это ли  не докозательство того что  (x<<y)  вобщем то не совсем  число?

 

@LiVit напомню что разговор о том что 

6 часов назад, dasZebra сказал:

(1<<0) конечно все же отличается от 0b00000001. (1<<0) это 1 и все. А например (1<<1) это не 0b00000010 а всего лишь 10. 

а не о том, о чем Вам там где то что то подумалось.

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

29 минут назад, dasZebra сказал:

Однако присвоить ему занчение (x<<y) нельзя. Это ли  не докозательство того что  (x<<y)  вобщем то не совсем  число?

    float a = 0x00;
    uint8_t x = 1;
    uint8_t y = 2;

    a = (x<<y);

Компилятор не ругается, программа выполняется, результат: a равно 4.
Что я делаю не так?

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

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

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

Компилятор не ругается, программа выполняется, результат: a равно 4.
Что я делаю не так?

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

15 минут назад, LiVit сказал:

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

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

Но тупизмов успел понаглядеться.

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

1 час назад, dasZebra сказал:

то ли  не докозательство того что  (x<<y)  вобщем то не совсем  число?

ага, а "СЛАВА КПСС" - вообще не человек.

Мудрость приходит вместе с импотенцией...

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

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

7 hours ago, dasZebra said:

(x<<y)  вобщем то не совсем  число

Самое что ни на есть число :D 

Хватит уже троллить, тема-то для начинающих. А Юрий_Нд вообще вон испугался и пропал :lol2:

10 hours ago, _abk_ said:

выражение (1<<0) - это бинарная операция, результат которой равен числу, полученному в результате сдвига первого операнда (число 1) влево на количество битов, равное второму операнду (0).

 

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

3 часа назад, dasZebra сказал:

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

Однако присвоить ему занчение (x<<y) нельзя. Это ли  не докозательство того что  (x<<y)  вобщем то не совсем  число?

их вообще нет , потомущта значение (x<<y) есть целочисленная константа , и естественно здесь под Х и У подразумеваются целые числа в десятичном формате. а не ваши фантазии о флоат.
при этом Х и У по дефолту имеют размерность uint16
 

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

20 минут назад, _abk_ сказал:

А Юрий_Нд вообще вон испугался и пропал

Он не испугался и не пропал. Он затроллил всех, а теперь сидит и смотрит на результат со стороны, ехидно ухмыляясь :lol:

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

Во-первых хочу обратиться ко всем участникам этого форума:
1. Извиняюсь, был неправ, заблуждался.
Теперь я знаю почему (1<<0) = 0b0000 0001. И теперь я в это не просто верю, как делал это раньше, а точно знаю это и могу объяснить/пояснить любому желающему.
2. Интернетом не пользовался, книжки умные по этому вопросe не читал, просто взял листочек с карандашиком и написал:
(1<<6)=(16<<2)=(4<<4)=64 
верно?
3. LiVit, как Вы думаете Керниган и Ричи могут мне сказать что-либо новое и неизвестное именно по этому вопросу?
4. LiVit, я прекрасно понимаю, знаю что вы мне хотите сказать. Я же в ответ на Ваши аргументы хочу сказать, что у меня сейчас одна цель. Это написать рабочий д****** код, который будет считать Ампер*часы и Ватт*часы. Желательно так, чтобы в моей программе не было непонятных мне мест. Я думаю, что с сегодняшнего дня таких мест нет вообще.
5. LiVit,  простите я не помню, кто-то стёр все мои, и не только мои сообщения за последние полтора месяца, это Вы обещали мне посмотреть мой код?
6. LiVit, а в чём заключается моя агрессия? Я кого-то обидел, обозвал? Меня называли дураком, это правда, это было. И не только дураком.

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

15 часов назад, dasZebra сказал:

это не 0b00000010 а всего лишь 10.

 

9 часов назад, dasZebra сказал:

(x<<y)  вобщем то не совсем  число

Ну вот человек тоже искренне заблуждается (я вот например хоть что-то понял, а человек похоже так ничего и не понял), он что, тоже т-р-о-л-ь?
А может в конце концов уже нужно посмотреть на название темы?

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

Блин, а я думал, что человек тут пишет ради "пофилософствовать". Ан нет, он действительно не врубается ... :huh:

 

20 минут назад, Юрий_Нд сказал:

(1<<6)=(16<<2)=(4<<4)=64 
верно?

Вот зачем Вы этой кашей забиваете себе голову ? Зачем эти (на взгляд, совсем нелогичные) преобразования ?
Если Вам нужно узнать результат выражения "1<<6", то просто нарисуйте битики, в которых в 0-вом разряде будет "1", все остальные - "0". И двигайте всю эту "картину" влево 6 раз. Всё, результат получен.
Ну, или, просто запомните. Это выражение будет равняться числу, с единичкой в 6-ом бите.

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

15 минут назад, Alex сказал:

нелогичные) преобразования

А причём тут логика?
Я просто хочу сказать, что всё это числа. И смотреть на это всё нужно, как на числа.
Я просто попытался записать эти числа в различной форме представления.
Вот и всё.

18 минут назад, Alex сказал:

Ну, или, просто запомните.

Ещё раз попытаюсь пояснить.
Это ещё вчера я принимал всё это на веру, а сегодня ёлки-палки, прозрел. Можете считать, что видение у меня было.
Теперь у меня есть всему этому хозяйству логическое пояснение. 
И я просто попытался показать чудеса этой логики.
Только и всего.

А ещё, согласно этой логике, можно записать:
PORTD |= (1<<6);
можно:
PORTD |= (4<<4);
а можно и 
PORTD |= 64;

... и все это будут "однохренственные " операции.

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

35 минут назад, Alex сказал:

Если Вам нужно узнать результат выражения "1<<6", то просто нарисуйте битики, в которых в 0-вом разряде будет "1", все остальные - "0". И двигайте всю эту "картину" влево 6 раз. Всё, результат получен.
Ну, или, просто запомните. Это выражение будет равняться числу, с единичкой в 6-ом бите.

это да, вопросов нет, так и будет. вопрос в том какое значение будет когда

unsigned long int a=(1<<18);

B)
 

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

2 часа назад, _abk_ сказал:

Юрий_Нд вообще вон испугался

... "не-а", он не из пугливых.

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

какое значение будет когда


unsigned long int a=(1<<18);

... да хоть unsigned long int a=(1<<32);

а вот unsigned long int a=(1<<33);

это уже "фигвам называется"

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

13 минут назад, IMXO сказал:

протез у тебя есть

Proteus 8.9 у меня есть, а вот цифрового осциллоскопа нет. Может подскажешь где его раздобыть?
Или это нужно только версию "поновей ставить"?

... знаешь какую?

1 - Обменник - 45.png

... если-что, вот такой хочу.

1 - Обменник - 46.png

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

29 минут назад, Юрий_Нд сказал:

Может подскажешь где его раздобыть?

на казусе в ЧаВо по протезу :D http://kazus.ru/forums/showpost.php?p=130721&postcount=20
http://kazus.ru/forums/showthread.php?t=13198&page=2#

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

Кстати, по поводу Proteus.
Тут неделю назад была моя тема по поводу некорректной работы прерывания по таймеру Т1 на совпадение.
С таблицами и "всеми делами".
Так вот хочу сказать, что по измерениям в Proteus у меня время между прерываниями чётко одна секунда.
Это я по поводу моего г****кода.

1 - Обменник - 48.png

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

6 минут назад, Юрий_Нд сказал:

Это я по поводу моего г****кода.

я правильно понял, ты целый таймер убил на получение тика в 1секунду,
а в майне вгоняешь МК в ступор делаями  по 200мс,
я ничего не упустил? Вот такой :i-m_so_happy:код...

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

2 часа назад, Юрий_Нд сказал:

.. да хоть unsigned long int a=(1<<32);

а вот unsigned long int a=(1<<33);

это уже "фигвам называется"

(1<<32) будет тот же самый фигвам, как и (1<<33).

Мудрость приходит вместе с импотенцией...

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

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • Уважаемые товарищи, нужны схемы, либо НТД для ремонтов блоков очень срочно!!!! Всё кроме реле Р10ТМУ, уже нашёл не вашем форуме и их отремонтировали....любая помощь приветствуется
    • Все предложенные к рассмотрению источники питания работают примерно по одному принципу: сетевое напряжение выпрямляется, фильтруется (получаем чуть больше 300 вольт постоянного), затем преобразуется снова в переменное, но уже на частотах в несколько десятков килогерц, понижается на трансформаторе и снова выпрямляется. За счёт высокой частоты преобразования используется трансформатор на ферритовом, а не на стальном, сердечнике, гораздо меньших габаритов и стоимости. Минусы: значительное усложнение схемы блока и вероятность возникновения различных помех от него. Модули управления (кроме первого) также являются импульными преобразователями, с теми же достоинствами и недостатками. Если нужно по быстрому собрать некое подобие ЛБП, то уж лучше брать модуль вроде этого. Ну и блок питания к нему соответствующий. Но не очень понятно, какой практический опыт можно получить от соединения готовых модулей парой проводов.  
    • У меня больше всего вопросов вызвала необычная схема обеспечения отрицательного питания. Автор этой обстоятельной заметки пишет: For this supply to work correctly, the transformer must have a secondary voltage of at least 18V RMS.  Почему? Что будет не так с отрицательным питанием, если напряжение на трансформаторе будет меньше 18В?   https://tinyurl.com/23mlwxtt - я в простейшей эмуляции ставлю 12В пикового напряжения для трансформатора и на стабилитроне все как положено: -5.6В.
    • Согласен, очень криво объяснил. Это работа трёх вольтовой линии, просто на диод шотки сдвоенный, на один анод приходит сигнал напрямую с трансформатора, а на второй через дроссель. Вольт/деление 5 вольт в клетке, тайминг по моему 10 МС. Третья фотография это сигнал на катодах уровень земли ровно по центру экрана. Но все линии по итогу в порядке 3.3 в, 5, в, 12 в и -12 в. Нагрузить все линии не могу сразу ,так как тут же выгорают транзисторы (имеется нагрузка 250 ватт по 10 ампер на каждую линию за исключением-12в), поэтому нагружаю 3.3 вольтовую линию на 10 ампер,  подключаю переменный резистор 50 ватт на 15 ом на 5 вольтовую линию и постепенно довожу до той той картины с перекосом (это гдето  50 ватт общее). По поводу микросхемы, вверху имеется скрин где между импульсами проскакивает мини импульс, если так можно сказать, он проскакивает и на одной  и на второй ноге (7,8). Микросхема не tl 494, а lw4933/abx942.1/c9421646. Далее они приходят на базы транзисторов 945g  коллекторы этих транзисторов соединены с  выводами трансформатора. Просто схема типовая, легче мне кажется просто привести фото самого блока, для тех кто разбирается будет гораздо информативне.  Диод шотки по 12 вольтовой линии был подгоревший, заменил на донора. Приводить скрины не буду что бы не захламлять тему. В итоге, пока все так же, при достижении определенной нагрузки суммарно где-то 50 ватт, появляется этот "выброс и перекос". По этому имеются мысли на два варианта, это микросхема , этот мини импульс между периодами, на низкой нагрузке особо не влияет, но при достижении определенной приводит с самовозбуждению входной цепи и непроизвольному открытию транзистора нижнего плеча. Либо дело в "горячей части", плавающий дефект в обвязке силовых ключей.  Спасибо за ответ.
    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
  • Похожий контент

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