1,4K подписчиков

Работа с аналоговым сигналом на ATtiny10. ШИМ. Подключение потенциометра и управление яркостью светодиода

405 прочитали

Здравствуйте, уважаемые читатели! Продолжаю серию статей о микроконтроллере ATtiny10. В прошлом статье "Работа с цифровым сигналом на ATtiny10. Управление светодиодом. Подключение кнопки" я рассказывал как работать на данном микроконтроллере с входящим и исходящим цифровым сигналом. И приводил пример со светодиодом и подключением кнопки. А сегодня поговорим о работе с аналоговым сигналом на ATtiny10, т.е. об аналогах функций analogWrite() и analogRead() в Arduino IDE.

Работа с аналоговым сигналом на ATtiny10
Работа с аналоговым сигналом на ATtiny10

Я приведу пример работы с потенциометром на 10 кОм. Получая с него данные, мы будем управлять яркостью светодиода. Т.е. затронем работу технологии широтно-импульсной модуляции (сокращенно ШИМ) на ATtiny10.

Начнем с чтения аналогового сигнала и превращения его в цифровой с использованием функции АЦП (аналогово-цифрового преобразования.

Если посмотреть на распиновку ATtiny10, то с чтением аналогового сигнала у нас могут работать всё те же порты ввода вывода, что и с цифровым сигналом. Тогда как с ШИМ могут работать только порты PB0 и PB1.

Распиновка ATtiny10
Распиновка ATtiny10

Размещаем на макетной плате ATtiny10, припаянную к переходной плате, и подключаем потенциометр на 10 кОм. Соединяем первую ножку потенциометра с землей, третью с плюсом макетной платы, а ножку номер 2 потенциометра соединяем с 4-й ножкой микроконтроллера, т.е. с портом PB2. И добавим к схеме светодиод. Подключая одну его ногу к порту PB0 микроконтроллера, а вторую, через резистор на 220 Ом к минусу макетной платы.

В результате, получаем вот такую схему:

Схема подключения ATtiny10 к потенциометру и светодиоду
Схема подключения ATtiny10 к потенциометру и светодиоду

Переходим к скетчу. Вначале постоянной F_CPU укажем текущую частоту работы микроконтроллера в 1МГц. И добавляем стандартную библиотека AVR для работы с портами ввода вывода.

Скетч управления яркостью светодиода с помощью потенциометра (ссылка в конце статьи)
Скетч управления яркостью светодиода с помощью потенциометра (ссылка в конце статьи)

В функции setup() мы так же в начале записываем в регистр DRRB единицу. Тем самым назначая порт PB0 на работу с выходным сигналом. Начало скетча совпадает с началом скетча из прошлой статьи, где я рассказывал о данных назначения подробнее.

Далее, в функции setup() мы регистру ADMUX указываем, какой порт у нас будет активен в качестве входа для АЦП. Это порт PB2, к которому у нас подключен потенциометр.

И после этого устанавливаем единицу биту ADEN регистра ADCSRA, тем самым включая аналогово-цифровой преобразователь микроконтроллера. В конце статьи я размещу ссылку на даташит микроконтроллера ATtiny10. О назначении всех конфигурационных бит, можно посмотреть на странице 132 даташита на ATtiny10.

С подготовкой для считывания аналогового сигнала мы закончили, теперь переходим к настройкам работы с ШИМ сигналом.

TCCR0A = (( 1 << WGM00) | (1 << COM0A1));

Первой из представленных выше двух строк, устанавливаем режим работы ШИМ. Подробно о разных режимах работы ШИМ для данного микроконтроллера можно почитать на странице 100, размещенного в конце статьи даташита.

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

TCCR0B = (1 << CS00) ;

А последней строкой, устанавливая значения бита CS регистру TCCR0B, задаем частоту ШИМ сигнала. Устанавливаем делитель частоты на единицу, т.е. максимально возможную частоту ШИМ (страница 103 даташита).

Переходим к функции loop(), где первая строка:

ADCSRA = ADCSRA | 1<<ADSC;

считывает аналоговый сигнал из активного в данный момент порта в качестве входа для АЦП (PB2) и преобразует в цифровое значение.

Далее ждем окончания этого преобразования.

Результат преобразования записывается в регистр ADCL, который мы и передаем регистру таймера OCR0A, в случае подключения светодиода к порту PB0. Либо OCR0B в случае подключения светодиода к порту PB1. Это и у нас и будет степень заполнения ШИМ сигналом, т.е. в случае светодиода его яркость.

Поворачиваем регулятор потенциометра по часовой стрелке – яркость светодиода плавно увеличивается до максимальной. Поворачиваем против часовой – яркость снижается.

Результат работы скетча
Результат работы скетча

Результаты работы скетча можно посмотреть в размещенном ниже видео:

Скетч управления яркостью светодиода на ATtiny10 с помощью потенциометра - https://disk.yandex.ru/d/UTxMPwh0J8uJlg

Даташит микроконтроллера ATtiny10 - https://disk.yandex.ru/i/nH0k3NVC9Ti4Zg

_________________________________________________________

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

Другие публикации по теме:

  • Работа с цифровым сигналом на ATtiny10. Управление светодиодом. Подключение кнопки
  • Самый маленький AVR микроконтроллер – ATtiny10. Как можно применить?
  • Программирование ATtiny10 с помощью USBasp программатора
  • USBasp программатор. Обзор, установка драйвера, прошивка микроконтроллера
  • Обновление прошивки USBasp программатора