Jump to content

    

ToR_TDA

Свой
  • Content Count

    272
  • Joined

  • Last visited

Community Reputation

0 Обычный

About ToR_TDA

  • Rank
    Местный

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

1457 profile views
  1. Так как у меня нет отдельной информации о переполнении АЦП, я назначу обе крайние точки 32767 и -32768 как "out of range".
  2. Каюсь, не всю программу выложил. Это связано было со способом приема данных с АЦП через 2 отдельных байта MSB и LSB. int16_t current; char sign; div_t fracDigit; char Str_Buffer[20]; int8_t MSB = 0x83; uint8_t LSB = 0x00; //например -32000 current = abs (MSB << 8 | LSB); if (MSB >= 0) sign = ' '; else sign = '-'; fracDigit = div(current/10,1000); sprintf(Str_Buffer, "I= %1c%1d.%03d A", sign, fracDigit.quot, fracDigit.rem);
  3. Да я тоже только узналhttps://ru.cppreference.com/w/cpp/numeric/math/div Понял, при -32768 на выходе будет -0.000 Из того что я понял будет только одна проблемная точка это -32768.
  4. Не не не, если уж сказали то договаривайте, вот код который работает сейчас: int16_t current; char sign; div_t fracDigit; if (current >= 0) sign = ' '; else sign = '-'; fracDigit = div(current/10, 1000); sprintf(Str_Buffer, "I= %1c%1d.%03d A", sign, fracDigit.quot, fracDigit.rem); В какой момент происходит проблема? И почему я не вижу ее по показаниям?
  5. Если честно то не очень понял. Есть некоторое АЦП которое отдает мне данные так: При этом коду 0x0000 соответствует ток 0А. В какой момент происходит неправильная смена знака?
  6. Да, я проверил все в железе на всем диапазоне несколько раз. Форматирование работает корректно.
  7. Но идея то правильная Я не из тех кто выбивает от людей на форуме готовый исполняемый код, мне нужна была лишь подсказка. И теперь все работает как нужно, еще раз спасибо всем за ответы.
  8. О, огромная благодарность все так просто, я был слеп когда смотрел на форматы sprintf Спасибо! Переписал это так: int16_t current; char sign; div_t fracDigit; if (current >= 0) sign = ' '; else sign = '-'; fracDigit = div(current/10, 1000); sprintf(Str_Buffer, "I= %1c%1d.%03d A", sign, fracDigit.quot, fracDigit.rem); Именно поэтому я и написал в раздел "В помощь начинающему" на форуме. Спасибо, идея аналогична первому ответу и в данной задаче сверх-оптимизация не требуется. Возможно кому-то и проще.
  9. Здравствуйте форумчане! Такой вопрос у меня как правильно преобразовать целочисленное знаковое число в строку без преобразования во float. Имеем переменную int16_t current; Она соответствует физическому значению измеряемого тока следующим образом: 32767 = 3,2767A -32768 = -3,2768A Есть необходимость преобразовать это в форматированную строку вида: I= 3,277A I=-3,277A Использую функцию sprintf, но она хорошо работает только для положительных чисел и чисел менее -10000 (менее -1.000A) sprintf(Str_Buffer, "I= %1d.%03d A", current/10/1000, current/10%1000); При значении например -0.623A этот код отдаст строку "0.-623", а не "-0.623"
  10. Да, я конечно понимаю что стабилизированное напряжение у меня только одно и мне так и нужно, но просадка прям очень большая, то есть линия 9В превращается в 5В при 0,5А. Осциллограф синхронизировал как и до этого. У меня чувство что мой flyback в неправильном режиме работает. Смотрел при входном 296-298VDC.
  11. Здравствуйте, не стал создавать новую тему, проблема в целом та же не совсем корректно работает flyback. Напряжение держиться только по выводу 16 вольт., там стабильно 15.9. На отводе 9В и обмотке 12В напряжение быстро проседает с увеличением нагрузки. Хотя рассчетно должны держать по 0.5А каждая. Земли объеденены из-за особенностей схемы куда этот БП встраивается. Сильно смущает 2 момента, осциллограмма не стабильна (дергается) и коэффициент заполнения очень мал хотя рассчетно в районе 0.2, то есть я ожидал картинку похожую на предыдущий результат.
  12. Про 0505 согласен полностью, про 7805 частично. Но, в целом, текущая плата по прямому назначению работает нормально в обоих режимах. Единственное при подключении "жадных" потребителей у которых ток при включении может доходить до 1 А (проверял на генераторе сигналов), оказалось недостаточно выходной емкости и при допайке на выоде пары сотен мкФ все стало запускаться. Компоненты DA1 (SN6501), T1 и D2,D3 заменяют 0505, хочу попробовать на рассыпухе (есть в наличии) плюс к этому транформатор 1:1.3 поэтому появляется возможность поставить LDO. Линию 7805 дополнительно через LDO пропускать смысла не вижу, это и так работает. Возможно есть "7805" с лучшими характеристиками? По поводу переключения питания я сейчас обдумываю предложенное выше.
  13. Спасибо, помоделирую еще. Про компаратор я согласен, дело в том что в начале этой темы товарищ Plain на это вопрос ответил И я так и оставил 358. Я просто подзабыл про это:)
  14. Да, конечно. Я уже разобрался в чем бодяга. Не подумал над этим в тот момент. В этом что-то есть. То есть не париться и просто отключать DC-DC через оптрон при подключении доп. питания. А есть ли разница между 393 и 358 в режиме компаратора?
  15. Может быть и так, подумаю над этим, но операционники типа ad8619 у меня конечно жаба задушит ставить на это. Возможно, что-то как на схеме ниже. С идеей при подключении доп. питания отключать DC-DC через оптопару и тогда будет плавный переход с одного питания на другое. Сложнее на этапе потери или отключения доп. питания во время работы. Получается будет просадка нижи 4.5 потом запустится DC-DC и еще через какое-то время он снова подхватит питание. Но пожалуй, тут без вариантов если нужно отключать DC-DC. В целом идея рабочая, посмотрю можно ли экономически целесообразно это реализовать.