• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!
dukeparrot

ATMEGA328P помогите разобраться с внутренним опорным напряжением

9 сообщений в этой теме

dukeparrot    0

Всем, доброго времени суток!

Пытаюсь запустить ADC на чипе 328p, чтобы работал от внутреннего опорного напряжения 1,1 В. Инициализирую ADC как положено и описано в даташите, сигнал снимаю с ADC0. Проблема в следующем, по идеи если выставлено опорное напряжение 1,1 В, это будет максимальное значение, которое я могу замерить с порта. Но у меня максимум показывает 5 В, как будто я беру опорное напряжение по питанию. Ниже код инициализации ADC:

 

void init_analog(){

      /* Enable clock to write ADC registers */
	PRR &= ~(1 << PRADC);

	ADMUX = (0x03 << REFS0) /* Internal 1.1V Voltage Reference with external capacitor at AREF pin */
	        | (0 << ADLAR)  /* Left Adjust Result: disabled */
	        | (0x00 << MUX0) /* ADC Single Ended Input pin 0 */;

	ADCSRA = (1 << ADEN)    /* ADC: enabled */
	         | (1 << ADATE) /* Auto Trigger: enabled */
	         | (1 << ADIE)  /* ADC Interrupt: enabled */
	         | (0x04 << ADPS0) /* 16 */;

	ADCSRB = (0x00 << ADTS0) /* Free Running mode */
	         | (0 << ACME) /* Analog Comparator Multiplexer: disabled */;

	DIDR0 = 1 << ADC0D /* Disable digital input buffer for ADC0 */;

        ADCSRA|=(1<<ADSC);
}

Этот код уже сгенерировал в http://start.atmel.com , до этого сам писал свой, смотрел чужой. Либо я что-то не так делаю, либо не понимаю как это работает. Вообщем прошу направить. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
ARV    252

При чем тут "показывает" и "инициализация"? АЦП у вас выдает попугаев, причем 1023 попугая выдается при входном напряжении равном или бОльшем, чем опорное. А потом уже при помощи всякой математики вы сами переводите попугаев в вольты или амперы или еще какие-то фактические единицы. Смотрите тот код, который "показывает" результат в вольтах - там собака порылась.

Изменено пользователем ARV
  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
dukeparrot    0
20 минут назад, ARV сказал:

При чем тут "показывает" и "инициализация"? АЦП у вас выдает попугаев, причем 1023 попугая выдается при входном напряжении равном или бОльшем, чем опорное. А потом уже при помощи всякой математики вы сами переводите попугаев в вольты или амперы или еще какие-то фактические единицы. Смотрите тот код, который "показывает" результат в вольтах - там собака порылась.

 Я наверное неправильно проблему описал, меня не поняли. Попробую разъяснить, я сейчас не делаю никакой конвертации в вольты, считываю голые значения с ADC. При выборе внутреннего опорного напряжения 1,1 В, максимальное значение ADC должно давать 1023, у меня при подаче сигнала на ADC0 в 1,1 В, значение ADC показывает 228. Когда потенциометр выкручиваю до 5 В, только тогда я получаю 1023. Вот я хочу узнать, почему так,вроде я выбрал в инициализации что опорник у меня 1,1 В.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
GOR23    35

Так вы наверное на AREF 5 вольт всадили.

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
dukeparrot    0
1 час назад, GOR23 сказал:

Так вы наверное на AREF 5 вольт всадили.

 

AREF подключен через конденсатор к земле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
GOR23    35

А какое на нём напряжение?

Или ещё вариант что где то в коде записали что-то в ADMUX напрямую и перетёрли его содержимое

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
dukeparrot    0
2 минуты назад, GOR23 сказал:

А какое на нём напряжение?

 

А на нем показывает 5 В, надо было тоже это упомянуть сразу. Я замерял и не понимал почему там такое напряжение, я подумал что у меня чип бракованный,  но использовал другой, там так же. В схеме вроде ничего не должно быть такого, она простая: подключен двухстрочный дисплей и потенциометр к ADC0. Питание идет от программатора USBAsp.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
GOR23    35

Ну должно быть на AREF 1,1 В. Варианта 2: или он всё таки подсоединён к 5 вольтам (сопля например где то), или дальше в программе в ADMUX что то записали не то, и он переключился.

Ну или так ещё попробовать, хотя врядли поможет...

ADMUX = (1 << REFS0)|(1 << REFS1);

 

Изменено пользователем GOR23
  • Лайк 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
dukeparrot    0

Ну вообщем разобрался я, оказывается платка которую я брал на алиэкспресс для прошивки чипа, на ней VCC, AVCC и AREF соединены вместе. 

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

Всем спасибо, кто отвечал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас