Работа mcp3421 ацп 18 бит с микроконтроллером atmega32

0Спам18 Sanseyis   (09.04.2015 19:42)Запустил! Для averdude надо все убрать, а SUT и CKOPT поставить. Для пони так-же!

0Спам17 Sanseyis   (09.04.2015 19:13)Все собрал и не запускается эта хрень??? В протеусе работает, а в железе не хочет. Кто запустил отзовитесь.

0Спам16 Дмитрий   (28.09.2014 22:15)Мне кажется, что исходник не полный

0Спам15 Artur21   (28.09.2014 18:08)У меня скачиваются файлы, у вас нет чтоли?

0Спам14 Дмитрий   (28.09.2014 18:03)Не могли бы вы еще раз залить исходник

0Спам12 Artur   (28.10.2012 12:30)В конце статьи указана ссылка на продолжение статьи

0Спам9 fanzone   (27.10.2012 21:06)где почитать подробно о настройке прибора?первоисточник?

0Спам11 Artur   (28.10.2012 12:29)читайте статью внимательно, ссылка на первоисточник указана в КОНЦЕ статьи

0Спам13 fanzone   (29.10.2012 11:01)ссылка на первоисточник привела на форум а не на статью–обновите ссылку или прямо здесь киньте

0Спам6 fanzone   (27.10.2012 16:44)SUT0=0, CKOPT=0 насколько я понял в пони нужно на них галочки поставитьесли не верно поправьте меня.

1Спам8 Artur   (27.10.2012 20:12)все верно, в пони проге и в code vision avr ставим галочки

0Спам5 fanzone   (27.10.2012 16:42)на плате с кнопками стоят два резака-какие их номиналы?

1Спам7 Artur   (27.10.2012 20:12)вроде бы 2м и 56к, они по сути не нужны, прибор надо бдет настраивать и подбирать резисторы чтобы прибор показывал точные значения

1Спам4 Artur   (25.10.2012 22:56)кстати, эту схему собирал =) только до конца так и не дособрал =)) если интересно могу выложить фотки прибора=))

0Спам10 fanzone   (27.10.2012 21:15)артур-в правой части схемы есть два необозначеных резака-если можно дайте их номиналы типа верхний столько-нижний столько.и процесс настройки интересует.

Источник: http://cxema21.ru/publ/mikrokontrollery/izmeritelnye_ustrojstva/tester_s_11_funkcijami_na_mikrokontrollere_atmega32/14-1-0-103

Ацп в avr микроконтроллерх atmega

Аналого-цифровой преобразователь

Микроконтроллер общается с внешним миром посредством портов ввода/вывода. В общем случае он может «воспринимать» только цифровые сигналы -логический ноль или логическую единицу. Например, для микроконтроллера ATmega32 при напряжении питания 5 В лог.

«0» – это напряжение от 0 до ≈1,5 В, а логическая единица – от ≈1,9 до 5 В. Довольно часто возникает потребность измерять напряжения, которые могут принимать любое значение в диапазоне от 0 до напряжения питания.

Для этих целей в составе микроконтроллеров AVR есть аналого-цифровой преобразователь.

В ATmega32 мы можем подключить АЦП к любой ножке порта А (PORTA)

Для работы со встроенным АЦП используются следующие специальные регистры:
ADCSRA Регистр А управления и состояния
ADMUX Регистр управления мультиплексором
SFIOR Регистр специальных функций
ADCH Старший байт результата преобразования
ADCL Младший байт результата преобразования

ИОН для АЦП (UИОН) определяет диапазон преобразования АЦП. Если уровень однополярного сигнала свыше UИОН, то результатом преобразования будет 0x3FF. В качестве UИОН могут выступать AVCC, внутренний ИОН 2,56 В или внешний ИОН, подключенный к выводу AREF.

AVCC подключается к АЦП через пассивный ключ. Внутреннее опорное напряжение 2,56 В генерируется внутренним эталонным источником UЭТ, буферизованного внутренним усилителем.

В любом случае внешний вывод AREF связан непосредственно с АЦП и, поэтому, можно снизить влияние шумов на опорный источник за счет подключения конденсатора между выводом AREF и общим. Напряжение UИОН также может быть измерено на выводе AREF высокоомным вольтметром.

Обратите внимание, что UИОН является высокоомным источником и, поэтому, внешне к нему может быть подключена только емкостная нагрузка.

АЦП генерирует 10-битный результат, который помещается в пару регистров данных АЦП ADCH и ADCL. По умолчанию результат преобразования размещается в младших 10-ти разрядах 16-битного слова (выравнивание справа), но может быть опционально размещен в старших 10-ти разрядах (выравнивание слева) путем установки бита ADLAR в регистре ADMUX.

 Как только выполнено чтение ADCL блокируется доступ к регистрам данных со стороны АЦП. Это означает, что если считан ADCL и преобразование завершается перед чтением регистра ADCH, то ни один из регистров не может измениться и результат преобразования теряется. После чтения ADCH доступ к регистрам ADCH и ADCL со стороны АЦП снова разрешается.

Канал аналогового ввода и каскад дифференциального усиления выбираются путем записи бит MUX в регистр ADMUX. В качестве однополярного аналогового входа АЦП может быть выбран один из входов ADA0…ADA7, а также GND и выход фиксированного источника опорного напряжения 1,22 В.

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

Усиленное таким образом значение поступает на аналоговый вход АЦП. Если выбирается однополярный режим аналогового ввода, то каскад усиления пропускается.

Модуль АЦП содержит предделитель, работающий от тактовой частоты МК. Коэффициент деления варьируется ступенчато по 2N от 2 до 128. Коэффициент деления устанавливается с помощью бит ADPS в регистре ADCSRA. Предделитель начинает счет с момента включения АЦП установкой бита ADEN в регистре ADCSRA.

Предделитель работает пока бит ADEN = 1 и сброшен, когда ADEN=0. Если требуется максимальная разрешающая способность (10разрядов), то частота на входе схемы последовательного приближения должна быть в диапазоне 50…200 кГц.

Если достаточно разрешение менее 10 разрядов, но требуется более высокая частота преобразования, то частота на входе АЦП может быть установлена свыше 200 кГц. Нормальное преобразование требует 13 тактов синхронизации АЦП.

Первое преобразование после включения АЦП (установка ADEN в ADCSRA) требует 25 тактов синхронизации АЦП за счет необходимости инициализации аналоговой схемы. По завершении преобразования результат помещается в регистры данных АЦП и устанавливается флаг ADIF. В режиме одиночного преобразования одновременно сбрасывается бит ADSC.

Программно бит ADSC может быть снова установлен и новое преобразование будет инициировано первым нарастающим фронтом тактового сигнала АЦП. В режиме автоматического перезапуска новое преобразование начинается сразу по завершении предыдущего, при этом ADSC остается в состоянии лог. «1».

БИТ ADSC :
Одиночное преобразование запускается путем записи лог. «1» в бит запуска преобразования АЦП ADSC. Данный бит остается в высоком состоянии в процессе преобразования и сбрасывается по завершении преобразования. Если в процессе преобразования переключается канал аналогового ввода, то АЦП автоматически завершит текущее преобразование прежде, чем переключит канал.

 В режиме автоматического перезапуска АЦП непрерывно оцифровывает аналоговый сигнал и обновляет регистр данных АЦП. Данный режим задается путем записи лог. «1» в бит ADFR регистра ADCSRA. Первое преобразование инициируется путем записи лог. «1» в бит ADSC регистра ADCSRA.

В данном режиме АЦП выполняет последовательные преобразования, независимо от того сбрасывается флаг прерывания АЦП ADIF или нет.

https://www.youtube.com/watch?v=0xL7X4mgG30

БИТ ADATE :
Если в данный бит записать лог. 1, то ADC перейдет в режим автоматического перезапуска. В этом режиме ADC автоматически запускает преобразование по положительному фронту выбранного запускающего сигнала. Выбор источника запуска происходит битами ADTS регистра SFIOR.

БИТ ADIF :
Данный флаг устанавливается после завершения преобразования ADC и обновления регистров выходных данных (ADCH:ADCL). Если установлены биты ADIE и I (регистр SREG), то происходит вызов обработчика прерывания по завершении преобразования.

Флаг ADIF сбрасывается аппаратно при переходе на соответствующий вектор прерывания. Альтернативно флаг ADIF сбрасывается путем записи лог. 1 в него. Обратите внимание, что при выполнении команды “чтение-модификация-запись” с регистром ADCSRA ожидаемое прерывание может быть запрещено.

Сказанное также действительно, если используются инструкции SBI и CBI.

БИТ ADIE :
Когда этот бит установлен в лог. 1, и установлен бит I в регистре SREG, разрешается прерывание по завершении преобразования ADC.

Если ADATE в регистре ADCSRA записан в лог. 1, значения бит ADTS определяют, какой будет использоваться источник для запуска преобразования. Если ADATE в регистре ADCSRA записан в лог. 0, значения бит ADTS никакого значения не имеют. Преобразование будет запускаться по положительному фронту (нарастание сигнала) выбранного сигнала.

Внимание – событие переключения от очищенного источника запуска к источнику запуска, который установлен, будет генерировать положительный фронт сигнала запуска, и если бит ADEN в регистре ADCSRA установлен, то запустится преобразование.

Переключение в режим постоянного преобразования (Free Running mode, ADTS[2:0]=0) не генерирует событие запуска, даже если установлен флаг прерывания ADC (ADC Interrupt Flag).

Источник: http://electronic-devices.com.ua/stati/acp-analogo-cifrovojj-preobrazovatel.html

Анализатор спектра на микроконтроллере ATmega32

» Схемы » Аудио · Измерения · Применение микроконтроллеров

21-06-2012

В статье рассматривается конструкция простого анализатора спектра (0 – 10 кГц) на микроконтроллере Atmel AVR ATmega32. В качестве устройства отображения используется двухстрочный символьный ЖК индикатор.

Основным моментом при реализации данного проекта является не аппаратная часть, а программная, точнее реализация дискретного преобразования Фурье (ДПФ) на 8-разрядном микроконтроллере.

Сразу следует отметить, что автор не является экспертом в этой области и поэтому начал с основ – с простого дискретного преобразования Фурье. Алгоритм быстрого преобразования Фурье является не только быстрым, но и достаточно сложным.

Дискретное преобразование Фурье (в англоязычной литературе DFT, Discrete Fourier Transform) – это одно из преобразований Фурье, широко применяемых в алгоритмах цифровой обработки сигналов (его модификации применяются в сжатии звука в MP3, сжатии изображений в JPEG и др.

), а также в других областях, связанных с анализом частот в дискретном (к примеру, оцифрованном аналоговом) сигнале. Дискретное преобразование Фурье требует в качестве входа дискретную функцию.

Такие функции часто создаются путем дискретизации (выборки значений из непрерывных функций).

Принципиальная схема анализатора спектра звукового сигнала очень проста и условно ее можно разделить на цифровую часть и аналоговую.

Цифровая часть образована микроконтроллером и подключенным к нему ЖК индикатором. Микроконтроллер тактируется от кварцевого резонатора 16 МГц, в качестве опорного напряжения для АЦП микроконтроллера используется напряжение питания +5 В.

Шина данных ЖК индикатора подключена к порту C микроконтроллера (линии ввода/вывода PC0-PC3), шина управления подключена к порту D(PD5, PD6) микроконтроллера. Индикатор работает в 4-битном режиме. Переменный резистор номиналом 4.7 кОм используется для регулировки контрастности.

Для работы с индикатором были созданы пользовательские символы для отображения 8 горизонтальных столбиков анализатора, эти пользовательские символы занимают все 64 Байта ОЗУ ЖК индикатора.

Микроконтроллер работает от внешнего кварцевого резонатора 16 МГц.

Аналоговая часть устройства – это самая важная часть и представляет собой предварительный усилитель сигнала электретного микрофона, выход которого подключается к каналу ADC0 встроенного в микроконтроллер АЦП. Уровень нуля на входе АЦП нам необходимо установить равным точно половине опорного напряжения, т.е. 2.5 В.

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

Всем вышеуказанным условиям отвечает распространенная микросхема низкопотребляющего операционного усилителя LM324.

Алгоритм ДПФ несколько медленнее в сравнении с быстрым преобразованием Фурье.

Но наш анализатор спектра не требует высокой скорости, и если он способен обеспечить скорость обновления около 30 кадров в секунду, этого будет более чем достаточно для визуализации спектра звукового сигнала.

В любом случае, в нашем варианте возможно достичь скорости 100 кадров в секунду, но это уже слишком высокое значение параметра для двухстрочного символьного ЖК индикатора и оно не рекомендуется.

Частота дискретизации равна 20 кГц для 32 точечного дискретного преобразования Фурье и поскольку результат преобразования симметричен, нам нужно использовать только первую половину, т.е. первые 16 результатов. Следовательно, мы можем отображать частотный спектр в диапазоне до 10 кГц и разрешение анализатора составляет 10 кГц/16 = 625 Гц.

https://www.youtube.com/watch?v=RbonTZjuMCo

Автором конструкции были предприняты попытки увеличения скорости вычисления ДПФ. Если это преобразование имеет N точек, то мы должны найти N2/2 значений синуса и косинуса. Для нашего 32 точечного преобразования необходимо найти 512 значений синуса и косинуса.

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

При расчетах в программе микроконтроллера не используются вычисления с плавающей точкой и числа двойной точности (double), так как это займет больше времени на обработку на 8-разрядном микроконтроллере.

Вместо этого значения в таблицах поиска используются 16-разрядные данные целочисленного типа (integer), умноженные на 10000. Затем после выполнения преобразования результаты делятся на 10000. При таком подходе имеется возможность выполнять 120 32-точечных преобразований в секунду, что более чем достаточно для нашего устройства.

Демонстрация работы анализатора спектра на микроконтроллере ATmega32

Загрузки

Исходный код (программа микроконтроллера, таблицы данных синуса, косинуса и угла) – скачать

blog.vinu.co.in

Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Фрагменты обсуждения: Полный вариант обсуждения »
  • Понятно, что на АВР-ке дальше светомузыки сложно уехать, не те параметры. Но 120 32-точечных преобразований в секунду для большинства задач может быть достаточно. А выборку 625Гц, можно конечно и другую взять, по точнее потеряв частоту обновления. Стоит отметить, что МК будет себя плохо чувствовать, в плане производительности мало что на него еще навешаешь. Но тут можно же организовать выдачу результата по аппаратным методам передачи данных. Тогда это будет вспомогательный МК, а основной будет только принимать с него данный и обрабатывать совместимо с другими процессами. По большому счету все же в частоту проца упирается. Когда-то получалось разгонять мегу выше 20 МГц, но для этих задач наверно получим только глюки на высоких частотах. Идея хороша, только бы больше мат части расписано было бы… именно ее реализация на МК
  • я и поинтересней анализаторы делал: You Tube или вариант на цветном ЖКИ: You Tube в основе знаменитая библиотека Чена 🙂
  • “нам необходимо вычислить угол (градусы)” А может кто-нибудь подробнее рассказать как рассчитываются значения для этих таблиц?
  • С таблицей синусов и косинусов все понятно. Не понятно как рассчитываются значения в таблице degree_lookup?

При перепечатке материалов с сайта прямая ссылка на РадиоЛоцман обязательна.

Приглашаем авторов статей и переводов к публикации материалов на страницах сайта.

Источник: https://www.rlocman.ru/shem/schematics.html?di=134055

Аналого-цифровой преобразователь на микроконтроллере Atmega8

ПодробностиКатегория: МикроконтроллерыОпубликовано 02.07.2015 10:56Автор: AdminПросмотров: 4293

Расмотрим настройку аналого-цифрового преобразователя на примере микроконтроллера Atmega8. Всю подробную информацию можно посмотреть в документации на микроконтроллер.

В микроконтроллера Atmega8 существует 10 битный АЦП. 10 бит означает что входное напряжение будет разбито на 210равных частей. МК будет оперировать числами от минимального 0 до максимального 1023. Минимальное будет соответствовать 0 В а максимальное 5 В.

МК имеет 6 каналов АЦП, напряжение на входе измеряется относительно определенного значения заданного на выводе Aref и записывается в 2 регистра ADCH и ADCL. Первый из них хранит старшие биты результата измерения а второй младшие.

В процессе измерения микроконтроллер может работать в двух режимах, в режиме однократного преобразования и в режиме непрерывного преобразования.

Как следует из названия режимов, непрерывное преобразование происходит постоянно не зависимо от нашего участия, а в режиме однократного мы сами говорим когда нам нужно измерить напряжение.

Основные регистры отвечающие за настройку АЦП микроконтроллера

ADMUX – регистр мультиплексора АЦП

Номер Название Функция
7 REFS1 выбор опорного напряжения
6 REFS0 выбор опорного напряжения
5 ADLAR способ записи значения в ADCL и ADCH
4
3 MUX3 бит выбора аналогового канала
2 MUX2 бит выбора аналогового канала
1 MUX1 бит выбора аналогового канала
MUX0 бит выбора аналогового канала

Биты REFS1 и REFS0

  • 00 – источник Aref;
  • 01 – AVcc c внешним коденсатором на Aref;
  • 10 – Резерв;
  • 11 – внутренний 2.56 В источник,c внешним коденсатором на Aref.

Бит ADLAR

При помощи этого бита мы выбираем способ записи измеренного нами значения в регистры ADCL и ADCH

ЕслиADLAR=0

ЕслиADLAR=1

Биты MUX

При помощи этого бита мы выбираем нужный нам канал АЦП.

  • 0000 – ADC0;
  • 0001 – ADC1;
  • 0010 -ADC2;
  • 0011-ADC3;
  • 0100-ADC4;
  • 0101-ADC5;
  • 0111-ADC6;
  • 0111-ADC7;

Регистр ADCSRA

Номер Название Функция
7 ADEN разрешение АЦП ( 0 – АЦП выключен, 1 – АЦП включен)
6 ADSC запуск однократного преобразования ( 0 – преобразование закончено, 1 – старт преобразования)>
5 ADFR режим работы АЦП (0 – однократное, 1 – непрерывное)
4 ADIF флаг преобразования АЦП (выставляется в 1 если преобразование завершено)
3 ADIE разрешение прерывания от АЦП (0 – запрещено,1 – разрешено)
2 ADPS2 тактовая частота АЦП>
1 ADPS1 тактовая частота АЦП
ADPS0 тактовая частота АЦП>

Биты ADPS

Выбор тактовой частоты АЦП

  • 000 – CK/2;
  • 001- CK/2;
  • 010- CK/4;
  • 011- CK/8;
  • 100- CK/16;
  • 101- CK/32;
  • 110- CK/64;
  • 111- CK/128.

Расмотрим пример настройки АЦП микрокнтроллера Atmega8, если частота нашего МК равно 4,096 МГц. Нам нужно для хорошей точности измерения частоту АЦП меньше чем 200 кГц. Для этого нам нужно выставить преддедитель на CK/32, т.о. получим 4,096/32=128 кГц.

Далее необходимо разрешить преобразование от АЦП (для этого записываем в ADEN значение 1), далее выбираем режим преобразования, пусть это будет однократное преобразование (ADFR = 0), и включаем АЦП (ADEN=1).

Получается значение 10001101 или (0x8D)которое нам нужно записать в регистр ADCSRA.

Важно отметить одну особенность работы АЦП. Для более точного измерения частота должны быть менее 200 кГц, только при этом условии будет достигнута 10-ти битная точность измерения. А если точность не важна то к примеру на частоте 1 МГц будет 8-ми битная точность, а при 2 МГц 6-ти битная.

 //функция инициализации void ADC_init() { //воспользуемся значениями регистров, определенными ранее ADMUX = 0x00; ADCSRA = 0x8D; } //функция получает в качестве аргумента номер канала и возвращает значение на входе unsigned int ADC_result(unsigned char adc_input) { ADMUX=adc_input | (ADMUX & 0xF0); //задержка для стабилизации входного напряжения _delay_us(10); //начинаем преобразование (ADSC = 1) ADCSRA | = 0x40; while((ADCSRA & 0x10)==0); //ждем, пока АЦП закончит преобразование (ADIF = 0) ADCSRA|=0x10;//устанавливаем ADIF return ADCW;//ADCW – содержит ADCH и ADCL как нам нужно }

Приведенная выше функция возвращает как было сказано ранее число от 0 до 1023 в случае 10-битного преобразования, для того чтобы получить значение в Вольтах нужно умножить полученое число на 5/1023=0,0049 .

Пример вывода измеренного напряжения на LCD

Источник: http://www.radio-magic.ru/microcontrollers/242-acp-atmega8

Тестер с 11 функциями на микроконтроллере Atmega32


Возможности тестера:

Постоянное напряжение 0.00 – 5.00 В 

Постоянное напряжение 00.0 +/- 99.9 В 
Прозвонка диодов 0 – 5000 мВ 
Сопротивление 1 Oм – 50 MOм с точность два разряда, автомат диапазона 
Емкость 1 пФ – 65000 мкФ с точностью три разряда, автомат диапазона 
ESR конденсаторов 0 – 200 Oм с шагом 0.25 Ом 
Индуктивность 1мГ – 65000 мГ с точностью 1мГ, в одном диапазоне 
Счетчик импульсов 0 – FFFFFFFF 
Частотомер 0 – 10 МГц с точностью 1Гц, в одном диапазоне 
Генератор импульсов 0 – 10 МГц 
Логический анализатор: асинхронный, длинна записи 2048 бит, чтение автономное на индикатор, дискретизация до 2МГц, выбор условия старта 

Все режимы на один вход, переключение режимов кнопками, подтверждение звуком 

Питание от внутреннего аккумулятора 

Схема прибора: 

Открыть схему в большем разрешении.

Управление прибора програмное, поэтому особо описывать нечего. Процессор опрашивает клавиатуру, получает управляющие сигналы и выставляет регистры своих внутренних таймеров, ацп, портов и т.д. в соответствии с выбранным режимом.

Для пользователя это выглядит так: – подача питания – звуковой сигнал – режим напряжгние (можно мерять) – нажатие кнопки – звуковой сиенал – режим частотомер (можно мерять) – нажатие кнопки – и т.д. Режимы подтверждаются соответствующей индикацией. Режимы переключаются по кольцу.

Кнопка-2 гонит кольцо вперед, кнопка-1 назад, кнопка-0 служебная используерся для обнуления счетчика импульсов, переключения ситем счисления индикации и т. п. 

Режимы работы тестера:

Печатная плата:

Программа написана на MikroBasic for AVR от фирмы Microelektronica. Критичные участки кода на встроенном в Basic Assembler. 

Фьюзы нужно выставлять следующие: 
SUT0=0, CKOPT=0

Переключение режимов осуществляется через опрос трех кнопок и переключателя делителя напряжения для диапазона 100В. Опрос общий для всех режимов и ведется постоянно. 


Напряжение в диапазоне до 5.00V измеряется непосредственно входом ADC0.  Напряжение в диапазоне до +/- 100.0V измеряется через делитель двумя входами ADC5 и ADC7 поочереди, для определеня полярности. Делитель подключается механически переключателем см. схему.

Прозвонка – на вход подается 5V через резистор 560 Ом. ADC0 измеряет падение напряжения на p-n переходе диода. 


Сопротивление
 – измеряется в семи поддиапазонах пересчитывается по формуле см. исходник. 

Емкость
 – заряжается через резистор соответствующего диапазона до момента срабатывания компаратора. Порог компаратора установлен на одну десятую от величины заряжающего напряжения, для обеспечения выхода на линейный участок кривой заряда . После срабатывания компаратора конденсатор разряжается через открытый порт и процесс повторяется. Время от момента начала заряда емкости до момента срабатывания компаратора регистрируется таймером счетчиком. Показания таймера счетчика пересчитываются через соответствующий корректирующий коэффициэнт и выводятся на индикатор. 

ESR – измеряется просто, как активное сопротивление разряженнго конденсатора. 


Индуктивность
 – измеряется также как и емкость только все наоборот. 

Счетчик импульсов – в качестве счетчика импульсов используется аппаратный таймер-счетчик плюс расширение до 32 разрядов за счет двух регистров, логические уровни выводятся символьном виде H L U, соответственно высокий низкий неопределенный. 

Частотомер – измеряются показания счетчика импульсов в течении интервала времени в одну секунду и выводятся на индикатор, затем счетчик обнуляется и т.д. 


Генератор импульсов
 – аппаратный таймер-счетчик в режиме генератора, либо програмный генератор. 
Логический анализатор – программа с определенной частотой опрашивает входной пин контроллера, данные о состоянии пина сдвигаются в аккумулятор, содержимое аккумулятора перезаписывается в память (RAM контроллера), адрес памяти инкрементируется и так далее пока весь блок памяти не закончится. Чтение происходит в обратном порядке по нажатию соответствующей кнопки. За одно нажатие кнопки на индикатор выводится содержимое четырех байт памяти. 

АРХИВ:

Раздел: [Устройства на микроконтроллерах]

Источник: http://www.cavr.ru/article/5002-tester-s-11-funkciyami-na-mikrokontrollere-atmega32

Модуль АЦП

АЦП прежде всего предназначен для преобразования аналогового сигнала в цифровой. В микроконтроллере ATmega328p в корпусе PDIP-28 есть возможность выбрать один из 6 входов, для преобразования, а также ИОН или датчик температуры микроконтроллера (только для ATmega328P).

В качестве опорного напряжения также можно выбирать внутренний ИОН и внешний ИОН.
Характеристики модуля АЦП:

  • 10-бит разрешение преобразования
  • Абсолютная погрешность – 2 
  • Интегральная нелинейность – 0.5 
  • Скорость преобразования 13 – 260 микросекунд
  • 6 мультиплексированный каналов преобразования
  • Встроенный датчик температуры
  • Входное напряжение – от 0 до Vпитания
  • Возможность подключить внутренний ИОН 1.1 В
  • Независимость от ЦП
  • Генерация прерывания по завершению преобразования
  • Режим подавления шумов

Регистры АЦП:

  • ADMUX – регистр выбора входа мультиплексора
  • ADCSRA – регистр управления АЦП A
  • ADCSRB – регистр управления АЦП B
  • ADCL и ADCH – регистры с результатом преобразования АЦП
  • DIDR0 – регистр управления входами мультиплексора

Регистр ADMUX управляет выбором опорного напряжения, а также входа мультиплексора.

Регистр ADMUX:

7 6 5 4 3 2 1
REFS1 REFS0 ADLAR MUX3 MUX2 MUX1 MUX0

Биты REFS1 (7) и REFS0 (6) устанавливают какой источник опорного напряжения будет выбран:

  • 00 – опорное напряжение на входе AREF (21 ножка)
  • 01 – Vпитания (вход AREF должен быть отключен. или к нему можно подключить фильтрующий конденсатор)
  • 10 – резерв
  • 11 – внутренний ИОН 1.1 В (к входу AREF можно подключить фильтрующий конденсатор)

Бит ADLAR (5) регистра ADMUX позволяет выравнивать результат преобразования по левому краю при записи в него 1.

Биты MUX3 – MUX0 (3 – 0) – управляют мультиплексором:

  • 0000 – вход ADC0 (23 ножка)
  • 0001 – вход ADC1 (24 ножка)
  • 0010 – вход ADC2 (25 ножка)
  • 0011 – вход ADC3 (26 ножка)
  • 0100 – вход ADC4 (27 ножка)
  • 0101 – вход ADC5 (28 ножка)
  • 0111 – резерв
  • 1000 – датчик температуры
  • 1001 – 1101 – резерв
  • 1110 – 1.1 В
  • 1111 – 0 В (земля)

Регистр ADCSRA:

7 6 5 4 3 2 1
ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0

Бит ADEN (7) регистра ADCSRA включает или выключает АЦП (1-включен).

Бит ADSC (6) регистра ADCSRA запускает преобразование если в него записать 1 (для многоразового режима запуск первого преобразования).

Бит ADATE (5) регистра ADCSRA позволяет запускать преобразование по прерыванию от переферийных устройств микроконтроллера если установить в 1.

Бит ADIF (4) регистра ADCSRA – флаг прерывания от АЦП.

Бит ADIE (3) регистра ADCSRA – разрешает прерывания от АЦП если установлен в 1.

Биты ADPS2 – ADPS0 (2 – 0) регистра ADCSRA выбирают режим работы предделителя тактовой частоты:

  • 000 – CLK/2
  • 001 – CLK/2
  • 010 – CLK/4
  • 011 – CLK/8
  • 100 – CLK/16
  • 101 – CLK/32
  • 110 – CLK/64
  • 111 – CLK/128

Регистр ADCSRB:

7 6 5 4 3 2 1
ACME ADTS2 ADTS1 ADTS0

Бит ACME (6) регистра ADCSRB позволяет использовать мультиплексор АЦП в качестве входов аналогового компаратора при установке 1 ( при этом АЦП должен быть выключен).

Биты ADTS2 – ADTS0 (2 – 0) регистра ADCSRB выбирают источник сигнала по которому будет начинаться преобразование АЦП:

  • 000 – непрерывное преобразование
  • 001 – прерывание от аналогового компаратора
  • 010 – внешнее прерывание INT0
  • 011 – прерывание по совпадению таймера/счетчика T0 с A
  • 100 – прерывание по переполнению таймера/счетчика T0
  • 101 – прерывание по совпадению таймера/счетчика T1 с B
  • 110 – прерывание по переполнению таймера/счетчика T1
  • 111 – прерывание по захвату таймера/счетчика T1

Регистр DIDR0:

7 6 5 4 3 2 1
ADC5D ADC4D ADC3D ADC2D ADC1D ADC0D

Биты ADC5D – ADC0D (5 – 0) регистра DIDR0 запрещают использование входов ADC5 – ADC0 (28 – 23 ножки) если в них установить 1.

Источник: http://avrprog.blogspot.com/2013/03/blog-post_13.html

Проекты на микроконтроллерах AVR – Аналогово-Цифровой Преобразователь (АЦП) и Bascom-AVR

  Микроконтроллер – цифровой прибор, который понимает и работает только с цифровыми сигналами (нулями и единицами). Но вокруг нас все сигналы представлены в аналоговой форме – освещение, температура и давление, влажность, звуки – все это непрерывно меняющиеся физические величины. 

 Для того чтобы обрабатывать аналоговые сигналы, в большинство микроконтроллеров AVR встроен АЦП (ADC–analog digital converter) – аналого-цифровой преобразователь.

 Аналогово-Цифровой Преобразователь служит для преобразования аналогового сигнала на входе в цифровую форму, понятную для МК.

 Практически во всех современных микроконтроллерах от AVR имеется 10 битный АЦП, позволяющий оцифровывать аналоговый сигнал с дискретностью 1024 значений.

Этого достаточно чтобы, например, делать замеры напряжений (в разумных пределах), снимать показания с различных датчиков, таких как фотодиод и термопара, делать анализаторы спектра и многое другое.

 Примерная работа преобразования приведена на рисунке ниже; через равные промежутки времени (ось X) происходит считывание значения напряжения на входе АЦП (ось Y). Так как АЦП имеет ограниченную разрешающую способность, появляется дискретность (дробление) значений.  

  Величина по оХ называется частотой дискретизации, чем больше частота тем точнее может быть полученная информация о сигнале. АЦП в мк AVR может работать на частотах дискретизации от 50 до 200 кГц, это значит что микроконтроллер может до 200-х раз в секунду считывать уровень напряжения на входе АЦП.

  Для того чтобы начать работать с преобразователем его сперва необходимо сконфигурировать. В Bascom-AVR конфигурирование АЦП сводится всего к одной строчке:

Config Adc = SINGLE , Prescaler = 128 , Reference = Avcc

 здесь Adc – режим считывания значения: Single – единичное считывание, также может быть Free (режим постоянной работы преобразователя)

Prescaler = 128 – выбираем частоту дискретизации путем деления частоты кварца на определенное число (также может быть 2,4,8,16,32,64 или Auto). Если выбрать Auto, то компилятор сам выберет подходящую частоту работы АЦП

Reference – выбор источника опорного напряжения, у этого параметра может быть несколько значений:

Aref – внешний источник, Avcc – напряжение питания схемы, Internal – внутренний ИОН на 2,56 вольт или в некоторых микроконтроллерах 1,1 вольт.

тестовый исходник работы с АЦП в Bascom-AVR

 Изменяя напряжение на ножке ADC0 с помощью переменного резистора, мы увидим как меняется значение считанное с АЦП. На рисунке ниже показан скрин терминала с данными, которые получил с АЦП

Источник: http://AVRproject.ru/index/analogovo_cifrovoj_preobrazovatel_acp_i_bascom_avr/0-51

Ацп на atmega для чайников 🙂

Источник: http://avr123.ucoz.ru/publ/programmirovanie_mk/acp_na_atmega_dlja_chajnikov/3-1-0-17

Тестер с 11 функциями на микроконтроллере Atmega32

Источник: http://easymcu.ucoz.ru/publ/10-1-0-139

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}
");let k=document.querySelector(".flat_pm_modal[data-id-modal=\""+a.ID+"\"]");if(-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(k,d):jQuery(k).html(b+d),"px"==a.how.popup.px_s)e.bind(h,()=>{e.scrollTop()>a.how.popup.after&&(e.unbind(h),f.unbind(i),j())}),void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{e.unbind(h),f.unbind(i),j()});else{let b=setTimeout(()=>{f.unbind(i),j()},1e3*a.how.popup.after);void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{clearTimeout(b),f.unbind(i),j()})}f.on("click",".flat_pm_modal .flat_pm_crs",()=>{jQuery.arcticmodal("close")})}if(void 0!==a.how.outgoing){let b,c="0"==a.how.outgoing.indent?"":" style=\"bottom:"+a.how.outgoing.indent+"px\"",e="true"==a.how.outgoing.cross?"":"",f=jQuery(window),g="scroll.out"+a.ID,h=void 0===flatPM_getCookie("flat_out_"+a.ID+"_mb")||"false"!=flatPM_getCookie("flat_out_"+a.ID+"_mb"),i=document.createElement("div"),j=jQuery("body"),k=()=>{void 0!==a.how.outgoing.cookie&&"false"==a.how.outgoing.cookie&&h&&(jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show"),j.on("click",".flat_pm_out[data-id-out=\""+a.ID+"\"] .flat_pm_crs",function(){flatPM_setCookie("flat_out_"+a.ID+"_mb",!1)})),(void 0===a.how.outgoing.cookie||"false"!=a.how.outgoing.cookie)&&jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show")};switch(a.how.outgoing.whence){case"1":b="top";break;case"2":b="bottom";break;case"3":b="left";break;case"4":b="right";}jQuery("body > *").eq(0).before("
"+e+"
");let m=document.querySelector(".flat_pm_out[data-id-out=\""+a.ID+"\"]");-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(m,d):jQuery(m).html(e+d),"px"==a.how.outgoing.px_s?f.bind(g,()=>{f.scrollTop()>a.how.outgoing.after&&(f.unbind(g),k())}):setTimeout(()=>{k()},1e3*a.how.outgoing.after),j.on("click",".flat_pm_out .flat_pm_crs",function(){jQuery(this).parent().removeClass("show").addClass("closed")})}countMode&&(flat_count["block_"+a.ID]={},flat_count["block_"+a.ID].count=1,flat_count["block_"+a.ID].click=0,flat_count["block_"+a.ID].id=a.ID)}catch(a){console.warn(a)}}function flatPM_start(){let a=flat_pm_arr.length;if(0==a)return flat_pm_arr=[],void jQuery(".flat_pm_start, .flat_pm_end").remove();flat_body=flat_body||jQuery("body"),!flat_counter&&countMode&&(flat_counter=!0,flat_body.on("click","[data-flat-id]",function(){let a=jQuery(this),b=a.attr("data-flat-id");flat_count["block_"+b].click++}),flat_body.on("mouseenter","[data-flat-id] iframe",function(){let a=jQuery(this),b=a.closest("[data-flat-id]").attr("data-flat-id");flat_iframe=b}).on("mouseleave","[data-flat-id] iframe",function(){flat_iframe=-1}),jQuery(window).on("beforeunload",()=>{jQuery.isEmptyObject(flat_count)||jQuery.ajax({async:!1,type:"POST",url:ajaxUrlFlatPM,dataType:"json",data:{action:"flat_pm_ajax",data_me:{method:"flat_pm_block_counter",arr:flat_count}}})}).on("blur",()=>{-1!=flat_iframe&&flat_count["block_"+flat_iframe].click++})),flat_userVars.init();for(let b=0;bflat_userVars.textlen||void 0!==a.chapter_sub&&a.chapter_subflat_userVars.titlelen||void 0!==a.title_sub&&a.title_subc&&cc&&c>d&&(b=flatPM_addDays(b,-1)),b>e||cd||c-1!=flat_userVars.referer.indexOf(a))||void 0!==a.referer.referer_disabled&&-1!=a.referer.referer_disabled.findIndex(a=>-1!=flat_userVars.referer.indexOf(a)))&&(c=!0),c||void 0===a.browser||(void 0===a.browser.browser_enabled||-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser))&&(void 0===a.browser.browser_disabled||-1==a.browser.browser_disabled.indexOf(flat_userVars.browser)))){if(c&&void 0!==a.browser&&void 0!==a.browser.browser_enabled&&-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser)&&(c=!1),!c&&(void 0!==a.geo||void 0!==a.role)&&(""==flat_userVars.ccode||""==flat_userVars.country||""==flat_userVars.city||""==flat_userVars.role)){flat_pm_then.push(a),flatPM_setWrap(a),flat_body.hasClass("flat_pm_block_geo_role")||(flat_body.addClass("flat_pm_block_geo_role"),flatPM_ajax("flat_pm_block_geo_role")),c=!0}c||(flatPM_setWrap(a),flatPM_next(a))}}}let b=jQuery(".flatPM_sticky");b.each(function(){let a=jQuery(this),b=a.data("height")||350,c=a.data("top");a.wrap("
");let d=a.parent()[0];flatPM_sticky(this,d,c)}),debugMode||countMode||jQuery("[data-flat-id]:not([data-id-out]):not([data-id-modal])").contents().unwrap(),flat_pm_arr=[],jQuery(".flat_pm_start, .flat_pm_end").remove()}

  И так в моделях atmega8, 16, 32 и др присутсвует 10-битный АЦП. АЦП(аналого-цифровой преобразователь)-позволяет сравнивать нам узнавать напряжение, которое мы подаем на ножку МК. Это умеют не все ножки МК, в ДШ они подписаны в скобочках как(

*Биты записывают с конечного по начальный, то есть 7,6…0. Иначе говоря в порядке как я их описываю.

1)Биты 7,6 отвечают за выбор напряжения, с которым МК будет сравнивать то, что вы на него подали. Таких вариантов всего 3. 

а) 00  AREF. -Подаем питание с VCC  на него напрямую

б) 01  AVCC с внешним конденсатором на AREF

в) 11 Внутренний калибрированный источник на 2,56 Вольт, с конденсатором 22 пФ , связанным с AREF и GND

2)Бит 5 . Если просто-он определяет точность измерения. Если 1- менее точно, если 0- более

3) Как видно из таблицы 4 бит не используется. Просто 0

4)Биты 3-0. Определяют pin(ADC x) к которому вы подводите напряжение. 

0000      ADC0

0001      ADC1

0010      ADC2

0011      ADC3

0100      ADC4

0101      ADC5

0110      ADC6

0111      ADC7

Итого. Если вы хотите:

1)Сравнивать с внутренним источником на 2,56в – 11

2)Более точные измерения-0

3)0

4)Используете порт (ADC1(в atmega16  и 32 это порт A1) -0001

Получается  – 11000001 

Что бы вписать его в CVAVR сделайте так- ADMUX=0b11000001;

  Второй регистр называется ADCSRA. Он отвечает за контроль и состояние АЦП. Разберем и его. 

*Правила записи такие же как в прошлом регистре. 

1)Бит 7

а)  1  АЦП включен (думаю понятно что если он вам нужен, лучше бы включить) 🙂

б)  0  АЦП выключен

2)Бит 6. Запуск преобразования

а)  0  Преобразование завершено   v

б)  1  Начать преобразование 

3)Бит 5. Режим работы АЦП

а)  0  Режим однократного преобразования

б)  1  Режим непрерывного преобразования

4)Бит 4.

0, бит(1) устанавливается, когда преобразование совершено

5)Бит 3. Разрешить прерывания от АЦП

а)  0  Прерывания запрещены

б)  1  Прерывания разрешены

6)Биты 2-0. Частота АЦП

000         СК/2

001         СК/2

010         СК/4

011         СК/8

100         СК/16

101         СК/32

110         СК/64

111         СК/128

Например частота вашего МК 8мгц. Если вы хотите, что бы частота АЦП была меньше 200 кГц (чем ниже частота измерений, тем меньше ошибок будет, около 120-150 кГц) то 8 вы должны поделить на 64 (получается 125кГц), это вариант СК/64 (110). 

Итого. Если вы хотите:

1)Включить АЦП (1)

2)0

3)Иметь режим однократного преобразования (0)

4)0

5)Разрешить прерывания АЦП (1)

6)Выберете частоту АЦП, например (110)

Получается 10001110

Что бы вписать его в CVAVR сделайте так- ADCSRA=0b10001110;

Что бы перевести результат в вольты, мы должны вычислить его по формуле:

*adc_data – то, что мы считываем из АЦП

*Питание-сколько мы подали на опорное напряжение (см ADMUX пункт 1). Например если вы выбираете 2,56в (вариант в)-подставляете 2,56

*1023-код максимального или БОЛЬШЕГО чем макс напряжение (в АЦП это 5 вольт). 

V=adc_data * питание / 1023

По этой формуле вы можете узнать сколько вольт подали на АЦП. 

Спасибо!

Возможности тестера:

Постоянное напряжение 0.00 – 5.00 В  Постоянное напряжение 00.0 +/- 99.9 В  Прозвонка диодов 0 – 5000 мВ  Сопротивление 1 Oм – 50 MOм с точность два разряда, автомат диапазона  Емкость 1 пФ – 65000 мкФ с точностью три разряда, автомат диапазона  ESR конденсаторов 0 – 200 Oм с шагом 0.

25 Ом  Индуктивность 1мГ – 65000 мГ с точностью 1мГ, в одном диапазоне  Счетчик импульсов 0 – FFFFFFFF  Частотомер 0 – 10 МГц с точностью 1Гц, в одном диапазоне  Генератор импульсов 0 – 10 МГц 

Логический анализатор: асинхронный, длинна записи 2048 бит, чтение автономное на индикатор, дискретизация до 2МГц, выбор условия старта 

Все режимы на один вход, переключение режимов кнопками, подтверждение звуком 
Питание от внутреннего аккумулятора 

Схема прибора: 

Управление прибора програмное, поэтому особо описывать нечего. Процессор опрашивает клавиатуру, получает управляющие сигналы и выставляет регистры своих внутренних таймеров, ацп, портов и т.д. в соответствии с выбранным режимом.

Для пользователя это выглядит так: – подача питания – звуковой сигнал – режим напряжгние (можно мерять) – нажатие кнопки – звуковой сиенал – режим частотомер (можно мерять) – нажатие кнопки – и т.д. Режимы подтверждаются соответствующей индикацией. Режимы переключаются по кольцу.

Кнопка-2 гонит кольцо вперед, кнопка-1 назад, кнопка-0 служебная используерся для обнуления счетчика импульсов, переключения ситем счисления индикации и т. п. 

Режимы работы тестера:

Печатная плата:

Программа написана на MikroBasic for AVR от фирмы Microelektronica. Критичные участки кода на встроенном в Basic Assembler. 

Фьюзы нужно выставлять следующие: SUT0=0, CKOPT=0

Переключение режимов осуществляется через опрос трех кнопок и переключателя делителя напряжения для диапазона 100В. Опрос общий для всех режимов и ведется постоянно. 

Напряжение в диапазоне до 5.00V измеряется непосредственно входом ADC0.  Напряжение в диапазоне до +/- 100.0V измеряется через делитель двумя входами ADC5 и ADC7 поочереди, для определеня полярности. Делитель подключается механически переключателем см. схему.

Прозвонка – на вход подается 5V через резистор 560 Ом. ADC0 измеряет падение напряжения на p-n переходе диода. 

Сопротивление – измеряется в семи поддиапазонах пересчитывается по формуле см. исходник. 

Емкость – заряжается через резистор соответствующего диапазона до момента срабатывания компаратора. Порог компаратора установлен на одну десятую от величины заряжающего напряжения, для обеспечения выхода на линейный участок кривой заряда .

После срабатывания компаратора конденсатор разряжается через открытый порт и процесс повторяется. Время от момента начала заряда емкости до момента срабатывания компаратора регистрируется таймером счетчиком.

Показания таймера счетчика пересчитываются через соответствующий корректирующий коэффициэнт и выводятся на индикатор. 

ESR – измеряется просто, как активное сопротивление разряженнго конденсатора. 

Индуктивность – измеряется также как и емкость только все наоборот. 

Счетчик импульсов – в качестве счетчика импульсов используется аппаратный таймер-счетчик плюс расширение до 32 разрядов за счет двух регистров, логические уровни выводятся символьном виде H L U, соответственно высокий низкий неопределенный. 

Частотомер – измеряются показания счетчика импульсов в течении интервала времени в одну секунду и выводятся на индикатор, затем счетчик обнуляется и т.д. 

Генератор импульсов – аппаратный таймер-счетчик в режиме генератора, либо програмный генератор.

 
Логический анализатор – программа с определенной частотой опрашивает входной пин контроллера, данные о состоянии пина сдвигаются в аккумулятор, содержимое аккумулятора перезаписывается в память (RAM контроллера), адрес памяти инкрементируется и так далее пока весь блок памяти не закончится. Чтение происходит в обратном порядке по нажатию соответствующей кнопки. За одно нажатие кнопки на индикатор выводится содержимое четырех байт памяти. 

АРХИВ:Скачать