Pull to refresh
4
0

Embedded programmer

Send message
Занятно, что список требований к ОС («никаких макросов», «никаких приведений типов») сильно совпадает с моими личными претензиями к FreeRTOS.
И все эти наслоения макросов из кишков фриртос никуда не деваются. И если использование операционки с этой прослойкой, действительно, должно упроститься, при отладке, если туда понадобится-таки лезть, мы опять упрёмся в void*, который надо привести к нужному типу, достать оттуда ещё один указатель, ещё раз привести…
os.mbed.com/teams/components/code/GSM

Я уж было решил, что вот оно — счастье, меня сейчас быстренько научат правильно писать драйвер модема.
Но нет же. Отправляем команду, и ждём ровно один ответ («OK», как правило). Если в этот момент нежданно-негаданно прилетит URC, она улетит в /dev/null.

Спасибо большое, такое г. я и сам понаписать могу.
Ок. Тогда вывод надо делать «у меня (подчёркнуто) что-то где-то когда-то не заработало».
Я недостаточно чётко сформулировал вывод. Там ключевое «якобы не работает». Потому что буфер там должен быть, а сделать буфер (хоть отдельной логикой, хоть на транзисторе), который будет работать от 5 вольт, но не будет работать от трёх — надо отдельно постараться.
Шилд «абстрактный в вакууме»?
Если посмотреть документацию на модем (хоть симком, на котором любят делать у нас и в Китае, хоть квиктел, который продают на arduino.cc), напряжение на ногах модема не должно быть выше 2.8… 3 вольт.
Т.е. там ДОЛЖНЫ быть преобразователи уровня.

Оригинальная плата использует полноценные буферы, подключенные к ардуинным 3.3 вольтам (и, к слову, они превышают максимальные 3.1 вольта для квиктела). Трёхвольтовые сигналы от основного контроллера для этой схемы — как родные.

Какой китаец так умудрился сделать преобразователь, что он якобы не работает с трёхвольтовыми сигналами, надо разбираться
попробуйте подключить тот же bme280 к nrf52

За час переписать read()/write() adafruit'овской библиотеки?
Или за день раскурить даташит bme и построить очередной велосипед?
Вот я задачу интереснее и полезнее придумал: датчик объема оставшегося топлива для бензобака придумать

Гуглом Вы принципиально не пользуетесь? Запрос «датчик уровня топлива» выдаёт кучу искомых устройств.
Да, они большей частью под грузовики (питание 24 вольта и немаленькие габариты), т.к. проблема воровства солярки актуальна в первую очередь для грузовых автопарков.
Но допилить такой датчик будет на порядок дешевле, чем сделать нечто подобное самому (и на порядок дороже, чем починить родной показометр).
Слетать? Элементарно! Структура DFU-загрузчика: infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk52.v0.9.0%2Fexamples_ble_dfu.html
Достаточно сломать стрелочку с номером 2, и всё — кирпич готов.
Т.е. хочу сказать, что нормальный надёжный загрузчик — это чуть сложнее готового примера. Ну и тем более, он получается совсем не совместимым с ардуино-скетчем, который в статье так хвалят.
А Вы сами пробовали читать документацию нордика? Очень интересное чтиво, рекомендую.
В частности, там написано про ремап. Все ноги, за исключением радио и аналога, можно назначить КУДА УГОДНО.

Вы не пробовали посмотреть, как устроен в этом месте https://gnu-mcu-eclipse.github.io/?
Тот же набор в виде OpenOCD (или Segger JLink, по желанию) + GDB, и всё "само" работает.

Стандарт подразумевает, что atomic может не быть lock free. Ну а накрутить костылей с запретом прерываний можно в любом МК.
До этой глубокой мысли авторы FreeRTOS дошли в позапрошлом году. До 9-й версии все объекты freertos'а (задачи, очереди, семафоры и т.д.) выделялись malloc'ом. Сейчас хотя бы выбор появился…

Правда, справедливости ради, можно спроектировать систему так, чтобы маллок вызывался только при старте, а дальше всё работало «в статике».
Я понимаю, что L298 — драйвер ШД. Но он не умеет ограничивать ток (можно навернуть это снаружи, повесив токоизмерительные резисторы, компараторы и капельку логики), а включать ШД от термопринтера без ограничения тока в 12 вольт чревато его убийством (померяйте сопротивление обмоток).
Строб прожига там, вероятно, устроен следующим образом: логика с RC-цепочкой отрубает строб, если превышено макс. время, а при нормальной работе время строба контролирует процессор. У нас 74HC123 вообще всё питание головки рубил.

L298, боюсь, там всё выжгет нафиг. Посмотрите, как устроен драйвер — маловероятно, что они выдают все 12 вольт на обмотку; по-хорошему, надо выдавать фиксированный ток в обмотку. Посмотрите, как устроен ST'шный L6219 (ещё можно поискать у ST, TI, Allegro). Можно, конечно, самостоятельно ШИМить, но это неудобно и небезопасно.

При отсутствии документации (что странно, схемы на кассы найти можно было. Во всяком случае, в России в центрах тех.обслуживания они есть (и активно утекают на всякие narod.ru)) очень-очень-очень советую купить у китайцев Saleae Logic (хоть самый простой, за 5 баксов) и снять весь обмен.
Могу только подсказать, что термопринтер — суть сдвиговый регистр (подключается к SPI'ю) + выключатель нагрева (подключается к таймеру, чтобы точно задавать время) + шаговый двигатель (подключается ко второму двухканальному таймеру, нужен специализированный драйвер шаговых двигателей). Можно упростить задачу, взяв «умный» драйвер ш.д. (со входом «один импульс — поворот на один шаг»).
Далее — берём растеризованную картинку, загоняем первую строчку в сдвиговый регистр, включаем на N миллисекунд нагрев, потом прокручиваем бумагу на 1 линию (1/8 мм, как правило). Если не торопиться — вполне ардуина справится (главное — голову не сжечь, забыв её выключить).
Вот если пытаться выжать все паспортные 200-300 мм/сек (это, правда, скорость «взрослых» термопринтеров, тут будет максимум 50-70), надо делать всё одновременно, тут 32-битник (без ардуино-прослойки, конечно же) очень пригодится.
Не надо закладываться на входное сопротивление АЦП. Мало того, что оно толком не специфицировано, так ещё и нелинейно. АЦП «снаружи» представлено устройством выборки и хранения — по сути, маленьким конденсатором (десятки пикофарад), который непосредственно перед преобразованием заряжается от источника сигнала. И когда у нас сопротивление источника измеряется в сотнях килоом, это начинает заметно влиять на точность. В данном конкретном случае это неважно, погрешность даже в десяток процентов не важна, но в большинстве случаев этого лучше не делать.
Дополнительное чтение:
Atmel application note AVR127 www.atmel.com/Images/Atmel-8456-8-and-32-bit-AVR-Microcontrollers-AVR127-Understanding-ADC-Parameters_Application-Note.pdf (раздел 7)
ST application note AN2834 www.st.com/content/ccc/resource/technical/document/application_note/group0/3f/4c/a4/82/bd/63/4e/92/CD00211314/files/CD00211314.pdf/jcr:content/translations/en.CD00211314.pdf (сильно больше подробностей, но и читается сложнее)
Так у них устав есть!
К сожалению, в openOCD не допилили поддержку SWO через STlink.
Попробуйте прошить STlink в JLink (есть официальная прошивка от segger.com).
У меня JLink (копия), консолька через openOCD работает.
У меня тут вопрос возник. У Вас какая проблема?
Космические излучения? Дублируйте. Иначе за то время, что пройдёт между прилётом частицы и очередным пересчётом фильтра Ваш космолёт включит самый-главный-двигатель и улетит чёрт знает куда.
Программные ошибки? Пересчитывать каждые 5 секунд одни и те же данные с одной и той же ошибкой… Не лучшее решение.
Накопление ошибки во флоатах? Всё просто — не делайте так никогда. Разговор не с этого начался.

Или просто поговорить надо на отвлечённые темы?.. Тогда, пожалуйста, не ко мне.
Вариант, в котором можно быть уверенным — дублировать (троировать) системы управления.

А «иногда пересчитывать» этот несчастный фильтр — это из анекдота о поиске кошелька под фонарём.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity