Путаница с ATmega328P и 3,3 В/8 МГц

Во-первых, я попытался установить загрузчик на внутренний генератор с частотой 8 МГц.

Я попробовал настроить плату отсюда - https://github.com/oshlab/Breadboard-Arduino.

А также установку breadboard-1-6-x.zip отсюда - http: //www.arduino.cc/en/Tutorial/ArduinoToBreadboard.

Запись загрузчика в обоих случаях работает с настройками предохранителя -Uefuse:w:0x05:m -Uhfuse:w:0xDA:m -Ulfuse:w:0xE2:m (используя Arduino IDE 1.6.7):

avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0x05:
avrdude: load data efuse data from input file 0x05:
avrdude: 1 bytes of efuse verified
...
avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDA:
avrdude: load data hfuse data from input file 0xDA:
avrdude: 1 bytes of hfuse verified
...
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xE2:
avrdude: load data lfuse data from input file 0xE2:
avrdude: 1 bytes of lfuse verified

Когда я пытаюсь запустить тестовый скетч (ниже) при этих напряжениях:

  • 3,3 В не работает (пробовал несколько источников 3,3 В, все отказали).
  • 4,23 В (3 аккумулятора типа АА) работает.
  • 4,8 В (3 щелочные батареи типа АА) работает.
  • 5В работает.

Чтобы попытаться определить, была ли проблема в моих источниках питания или в загрузчике, я загрузил этот тестовый скетч на свой ATmega328P, Arduino Nano (все Nano 16 МГц?) и Arduino Pro 16 МГц, чтобы увидеть, горит ли красный светодиод. (с резистором 100 Ом для ATmega328P) загорается примерно за то же время. Этот тестовый скетч также не работает при напряжении 3,3 В и должен работать при напряжении 5 В.

(изменить) При запуске этого тестового скетча на 3.3VI см. нет логического уровня 3,3 В на любом выходном контакте моего мультиметра. При работе на 4,23, 4,28, 5 В я вижу этот логический уровень на всех выходных контактах.

(обновление) При подключении плюса светодиода напрямую к 3,3 В светодиод загорается. Таким образом, источник 3,3 В имеет достаточную мощность, чтобы напрямую зажечь светодиод.

Итак, я предположил, что, поскольку в моей схеме ATmega328P нет кристалла (а Nano и Pro Mini работают на частоте 16 МГц), эти циклы будут выполняться за разное время? Но нет, циклы do выполняются с одинаковой скоростью (3 с небольшим секунды) - так мой Nano/Pro Mini разогнан, или мой ATmega все еще работает на частоте 16 МГц, но без кристалла?? Скорее запутался.

Спасибо.

(обновление) Я попробовал второй ATmega328P, та же проблема.

(код изменен для использования 14 выходных контактов)

void setup() {
  for (int p=0; p<14; p++) pinMode(p, OUTPUT);
}

void loop() {
  // потеря времени.
  int y = 0;
  for (int i = 0; i < 11; i++) {
    for (int j = 0; j < 11; j++) {
      for (int k = 0; k < 101; k++) {
        y+=analogRead(A0);
      }
    }
  }
  for (int p=0; p<14; p++) digitalWrite(p, y % 2);
  for (int p=0; p<14; p++) digitalWrite(p, HIGH);
  delay(1000);
  for (int p=0; p<14; p++) digitalWrite(p, !(y % 2));
  for (int p=0; p<14; p++) digitalWrite(p, LOW);
  delay(1000);
}

, 👍6


4 ответа


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

4

Это была проблема с плавким предохранителем.

Изменение boards.txt с:

atmega328bb.bootloader.extended_fuses=0x05

в

atmega328bb.bootloader.extended_fuses=0x02

решил это для меня (*).

Чип и красный светодиод теперь работают при напряжении 3,01 В (1 щелочной аккумулятор AA и 1 перезаряжаемый аккумулятор) и 3,19 В (2 щелочных аккумулятора AA).

(*) не уверен, почему мне пришлось инвертировать биты (0000 0010=0x02 по сравнению с 0000 0101=0x05) по сравнению с таблицами ниже.


,

Вычисление этих предохранителей вручную подвержено ошибкам - я уже потерял чип AtMel из-за неправильного расчета. http://www.engbedded.com/fusecalc/ сделает всю тяжелую работу за вас., @AMADANON Inc.

Ага, спасибо за предупреждение. Любая идея, почему значение BOD по умолчанию «0x05» не работает для меня, а «0x02» работает? Кажется, мне нужно перевернуть биты. Если я установил «0x07», это также работает (предположительно BOD отключен, но биты не перевернуты!), @Paul Grime

Я не знаю. Это за излияние? Вы можете прочитать это обратно?, @AMADANON Inc.


4

Если вы используете светодиод для индикации того, что ваш скетч запущен, проблема может заключаться в нем.

Например, если у вас довольно обычный красный светодиод, его прямое напряжение может составлять 2,0 В при 20 мА (см. технические характеристики вашего конкретного светодиода). Поместив эти значения в LED-калькулятор, он скажет вам, что вам нужен резистор на 150 Ом. Вы могли проверить это и увидеть, как загорается светодиод.

Тогда, если вы снизите напряжение до 3,3 В, ваш светодиод может быть либо очень тусклым, либо (что более вероятно!) вообще не загорится. Помещение 3,3 В на ту же веб-страницу показывает, что вам нужен меньший резистор, 68 Ом, для того же светодиода.

PS - я только что заметил ваш абзац о зеленом светодиоде - "настоящий зеленый" светодиод может иметь падение напряжения 3,3 В, что означает, что для 5 В вам понадобится резистор на 100 Ом (как описано в вашем абзаце); для питания 3,3 В вам понадобится резистор на 1 Ом. Это наверняка ваша проблема

,

Спасибо за Ваш ответ. Я поменял с зеленого на красный и вижу ту же проблему. Я также обновил скетч (отредактированный qn), чтобы использовать 14 цифровых контактов (0..13) и не вижу уровня 3,3 В на любом из этих контактов, но я увижу 5 В., @Paul Grime


2

Если вы питаете свою схему от аккумуляторной батареи, вы можете обнаружить, что ваша батарея не может обеспечивать достаточный ток. Чтобы проверить это, используйте мультиметр для измерения напряжения батареи, когда ваша цепь подключена (и, возможно, работает или нет). Если напряжение падает ниже 2,7 В (согласно вашим предохранителям, используйте страницу Калькулятор предохранителей, чтобы узнать, что означают ваши предохранители) , ваш чип выключится, в результате чего напряжение снова поднимется, снова включит чип, и он снова повернется. Аккумулятору может даже потребоваться некоторое время для восстановления (думаю, в прошлый раз, когда это случилось со мной, это заняло около 10 секунд - Я думал, что уничтожил батарею).

Это довольно распространенная проблема с двигателями (которые потребляют много энергии), но зависит от конкретной батареи и конкретной нагрузки.

В этом случае вы можете использовать несколько батарей параллельно (подключите все стороны + вместе к стороне + вашей цепи; все стороны - вместе к стороне - вашей цепи). Большинство держателей батарей соединены последовательно, что означает, что вместо этого они повышают напряжение; для этого вам придется сделать собственную проводку.

,

Спасибо за Ваш ответ. Учитывая то, что я вижу (вообще нет логических уровней 3,3 В), мне интересно, обнаружение отключения или что-то в этом роде. 328P, по-видимому, не будет работать при напряжении ниже 4,8 В (хотя я не измерял 3,3–4,8 В). Кроме того, я понятия не имею, почему 328P запускает тестовый скетч с одинаковой скоростью на Nano и Pro Mini., @Paul Grime


0

Привет всем,

Сталкиваюсь с той же проблемой. На макетной плате был ATMEGA328P-PU с генератором 8 МГц, который не работал с 3,3 В (стабилизированным) в качестве источника питания. При 5 В все работает как положено.

Наконец-то у меня все заработало с расширенными предохранителями, установленными на xxxxx110, что устанавливает BOD на 1,8 В. Я могу убедиться, что мой ATMEGA328P-PU не работает с предохранителями, установленными на xxxxx101 = 2,7 В (макс. 2,9 В). Напряжение питания составляет около 3,4 В и имеет блокирующие конденсаторы, поэтому это не может быть проблемой питания.

С уважением, Экехард

,