Заблокировать исполнение основного потока через Atomics.wait, чтобы подождать выполнения асинхронной функции и тем самым превратить её в синхронную, потому что wasm про асинхронный яваскрипт ничего не знает и для вызова асинхронных функций из wasm нужны вот такие замечательные костыли :)
при низком заполнении, например на 1/256, ничем не будет отличаться от pwm, 1 такт из 256 будет включен, но вот около середины шкалы pwm будет включаться 127/127, а сигма-дельта 1/1, на в 127 раз большей частоте. так что мерцания в среднем будет меньше.
На пол шкалы одноплярные напряжения сдвинуть забыли, отсюда и 1.65В. вместо 0.
А разница с pwm в частоте, которая у сигма-дельта модуляции в этом случае будет в 2^N раз выше и перенесёт ошибку ("шум квантования") на более высокие частоты (noise shaping), что требования к НЧ фильтру несколько снижает.
Не особо там КПД отличается, ГГц СВЧ усилитель тоже чуть ли не половину в тепло рассеит как и оптический источник, а вот расходимость lambda/d в плане плотности мощности у приёмника вполне может дать те самые многие порядки, причём в другую сторону, которые, однако, скомпенсируются количеством энергии на 1 фотон оптической длины волны, да и с шумами/засветкой всё возможно несколько хуже в оптическом диапазоне.
Из МК, можно сказать, абсолютно такой же последовательный интерфейс торчит как и из памяти, jtag.
А интерфейсная часть может точно так же и у памяти сдохнуть.
Как-то пытался использовать память в качестве некоего дозиметра-показометра на большие дозы.
Есть статьи с примерами, где динамической памяти рефреш замедляли до критических значений и тогда вероятность рассасывания заряда из ячейки начинает заметно зависеть от внешних условий, в том числе от ионизирующего излучения.
Так вот у каких-то последовательных еепромов, которые тоже просто заряд хранят на изолированном затворе, при облучении интерфейсная часть отваливалась быстрее чем отдельные биты успевали "размагнититься".
Кстати, китайцы уже во всю продают MB85RC256V FRAM на 32 Кбайт
к rp2040 тогда надо qspi fram в качестве памяти, иначе смысл в этом долгоживущем 32кБ фраме если USB превратится в тыкву из-за того что был в обычной флэши.
з.ы. MSP430FR6007 мк с 256кБайт frama за 2.5$. правда без USB, но low speed можно и программно ногодрыганием изобразить.
с абсолютно тем же успехом можно raw/bmp просто пожать zipом, что можно сказать, внутри png и происходит. Для схем/чертежей с кучей одинаковых сгруппированых пикселей вполне работает, как и QOI впрочем, а для реальных фотографий - не особо.
Теперь осталось взять арифметическое кодирование (которое позволяет приблизится к теоретическому n*log(n) и иметь дробное количество битов/символ, в отличии от Хаффмана, где меньше 1 бита/символ не бывает). А вместо простого дельта кодирования брать сумму/разность двух пикселей, потом сумму/разность от "суммарных" пикселей с предыдущего шага и так N раз пока не пиксели не закончатся ну или пока не надоест. В результате получится почти jpeg2000.
По памяти скорее всего так себе, с инъекцией кода всё хорошо, ну то есть очень плохо, это ведь тупо компилятор С99, хоть и в какой-то степени огороженный, если ему функций не давать, но вот скомпилировать *(int *) 0 = 1/0;, и потом выполнить со всеми вытекающими последствиями, пожалуй, помешать ему нельзя.
Чтобы совсем огородить надо засунуть выполнение собственно вычисления в какую-нибудь виртуальную машину типа той же Lua или с4, что на быстродействии не самым положительным образом скажется.
очень странное решение, не понятно кто мешал эти мультиплексоры шин команд не на ядрах, а на банках памяти ставить, чтобы все ядра могли работать.
На этот случай есть ещё более замечательные костыли из перехвата serviceworkerом синхронного xmlhttprequest
Заблокировать исполнение основного потока через Atomics.wait, чтобы подождать выполнения асинхронной функции и тем самым превратить её в синхронную, потому что wasm про асинхронный яваскрипт ничего не знает и для вызова асинхронных функций из wasm нужны вот такие замечательные костыли :)
любые аудио ЦАПы с выходом класса D, правда там не совсем spi обычно
https://www.ti.com/audio-ic/converters/dac/products.html#89=Class-D&sort=1130;asc&
частота постоянная, но всегда меньше или в лучшем случае такая же, по краям шкалы.
чем именно отличается 8ми битный шим с заполением 1/256 от сигма-дельта модуляции с заполнением 1/256?
https://www.fpga4fun.com/PWM_DAC_2.html
а у pwm не стремится?
это не так.
при низком заполнении, например на 1/256, ничем не будет отличаться от pwm, 1 такт из 256 будет включен, но вот около середины шкалы pwm будет включаться 127/127, а сигма-дельта 1/1, на в 127 раз большей частоте. так что мерцания в среднем будет меньше.
На пол шкалы одноплярные напряжения сдвинуть забыли, отсюда и 1.65В. вместо 0.
А разница с pwm в частоте, которая у сигма-дельта модуляции в этом случае будет в 2^N раз выше и перенесёт ошибку ("шум квантования") на более высокие частоты (noise shaping), что требования к НЧ фильтру несколько снижает.
в плис используя дифф вход в качестве компаратора можно можно даже не перебором через sar, а напрямую "сэмплируя" напряжение на входе, через TDC.
https://www.bothonce.com/10.1145/3431920.3439287
ну не совсем уж за пределами, когда их становится настолько мало можно заметить вклад их дробового шума.
Не особо там КПД отличается, ГГц СВЧ усилитель тоже чуть ли не половину в тепло рассеит как и оптический источник, а вот расходимость lambda/d в плане плотности мощности у приёмника вполне может дать те самые многие порядки, причём в другую сторону, которые, однако, скомпенсируются количеством энергии на 1 фотон оптической длины волны, да и с шумами/засветкой всё возможно несколько хуже в оптическом диапазоне.
Чтобы не ограничиваться 8 кадрами, вместо косинусного - рекурсивное преобразование Хаара в 3d, на всю длину, по количеству кадров 640×360×584.
mjpeg2000
Из МК, можно сказать, абсолютно такой же последовательный интерфейс торчит как и из памяти, jtag.
А интерфейсная часть может точно так же и у памяти сдохнуть.
Как-то пытался использовать память в качестве некоего дозиметра-показометра на большие дозы.
Есть статьи с примерами, где динамической памяти рефреш замедляли до критических значений и тогда вероятность рассасывания заряда из ячейки начинает заметно зависеть от внешних условий, в том числе от ионизирующего излучения.
Так вот у каких-то последовательных еепромов, которые тоже просто заряд хранят на изолированном затворе, при облучении интерфейсная часть отваливалась быстрее чем отдельные биты успевали "размагнититься".
для того чтобы USB работал, надо чтобы память в которой хранится прошивка МК (внезапно, обычная флэш) не померла раньше.
а rp2040 вроде только через QSPI умеет к памяти обращаться.
к rp2040 тогда надо qspi fram в качестве памяти, иначе смысл в этом долгоживущем 32кБ фраме если USB превратится в тыкву из-за того что был в обычной флэши.
з.ы. MSP430FR6007 мк с 256кБайт frama за 2.5$. правда без USB, но low speed можно и программно ногодрыганием изобразить.
з.з.ы. у инфинеона есть qspi fram на 8/16Mbit.
https://www.ollydbg.de/Paperbak/index.html
полмегабайта на страницу, при должной усидчивости и через 200 лет можно прочитать используя лишь увеличительное стекло.
а если лазерным гравером по какому-нибудь титану то возможно и через 200к лет.
с абсолютно тем же успехом можно raw/bmp просто пожать zipом, что можно сказать, внутри png и происходит. Для схем/чертежей с кучей одинаковых сгруппированых пикселей вполне работает, как и QOI впрочем, а для реальных фотографий - не особо.
Теперь осталось взять арифметическое кодирование (которое позволяет приблизится к теоретическому n*log(n) и иметь дробное количество битов/символ, в отличии от Хаффмана, где меньше 1 бита/символ не бывает). А вместо простого дельта кодирования брать сумму/разность двух пикселей, потом сумму/разность от "суммарных" пикселей с предыдущего шага и так N раз пока не пиксели не закончатся ну или пока не надоест. В результате получится почти jpeg2000.
По памяти скорее всего так себе, с инъекцией кода всё хорошо, ну то есть очень плохо, это ведь тупо компилятор С99, хоть и в какой-то степени огороженный, если ему функций не давать, но вот скомпилировать
*(int *) 0 = 1/0;
, и потом выполнить со всеми вытекающими последствиями, пожалуй, помешать ему нельзя.Чтобы совсем огородить надо засунуть выполнение собственно вычисления в какую-нибудь виртуальную машину типа той же Lua или с4, что на быстродействии не самым положительным образом скажется.