Время занимает больше времени, чем ожидалось

Это на заказной печатной плате Arduino (32u4), которую я программирую с помощью программатора Sparkfun Pocket AVR. Другая программа, которую я писал, работала не так, как я ожидал, поэтому я попробовал пример скетча «BlinkWithoutDelay» из раздела «Цифровые примеры».

https://media.discordapp.net/attachments/572565310679547946/650075749851856908/unknown.png ^ Так что вам не нужно искать это самостоятельно. предыдущаяMillis инициализируется 0.

Однако светодиод меняет свое состояние каждые 4 секунды, а не каждые 200 мс с этим кодом. Я увеличил интервал с 200 до 400, а время IRL увеличилось с 4 секунд до 8 секунд, так что, по крайней мере, это стабильно. Мой первый инстинкт заключается в том, что кристалл каким-то образом сломан, но я не думаю, что смог бы прошить MCU, если бы это было так. Итак, кто-нибудь знает, что происходит? Для справки, у меня было собрано 5 таких печатных плат, и первая работала отлично в течение 2 месяцев, прежде чем что-то еще сломалось. У меня была эта проблема со второй и третьей платой, которые я пробовал.

, 👍0

Обсуждение

Проверьте F_CPU при компиляции и настройку lfuse. См. http://www.engbedded.com/fusecalc для удобного инструмента., @DataFiddler

Эй, извини, что так долго не возвращался. Я использую arduino IDE и не могу найти настройки, о которых вы говорите, в разделе настроек, поэтому я предполагаю, что на этом фронте все в порядке. Я могу сделать компиляцию/загрузку подробной и опубликовать это, если вы считаете, что это поможет., @Tri

Неважно, проверьте ответ, который я только что опубликовал., @Tri

Arduino IDE имеет настройки фьюзов в файле boards.txt. Либо вы «запишите загрузчик», либо используете автономный программатор с утилитой avrdude., @DataFiddler


2 ответа


Лучший ответ:

1

Фактор 8 в синхронизации пахнет неправильными предохранителями.

Возможно, вы используете не внешний генератор, а внутренний?

,

Это коэффициент 20, не так ли? И я почти уверен, что он использует внешний 16-мегагерцовый генератор на плате, если только он не был каким-то образом поврежден. Я также только что заметил, что вторая плата показывает коэффициент 16, по совпадению., @Tri

Я беру свои слова обратно насчет второй платы. Я просто удвоил задержку в коде, и наблюдаемая задержка осталась прежней. Я очень смущен., @Tri

Вы правы: трудно получить 8 из 4 и 5. (Не знаю, как я взял 10/5 только для того, чтобы объяснить запах/запах ;) Но тогда ваш вопрос еще большее чудо., @DataFiddler


1

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

,

Запись загрузчика также (обычно) устанавливает фьюзы, поскольку конкретные настройки фьюзов относятся к загрузчику. Таким образом, ответ DataFiddler объясняет, почему вы нашли, как исправить., @user85471

:) так что вы тоже заслуживаете +1 ..., @DataFiddler

Оуууу спасибо, @Tri