Здравствуйте, уважаемые читатели! Продолжаю серию статей о микроконтроллере ATtiny10. В прошлом статье "Работа с цифровым сигналом на ATtiny10. Управление светодиодом. Подключение кнопки" я рассказывал как работать на данном микроконтроллере с входящим и исходящим цифровым сигналом. И приводил пример со светодиодом и подключением кнопки. А сегодня поговорим о работе с аналоговым сигналом на ATtiny10, т.е. об аналогах функций analogWrite() и analogRead() в Arduino IDE.
Я приведу пример работы с потенциометром на 10 кОм. Получая с него данные, мы будем управлять яркостью светодиода. Т.е. затронем работу технологии широтно-импульсной модуляции (сокращенно ШИМ) на ATtiny10.
Начнем с чтения аналогового сигнала и превращения его в цифровой с использованием функции АЦП (аналогово-цифрового преобразования.
Если посмотреть на распиновку ATtiny10, то с чтением аналогового сигнала у нас могут работать всё те же порты ввода вывода, что и с цифровым сигналом. Тогда как с ШИМ могут работать только порты PB0 и PB1.
Размещаем на макетной плате ATtiny10, припаянную к переходной плате, и подключаем потенциометр на 10 кОм. Соединяем первую ножку потенциометра с землей, третью с плюсом макетной платы, а ножку номер 2 потенциометра соединяем с 4-й ножкой микроконтроллера, т.е. с портом PB2. И добавим к схеме светодиод. Подключая одну его ногу к порту PB0 микроконтроллера, а вторую, через резистор на 220 Ом к минусу макетной платы.
В результате, получаем вот такую схему:
Переходим к скетчу. Вначале постоянной 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 программатора