Найти тему
Simple Radio

ATtiny 13 аналоговые входы. ШИМ.

Здравствуйте уважаемые читатели. В прошлой статье, мы пробовали программировать микроконтроллеры ATtiny13 в Arduino IDE.

В этой статье поговорим об аналоговых пинах микроконтроллера, поработаем с ШИМ сигналом, и попробуем плавно управлять яркостью светодиода. Работать будем со стандартными функциями ардуино - analogRead() и analogWrite().

Функция analogRead() считывает значение с указанного аналогового входа. ATtiny13 имеет 4 аналоговых пина. В ATtiny13 десятиразрядный АЦП. Соответственно, напряжение, поданное на аналоговый вход, как правило от 0 до 5 вольт, будет преобразовано в значение от 0 до 1023. Больше 5 вольт подавать на аналоговый вход не рекомендуется, так как можно спалить микросхему.

Синтаксис функции - analogRead(pin), где pin это номер порта микроконтроллера. В нашем случае это номера А0, А1, А2 и А3. Перед вызовом функции analogRead(), аналоговый пин с которого будем считывать показания должен быть сконфигурирован как вход, pinMode(наш пин, INPUT). Ниже на распиновке обозначены аналоговые входы ATtiny13.

Аналоговые пины.
Аналоговые пины.

Функция analogWrite() служит для генерации ШИМ сигнала на выбранном выходе микроконтроллера. Именно это полезная функция поможет нам плавно управлять яркостью светодиода и не только. В ATtiny13 есть два выхода, которые поддерживают ШИМ, но одновременно работать можно только с одним из них.

ШИМ выходы
ШИМ выходы

Синтаксис функции – analogWrite(pin, value), где pin это номер порта (в нашем случае PB1 или PB0), а value это значение от 0 до 255.

После вызова функции analogWrite(), на выбранном пине будет генерироваться постоянная прямоугольная волна с заданной шириной импульса.

ШИМ 50%
ШИМ 50%

Перейдем к практике. С помощью функций analogRead(), analogWrite() и переменного резистора, мы будем плавно менять яркость светодиода. Для начала подключим нашу ATtiny13 к программатору. Как это сделать мы разобрали в прошлой статье (ссылка на статью). Светодиод плюсом подключаем к шестой ноге микросхемы (порт PB1), а минусом, через резистор, к массе (нога 4).

Схема подключения
Схема подключения

Открываем Arduino IDE и пишем следующий код.

Код
Код

Как видим, мы установили значение ШИМ равное 10. Это близко к нулю, и соответственно светодиод светится слабо.

Слабо светится
Слабо светится

Ниже показано как этот сигнал выглядит на осциллографе.

Осциллограмма значение 10
Осциллограмма значение 10

Теперь попробуем значение 250.

Код
Код

Светодиод светит почти на максимальной яркости.

Светится почти на максимальной яркости
Светится почти на максимальной яркости

Ниже представлен этот сигнал на осциллографе.

Осциллограмма значение 250
Осциллограмма значение 250

На следующем этапе, подключим переменный резистор. Как правило у переменного резистора или потенциометра три вывода, два крайних и один центральный. К ATtiny13 потенциометр подключается следующим образом: средний вывод на любой аналоговый пин, крайние – на GND и питание. От порядка подключения GND и питания зависит направление изменения значения. Чаще всего ставят потенциометры с сопротивлением 10 кОм. Но это значение может варьироваться как в большую, так и в меньшую сторону. В нашем примере задействован потенциометр на 50кОм. Теперь подключим его к микроконтроллеру. Один из крайних выводов подключим на плюс, один на землю, а средний вывод подключим ко второй ноге ATtiny13 (АDC3 на распиновке). После этого переходим к коду. Открываем Arduino IDE и добавляем в наш код еще несколько строк:

Код
Код

В первую очередь обратим внимание на строчки:

#define res A3// Резистор подключен к A3, вторая нога микросхемы (Вариант 1)

// analog_pin_t res = A3; // Резистор подключен к A3, вторая нога микросхемы (Вариант 2)

Ядро MicroCore с помощью которого мы работаем с ATtiny13, требует, чтобы мы обращались к аналоговым пинам следующим образом: AnalogRead(A3). Если написать так - AnalogRead(PB3) или просто (3), то компилятор выдаст ошибку. Данное правило распространяется на все аналоговые входы. Так же, глядя на эти строки, можем заметить еще одну особенность. Если вы хотите сохранить номер аналогового пина в переменной, то нужно делать такую запись: analog_pin_t var = A3; Где var – название вашей переменной, А3 –номер аналогового пина от А0 до А3. Второй вариант, использовать #define var A3, где var – название по которому вы будете обращаться к пину, А3 – номер аналогового пина от А0 до А3. Это особенности работы с аналоговыми пинами в ядре MicroCore. В коде, применен второй вариант, а первый закомментирован.

Так же, в коде есть строка brt = pwm/4; Тут мы делим полученное значение с аналогового входа на 4. Так как функция analogRead() возвращает значение от 0 до 1023, а функция analogWrite() может принимать значения только от 0 до 255.

Загружаем наш код в ATtiny13. (программируем ATtiny13 в Arduino IDE). Не забываем при загрузке нажимать кнопку загрузить на плату при помощи программатора. Если все прошло успешно, яркость светодиода будет меняться при повороте ручки потенциометра.

Результат
Результат

Спасибо, что дочитали статью до конца! Если вам понравилось, пожалуйста поставьте лайк. Если вам нравится данная тематика, подписывайтесь на мой канал. До новых встреч!