Как запустить atmega328p на 8, 4 и 1 мгц?

Вместо использования обычной платы Arduino я приобрел atmega328p-pu вместе со следующими компонентами:

  1. Керамический конденсатор 22 пФ
  2. Резистор 10K
  3. Кварцевый резонатор 16 МГц
  4. Конденсатор 47 мкФ
  5. Электропитание 3,3 В

Схема выглядит следующим образом:

Поскольку чип atmega328p, который я купил, уже поставляется с загрузчиком Arduino, я могу сразу же запрограммировать этот чип! В этом видео более подробно объясняется, как загрузить код в чип. Это очень просто.

Я запускаю свой чип atmega328p с источником питания 3,3 В по следующим причинам:

  1. У меня есть несколько датчиков, таких как NRF24L01, которые не могут потреблять 5 В.
  2. Я также запускаю этот проект с батареей 3,3, чтобы сэкономить электроэнергию.
  3. Я не хочу использовать стабилизаторы напряжения, так как они неэффективны и расходуют заряд батареи.
  4. Все работает отлично.

Несмотря на то, что все работает отлично, если я использую atmega328P на частоте 16 МГц @ 3.3VI, я не следую спецификациям. Чтобы сделать все правильно, я хочу запускать свой код на частоте 8 МГц, чтобы соответствовать спецификациям

Вопрос

Как правильно запустить этот проект на частоте 8 МГц? Если я поменяю кварц 16 МГц на 8 МГц, он будет работать на 8 МГц, но скорость будет вдвое меньше. Я должен разделить все функции, связанные со временем, на 2. Кроме того, я не могу загрузить новый код, если он имеет кристалл 8 МГц. Чтобы загрузить новый код, мне нужно разместить кристалл 16 МГц, загрузить код, а затем снова изменить кристалл.

Могу ли я по-прежнему использовать кварц 16 МГц и работать на частоте 8 МГц, чтобы мне не приходилось постоянно заменять кварц? Я хочу, чтобы моя функция millis и другие функции, зависящие от времени, имели правильное время. Я не хочу делить все на 2.

Нужно ли мне прописывать другой загрузчик, чтобы это работало? Где я могу найти учебник, который может объяснить мне все это?

Есть руководства по использованию внутреннего кристалла 8 МГц от чипа atmega328, но все же хочется использовать внешний кристалл, так как он намного точнее

Изменить

Я только что нашел эту ссылку, в которой объясняется, как это сделать. Ответ Эдгара Боне кажется намного проще, поэтому я буду придерживаться этого.

, 👍0


1 ответ


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

2

Если вы используете MCU на частоте 8 МГц, все будет работать на этой частоте: не только ядро ЦП, но и таймеры, включая Таймер 0, который используется для millis(), delay() и т. д. Поэтому вам придется использовать модифицированный версия функций синхронизации Arduino, чтобы справиться с этими часами частота.

К счастью, такая версия уже существует. На самом деле, это даже поддерживается на стандартном ядре Arduino, так как оно поддерживает версию 3.3 В Arduino Pro Mini, в котором используется ATmega328P с тактовой частотой 8 МГц.

Поэтому я предлагаю вам установить кристалл 8 МГц, записать в загрузчик для 3.3 V Pro Mini и сообщите своей IDE, что вы используете этот плата. В меню "Инструменты":

  • установите плату на "Arduino Pro или Pro Mini"
  • установите для процессора значение ""ATmega328P (3,3 В, 8 МГц)"
,

Как мне записать загрузчик для 3.3V Pro mini? Это другой загрузчик, чем тот, что был в комплекте? Остальную часть ответа я прекрасно понимаю. Спасибо за помощь Эдгар., @Tono Nam

@TonoNam: вам понадобится программатор ISP или Arduino, на котором запущен скетч ArduinoISP. В меню «Инструменты» Arduino IDE есть пункт «Записать загрузчик». Вы можете поискать в Интернете инструкции о том, как его использовать., @Edgar Bonet