Время занимает больше времени, чем ожидалось
Это на заказной печатной плате 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 месяцев, прежде чем что-то еще сломалось. У меня была эта проблема со второй и третьей платой, которые я пробовал.
@Tri, 👍0
Обсуждение2 ответа
Лучший ответ:
Фактор 8 в синхронизации пахнет неправильными предохранителями.
Возможно, вы используете не внешний генератор, а внутренний?
Это коэффициент 20, не так ли? И я почти уверен, что он использует внешний 16-мегагерцовый генератор на плате, если только он не был каким-то образом поврежден. Я также только что заметил, что вторая плата показывает коэффициент 16, по совпадению., @Tri
Я беру свои слова обратно насчет второй платы. Я просто удвоил задержку в коде, и наблюдаемая задержка осталась прежней. Я очень смущен., @Tri
Вы правы: трудно получить 8 из 4 и 5. (Не знаю, как я взял 10/5 только для того, чтобы объяснить запах/запах ;) Но тогда ваш вопрос еще большее чудо., @DataFiddler
На всех новых платах, которые я тестировал (за исключением первой, которая, как я сказал, работала), я не сжег загрузчик. Прожиг загрузчика сделал тайминг нормальным! Если кто-нибудь может сказать мне, почему это так, я приму ваш ответ как «правильный».
Запись загрузчика также (обычно) устанавливает фьюзы, поскольку конкретные настройки фьюзов относятся к загрузчику. Таким образом, ответ DataFiddler объясняет, почему вы нашли, как исправить., @user85471
:) так что вы тоже заслуживаете +1 ..., @DataFiddler
Оуууу спасибо, @Tri
- Arduino Micro против Pro Micro
- Arduino Pro Micro не распознается компьютером и не отображается в портах
- Использовать timer0, не влияя на millis() и micros().
- Программирование Arduino Micro через RX/TX
- Arduino Мигает двумя светодиодами без задержки (количество повторений)
- TCCR1A и TCCR2A на Леонардо
- 433 МГц отправка не принимается
- Arduino : отправка данных через спутник (или другие решения ? без GSM)
Проверьте F_CPU при компиляции и настройку lfuse. См. http://www.engbedded.com/fusecalc для удобного инструмента., @DataFiddler
Эй, извини, что так долго не возвращался. Я использую arduino IDE и не могу найти настройки, о которых вы говорите, в разделе настроек, поэтому я предполагаю, что на этом фронте все в порядке. Я могу сделать компиляцию/загрузку подробной и опубликовать это, если вы считаете, что это поможет., @Tri
Неважно, проверьте ответ, который я только что опубликовал., @Tri
Arduino IDE имеет настройки фьюзов в файле
boards.txt
. Либо вы «запишите загрузчик», либо используете автономный программатор с утилитой avrdude., @DataFiddler