Коэффициент усиления у аналогового входа

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

При работе аналогого входа у AVR-ок в режиме диф. входа можно задать коэффициент усиления х10 и х200

А можно при измерении эти пользоваться? Чтобы в регистр значения складывался сигнал с силителя?

Хочу напрямую микрофон подключить электетный ко входу, сигнал слабоват получается

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Вроде бы можно, подключал, работало .. там ещё почитайте про "шумодав", он как-то хитро настраивается .. не помню уже.

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

Arhat109-2 пишет:

Вроде бы можно, подключал, работало .. там ещё почитайте про "шумодав", он как-то хитро настраивается .. не помню уже.

Не осталось кода? 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

у нано и уно (328 и 168) - нет, есть у меги и леонардо, то есть у 2560 и 34U4.

-у 32U4 10,40 и 200;

у 2560 10 И 200.

=================

но там разрядность падает, то есть в младших разрядах будет мусор. Уже разбирали эту тему на форуме.

а код - какой вам пример нужен? - в ADMUX пишите код,в соответствии с даташитом (и старший бит MUX5 в  ADCSRB). Ничего интересного.

---

напишите мне тут такой контроллер и какие две ноги и какой ref, я напишу вам замену analogRead(), для вашего выбора. Усилитель работает ТОЛЬКО в дифференциальном режиме, когда одна нога +, другая -, и дает значения от -512 до +511, в соответствии с поданным напряжением.

Можно запустить во free-running - тогда АЦП конвертирует постоянно, и читать регистр можно без ожидания. Но больше жрет.

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

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

Хотелось бы для ATtiny85 или Atmega8.

То есть микрофон цепляю между двумя аналоговыми входами и запускаю дифференциальный режим?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

в 8 нет усилителя в тиньке85 есть, в 20 раз.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ну, собственно Вам ответили уже. У меня мега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); }                                \
}

Там они размазаны по нескольким файлам, и как сейчас увидел, при реорганизации файлов константы уползли ниже макроопределений, которые их пользуют .. надо бы переставить на место. Собрал тут в одну кучку.

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

Спасибо, хотя GAIN10 и GAIN200 где то ниже используются в программе.

Я так понял, что ставлю регистр MUX таким образом, что положительный и отрицательный дифференциальный вход на один и тот же пин, например ADC0, и тогда у той же ATINY95 можно включить 20x 

То есть MUX0-3 в 1001

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Не очень понял этот даташит. Я ставил микрофоны на 2 соседние ноги, делал "уши" роботу, для ориентирования "по слуху"..

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

На один и тотже ТОЛЬКО для калибровки. Для определения величиныиусиления синфазного сигнала.
Это ведь написано в даташите.

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

wdrakula пишет:
На один и тотже ТОЛЬКО для калибровки. Для определения величиныиусиления синфазного сигнала. Это ведь написано в даташите.

ADC2 написано, а ADC0 не написано

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

wdrakula пишет:
На один и тотже ТОЛЬКО для калибровки. Для определения величиныиусиления синфазного сигнала. Это ведь написано в даташите.

ADC2 написано, а ADC0 не написано

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

Arhat109-2 пишет:

Не очень понял этот даташит. Я ставил микрофоны на 2 соседние ноги, делал "уши" роботу, для ориентирования "по слуху"..

Через конденсатор?

Там же еще нужно микрофону питание заводить?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ну да. А как ещё можно?