Ответы пользователя по тегу Микроконтроллеры
  • Почему может не вызываться прерывание?

    @LampTester
    Используйте NVIC_EnableIRQ() вместо __enable_irq(). В ARM прерывания включаются именно так.

    И да, определите обработчик, если еще не сделали этого. Просто скопируйте (но не убирайте его из исходного места!) нужное имя из startup_xxx.S в main.c, оформив его как функцию.

    void SysTick_Handler(void)
    {
    }
    Ответ написан
    Комментировать
  • Необходимые знания для embedded developer'a?

    @LampTester
    Начать хочу с самых ранних азов.


    Правильно. Если хотите стать профессионалом, начинать надо с базовой теории. "Нет царских путей в геометрию".

    Интересуют так же такие вещи как: стоит ли учится писать сценарии программ для Arduino, сможет ли это помочь абстрагироваться в выбранной сфере разработки и получить те самые азы?


    Нет. Ардуино - это игрушка. Все, чему вы должны научиться, там надежно скрыто, чтобы не травмировать нежные умы казуальных любителей. Вы потратите время, чтобы изучить ее, а потом потратите время, чтобы отучиться от того, чему вас там научат. Тем более, если вы хотите программировать для приложений, критичных по надежности (автомобили).

    Нужно ли учиться паять и разбираться в микросхемах, теристорах, тестерах и прочем железе что бы работать embedded программистом?


    Да, обязательно. Хороший embedded-программист сам должен быть способен разрабатывать железо. Более того, в не слишком сложных проектах (или в очень критичных по оптимальности решения) разработчик железа и программист - один и тот же человек.

    Вообще, embedded-программист - в большей степени электронщик (где-то на 80%, или даже больше), чем программист.

    Нужны ли знания программирования под линукс? Читая вакансии не один раз встречал требования знания работы с линукс.


    Опционально, будет плюсом.

    Что касается процесса обучения, то он примерно идентичен процессу обучения инженера-электронщика.

    1. Полный курс общей физики. Обязательно. Без него никуда, это база всего. После него отпадают 98% элементарных вопросов и появляется стройная картина мира. Математика - без фанатизма, но в достаточном объеме, чтобы понимать курс физики.
    2. Базовый курс конкретно электроники. Здесь можно посмотреть в сторону классики - Горовиц и Хилл первое, что приходит на ум.
    3. Программирование. Без фанатизма. Ночами штудировать численные методы и заучивать классичесские алгоритмы не надо (хотя представлять, как работает, например, метод Рунге-Кутта будет полезно), но выработать навыки алгоритмизации требуется обязательно. На эту тему полно туториалов, гораздо больше, чем по электронике.
    4. Обработка сигнала тоже нужна. В написании программ для контроллеров всякие цифровые фильтры встречаются очень часто (особенно при обработке сигнала с датчиков), надо бы представлять, как работают методы ЦОС.
    5. Специальные вопросы. Архитектура контроллеров, стандартные интерфейсы и т.п. Это уже по необходимости.

    Кроме этого - английский в достаточном объеме, чтобы понимать техническую литературу и общаться на среднем уровне. Простой тест - свободное чтение документации и ресурсов типа hackaday.

    Но самое главное - желание. Только оно может обеспечить достаточный объем практики.
    Ответ написан
    3 комментария
  • Как уменьшить напряжение с 5 до 3.3 вольт?

    @LampTester
    Без стабилизатора никак.

    ESP8266 потребляет до 200 - 250 мА, для схемы со стабилитроном это много. Про делитель в этом случае вообще говорить смешно.
    Ответ написан
    Комментировать
  • Как научиться изящно и грамотно программировать МК?

    @LampTester
    Я всегда говорю, что программирование контроллеров распадается на две задачи: собственно программирование и схемотехника. Потому сначала надо научиться программировать и освоить схемотехнику.

    Научиться программировать можно выполняя классические задачи - на сортировки, на работу со структурами данных и т.п. Про это есть множество хороших и проверенных книжек и сайтов. Только не берите книжки типа "C++ за десять дней" - это совсем не то, что научит писать изящно и грамотно. На описываемом этапе вас будут интересовать основы, которые помогут научиться проводить разбиение сложной задачи на простые действия.

    Естесственно, генераторы кода я даже не обсуждаю - про них надо просто забыть. Никакого C++, только ANSI C - упор на него.

    Знание схемотехники необходимо, чтобы понимать особенности железа и способы правильного взаимодействия с ним. По основам схемотехники тоже есть много проверенных книг. Но, опять же, это не "Ардуино для начинающих". Берите нормальные книги вроде Горовица и Хилла.

    Ну и практика, практика, практика. Ну и, конечно, не забывайте, что понимание терминов "изящно и грамотно" у каждого свое. :)
    Ответ написан
    Комментировать
  • Как симулировать микроконтроллер STM32 и электрическую схему?

    @LampTester
    Ответ на вопрос - никак. Вообще, полная симуляция устройства это тупиковый путь: чем сложнее схема, тем непредсказуемее становится влияние погрешностей симуляции на результат, и тогда его ценность теряется.

    Потому на самом деле устройства как правило разрабатываются следующим образом:

    • сложный функционал разбивается на простые задачи;
    • конкретным задачам сопоставляются типовые решения, например, для источников питания, усилителей, узлов согласования уровней и прочих блоков в составе устройства;
    • при наличии сомнений в работоспособности конкретного узла выполняется его симуляция (только одного узла); при этом выполняется его проверка во всех интересующих режимах, с заданием управляющих воздействий с помощью примитивов симуляции (идеальные источники тока/напряжения и т.п.); также может проводиться макетирование отдельного узла в реальности;
    • прошивка тоже отлаживается отдельно и по частям; для этого создается проект на ПК, в котором отлаживаются модули, не имеющие отношения к железу (например, шифрование, различные кодировщики и т.п.).
    • на финальном этапе все собирается вместе, дописывается HAL и производится отладка в железе.


    Выше описан "максимальный" вариант разработки для сложного устройства. В конкретных случаях некоторые этапы могут пропускаться или переставляться местами. Я, например, чаще всего начинаю разработку прошивки уже при наличии собранной платы, и тестирую ее прямо в железе, причем сначала пишу HAL (если он предполагается). Тестирование на ПК требуется в основном тогда, когда прошивка содержит в себе какие-то сложные алгоритмы, не поддающиеся разработке без основательной отладки и не имеющие прямого отношения к железу (изначально кросс-платформенные).
    Ответ написан
    Комментировать
  • Где почитать по эффективной разработке программ для процессоров с использованием DMA, прерываний?

    @LampTester
    Я не совсем понял вопрос. Что вы хотели бы узнать по этой теме помимо того, что написано в соответствующих Reference Manual'ах и Programming Guide'ах? Кроме всего прочего, блок DMA не входит в ядро Cortex-M0. Обычно это отдельный блок, специфичный для конкретного МК.
    Ответ написан
    Комментировать
  • Где взять спецификации на JTAG и SWD для STM32?

    @LampTester
    Важно понимать, что SWD - это не эксклюзивный протокол STM32, а часть технологии CoreSight от ARM. Соответственно, там и надо смотреть.

    Вот описание самого интерфейса. А как работать с CoreSight - это уже сюда.
    Ответ написан
    Комментировать
  • Возможна ли удаленная работа при программировании микроконтроллеров?

    @LampTester
    Удаленная работа возможна, но это как правило очень сложно, особенно если квалификация людей, находящихся рядом с железом, низка.

    Специфика отладки встроенных систем состоит в том, что необходимо наблюдать, как программа внутри МК взаимодействует с реальным миром (здесь напряжение померять, там ток посмотреть, сюда осциллографом ткнуть...). На расстоянии это часто представляет сложности.
    Ответ написан
    Комментировать
  • На каких процессорах делают микроконтроллеры? Где то есть структурированная информация?

    @LampTester
    Не совсем понятен вопрос. Все же, вас интересуют микроконтроллеры или платформы? Для простоты - ATmega168 - микроконтроллер. Arduino Pro Mini - платформа на его основе.

    Платформы на x86 делают. Заходите в любой магазин компьютерных комплектующих и спрашиваете материнские платы формата mini-ITX. Это оно.

    Про микроконтроллеры (микроконтроллер - однокристалльное устройство!) на базе x86 я не слышал.
    Ответ написан
  • Как сделать программный ШИМ на MSP430 в IDE Energia?

    @LampTester
    Светодиодов всех одновременно или по очереди? Светодиоды должны управляться независимо? Если нет, можно просто соединить их вместе (параллельные цепочки с резисторами) и поставить один ключ, который подключить к аппаратному ШИМ'у.
    Ответ написан
  • Как заставить светодиод светить при нажатии кнопки?

    @LampTester
    У меня получилось только заставить его мигать, если не отключать сторожевой таймер. Вроде бы он уходит в перезагрузку по достижении какого то времени, а светодиод периодически мигает. Каким образом можно сделать так, чтобы при нажатии светодиод именно светился постоянно, а не мигал?


    Собственно, отключить сторожевой таймер...
    Ответ написан
    Комментировать
  • А есть ли сайт с готовыми схемами и их подробным описанием в Sprint LayOut, которые можно бесплатно скачать?

    @LampTester
    Не совсем понял, что подразумевается под "описанием в SprintLayout". SL - инструмент для трассировки плат. А схемы с разработанными платами можно найти на любом радиолюбительском сайте. cxem.net, radiokot.ru, и так далее.
    Ответ написан
    Комментировать
  • Есть ли примеры согласования МК по RS-485, где в шине более двух устройств?

    @LampTester
    Начнем с того, что RS-485 представляет собой только требования к физическому уровню. На уровне побайтовой передачи это чаще всего UART.

    Далее, мне кажется, что вы запутались в понятиях ведущего-ведомого и последовательной-параллельной шины. RS-485 - последовательная шина, но ничто не запрещает использовать топологию "звезда", которая, как я понял, вам нужна. Если одно устройство передает, а остальные принимают - то оно и есть ведущий, а остальные - ведомые.

    Я делал похожую систему, работающую через RS-485. Так вот я взял конвертеры уровней RS-485 и подключил их к UART'у. Протокол был самописный, пакетный, с одним ведущим и кучей (по требованиям до 200+) ведомых. В таком варианте все работает. Еще раз, RS-485 не тождественен Profibus, Modbus и прочим протоколам - они работают поверх него.
    Ответ написан
  • Есть ли такие контроллеры/реле?

    @LampTester
    Готовых не видел. Можно такое сделать, любителю проще всего взять для этого Arduino.
    Ответ написан
    Комментировать