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 , до этого сам писал свой, смотрел чужой. Либо я что-то не так делаю, либо не понимаю как это работает. Вообщем прошу направить. 

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


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

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

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

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


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

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

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

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


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

Найдите миллионы труднодоступных

электронных компонентов

dukeparrot    0
1 час назад, GOR23 сказал:

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

 

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

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


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

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

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

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


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

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

 

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

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


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

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

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

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

 

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

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


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

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


  • Сообщения

    • Народ подскажите, начал писать прогу под вывод текста на SSD1306 128X32 как бы 4 строки, в общем хочу организовать построчный вывод. В итоги получается картинка с необходимым числом строк, но как бы строки сжаты до 4 пикселей. В чем может быть проблема не могу понять.
    • Смотрел, сложилось мнение что дороже чем TL071 конечно есть, но не лучше, а лучше намного дороже. Как то так. Спасибо!
    • Для светодиода нужен ток, например, 10мА. Если этот блок сможет ограничить ток на уровне 10мА, то такой регулятор использовать нормально. Но бывает по незнанию возникает проблема, на выходе некоторых преобразователей стоят большие ёмкости, и при подключении нагрузки, с заведомо меньшим падением напряжения, возникает разряд этих конденсатором в нагрузку, независимо от выставленного тока. Импульс короткий, но ампер 500 может быть. И нагрузка или "транзистор на 50 ампер" внезапно сгорает, хотя ток был выставлен маленький. Для таких случаев желательно собрать токовый стабилизатор, которым можно проверять всякие стабилитроны, светодиоды и т.д. Например, 100 вольт 2мА. Даже диоды на исправность по утечкам в обратном включении хорошо проверять.
    • @Julia2018 паяльник 40 Вт заземли. Супербета транзисторы на раз пробиваются.
    • 1-запитать вольтметр от постороннего источника 2- Смотря что  считать маломощной электроникой
    • ШИМ регулятор не регулирует напряжение. На его выходе ВСЕГДА максимальное напряжение. То-есть, даже на 1% ШИМ, на выходе будет, ну примерно 100 ампер тока при подключении светодиода. То-есть, светодиод по любому сгорит при любом уровне ШИМ. ШИМ регулятором можно регулировать только обороты двигателя и свечения лампы накаливания(нагревателя). Ни о каких светодиодов или схем не может быть и речи. Для Лабораторного источника нужна чуть другая схема. Хотя бы, что бы регулировался и ток, и напряжение. Индикаторы запитываются от отдельного источника, тогда они не будут гаснуть при любом напряжении. Например такая (DC-DC 10А 30В):  Или такая. (DC-DC 20А 30В)  Или такая "готовая" с индикаторами и кнопочками  (DPS 5020, 20А 50В)   Использовать ШИМ как универсальный блок питания - ненормально, от слова совсем!