Слишком медленный запуск с Atmega2560 на нестандартной печатной плате
У меня есть несколько заказных печатных плат на базе Atmega 2560. Я использую AVRISP MarkII для прошивки. Нет загрузчика.
Прошивка безупречна, она просто работает. У меня одна собранная печатная плата работает как надо, проблем нет.
Но у другого есть довольно запаздывание в своих функциях. Он также был прошит нормально, но работает не совсем нормально.
Вот мои наблюдения;
Утверждая сброс, я ожидаю, что четыре светодиода на печатной плате будут работать (включаться и выключаться) с интервалом в 100 мс один за другим. Это происходит в самом начале в разделе Setup() программы.
Обратите внимание, что: светодиоды подключены к MCU через полевые транзисторы. Если на выходе MCU низкий уровень, они включены, и наоборот.
Итак, с этой проблемной печатной платой все светодиоды загораются все вместе через 10 секунд после нажатия кнопки сброса и остаются почти на 60 секунд, прежде чем они начнут последовательность (включаться и затем выключаться), как закодировано.
И затем эта последовательность также медленно происходит. Это не 100 мс, как я закодировал, а почти 4 секунды или около того.
Я подозреваю, что это схема внешнего тактового генератора (16 МГц), но я не могу точно это проверить, так как у меня нет под рукой осциллографа.
Вы можете увидеть простой код, который я использую для проверки этого поведения;
void TestLeds() {
unsigned long interval = 100;
digitalWrite(LED1_PIN, LOW);
delay(interval);
digitalWrite(LED1_PIN, HIGH);
delay(interval);
digitalWrite(LED2_PIN, LOW);
delay(interval);
digitalWrite(LED2_PIN, HIGH);
delay(interval);
digitalWrite(LED3_PIN, LOW);
delay(interval);
digitalWrite(LED3_PIN, HIGH);
delay(interval);
digitalWrite(LED4_PIN, LOW);
delay(interval);
digitalWrite(LED4_PIN, HIGH);
}
Как/где я могу проверить узкое место?
Спасибо.
ИЗМЕНИТЬ:
Чтобы быть более конкретным, я добавляю этот вывод о программировании; здесь
@Sener, 👍0
Обсуждение2 ответа
Лучший ответ:
Я закрываю дело. Хотя это не 100% удовлетворение. Потому что использование Visual Studio с Visual Micro помогло мне в этом вопросе не естественным образом, а чем-то другим.
Для дальнейшего использования для кого-то, кто может извлечь из этого пользу, я хотел бы объяснить здесь, что я сделал, чтобы кратко решить эту проблему. Поскольку @Gerben (большие заслуги принадлежат ему) указал правильное направление, я проверил предохранители, установив Atmel Studio 7 и используя его программатор.
Да, предохранители были совершенно не те. Поэтому я прочитал предохранители с моей исправной печатной платы и отметил их в стороне, а затем применил те же самые настройки предохранителей к медленно работающей печатной плате. Я только что запрограммировал предохранители, прошивка была той, которую я запрограммировал ранее в UC. Итак, вуаля, медлительность ушла.
Я думаю, что теперь я буду использовать Atmel Studio 7 наряду с Visual Studio, так как в ней есть все встроенное, включая поддержку Arduino.
Спасибо всем причастным.
Просто запишите загрузчик через arduino ide, прежде чем записывать прошивку. Во время записи загрузчика ide также настраивает необходимые биты фьюза.
Это то, чем я занимаюсь. Затем загрузите с помощью программатора для загрузки без вызова загрузчика., @CrossRoads
Я должен согласиться с вами, ребята. Я делаю это дома со своими хобби-проектами. Способ, который я выбираю, как указано в моем решении, уже понравился нашим полевым инженерам. Я не могу попросить их использовать Arduino IDE для развертывания новых версий прошивки. Раньше они использовали прошивальщик Atmel Studio. Спасибо, в любом случае., @Sener
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
Измерьте напряжение и ток., @Mikael Patel
Ты предохранители менял? По умолчанию большинство AVR работают на заводской частоте 1 МГц. Это будет означать, что ваш код работает в 16 раз медленнее., @Gerben
@Gerben <pedantic> Вы имеете в виду шестнадцатую часть скорости, а не в шестнадцать раз медленнее. В шестнадцать раз медленнее чего? </педантичный>, @Majenko
Я просто использую ту же настройку (предохранители), что и для другой печатной платы. Но как насчет этого: если внешний генератор (16 МГц) по какой-то причине не работает, хотя перепрошивка только что работала нормально, может быть что-то случилось с предохранителями, например, автоматически отрегулировал себя или что-то вроде этого и вместо этого начал работать на 1 МГц?, @Sener
@Mikael Patel: Не могли бы вы поподробнее рассказать об измерении напряжения и тока? Что измерять и с чем сравнивать и что выяснять в итоге? Спасибо., @Sener
Предохранители сами не сбрасываются. Также нет аварийного переключения в случае, если кристалл не работает. Вы можете попробовать прочитать предохранители, чтобы убедиться, что они установлены правильно., @Gerben
@majenko так мы говорим на моем языке. Судя по всему, это не переводится на английский язык. Спасибо за внимание., @Gerben
@Gerben Так же говорят многие носители английского языка, несмотря на то, что это совершенно неправильно., @Majenko
@Gerben: я не могу понять. Если я использую те же предохранители для другой идентичной конструкции печатной платы, и она работает нормально, зачем мне снова проверять предохранители, если они не сбрасываются? Здесь я явно упускаю момент. Можете ли вы быть более конкретным, если вы все еще настаиваете на проверке предохранителей? (что я все равно проверю) Спасибо., @Sener
Может быть, что-то пошло не так, когда вы поставили фьюзы, и чтобы они имели свое первоначальное значение., @Gerben