Коэффициент усиления у аналогового входа
- Войдите на сайт для отправки комментариев
Втр, 25/10/2016 - 17:39
При работе аналогого входа у AVR-ок в режиме диф. входа можно задать коэффициент усиления х10 и х200
А можно при измерении эти пользоваться? Чтобы в регистр значения складывался сигнал с силителя?
Хочу напрямую микрофон подключить электетный ко входу, сигнал слабоват получается
Вроде бы можно, подключал, работало .. там ещё почитайте про "шумодав", он как-то хитро настраивается .. не помню уже.
Вроде бы можно, подключал, работало .. там ещё почитайте про "шумодав", он как-то хитро настраивается .. не помню уже.
Не осталось кода?
у нано и уно (328 и 168) - нет, есть у меги и леонардо, то есть у 2560 и 34U4.
-у 32U4 10,40 и 200;
у 2560 10 И 200.
=================
но там разрядность падает, то есть в младших разрядах будет мусор. Уже разбирали эту тему на форуме.
а код - какой вам пример нужен? - в ADMUX пишите код,в соответствии с даташитом (и старший бит MUX5 в ADCSRB). Ничего интересного.
---
напишите мне тут такой контроллер и какие две ноги и какой ref, я напишу вам замену analogRead(), для вашего выбора. Усилитель работает ТОЛЬКО в дифференциальном режиме, когда одна нога +, другая -, и дает значения от -512 до +511, в соответствии с поданным напряжением.
Можно запустить во free-running - тогда АЦП конвертирует постоянно, и читать регистр можно без ожидания. Но больше жрет.
Это подходит для непрерывного мониторинга напряжения. Если иногда мерить, то лучше - как обычно, начать конвертацию, подождать и получить результат.
Хотелось бы для ATtiny85 или Atmega8.
То есть микрофон цепляю между двумя аналоговыми входами и запускаю дифференциальный режим?
в 8 нет усилителя в тиньке85 есть, в 20 раз.
Ну, собственно Вам ответили уже. У меня мега2560 и код там на самом деле примитивный. Просто выставляется соответствующий бит в регистр. Есть типа такой набор макросов в arhat.h:
// ============= ADC constants ============ // // base example voltage source #define ADC_SRC_AREF 0 #define ADC_SRC_AVCC 64 #define ADC_SRC_110 128 #define ADC_SRC_256 192 // adlar direction #define ADC_LEFT 32 #define ADC_RIGHT 0 // gain selection #define GAIN_10 0 #define GAIN_200 1 // private internal macros, not for use! #define _admuxSrc(s) (ADC_SRC_##s) // select base voltage example s:[AREF,AVCC,110,256]. Получить маску опорного напряжения (надо далее): #define admuxSrc(s) _admuxSrc(s) // enable ADC to work and set 16Mhz/128 adc clk (125kHz). Включение АЦП отдельной командой: #define adcOn() ADCSRA |= (128|7) // disable work ADC. Выключение АЦП. Нормально - выключен, ибо "жрет" - много: #define adcOff() { ADCSRA &= ~ADEN; } // differential and gain "neg-poz" read // neg:[0,2|8,10], poz:[0..3|8..11], g:[GAIN_10,GAIN_200], adlar:[ADC_LEFT|ADC_RIGHT] #define admux2Gain(src,neg,poz,g,adlar) \ { \ ADMUX = ((src)|(8+(((neg)&2)<<1)|(((g)&1)<<1)|((poz)&1))|(adlar)); \ ADCSRB |= ((poz)&8); \ if((poz)&8) { DIDR2 |= ((poz)&7); } \ else { DIDR0 |= ((poz)&7); } \ }Там они размазаны по нескольким файлам, и как сейчас увидел, при реорганизации файлов константы уползли ниже макроопределений, которые их пользуют .. надо бы переставить на место. Собрал тут в одну кучку.
Спасибо, хотя GAIN10 и GAIN200 где то ниже используются в программе.
Я так понял, что ставлю регистр MUX таким образом, что положительный и отрицательный дифференциальный вход на один и тот же пин, например ADC0, и тогда у той же ATINY95 можно включить 20x
То есть MUX0-3 в 1001
Не очень понял этот даташит. Я ставил микрофоны на 2 соседние ноги, делал "уши" роботу, для ориентирования "по слуху"..
На один и тотже ТОЛЬКО для калибровки. Для определения величиныиусиления синфазного сигнала.
Это ведь написано в даташите.
ADC2 написано, а ADC0 не написано
ADC2 написано, а ADC0 не написано
Не очень понял этот даташит. Я ставил микрофоны на 2 соседние ноги, делал "уши" роботу, для ориентирования "по слуху"..
Через конденсатор?
Там же еще нужно микрофону питание заводить?
Ну да. А как ещё можно?