Leaderboard
Popular Content
Showing content with the highest reputation since 03/02/2023 in all areas
-
3 points
-
Именно такой усилок недавно попался в схеме старого советского калибратора В1-28. Многокаскадный, каскады плавающие по питанию, гибридный, с бустом по ВЧ ( цепь на полевике).2 points
-
Если очень по-простому, то разные фазы, разные скорости распространения чётной и нечётной мод являются следствием разницы в их эффективных диэлектрических проницаемостях. Эта разница приводит в частности и к отличию волновых сопротивлений чётного и нечётного режимов от случая однородной среды, поэтому ответвитель оказывается в некотором смысле внутренне рассогласованным, из-за чего ухудшаются КСВН и развязка, а с развязкой и направленность. То, что у вас ухудшился КСВН, говорит о том, что скорее всего вы просто, так сказать, волюнтаристически добавили "зубья" в область связи, тогда как геометрия этих структур получается в результате (весьма сложных) расчётов. Нагуглите "wiggly couplers" или "saw-tooth-type coupler". Либо "directional couplers compensation". Вот книжка, правда она в большей степени посвящена сверхширокополосным ответвителям на основе неоднородно-связанных линий, но это связано и с чётными и нечётными модами и с методами борьбы с разностью их хода: Nonuniform Line Microstrip Directional Couplers and Filters-Artech Print on Demand (1993).pdf2 points
-
std::aligned_storage резервирует память необходимого размера и с необходимым выравниванием с гарантией отсутствия неопределенного поведения. placement new располагает в этой области необходимую вам структуру и возвращает указатель на нее. Дальше можно работать с этим указателем, мне больше нравится работать со ссылкой. Эта структура должна иметь конструктор, который не делает с этой структурой ничего (в данном случае это конструктор по умолчанию). #include <type_traits> std::aligned_storage<sizeof(uint32_t), alignof(uint32_t)> Buffer[512 / sizeof(uint32_t)]; struct packet { uint32_t A; uint16_t B; uint8_t C; }; #include <new> void test() { auto const & Packet = *(new(Buffer) packet); uint32_t A = Packet.A; uint16_t B = Packet.B; uint8_t C = Packet.C; } Фактически placement new() приводит переданный ему указатель к нужному типу и вызывает конструктор с этим указателем. Программист должен гарантировать, что переданный в placement new() указатель отвечает всем требованиям к выравниванию и прочему,2 points
-
Любой профессиональный подход требует основательности, скрупулёзности и упорства. ЯП тоже является инструментом, который необходимо глубоко знать. И вложение в изучение ЯП, который является куда более универсальным инструментом, чем конкретный ассемблер, намного эффективнее. Ассемблер содержит кучу информации частного характера, которая за пределами конкретного процессора не пригодится. А тот же С является по сути портабельным макроассемблером, как тут уже сказали. Это очень низкоуровневая концепция, там просто неоткуда взяться большому оверхеду. И если в прежние времена ещё можно было отнести неэффективность на слабость (тупость) компилятора, то с развитием вычтехники стали появляться и оптимизирующие компиляторы (а это уже где-то вторая половина 1990-х), генерирующие код, обойти руками который было очень непросто. Я по молодости соревновался с IAR v1.40 для AVR, сам тогда пришёл от железа и ассемблера, и был сильно удивлён, что "тупая железка" (РС) генерит точно такие же инструкции, как я бы и сам написал. С этого и возник интерес к С (до этого считал его ЯП высокого уровня, куда, дескать, ему там в такие малыши как AT90S2313 и даже AT90S8515). Настройка опций компилятора делается обычно один раз (потом уже по месту что-то корректируется, если надо) и занимает очень незначительное время по сравнению с написанием кода. А то, что Borland лохматых версий пихал кучу лишнего, не может быть основанием для выводов об ущербности технологии. Кстати, и современные тоже нередко пихают кучу лишнего, просто щас на этого никто не смотрит — ресурсов стало вдосталь (памяти, дискового пространства). И только на ембедде приходится обращать на это сугубое внимание. Да и то далеко не везде (на ембеддед линуксах уже тоже мало кто заморачивается) — преимущественно это осталось в мире МК. * * * Соревноваться на уровне ассемблера вы можете достаточно эффективно на простых процессорах — 8/16-битниках типа AVR, MSP430, PIC. Когда перед вами дивайс вроде того же Blackfin, будете удивлены тому, какой код генерит компилятор: глядя на него в первый момент возникает мысль, что это какой-то наркоман писал — инструкции все поперемешаны. Но когда начинаете писать ровный (по-человечески чтобы выглядело) код сами, то прилетают сообщения о простое конвейера, что, де, вот это значение Р-регистра (регистр-указатель) не может быть использовано в следующей инструкции, т.к. оно не доехало до стадии Execute на конвейере, и т.п. и чтобы избежать простоя, перемещаете загрузку указателя раньше в потоке инструкций... И обнаруживаете, что начинаете писать такой же "наркоманский" код, где команды, составляющие связанную группу действий (например, чтение-изменение-запись переменной в памяти), начинают размазываться по коду и перемешиваться с командами из других групп действий. И тут доходит, что компилятор-то именно это всё и делает. Он "знает" про свойства конвейера процессора и пытается избежать простоев. Т.е. уже на старте компилятор обходит неподготовленного, знающего только ассемблер, человека. Чтобы дорасти до компилятора, тут нужна практика и опыт, который тоже нужно поддерживать. И обойти компилятор тут очень непросто. И даже писать такой перемешанный код тоже весьма утомительно, не говоря уже о его сопровождении. Это пример про относительно простой процессор, в котором просто длинный конвейер. А если взять современные суперскаляры с внеочередным исполнением инструкций и переименованием регистров, где на аппаратном уровне идёт загрузка нескольких вычислительных юнитов, где продвинутые предсказатели ветвлений и т.п., то прокачать владение ассемблером хотя бы до того уровня, который вложили компиляторописатели в инструмент, потребует просто жить в этом мире. А завтра выйдет процессор с другой, обновлённой микроархитектурой (ARM их плодит как горячие пирожки), и всё по-новой, изучать особенности поведения, экспериментировать, исследовать... Когда процессоров было три штуки на всё, в этом, возможно, и был какой-то смысл. В нынешнее время это просто непозволительное расточение времени и сил. При сомнительном результате.2 points
-
Да, вы правы. Нужно писать продавцам напрямую. Ответили трое, в том числе и Бен (правда самым последним). Итого 22 $ за 5 двухслоек со сложным фрезерованным контуром 123х116 мм, доставка бесплатно в постамат Цайняо. Заказал здесь EASWAY PCBA Store https://sl.aliexpress.ru/p?key=sqxhwNh. На качество будем посмотреть.2 points
-
Ловите: //Расчёт CRC32 полином == 0xEDB88320 //buf - данные, len - длина, crc - init value u32 CRC32(void const *buf, int len, u32 crc) { static u32 const t[] = { 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x00000000, 0x1DB71064, 0x3B6E20C8, 0x26D930AC, 0x76DC4190, 0x6B6B51F4, 0x4DB26158, 0x5005713C, 0xEDB88320, 0xF00F9344, 0xD6D6A3E8, 0xCB61B38C, 0x9B64C2B0, 0x86D3D2D4, 0xA00AE278, 0xBDBDF21C}; u8 const *p = (u8 const *)buf; while (--len >= 0) { u32 c = crc ^ *p++; crc = t[c & 15] ^ t[(c >> 4 & 15) + 16] ^ crc >> 8; } return crc; } Здесь расчёт потетрадный, соответственно - таблица намного короче. С IAR-ом спаривается так: Полином - тот же самый, что у Вас, просто повернутый битами в обратную сторону. Чтобы работала ваша функция, наверное нужно в настройках (выше) порядок бит/байт поменять. Но (имхо) - потетрадная таблица лучше. if (~CRC32(__checksum_begin, __checksum_end - __checksum_begin + 1, 0xDEBB20E3) != __checksum) trap(TRAP_PRG_IMAGE); где: содержимое __checksum генерит IAR_ARM_7.80.4 самостоятельно.2 points
-
CRC это изначально потоковая побитная функция. И вычисляется она именно на потоке битов. У вас же (равно как и у всех) поток не битов, а слов (по 32 бита). Тут возникает вопрос - как битовый поток наложить на поток слов. С нарезкой групп по 32 бита вопросов не возникает, а вот внутри есть разночтения. Можно биты вдвигать с LSB в MSB, а можно с другой стороны. Оба варианта используются, и это как раз ваш случай - певый код двигает с MSB к LSB, второй в другую сторону. Отличаются они направлением сдвига в цикле вычисления (как для варианта с одним битом, так и с байтом). Полиномы для них очевидно совпадают с точностью до побитового разворота, равно как и результаты, которые они вычисляют - так же побитово развёрнуты. Превратить версию LSB в MSB простым изменение полинома нельзя - нужно изменить направление сдвига внутри цикла вычисления2 points
-
Код, который привел я в полный рост используется при рассчете CRC ZIP-файлов. Он рабочий. Рассчет CRC и таблица совпадают с тем, что нужно вам, соответственно рассчет таблицы тоже совпадает. Таблица у меня считается по полиному 0xEDB88320. 0xEDB88320 - это инвертированный полином 0x04C11DB7. Т.ч. вашему IARу подойдет или полином 0x04C11DB7 (если он сам умеет его инвертировать), или 0xEDB88320 (если не умеет). Код из первого поста и тот, что привел я - это полином 0x04C11DB7, преобразованный в 0xEDB88320, и, соответственно, рассчет CRC адаптирован под это преобразование. Тот код, где сдвиги не в ту сторону - это полином 0x04C11DB7, преобразованный в 0x82608EDB, и, соответственно, рассчет CRC адаптирован под это преобразование. В преобразованиях полиномов я не разбираюсь, поэтому подробнее не расскажу.2 points
-
Геннадий, можно такой вопрос? где Вы нашли тот даташит, в котором описаны регистры, кроме тех, что есть в T113-S3_User_Manual_V1.3_.pdf ? Имеются в виду регистры с базовыми адресами в диапазоне 0x05000000 - 0x05438000, например G2D_TOP_BASE и прочие? Спасибо. За хидеры отдельное спасибо.1 point
-
постоянную составляющую вычисляю путем определения среднего всех отсчетов АЦП. Далее от среднего вычисляю среднеквадратичное действующее. Но не знаю насколько правильный метод для несимметричных сигналов, например для случая когда в сети сидит мощная нагрузка через однополупериодный выпрямитель, через одиночный диод.1 point
-
Дополнительная пара диодов сливает в источник питания энергию из индуктивностей намагничивания и рассеивания. Это небольшая энергия, не требующая мощных корпусов.1 point
-
с задачей на 300Вт справится PQ3230 в схеме двухтранзисторного прямохода (косой форвард). Плюсы: два ключа и один сдвоенный диод, одна первичка и одна вторичка. Минусы: нужен драйвер верхнего уровня.1 point
-
Не угадали.... Вообще бред... Ток зарядки ( а не потребления ) может снизиться до 50 мА и при напряжении на аккумуляторе значительно ниже положенного... - при равенстве напряжений на аккумуляторе и выходе БП зарядки ток зарядки вообще будет равен нулю... ------------ TohanFro, я не понял - Вы учиться пришли или учить...? Вы вникайте уже в то, что Вам пишут..., и отвечайте на вопросы, которые Вам задают... Иначе этому никогда конца не будет...1 point
-
Залил - 4 файла - архив разбит на части - ограничение яндекс диска https://disk.yandex.ru/d/8jiuR8hUaPeVJg1 point
-
Поставить вот эту галочку: но я не проверял, т.к. эта галочка появилась относительно недавно, а все нововведенное работает через пень-колоду, то лет 15 пользуюсь скриптом: https://github.com/dcconn/altium-scripts-libraries/tree/master/FixConnections который имеет более расширенный режим, работает железно и за это время сбоев не выдавал.1 point
-
У SIM8xx вроде как уровень внешних цифровых сигналов, не 3.3V, а 2.8V. По крайней мере - у SIM868 точно. А значит - желательно сопряжение через преобразователь уровней. Мы использовали для этого 74AVC4TD245PW. Хотя в эконом-варианте можно наверное обойтись последовательными резисторами.1 point
-
Хорошо бы всё же разобраться в причинах и посмотреть сигналы x4 с помощью ЛА. Мне достаточно сложно поверить в отказ QSPI из-за пайки. Похоже, что проблема может иметь какие-то другие причины, условно говоря, программные. Т.е., например, не во всех платах у флешек при производстве взвели бит QE, а сама среда (предположительно) этого делать не умеет или не делает. Вот мы и получаем в результате разное поведение одинаково хорошо запаянных плат.1 point
-
1. Все мы находимся на планете Earth, поэтому, чтобы отсоединиться, надо выйти хотя бы на около-Earth орбиту. Даже настольный мультиметр на это не способен без изрядной посторонней помощи. 2. По поводу заземление (ground) - есть осциллографы и с гальванической развязкой, но они стоят существенно дороже. Почему - сложнее схемотехника (емкость между общим проводом и корпусом, а также - цепями питания делает свое черное дело).1 point
-
Выложил v3.5.29.0: Добавлен патч "4) Исправить опции окна Print Dialog" - для включения сохранения Minimum Line Width for Printing; Добавлена возможность автоматического запуска процедуры наложения патчей путём указания аргумента /start в командной строке: P2006P.exe /start Предыдущую версию патча советую сохранить т.к. на тщательное тестирование новой версии у меня нет времени...1 point
-
Думаю коллега. Если рассматривать физику то ток утечки затвора это просто плохой диэлектрик в затворе (тонкий). Т.е. по таблице 16В/100нА=160 МОм Соответственно в вашем случае будет делитель 10В - 160 МОм - 10 МОм - земля. Соответственно на затворе будет 0.58В Потому что эта утечка идёт по всей длине канала. Т.е. чтобы что-то посчитать нужно знать падение на всём канале а дальше интегрировать по длине считая сопротивление утечки равномерно распределённым вдоль канала. Ну или иначе утечка это бесконечное множество параллельных резисторов одним концом подключенных к затвору а вторым к затвору через бесконечно малое расстояние. В инженерном расчёте вполне достаточно считать наихудший случай считая что все резисторы под максимальным потенциалом.1 point
-
Такая технология есть, но поиск вываливает в основном патенты и статьи. Серийные если есть, надо смотреть на сайтах -каталогах производителей Осмотритесь на digikey На нем в первом окне фильтра, кажется, есть список фирм-производителей. Signal relays, latch KEMET Omron Automation Safety Omron Electronics Inc-EMC Div PanasonicPanasonic Electric Works TE Connectivity Aerospace Defense and Marine TE Connectivity Potter & Brumfield Relays1 point
-
1 point
-
гуглите ключевые слова вот так https://www.google.com/search?q=USB-Blaster+Altera1 point
-
Это цепь обратной связи для установки напряжения стабилизации TL431. Вот только запитку стабилизатора это никак не отменяет. Нужен резистор на 3.3В. А иначе он будет пытаться паразитно запитаться от входов, что в опять поднимает вопрос его емкости и тока потребления. Без резистора все цепи подключены к этому стабилизатору уже начиная с 0.5В(напряжения открывания диодов) вместо того, что-бы подключаться начиная с напряжения 2.685В+0.5В. Запитка нужна для того, что-бы стабилизатор со своей утечкой и емкостью при нормальной работе был отделен от входов закрытыми диодами(VD10) и подключался только когда напряжение на входе превысит норму.1 point
-
1 point
-
Ну да, у автора какой-то совсем "беззубый" ответвитель получился1 point
-
1 point
-
Потому что где-то в опциях стоит ключ ANSI C, в котором нельзя комментировать двойным слэшем //.1 point
-
2 бита это и есть 4 комбинации. Они все перечислены в алгоритме. Каждое сравнение - это анализ одного бита.1 point
-
С чем? С микроконтроллером с ключами или с отладочной платой? Я думаю, сто́ит подождать ответ топикстартера, что он умеет или хочет. Делать сейчас что-то умное на триггерах - это как-то несерьёзно, хотя и возможно. Может это последствие курсов Булевой алгебры, кто знает?1 point
-
Или хотя-бы: дать возможность задать размер этой ОЗУ, используемый под загрузку кода. Остальное оставив юзеру под его нужды! 512КБ кода далеко не каждый напишет.1 point
-
1 point
-
Еще не ковырял его. Но вот что сразу заметил, так это то, что они задействовали уровень защиты CRP3 (ранее был CRP1), а это значит, что прошить его через USART - более невозможно (просто не войдет в ISP boot mode). Потому не рекомендую с ним особо заигрывать, в случае слета, возможности его восстановить нету. JTAG/SWD - отключен (при любом CRP). Ранее (при CRP1), хотя-бы можно было войти в ISP бут режим (установив низкий уровень на ноге P2_7), где был доступен ограниченный набор команд (включая полное стирание, а следовательно и снятие защиты). С V12 про это можно забыть.1 point
-
Добрый день. Простейшее решение - на p-канальном полевом, вот прямо первая картинка из гугла по запросу "p-channel mosfet high side switch": Если никаких особых требований к быстродействию выключения нет, то всё считается очень просто, и подходят почти любые ширпотребные транзисторы. P.S. к биполярному T1, разумеется, ещё нужна пара резисторов - в цепь базы и между базой и эмиттером - на картинке их не нарисовали.1 point
-
Оставить неподключенными и настроить на вывод.1 point
-
@UniSoft я сравнивал ваш бултлоадер v10 со своим (считан с v11 EDU) отличия минимальны, если нужен, скину бинарник. И конвертировать имеет смысл только оригиналы.1 point
-
Потому и нету. Если нужно, то вот... Но исключительно на свой страх и риск! Так это не у меня нужно просить...1 point
-
1 point
-
На tang nano 9k программатор выполнен на bl702 и он заработал в линуксе только после его перепрошивки, взятой с этого форума (спасибо, кстати). Но даже после этого он шьет только SRAM и embedded flash. Внешнюю память ни в какую. Про права в курсе - второй десяток лет линукс-администор ) Но, как говорится, еще не вечер - поробуем разобраться. Вообще говоря, было бы странно если бы подобного предупреждения не было. В смысле: а че это ты, пользователь, вдруг захотел напрямую вызывать (какой-то) gwConfig для программирования ) Думаю, это предупреждение для невнимательных пользователей, вздумавших бездумно испоьзовать пины.1 point
-
так какой тип, диаметр провода предполагается использовать? мне так кажется, что без этого какие-то габариты сердечника считать пустое занятие.1 point
-
По карте дистанция 700 метров. Дальше идти возможности не было (из-за сложности рельефа). Максимальный потенциал в дальности не раскрыт. Антенны - четвертьволновый штырь с одним противовесом под углом 135 градусов. Слишком сложный рельеф в городе, приём в точках, где есть прямая оптическая видимость антенн. Если где здание загораживает - прием пропадает.1 point
-
Испытал RF4463F30 на дальность в черте города. Результат лучше, чем с CMT2300A (E-49). Хотя и битрейт в 3 раза больше и 4FSK вместо 2FSK. Возможно коды Рида-Соломона с перемежением внесли свой вклад.1 point
-
смотрите 7.5.10. EXTI sources selection register 0 (AFIO_EXTISS0) - апельсин, вид с боку.1 point
-
+1, однако. Какое питание в системе? Как тактируется ATmega? Она новая или б/у? Что, кроме программатора, есть на линиях PDI/PDO/SCK/_Reset? Что за программатор? Какое именно сообщение об ошибке?1 point
-
А что значит "грубее"? Я для себя подобрал значение делителя горизонтального колеса -2400 (последний параметр), тогда с моей мышью пользоваться им комфортно.1 point
-
1 point
-
Еще как вариант разводка неправильная, защита на Isen ловит помеху и глушит ШИМ.1 point