Jump to content
parovoZZ

АЦП - биполярный режим

Recommended Posts

AREF  - внутренний ИОН 1.1в

Вот такой код снятия результатов:

		temp = ADC;

		if (ADCH & (1<<ADCH1))						// Если значение отрицательное
		{
			temp |= 0xFC00;
			temp = (~temp) + 1;					
		}


		Value_current_lsb = (uint8_t)(temp >> 2);	

Никак не пойму - на выбранные дифф. входы надо подать 85 мВ, чтобы АЦП выдал 0. Но это могу списать на внутренний ОУ в виде УГ. Если подаю  -1,1 в - то получаю 127.  Здесь все верно. Но при подаче положительного смещения те же 127 получаю уже при 0,72в. Что за ерунда? Неужели ОУ на столько УГ? Либо же где-то теряется разряд?

Share this post


Link to post
Share on other sites

ерунда какая-то у вас написана, если ИОН =1.1в(код 11 1111 1111) , то средняя точка(ноль) = 0,55в (код 10 0000 0000)

положительный сигнал  +0,55в (код 11 1111 1111) , отрицательный -0,55в(код 00 0000 0000) или нет?

Share this post


Link to post
Share on other sites

Десять единиц никак не могут дать напряжение иона, т.к. это минус один в дополнительном коде и один по модулю. Напряжение иона выдаёт код 1FF для положительного и 200 для отрицательного (в 16 ой системе).

Далее. По формуле из даташита вычисляем, что при синфазном входном сигнале АЦП выдаст 0. Откуда пол-иона?

 

Share this post


Link to post
Share on other sites

Конденсаторы Panasonic. Часть 4. Полимеры – номенклатура

В заключительной, четвертой статье из цикла «Конденсаторы Panasonic» рассматриваются основные достоинства и особенности использования конденсаторов этого японского производителя на основе полимерной технологии. Главной конструктивной особенностью таких конденсаторов является полимерный материал, используемый в качестве проводящего слоя. Полимер обеспечивает конденсаторам высокую электрическую проводимость и пониженное эквивалентное сопротивление (ESR). Номинальная емкость и ESR отличается в данном случае высокой стабильностью во всем рабочем диапазоне температур. А повышенная емкость при низком ESR идеальна для решения задач шумоподавления и ограничения токовых паразитных импульсов в широком частотном диапазоне.

Читать статью

1 час назад, parovoZZ сказал:

Откуда пол-иона?

а вы диф.входы при GAIN=1 рассматривайте как два отдельных 10разядных АЦП (Vin=0..Vref)результат разности которых делится на 2 .

потому как:

12 часа назад, parovoZZ сказал:

Если подаю  -1,1 в - то получаю 127.  Здесь все верно.

это не верно. код должен быть -512d 

Share this post


Link to post
Share on other sites
2 минуты назад, IMXO сказал:

это не верно. код должен быть -512d

Я его и получаю. Затем беру модуль и сдвигаю на два разряда вправо. Получаю свои 127.

Share this post


Link to post
Share on other sites
                     

STM32G0 - средства противодействия угрозам безопасности

Результатом выполнения требований безопасности всегда является усложнение разрабатываемой системы. Особенно чувствительными эти расходы стали теперь, в процессе массового внедрения IoT. Обладая мощным набором инструментов информационной безопасности, микроконтроллеры STM32G0 производства STMicroelectronics, объединив в себе невысокую цену, энергоэффективность и расширенный арсенал встроенных аппаратных инструментов, способны обеспечить полную безопасность разрабатываемого устройства.

Подробнее...

а смысл этих танцев с бубном? сразу нельзя пользовать левое выравнивание?

Share this post


Link to post
Share on other sites
Только что, IMXO сказал:

а смысл этих танцев с бубном? сразу нельзя пользовать левое выравнивание?

Я так понял из даташита, что бит adlar в биполярном режиме игнорируется.

Share this post


Link to post
Share on other sites
5 часов назад, IMXO сказал:

это где в ДШ сказано?

смутила вот эта фраза

Цитата

Note that if the user wants to perform a quick polarity check of the result, it is sufficient to read the MSB of the result (ADC9 in ADCH). If the bit is one, the result is negative, and if this bit is zero, the result is positive.

Проверил в симуляторе - выравнивает. Проверил в железе - работает. Код упростился до нельзя, но проблема осталась. Это была пара PA3(+) / PA1(-). Проверил пару PA3(+) / PA2(-). Еще хуже - максимум уже при смещении 0.73в. Ну что ж  - меня предупреждали, а я не верил.  Интересно, что в униполярном режиме не все так плохо.

Буду расчехлять двухполупериодный выпрямитель. К черту дифф режимы.

Всем спасибо за ответы))

Share this post


Link to post
Share on other sites
В 17.02.2019 в 03:43, parovoZZ сказал:

if (ADCH & (1<<ADCH1)) // Если значение отрицательное

вот эта проверка очень сомнительная!!! это повторное чтение регистра?

замените ее на:

if((temp >> 9))&1)

например.

или, лучше:

if(temp > 0x1ff)

В 17.02.2019 в 03:43, parovoZZ сказал:

Если подаю  -1,1 в - то получаю 127

потом вы значение какой переменной смотрите здесь??? :

Value_current_lsb или temp???

Если temp то, действительно, странно. 

Share this post


Link to post
Share on other sites
4 минуты назад, ruhi сказал:

вот эта проверка очень сомнительная!!!

согласен!

4 минуты назад, ruhi сказал:

это повторное чтение регистра?

Да!

как только по прерыванию от АЦП выхожу из IDLE состояния, сразу же ADCSRA = 0; т.к. дальше по коду у меня снова IDLE, но АЦП запускать мне уже не надо. Наверное, лучше на какой-то триггер подписаться, чтобы пин ADEN не обнулять и, как следствие, не попадать на 25 тактов на первом измерении, но вот пока так...

Edited by parovoZZ

Share this post


Link to post
Share on other sites
7 минут назад, parovoZZ сказал:

Да!

как только по прерыванию от АЦП выхожу

это все не важно - повторное чтение регистра, который к тому же является частью 16-битного регистра, это очень не хорошо!

И еще вместо ИФ-а там можно сдвиг использовать. Хотя не факт что быстрее получится (по ассемблеру), так как сдвигать надо два регистра, на С-ях можно так написать (как работает я не проверял-зависит от компилятора и от оптимизации, но идея должна быть понятна):

register long int tmp1 = temp << 8;//сохранить в четырех-байтный инт в средние байты

temp = tmp1 >> 2;//лучше сдвинуть вправо на 2, чем влево на 6-шесть!!!

дальше надо учитывать что значение сдвинуто на шесть влево!

Share this post


Link to post
Share on other sites
5 минут назад, ruhi сказал:

повторное чтение регистра, который к тому же является частью 16-битного регистра, это очень не хорошо!

Хм.  Я вечером попробую.

У меня сейчас ADLAR = 1, соответственно, читаю только ADCH. 2-x байтных переменных нет.

7 минут назад, ruhi сказал:

register long int tmp1 = temp << 8;//сохранить в четырех-байтный инт в средние байты

а 4 байта для чего?

Share this post


Link to post
Share on other sites
5 минут назад, parovoZZ сказал:

а 4 байта для чего?

что бы было куда вправо сдвигать :) ! - нужен байт пустой справа: 2байта + 1 байт  = 3 байта, но 3-хбайтных типов в С нет! приходится использовать 4-х байтный!

Share this post


Link to post
Share on other sites
11 минуту назад, ruhi сказал:

что бы было куда вправо сдвигать

ну потеряю я два младших бита, да и черт с ними. Сложная арифметика какая-то.

Share this post


Link to post
Share on other sites
4 минуты назад, parovoZZ сказал:

ну потеряю я два младших бита, да и черт с ними.

я думал что все нужны, а если достаточно точности, то не надо огород городить, конечно!

Только всегда внимательно надо со сдвигами, и когда из short в char преобразуется, например.

Share this post


Link to post
Share on other sites
4 минуты назад, ruhi сказал:

я думал что все нужны, а если достаточно точности, то не надо огород городить, конечно!

да даже если надо сдвинуть до 10-ого бита (знакового) - всё равно не прояснилась идея с 4-мя байтами...

Share this post


Link to post
Share on other sites
12 минуты назад, parovoZZ сказал:

всё равно не прояснилась идея с 4-мя байтами

но я не знаю как проще пояснить :(

Это трюк конечно, исключительно для 8-ми битных платформ, то есть, по определению, аппаратно ЗАвисимый, хотя, вроде бы, если написано на С должен компилироваться везде, теоретически.

Share this post


Link to post
Share on other sites

Моя нашла косяк. Так как у меня в коде несколько IDLE состояний, то после преобразования делал так:
ADCSRA = 0;
Где-то в дашике в секции смены источника референсного напряжения сказано, что при такой смене ичточника необходимо выдержать паузу 1.5 мс до первого измерения. Но я и подумать не могла, что эта сноска относится и к включению АЦП тоже (ADEN = 1)/. Ну т.к. у меня АЦП делает 70 000 преобразований, то пауза эта не выдерживалась никак. Вместо бита ADEN = 0 написал ADIE = 0/ АЦП, разумеется, стартует, но я хотя бы из IDLE не выхожу, когда мне это не требуется. Терь работает как надо - от -1.0 и до +1.0 в вольтах =)
Всем спасибо за участие!

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By parovoZZ
      Ну, собственно, сабж. Питание - от 2.4 и до 3.6. На сигнальном выводе необходима половина напряжения питания (по постоянке, разумеется).
    • By parovoZZ
      Не секрет, что адресация глобальных переменных прямая, а переменных в стеке - косвенная. Стек в AVR программный, то бишь откусывается от ОЗУ. Так вот вопрос - при передаче в функцию (и обратно) больших объемов данных (которые невозможно передать через РОН) все же что будет производительнее - через глобальные переменные или через параметры? Понятно, что в функцию вида
      uint8_t My_super_function (uint8_t data); переменные уйдут через РОН,  а вот в такую
      void My_super_function (uint8_t *data, uint8_t *ret); через стек? Так может ну его нафик, стек этот?
    • By parovoZZ
      Я сейчас про случай, когда тактовая частота SPI равна половине или даже равна тактовой процессора. Соответственно, чем занять МК, пока идет отправка данных? У нас есть всего 16 тактов (или меньше). Обычно идет проверка флага опустошения буфера. Но тогда в чем профит аппаратного SPI, если на том же USI данные отправляются за те же 16 тактов, но МК занят тактированием(!)?. Вот чем занять МК? Отправить в остановку? Так дольше будем подготавливаться к остановке, потом уход на вектор прерывания (4 такта как минимум) и возврат из него. Ежели заниматься чем-то параллельно, то так же теряем время на обработку прерывания. Получается - только тупить в троттлинге?
    • By parovoZZ
      Поставил LUFA, следом абсолютно не нужный мне ASF. Но в упор не понимаю - как создать проект на базе этой библиотеки из студии? Приходится вручную копировать папку с заголовочниками LUFA, прописывать пути в makefile, лишние телодвижения по добавлению папки в свойства проекта. Если я это делаю всё вручную, то тогда для чего это расширение? Примеры я могу и так покрутить. ЗЫ - не слишком высокий скилл в юзании Atmel Studio/
    • By parovoZZ
      Есть у нас функция инициализации какого-то модуля или устройства, либо функция, которая просто возвращает значение регистра. Логичнее эти функции писать в файлах "драйверах", а не в main. Ну хотя бы с точки зрения переносимости кода между проектами. Но сразу появляется вопрос - что удобно программисту, то неудобно компилятору. Смысла в вызове однократно используемой функции или функции с одной командой нет - такие функции разумнее встроить в код. Но вот как быть - inline из другого *.c файла не вызывается, то бишь такую функцию надо писать в заголовке. Но такую функцию можно написать и как макрос (в том же заголовке - макрос в *.c файле тоже не виден али нет?). Так вот меня разрывает внутренняя устойчивая связь - как же поступить?
  • Сообщения

    • А почему именно 600 ом  ? Соотношение 600:8 - в динамик придёт одна восьмидесятая часть звука  Динамик 32...50 ом и никаких дополнительных резисторов. В теме это всё мильйон раз обсуждалось, не надо лениться пользоваться поиском по теме.
    • Перемотал полностью трансформатор(первичка 45 вит.,вторички-4 по13вит.),сделал перерасчет в обновленной версии программы-всё сходится,но,напряжение падает на 5-5,в и стабильно держится хоть ты тресни.
    • Я понимаю, когда речь идет о качестве, но не о громкости. Представьте себе компьютерные АС, которых не слышно при подключении к встроенной звуковухе. 
    • А вот Вам доброе лицо нашей артистки Марии Кожевниковой (35лет). Матери троих детей. Звезды сериала "Универ". Оцените! Какие чудеса творит косметика. Фото без макияжа и с макияжем.
    • Не, кина не смотрел. Я просто знаю, что простые схемы "от любого пульта" корректно не работают. Для этого мне даже кина не надо показывать. Простые схемы самые нестабильные.
    • это чё очередной ушник ретро при таких позорных мощностях  с такой искажухой  или конструкция для начинающих для развития двигательных навыков паяния плат а там питалово 75 вольтей и укусить может нехило)))))))) ? 2030 таким в руки !)))
  • Покупай!

×
×
  • Create New...