Как запустить atmega328p на 8, 4 и 1 мгц?
Вместо использования обычной платы Arduino я приобрел atmega328p-pu вместе со следующими компонентами:
- Керамический конденсатор 22 пФ
- Резистор 10K
- Кварцевый резонатор 16 МГц
- Конденсатор 47 мкФ
- Электропитание 3,3 В
Схема выглядит следующим образом:
Поскольку чип atmega328p, который я купил, уже поставляется с загрузчиком Arduino, я могу сразу же запрограммировать этот чип! В этом видео более подробно объясняется, как загрузить код в чип. Это очень просто.
Я запускаю свой чип atmega328p с источником питания 3,3 В по следующим причинам:
- У меня есть несколько датчиков, таких как NRF24L01, которые не могут потреблять 5 В.
- Я также запускаю этот проект с батареей 3,3, чтобы сэкономить электроэнергию.
- Я не хочу использовать стабилизаторы напряжения, так как они неэффективны и расходуют заряд батареи.
- Все работает отлично.
Несмотря на то, что все работает отлично, если я использую atmega328P на частоте 16 МГц @ 3.3VI, я не следую спецификациям. Чтобы сделать все правильно, я хочу запускать свой код на частоте 8 МГц, чтобы соответствовать спецификациям
Вопрос
Как правильно запустить этот проект на частоте 8 МГц? Если я поменяю кварц 16 МГц на 8 МГц, он будет работать на 8 МГц, но скорость будет вдвое меньше. Я должен разделить все функции, связанные со временем, на 2. Кроме того, я не могу загрузить новый код, если он имеет кристалл 8 МГц. Чтобы загрузить новый код, мне нужно разместить кристалл 16 МГц, загрузить код, а затем снова изменить кристалл.
Могу ли я по-прежнему использовать кварц 16 МГц и работать на частоте 8 МГц, чтобы мне не приходилось постоянно заменять кварц? Я хочу, чтобы моя функция millis
и другие функции, зависящие от времени, имели правильное время. Я не хочу делить все на 2.
Нужно ли мне прописывать другой загрузчик, чтобы это работало? Где я могу найти учебник, который может объяснить мне все это?
Есть руководства по использованию внутреннего кристалла 8 МГц от чипа atmega328, но все же хочется использовать внешний кристалл, так как он намного точнее
Изменить
Я только что нашел эту ссылку, в которой объясняется, как это сделать. Ответ Эдгара Боне кажется намного проще, поэтому я буду придерживаться этого.
@Tono Nam, 👍0
1 ответ
Лучший ответ:
Если вы используете 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 МГц)"
- Процедура изменения частоты Нано или аналогичной
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
- Запрограммировать ATMega328P и использовать его без платы Arduino.
- Установите частоту ШИМ на 25 кГц.
- Не удается снова загрузиться после смены платы
- Максимальная частота цифрового сигнала в Arduino Uno?
- Постоянный выход тактовой частоты Arduino
- ATMEGA328P-U vs ATMEGA328-PU
Как мне записать загрузчик для 3.3V Pro mini? Это другой загрузчик, чем тот, что был в комплекте? Остальную часть ответа я прекрасно понимаю. Спасибо за помощь Эдгар., @Tono Nam
@TonoNam: вам понадобится программатор ISP или Arduino, на котором запущен скетч ArduinoISP. В меню «Инструменты» Arduino IDE есть пункт «Записать загрузчик». Вы можете поискать в Интернете инструкции о том, как его использовать., @Edgar Bonet