Статьи » Разработки
Добавить статью

Минимальная обвязка Atmega328p

2021-04-18 в 01:28

В своих проектах где использую микроконтроллер я использую Atmega328p. Почему? Мне с ним удобно работать. Это тоже самое что Arduino UNO, Nano и Micro. Можно в Arduino IDE сделать быстро код и зашить все в свое устройство. И не обязательно иметь USB разъем для этого. Можно использовать внутрисхемное программирование. Разъем для этого называется ICSP. Это экономит место и финансы при сборке.

Я себе один раз разработал схему минимальной обвязки Atmega328p. И во всех своих проектах ее использую. Этого вполне достаточно чтобы контроллер работал, долго работал.

Сама схема обвязки Atmega328p. Или простая схема Arduino UNO.

обвязка atmega328p

Схема содержит все обязательные элементы для работы в виде Arduino платы.
Имеется кварцевый резонатор на 16 МГц. Рядом с ним конденсаторы на 22 пФ. Контрольный светодиод подключен к 13 пину Arduino (как и в оригинале) и служит знаком о том что программа записалась корректно. Такой пункт обязателен в коммерческих устройствах. Я его в программе включаю и выключаю с периодичностью в 1 секунду.

Код

#define CONTROL_LED_PIN  13;      // номер выхода, подключенного к светодиоду

int ledState = LOW;             // этой переменной устанавливаем состояние светодиода
long previousMillis = 0;        // храним время последнего переключения светодиода
long interval = 1000;             // интервал между включение/выключением светодиода (1 секунда)

void setup() {
  pinMode(CONTROL_LED_PIN, OUTPUT);      // задаем режим выхода для порта, подключенного к светодиоду
}

void loop()
{
  unsigned long currentMillis = millis();

  //проверяем не прошел ли нужный интервал, если прошел то
  if (currentMillis - previousMillis > interval) {
    // сохраняем время последнего переключения
    previousMillis = currentMillis;

    // если светодиод не горит, то зажигаем, и наоборот
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // устанавливаем состояния выхода, чтобы включить или выключить светодиод
    digitalWrite(CONTROL_LED_PIN, ledState);
  }
}

Пин reset подтянут к плюсу питания. Он используется для реализации возможности внутрисхемного программирования. Когда начинаем процесс записи прошивки, программатор (другая Ardunio UNO или Nano) подает на этот пин низкий уровень что в свою очередь останавливает выполнение программы.

Имеется конденсатор 100нФ (0,1мкФ) размещенный в цепи питания непосредственно возле микроконтроллера, ближе к 4 и 6 выводу VCC Atmega328p, помогут бороться с высокочастотными выбросами по питанию (которые, кстати, может генерировать сам микроконтроллер).

Плюс питания у меня еще подключен и к выводу 18 Atmega328p. Это вход для питания аналоговой части микроконтроллера.

Вывод 20 является входом для опорного напряжения АЦП. Он необходим если в вашем проекте необходимо брать за основу не напряжение питания микроконтроллера (для плат Arduino UNO это 5В), а какое-либо другое напряжение. Считаю что если он не используется в проекте, будет не лишним соединить с общий контактом через конденсатор 100нФ (0,1мкФ). Если мы используем опорное напряжение отличное от напряжения питания контроллера, необходимо использовать в скетче команду:

Код
analogReference(EXTERNAL); // использование AREF для опорного напряжения

Пока на этом все, если буду новые мысли, буду вносить правки. А если у вас есть предложения, пишите в комментариях.

Не пропустите обновления! Подписывайтесь на нашу страницу в Instagram.
Так же у нас есть Telegram канал.

Вам понравился наш проект? Поделитесь с друзьями!

Просмотров: 111. Оценка статьи: 5.0 из 5. Уже оценило 2 читателя

Об авторе - Администратор

More by Администратор

Вам может быть это интересно

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Сейчас читают