Комментарии 22
поскольку задача формирования в интегральном исполнении точного конденсатора, да и точного резистора, весьма нетривиальна
Она не «нетривиальна», она принципиально не решаема без внешней подстройки. Точно можно делать только согласованные пары, а именно номинал точно задать нереально, и чем тоньше техпроцесс, тем хуже.
Собственно, вся современная (да и несовременная) аналоговая схемотехника строится на том, чтобы от номиналов компонентов ничего не зависело, только от их соотношений между собой.
Либо, там, где точное значение все-таки важно (например, в источниках опорного напряжения или генераторах частоты), используется внешняя подстройка конкретного экземляра. Раньше лазером подпиливали резисторы, сейчас все больше подстроечную однократно программируемую память используют.
Можете скринить.
Вы находите в этом нечто противоестественное?
Но если AVR (и особенно ассемблер) тащат в продакшен просто по привычке, то таки да, нахожу. Я уже достаточно страдал из-за людей, которые пишут километровые ассемблерные программы без единого комментария и потом сами в них ничего найти не могут; используют процы без отладочного разъема, которые каждый раз выпаивать нужно, чтобы прошить; добровольно используют архитектуры, для которых есть только компилятор С89, да еще не полностью поддерживающий стандарт и тому подобное.
Я считаю, что это очень плохо и стараюсь подобное искоренять. Я не спорю, что есть области, в которых нужно программировать на ассемблере и упихивать код в сотни байт, а ножек у проца может быть не больше восьми, но они достаточно редки.
Как-то так.
Темплейты вообще огонь. Делал абстракцию для типобезопасного доступа к регистрами I2C, по сути формальное описание, к какому устройству относится, какие биты для доступа, что в них лежит и как интерпретировать, дать по рукам на этапе компиляции, если пытаешься писать не то, что ожидается и так далее. В рантайме от этого вообще ничего не осталось, только финальный доступ к функциям вида i2c_read(dev, buf, len)/i2c_write(dev,buf,len).
При сборке с оптимизацией да, лишнего ничего нет, но вот пошаговая отладка иногда превращается в страдание. Лично я старался писать так, чтоб проект компилировать можно было под разные платформы, в том числе под винду, на которой всё самое сложное и отлаживал.
Кварцевого резонатора не было и ехать за деталями не хотелось.
В итоге получилось передать битрейт 250k при скорости работы микроконтроллера 1 MIPS, правда, лапку, на которую выводится TX, пришлось выбирать либо 0, либо 7 бит любого порта, но уж это мне было не особо критично.
Всего на прибор затратил два часа своего времени (вместе с пайкой макетки). Если бы поехал за деталями, прокатал бы больше.
А меня вот зацепило использование слова ИРПС. ИРПС — это интерфейс токовая петля. И называть так UART, мне кажется, не правильно…
Это была шутка. Разумеется, Вы правы.
UART на выводах микроконтроллеров — это другой физический уровень.
А ИРПС был описан вообще в ОСТ 11 305.916-84. Только его теперь фиг найдёшь — остались одни упоминания. Там физический уровень да, токовая петля.
Но формат посылки у них общий (а также для RS-485, RS-422, ISO 9141/ISO-14230 и еще кучи), так что и временные параметры посылки тоже должны быть общими. Вопрос — куда запихали это описание. По-хорошему, на это должен быть отдельный стандарт.
Тот же ОСТ 11 305.916-84 волне мог содержать и описание посылки. Но мне думается, это должен быть ГОСТ.
Но на физ.уровне ИРПС — это таки токовая петля 20 мА, UART — однополярные уровни напряжения 0 и «питание», а RS-232 двуполярные (+ и -).
.
берем отечественную версию ГОСТ на стык С2 и не обнаруживаем там вообще никаких временных параметров, за исключением длительности фронта и среза импульса
А вы какой ГОСТ смотрели? Судя по всему — старый советский ГОСТ 23675-79 (про физический уровень), а не ГОСТ Р 50668-94 (про временные характеристики)?
В 50668 вполне есть «Требования к временным характеристикам сигналов данных передающего ООД»:
и есть «временные характеристики качества работы ООД, принимающего сигналы данных по цепи 104»
Нашёлся еще ГОСТ 28854-90 — описывает ИРПС уровнем повыше, в требованиях к физ каналу есть как токовая петля, так и двуполярные напряжения (тот самый стык С2). Я был неправ, утверждая что «ИРПС = токовая петля». Временных характеристик тут тоже нет, кроме длительности фронтов.
«Стык С2» — это вообще такая всеохватная штука, включающая и аналоговые («линейные») сигналы и синхронизацию и вообще чёрта в ступе — см. ГОСТ 18145-81, даже тональные сигналы могут быть — ГОСТ 28142-89
У буржуев же вместо «RS-232» надо искать МККТТ ( ITU-T, CCITT) Х.24 (V.24), V.28, X.20bis/X.21bis и ISO IS2110, ISO 4903.
Википедия упоминает IEC 62056-21 / DIN 66258 — но что-то меня сомнения берут в этом случае.
Битовый стартстопный формат посылки отдельно от всего описывает ISO/IEC 1177:1985, только я не смог найти его полного текста в открытом доступе (с ISO вообще есть такая закавыка).
К вопросу об AVR и мировых рекордах