Прямой эфир

0
Потому что в цепи IN диод, конденсатор на 220мкФ и всего 100-143кОм резисторов — по нему течет втрое больше тока, который через защитные диоды попадает на шину питание и питает схему. Либо ты неправильно собрал питальник (не по приведенной схеме), исправив его.
  • avatar
  • Vga
  • 01 декабря 2019, 15:34
0
Тогда почему же всетаки работает? Это что чудо? Парадокс? Или нарушение законов физики?
0
Просимулируем оригинальную схему:

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

И вот теперь оно работает нормально, и обрати внимание — на втрое большую нагрузку.
  • avatar
  • Vga
  • 01 декабря 2019, 15:04
0
Мало ли что для чего предназначено. Откуда сможет, оттуда и будет кушать. Конденсаторный питальник в указанной на схеме конфигурации работать не должен. Если через него какой-то ток и течет, то только за счет утечки диода VD1 и разрядного резистора R1.
  • avatar
  • Vga
  • 01 декабря 2019, 14:27
0
Вход IN предназначен для запуска устройства, а не для питания схемы.
При подаче питания (фазного напряжения) на вход IN запуск устройств происходит после того как конденсатор зарядится до уровня лог. еденицы.
0
То, что она запускается меня и удивляет. Не должно!
Правда, еще оно может паразитно питаться от цепи IN, но это несколько не то, как оно должно работать.
  • avatar
  • Vga
  • 30 ноября 2019, 22:47
0
Вроде все верно, было б что не так, схема бы не запустилась вовсе. Это в лучшем случае.
0
У второй схемы в цепи питания косяк — нет обратного диода для кондера. VD1 нужно перенести в разрыв между катодом стабилитрона и питанием схемы (а R4 воткнуть между конденсатором и стабилитроном). Тогда вероятно и емкость конденсатора увеличивать не придется. Кроме того, вместо того, чтобы просто выкидывать DD1.2 — я бы его воткнул в параллель с 1.3 и 1.4.
  • avatar
  • Vga
  • 30 ноября 2019, 15:47
0
VeeCad стал опенсорсным и бесплатным
0
Взял бы и приложил к статье. Заодно линк пофиксил.
  • avatar
  • Vga
  • 25 ноября 2019, 17:28
0
Спасибо большое!
0
Видел я эту шпаргалку, но на мои вопросы она не ответила. Пришлось ковырять какие-то сырки, более полные.
  • avatar
  • Vga
  • 13 ноября 2019, 14:54
0
Положил сюда
0
ссилка на библиотеку умерла, скиньте пожалуйста библиотеку
0
Другим могло бы быть описание формата MP4, если бы оно, гм, было.
Не-не-не, я пока не ошалел форматы ISO описывать. Могу подсказать неплохую шпаргалку от Simarron Systems.
  • avatar
  • anakost
  • 12 ноября 2019, 19:19
0
А, статье уже есть такое, и несколько правильней написанное.
  • avatar
  • Vga
  • 12 ноября 2019, 06:42
0
function SwapEndian64(Value: Int64): Int64; register;
asm
  mov eax, [ebp+$0c]
  mov edx, [ebp+$08]
  bswap eax
  bswap edx
end;
  • avatar
  • Vga
  • 12 ноября 2019, 06:35
0
Интересно, что там нагенерилось в ассемблере.
Ухх, какая жесть. Чего стоит одно копирование данных из стека в EDX:EAX и затем
XOR EAX, EAX ; и зачем было грузить?
MOV EAX, EDX ; и зачем было очищать?
XOR EDX, EDX
  • avatar
  • Vga
  • 12 ноября 2019, 05:57
0
При 32-битном аргументе это бесполезно.
Это сокращает исходный код, выкидывая из него лишнюю семантическую единицу. При таком влиянии оптимальности свопа как в этом случае такое изменение оправдано даже если оно замедляет код.
Время исполнения 12.765 ms. Но т.к. функции изменения эндианности узким местом не являются и их убыстрение сравнимо со статистической погрешностью, не думаю что стоит этим заниматься.
Хотя они не являются узким местом кода, они являются единственным интересным местом статьи. Другим могло бы быть описание формата MP4, если бы оно, гм, было.
  • avatar
  • Vga
  • 12 ноября 2019, 05:32
0
И я бы выкинул Result := Value, написав в следующей строке Result := ((Value and $FF00) shr 8) or ((Value and $00FF) shl 8). Выхлоп врядли изменится, но зачем захламлять код лишними операциями?
При 32-битном аргументе это бесполезно. У функции не указан спецификатор передачи параметров, значит это register. При этом спецификаторе 32-битный аргумент передается в EAX, и 32-битный результат читается из EAX. Поэтому в функции
function Func(Value: DWord): DWord;
begin
Result := Value;
end;
при записи на ассемблере не нужно ни строчки кода. Другое дело если аргумент 64-битный, т.е. превышает разрядность компилятора. При этом в EAX будет не сам аргумент, а ссылка на него. Это наводит на мысль что функцию SwapEndian64 нужно записать по другому:
function SwapEndian64e(Value: Int64): Int64;
begin
Result := ((Value and $FFFFFFFF00000000) shr 32) or ((Value and $00000000FFFFFFFF) shl 32);
Result := ((Result and $FFFF0000FFFF0000) shr 16) or ((Result and $0000FFFF0000FFFF) shl 16);
Result := ((Result and $FF00FF00FF00FF00) shr 8) or ((Result and $00FF00FF00FF00FF) shl 8);
end;
Время исполнения действительно уменьшается и функция начинает обгонять метод прямого обмена байтами — 24.685 ms. Но все-же довольно медленно, наверное 64-битный аргумент обрабатывается по половине 32-битным компилятором. Посмотрев ассемблерный листинг это ясно видно.
Эффективнее сделать это самому, обработать 32-битные половинки отдельно и обменять. Дополнил статью.
Еще чуть выиграть можно, подставив свопы прямо в тело функции, а не вызывая Swap32.
Если-бы функции изменения эндианности были узким местом в алгоритме, можно было-бы пойти дальше и убрать вызовы функций, разместив их непосредственно в коде.
function SwapEndian64e(Value: Int64): Int64;
type
  Long64Rec = packed record
    case Integer of
      0: (Lo, Hi: DWord);
      1: (Bytes: array [0..7] of Byte);
  end;
var
  InBuff: Long64Rec absolute Value;
  OutBuff: Long64Rec absolute Result;
begin
  OutBuff.Lo := ((InBuff.Hi and $FFFF0000) shr 16) or ((InBuff.Hi and $0000FFFF) shl 16);
  OutBuff.Lo := ((OutBuff.Lo and $FF00FF00) shr 8) or ((OutBuff.Lo and $00FF00FF) shl 8);
  OutBuff.Hi := ((InBuff.Lo and $FFFF0000) shr 16) or ((InBuff.Lo and $0000FFFF) shl 16);
  OutBuff.Hi := ((OutBuff.Hi and $FF00FF00) shr 8) or ((OutBuff.Hi and $00FF00FF) shl 8);
end;

Время исполнения 12.765 ms. Но т.к. функции изменения эндианности узким местом не являются и их убыстрение сравнимо со статистической погрешностью, не думаю что стоит этим заниматься.
  • avatar
  • anakost
  • 11 ноября 2019, 18:59