Слишком медленный запуск с 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);
}

Как/где я могу проверить узкое место?

Спасибо.

ИЗМЕНИТЬ:

Чтобы быть более конкретным, я добавляю этот вывод о программировании; здесь

, 👍0

Обсуждение

Измерьте напряжение и ток., @Mikael Patel

Ты предохранители менял? По умолчанию большинство AVR работают на заводской частоте 1 МГц. Это будет означать, что ваш код работает в 16 раз медленнее., @Gerben

@Gerben <pedantic> Вы имеете в виду шестнадцатую часть скорости, а не в шестнадцать раз медленнее. В шестнадцать раз медленнее чего? </педантичный>, @Majenko

Я просто использую ту же настройку (предохранители), что и для другой печатной платы. Но как насчет этого: если внешний генератор (16 МГц) по какой-то причине не работает, хотя перепрошивка только что работала нормально, может быть что-то случилось с предохранителями, например, автоматически отрегулировал себя или что-то вроде этого и вместо этого начал работать на 1 МГц?, @Sener

@Mikael Patel: Не могли бы вы поподробнее рассказать об измерении напряжения и тока? Что измерять и с чем сравнивать и что выяснять в итоге? Спасибо., @Sener

Предохранители сами не сбрасываются. Также нет аварийного переключения в случае, если кристалл не работает. Вы можете попробовать прочитать предохранители, чтобы убедиться, что они установлены правильно., @Gerben

@majenko так мы говорим на моем языке. Судя по всему, это не переводится на английский язык. Спасибо за внимание., @Gerben

@Gerben Так же говорят многие носители английского языка, несмотря на то, что это совершенно неправильно., @Majenko

@Gerben: я не могу понять. Если я использую те же предохранители для другой идентичной конструкции печатной платы, и она работает нормально, зачем мне снова проверять предохранители, если они не сбрасываются? Здесь я явно упускаю момент. Можете ли вы быть более конкретным, если вы все еще настаиваете на проверке предохранителей? (что я все равно проверю) Спасибо., @Sener

Может быть, что-то пошло не так, когда вы поставили фьюзы, и чтобы они имели свое первоначальное значение., @Gerben


2 ответа


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

1

Я закрываю дело. Хотя это не 100% удовлетворение. Потому что использование Visual Studio с Visual Micro помогло мне в этом вопросе не естественным образом, а чем-то другим.

Для дальнейшего использования для кого-то, кто может извлечь из этого пользу, я хотел бы объяснить здесь, что я сделал, чтобы кратко решить эту проблему. Поскольку @Gerben (большие заслуги принадлежат ему) указал правильное направление, я проверил предохранители, установив Atmel Studio 7 и используя его программатор.

Да, предохранители были совершенно не те. Поэтому я прочитал предохранители с моей исправной печатной платы и отметил их в стороне, а затем применил те же самые настройки предохранителей к медленно работающей печатной плате. Я только что запрограммировал предохранители, прошивка была той, которую я запрограммировал ранее в UC. Итак, вуаля, медлительность ушла.

Я думаю, что теперь я буду использовать Atmel Studio 7 наряду с Visual Studio, так как в ней есть все встроенное, включая поддержку Arduino.

Спасибо всем причастным.

,

0

Просто запишите загрузчик через arduino ide, прежде чем записывать прошивку. Во время записи загрузчика ide также настраивает необходимые биты фьюза.

,

Это то, чем я занимаюсь. Затем загрузите с помощью программатора для загрузки без вызова загрузчика., @CrossRoads

Я должен согласиться с вами, ребята. Я делаю это дома со своими хобби-проектами. Способ, который я выбираю, как указано в моем решении, уже понравился нашим полевым инженерам. Я не могу попросить их использовать Arduino IDE для развертывания новых версий прошивки. Раньше они использовали прошивальщик Atmel Studio. Спасибо, в любом случае., @Sener