Перейти к содержанию

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


dukeparrot

Рекомендуемые сообщения

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

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

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

Изменено пользователем ARV

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

20 минут назад, ARV сказал:

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

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

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

2 минуты назад, GOR23 сказал:

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

 

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

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

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

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

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

 

Изменено пользователем GOR23
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Если не добавлять: при чтении регистра UDR сбрасывается флаг прерывания RXC. После приёма  "\r" и установки флага FLAG_END_RX обработчик больше не читает UDR. Но затем приходит "\n" от плеера, снова устанавливается флаг RXC, и программа зависает в бесконечном прерывании.
    • Сказал - сделал! Благодарю! И остальным, у кого Ц4353 может сломаться, данная табличка будет очень полезна!
    • Автору. Никаких тут 250...200 ватт у этой китайской бздюшки нет в помине. Тем паче на таком подобии радиатора Катушки даже на выходе нет-плохо  
    • Повторюсь - НЕТ, так как у вас там крутилки, что приведет к искажениям при работе в мостовой схеме. Если бы вы "могли" то вам нужно было разорвать выход с темброблока и вход усилителей и впаять (можно навесом) вот такую схему:
    • Все верно, вы почти все что нужно сделали.  Только не нужно было добавлять это b=UDR; Сразу после старта сбросить флаг flags = 0; А в основном цикле ждать установки флага FLAG_END_RX. И если он установлен, проверять на совпадение строки в буфере (rx_buf) с вашей строкой (AT+QM \ r \ n .....   .....  AT+MP \ r \ n) При совпадении вызывать выполнение нужного алгоритма.
    • У меня до саба ещё дело не дошло, только сейчас думаю купить амп на полкиловатта, но так можно, при условии, что на входе будет моно, и будет срез частот
    • Про флаг Т: если он не используется в основной программе, а у меня он постоянно в деле. для меня меня отложенная обработка прерывания обычное дело, нужно лишь правильно расставить приоритеты частей программы. И обычное дело: выставляешь частоту задающего генератора побольше, делишь его до получения частоты 1000 Гц каким либо таймером, загоняешь в прерывание с флагом. затем закольцовываешь основную программу с проверкой флага прерывания от таймера 1000Гц. загоняешь программу в Sleep. Получаешь кольцо обработки с образцовым интервалом в 1 мс. После любого прерывания проверяешь флаг от таймера, если он, то сбрасываешь флаг и начинаешь перебирать подпрограммы обработки индикаторов, клавиатуры, и тд. и тп, подпрограммы обработки флагов и др. После окончания обработки всех подпрограмм возвращаешься к Sleep. И так по кольцу. Если происходит прерывание не от таймера, программа выходит из Sleep, проверяется флаг от таймера, если не он (а это не он) обратно к Sleep. В большенстве программ использую этот алгоритм.   GPIOR1 и GPIOR2 в 88 условно можно использовать как флаги, но их адреса больше 0х1Е, на них не распространяются команды cbi, sbi, sbic, sbis, и их сначала нужно загрузить в общий регистр, промодифицировать, и заново сохранить. Эта последовательность длинная, и модифицирует SREG, что сводит на нет работу по сравнению с  классическим GPIOR.
×
×
  • Создать...