Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Урок 9. Работа с АЦП на примере ATtiny13 в BASCOM-AVR

В очередном уроке я расскажу про АЦП и работу с ним в микроконтроллерах AVR. Начнем, пожалуй, с теории: И так, что же такое АЦП? Это аналого-цифровой преобразователь, который преобразует входной аналоговый сигнал в цифровой. АЦП есть практически во всех современных AVR микроконтроллерах, исключения лишь составляют AVR микроконтроллер ATtiny2313 и ещё некоторые. На практике с помощью AVR микроконтроллера и АЦП можно реализовать много интересных вещей: вольтметры, осциллографы, звукозаписывающие устройства, термометры и это далеко не предел! В общем, применяется АЦП там, где аналоговый сигнал нужно перевести в цифровой.

Работа с АЦП в BASCOM-AVR

Для начала работы с АЦП в BASCOM-AVR нужно сконфигурировать сам АЦП, это делается вот так:
Config Adc= режим считывания, Prescaler = частота дискретизации, Reference = источник опорного напряжения
Режимы считывания: Single - единичное считывание, результаты заносятся в ADCL, ADCH; Free – постоянное считывание, результаты заносятся в ADCL, ADCH, но происходит всё автономно.
Частота дискретизации Prescaler может быть 2,4,8,16,32,64 или Auto, в случае Auto компилятор выбирает подходящую частоту работы АЦП.
Источник опорного напряжения Reference может быть: Aref – внешний источник, Avcc – напряжение питания схемы и Internal – внутренний.
Пример конфигурирования АЦП: Config Adc = Single, Prescaler = Auto, Reference = Internal
После конфигурирования АЦП необходимо его запустить командой Start Adc, теперь можно считать значение с любого канала АЦП командой Getadc(канал АЦП). В документации на микроконтроллер порты с АЦП маркируются так: ADC1, ADC2 и т.д.
Вот так:

Выводы АЦП в МК ATtiny13

Практика работы АЦП на примере ATtiny13

А теперь попробуем поработать с АЦП на практике и напишем программу в BASCOM-AVR. А что же будет делать программа? Спросите вы. А принцип работы такой: вращая движок переменного резистора светодиоды должны загораться в соответствии с напряжением на выходе переменного резистора. Чем больше напряжение, тем больше светится светодиодов. Для начала возьмём микроконтроллер ATtiny13, три светодиода, четыре резистора, переменный резистор и соберём простую схему что ниже:

Практическая схема

И напишем несложную программку на BASCOM-AVR, применяя полученные знания:

$regfile = "attiny13.dat"
$crystal = 9600000

Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output

Start Adc

Do
If Getadc(2) >= 341 Then
Portb.0 = 1
Else
Portb.0 = 0
End If
If Getadc(2) >= 682 Then
Portb.1 = 1
Else
Portb.1 = 0
End If
If Getadc(2) >= 1000 Then
Portb.2 = 1
Else
Portb.2 = 0
End If
Loop
End

Компилируем, прошиваем микроконтроллер и наслаждаемся! Кстати фьюз биты микроконтроллера необходимо установить на работу внутреннего тактового генератора на 9.6МГц. Вот пример установки фьюз битов в программе PonyProg2000:

Фьюз биты в PonyProg2000

Моя сборка на макетной плате с механическими контактами:

На макетной плате

В файлах к статье есть проект в симуляторе Proteus:

Проект в Proteus

Скачать файлы для урока (проект в Proteus, исходник, прошивка) вы можете ниже

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
IC1 МК AVR 8-бит
ATtiny13
1 Поиск в магазине ОтронВ блокнот
R1-R3 Резистор
150 Ом
3 Поиск в магазине ОтронВ блокнот
R4 Резистор
10 кОм
1 Поиск в магазине ОтронВ блокнот
R5 Переменный резистор20 кОм1 Поиск в магазине ОтронВ блокнот
HL1-HL3 Светодиод3 Поиск в магазине ОтронВ блокнот
Bat1 Элемент питания3 Вольт1 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Яковлев Александр Вячеславович Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (22) | Я собрал (0) | Подписаться

0
streetboy163 #
Можно подробнее остановиться на командах? Например что значит строчка else, и что значат цифры 341, 682, 1000 это значения в чем?
Ответить
0
talibanich #
Раз автор статьи не хочет отвечать на вопрос, то отвечу я:
If Getadc(2) >= 341 Then // Условие. Если считанное значение с 2-го канала АЦП равно и превышает 341, то выполняется нижеследующая строка
...
Else // Иначе. Т.е. если вышестоящее условия не выполнилось, то переходим в этот блок условия
...
End If // Конец блока if
Ответить
-2
avis_rara #
А почему именно 341, 682, 1000?
Отредактирован 23.02.2013 01:49
Ответить
0
Ghostgkd777 #
АЦП 10 битный т.е. максимальное число, которое он может выдать это 2 в 10 степени т.е. 1024. А раз у нас три светодиода, то делим весь диапазон на 3. Получаем 341 для первой трети, 682 для 2/3 и 1000-чуть ниже максимального уровня 1024.
Вопрос у меня другой: мы имеем входы ADC0, ADC1,ADC2,ADC3. Они будут работать как отдельные 4 ацп, или это одно ацп с 4 входами через мультиплексор,которое их попеременно опрашивает и сливает результат в одну кучу? Хотелось бы использовать контроллер как 2,3,4 независимых АЦП,с которых можно читать данные. Кто подскажет, возможен такой режим?
Ответить
0
Artem #
Десятибитный то он десятибитный, да только в двух младших значащих разрядах "мусор". Поэтому реально использовать только 8 разрядов. PIC микроконтроллеры в этом плане лучше, у них хотя бы 9 разрядов из десяти можно использовать в полной мере.
Ответить
0
Антон #
Вопрос у меня другой: мы имеем входы ADC0, ADC1,ADC2,ADC3. Они будут работать как отдельные 4 ацп, или это одно ацп с 4 входами через мультиплексор,которое их попеременно опрашивает и сливает результат в одну кучу?
Это один ацп который мультиплексирует входы.
Ответить
0
Руслан #
Как мк понимает когда 500, а когда 1000?
Ответить
0
dd #
Согласно DataSheet на Tiny13
Four Multiplexed Single Ended Input Channels
Ответить
0
drusha #
Почему то при попытке компиляции прошивки выдает "Out of SRAM space". Версия баскома 2.0.7.1. Что не так?
Ответить
0
u33 #
Попробуйте добавить в код после строчек
$regfile = "attiny13.dat"
$crystal = 9600000
вот это:
$hwstack = 32
$swstack = 8
$framesize = 16
Ответить
0
active85 #
Почему после компиляции Вашего исходника у меня размер hex файла 631 байт, а у Вас 570 байт?
Проверял на Bascom 2.0.7.1, 2.0.5.0, 1.11.9.8. Пока не критично, но очень интересно как Вы добиваетесь оптимизации.
Ответить
0
Павел #
Может быть, галка в настройках "Оптимизация кода"?
Ответить
0
Алексей #
Очень интересует, возможно ли применение данной схемы для определения напряжения питания скажем 5V БП по постоянному току? И будет ли это целесообразно? И как в таком случае будет выглядеть схема? (Предположительно просто PB4 будет подключен к выводу +?)
Ответить
0
рустик #
Почему сильно греется переменный резистор?
Ответить
+1
Вован #
Вспоминаем закон Ома, делим напряжение на резисторе на его сопротивление получаем ток проходящий через него. Умножаем ток на напряжение получаем рассеиваемую на нем мощность. Короче просто замени его на резистор с бОльшим сопротивлением..
Ответить
0
Василий #
Кто объяснит, почему bascom не хочет работать с переменными в tiny13? Стоит объявить хоть одну переменную и сразу вылетает ошибка "Error : 22 Line : 14 Out of SRAM space [W]..." Не ужели ему так не хватает оперативки?
Ответить
0
Влад #
Попробовал запустить проект в Протеусе - диоды загораются на первых трёх шагах переменного резистора. А согласно программе должны загораться на каждом третьем шаге (у резистора в протеусе тоже 10 шагов). Это первое. А второе - как реализовать АЦП для изменения напряжения на АКБ автомобиля, где исходное напряжение 12,4 В, а а максимальное 14,4В ? Как подать такое напряжение на вход контроллера и не спалить его?
Ответить
0
m00fel #
Заменить Reference = Internal на AVCC
Ответить
0
Павел #
Код программы понятен даже по тексту, но при попытке залить его в ардуино IDE - в ходе проерки кода - сплошные замечания от системы, как настроить IDE и какие библиотеки нужны для кода , где можно оперировать с считываемым сигналом с входа АЦП Attiny13 , которую я хочу в дальнейшем прошить с ардуинки настроенной, как программатор
Ответить
0
OneHalf #
Павел, может быть потому, что это код на "типаБейсике", а не на ардуиновском языке?
Ответить
0
Гость #
Несколько не в тему, но. Сейчас тоже пишу программу с использованием АЦП. И нашел проблему при симуляции в Протеусе 8.6.
А именно, чтобы начал работать вход ADC2D (PB4), в программе в регистр ADMUX надо вписать именно 4, а не 2. Похоже это глюк модели в Протеусе.
Ответить
0
Дмитрий #
Почему при компиляции, Bascom версия 2,0,8,6, attiny85,
ругается на строку
Config Adc = Single , Prescaler = Auto , Reference = Internal
меняю на Avcc все идет нормально?
Пишет
Error : 12 Line : 4 Unknown CONFIG parameter [INTERNAL] ,
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Конструктор: DDS генератор сигналов Солнечная панель 10Вт 12В поликристаллическая
вверх