• Как понять регулярные выражения?

    Bambr
    @Bambr
    Плюсую Фриддла. Даже тем, кто уже с регулярками уже познакомился, эта книга может очень хорошо перестроить мозги.
    Ответ написан
    Комментировать
  • Как настроить мк AVR на частоту 1Мгц без кварцевого резонатора?

    makarenya
    @makarenya
    программист
    Если бы вы имели дело с ARM-ами, то могли бы настраивать частоту на лету. Какую захотел, такую и поставил прямо на месте через API CMSIS. Но тут у вас AVR, и частота задаётся через фьюзы. А ещё через фьюзы контроллер влёт превращается в кирпич, да так что без высоковольтного программатора (который та ещё редкость), МК обратно не оживить. И настройка частоты - это одна из тех вещей, неправильно значение которой может убить (почти) МК.
    Поэтому первый момент - никогда не ставьте/снимайте галочки там, где не уверены!

    Вот картинка настройки фьюзов в Atmel Studio
    0NNQy.jpg

    Когда попадёте на эту страницу, нажмите Read, чтобы удостовериться что на экране правильная инфа.

    Самый нижний носит имя SUT_CKSEL, а через один над ним CKDIV8.

    Для начала SUT_CKSEL - у вас должен стоять один из вариантов INTOSC_8MHZ. И нет значения, какой именно. Все эти KCK, CK и MS указывают на время задержки между подачей питания и стартом МК, нужны лишь для случая работы от полудохлых батареек без контроллера питания. "Ускорить загрузку" ими тоже не удасться, речь идёт о значениях, меньших 0.1 секунды.
    Если у вас и так значение SUT_CKSEL начинается с INTSOC_8MHZ, то не трогайте там ничего. Убить МК вы сумеете, а лучше для вашей задачи вы всё равно не сделаете.
    Теперь проверьте наличие галочки CKDIV8. И вот она вам и нужна. Её нужно установить. Если она стоит, то вот эти самые 8мгц с внутреннего генератора делятся на 8. Итого - 1Мгц, то что вам и нужно!
    Хотя насколько я вспоминаю, эта галка прошивается на заводе, и во фьюзы вам лезть не нужно вообще.
    Если после нажатия на Read вы увидели, что SUT_CKSEL уже показывает на INTOSC_8MHZ..., а галка CKDIV8 уже стоит, то никуда больше не жмите и просто уйдите с этой страницы. Повторять не устану - любые необдуманные манипуляции здесь убъют ваш МК. Особенно опасными являются галки:
    RSTDISBL - поставьте её и без HVPP-программатора вы ничего с МК сделать не сумеете
    SPIEN - а вот её никак нельзя снимать, а то результат будет не менее плачевен.
    Ну и выбор любого EXTXOSC_... источника тактирования приведёт к тому, что ваш МК станет кирпичом до того, как вы подключите данный источник тактирования. Выбрали керамический резонатор - бегите в ЧипДип за таковым и парочкой конденсаторов, чтобы хотябы поставить фьюзы назад!

    А теперь по поводу того, что вы уже сделали:
    прописав:
    #define F_CPU 1000000
    или
    #ifndef F_CPU 1000000UL

    в реальности - совершенно равноправные строчки, вы тем самым указали всяким библиотекам (вроде того-же delay.h), что МК будет работать на частоте в 1Мгц. Дело в том, что метод delay(...) или любые другие методы, завязанные на реальное время или реальные временные интервалы без этой строчки ничего о этом самом времени не знают. Они могут лишь посчитать количество тактов МК. И когда вы указываете, что вам нужно пауза а 1сек, то на основании записи о частоте (на основании F_CPU) библиотека delay.h высчитывает количество тактов, которые нужно провисеть внутри функции, чтобы получить задержку в 1с (в вашем случае, разумеется идёт речь о миллионе тактов).
    Если эта настройка (F_CPU) не выполнена, или если она не отражает реальную частоту МК, то все функции ожидания и прочие будут работать несколько странно - то есть ждать либо большее либо меньшее чем запрошенное время.

    Ну и вдогонку - существует 1001 различных причин, почему на дисплей выводится 0. В том числе может быть нерабочим дисплей.

    И ещё - датчик ds18b20 работает по протоколу single wire, аппаратной реализации на AVR этого протокола банально не существует, да и не нужна она то особо, при условии крайне низкой скорости самого протокола. А программным библиотекам должно быть не так уж и важно, какая там частота у МК. Поэтому мне кажется очень странным ваше желание получить частоту ровно в 1Мгц для взаимодействия с данным датчиком.
    Ответ написан
    Комментировать
  • С чего начать в программировании микроконтроллеров?

    @dsd_corp
    Привет. Все верно комментаторы говорят - начинать с Ардуино вполне резонно. И не слушайте тех, кто говорит, что Ардуино гуано потому что [и тут разные расплывчатые аргументы]. Ардуинщики в большинстве вырастают в говнокодеров не потому, что Ардуино плоха, а потому что даже не пытаются развиваться дальше. Типичная проблема низкого порога входа(как у 1С, например). То есть проблема в самих человеках, а не в Ардуине.
    У вас же, судя по тексту вопроса, мотивация развиваться есть )

    Для Ардуины действительно существует куча шилдов и примеров кода на своем упрощенном языке(хотя это по-прежнему C++), что для старта очень даже неплохо - при наличии желания можно разобраться в том, как все устроено еще до того, как возьмете в руки паяльник.
    И никто не мешает вам, при достижении определенного уровня, перейти на программирование контроллеров с помощью других компиляторов, исключая Arduino IDE и lazy coding. При этом на первых порах по-прежнему можно использовать Arduino-загрузчик и не париться со всеми проблемами сразу.

    Сразу же рекомендую кроме Ардуино купить на будущее что-нибудь типа STM32 Nucleo. У этой платы есть совместимость с Arduino-шилдами, mbed-загрузчик(заливка прошивки происходит простым копированием на виртуальную USB-флешку), а так же полноценный STLink-программатор с пинами для программирования внешних контроллеров - это значит, что в последствии вы можете собрать собственный девайс на STM32 микроконтроллере и с помощью встроенного в Nucleo SLink-программатора его запрограммировать, просто подсоединив пару проводков(SWD).

    И впоследствии, если не растеряете желание расти, вполне сможете создавать уже свою электронику и при этом, к примеру если остановитесь на STM32 контроллерах, все еще использовать STLink от Nucleo для программирования своих девайсов.
    Выглядеть это будет приблизительно так: 5.101.107.156/Habr/IMG_1235.JPG
    Здесь две Nucleo-платы слева используются как STLink-программаторы для двух плат справа соответственно )

    Ну а дальше все зависит только от вас.
    Удачи )
    Ответ написан
    Комментировать
  • Как выйти из stream по условию?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Использовать takeWhile.
    Ответ написан
    3 комментария
  • Как выглядит реальный пример теста JUNIT?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Пользу от тестов замечаешь только тогда, когда начинаешь писать что-то сложнее hello world'ов. Особенно хорошо их видно, когда приложение разрабатывается уже несколько лет и более, чем десятком разработчиков. Изменяешь какую-то часть кода, запускаешь тестирование и видишь, что теперь другой участок кода тестирование не проходит, так как в прошлом году у разработчика, которого ты даже не встречал, протекла абстракция.
    Ответ написан
    Комментировать
  • Как объяснить человеку, что ему нужно знать язык досконально?

    sim3x
    @sim3x
    Можно знать ЯП и писать говнокод
    Можно не знать досконально ЯП и не писать говнокод
    Ответ написан
    Комментировать
  • Как вы создаете себе обстановку для программирования?

    @leremin
    atypical programmer
    Два огромных монитора и пепельница. А вот пиво, вопреки расхожему мнению, мешает.
    Ответ написан
    1 комментарий
  • Как вы создаете себе обстановку для программирования?

    @Unit11
    Есть секрет ) . У тебя должен быть план, когда садишься писать код. И не просто план сделать программу, а конкретно, что сегодня реализовать, что до обеда, что после. Надо думать о программе в нерабочее время, и когда ты начнёшь писать, тебе уже ничто не помешает и не отвлечёт, ты просто пишешь что запланировал. Если не знаешь как что-то написать, то узнать как это тоже часть плана, ну и т.д. К этому серьёзно не относятся, но план очень организует и дисциплинирует, необходимо очень серьёзно к этому относится.
    Ответ написан
    Комментировать