реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Проблема с термопарой, ... или с АЦП ?
alux
сообщение Aug 7 2010, 10:53
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



я переделал под целочисленную арифметику, по совету sensor_ua. Проблема осталась.
На индикаторе 4 сегмента
Go to the top of the page
 
+Quote Post
Tanya
сообщение Aug 7 2010, 11:11
Сообщение #32


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(alux @ Aug 7 2010, 14:53) *
На индикаторе 4 сегмента

Вот на него и выводите регистры АЦП. И сырой код.
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Aug 7 2010, 11:44
Сообщение #33


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Так сколько показывает? И какое напряжение сигнала термопары?
Насчёт целочисленной арифметики - как минимум не понял насчёт VREF - оно осталось вещественным или как?


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
alux
сообщение Aug 7 2010, 12:11
Сообщение #34


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(sensor_ua @ Aug 7 2010, 14:44) *
Так сколько показывает? И какое напряжение сигнала термопары?
Насчёт целочисленной арифметики - как минимум не понял насчёт VREF - оно осталось вещественным или как?

Забыл написать
Код
#define VREF            2500000LL   // VREF = +2.5 V

Цитата(Tanya @ Aug 7 2010, 14:11) *
Вот на него и выводите регистры АЦП.

Объясните, пожалуйста, каким образом вывести значение 24-битного регистра в 4-разрядный индикатор?
Лучше уж подкличить UART, тогда все станет понятно. Я сейчас этим и занимаюсь.

Go to the top of the page
 
+Quote Post
Tanya
сообщение Aug 7 2010, 12:18
Сообщение #35


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(alux @ Aug 7 2010, 16:11) *
Объясните, пожалуйста, каким образом вывести значение 24-битного регистра в 4-разрядный индикатор?
Лучше уж подкличить UART, тогда все станет понятно. Я сейчас этим и занимаюсь.

1000 способов. Например, номер и значение,... последовательно с паузой между выдачей... 0...9. A..F... или по кнопочке...
Можно только один бит посмотреть - биполярный или униполярный режим...
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Aug 7 2010, 13:15
Сообщение #36


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Самое простое, если у Вас 8-и-сегментные индикаторы(8 и точка) - выводить по биту целого на сегмент - да не цифры, а козявки, но инфы достаточно

Посмотрел ещё раз на Ваш вариант целого - думаю, что без long long переполнение обеспечено.
При сигнале 3 мВ код АЦП в идеале должен быть 9677098 (0x93A92A)
(AdcValue - STEPS_B)*VREF = 3.221225E+12 (0x2EDFFF8CC40)
0хFFF8CC40>>30 = 0x03
Но Вы написали
Цитата
Код
#define VREF            2500000LL   // VREF = +2.5 V

Может, препроцессор лажанулся и пересчитал и подставил VREF >> (AD7799_128_GAIN + BITS - 1) ? Тогда будет ноль. Скобками можно это проверить


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
alux
сообщение Aug 7 2010, 14:42
Сообщение #37


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(sensor_ua @ Aug 7 2010, 16:15) *
Посмотрел ещё раз на Ваш вариант целого - думаю, что без long long переполнение обеспечено.
Может, препроцессор лажанулся и пересчитал и подставил VREF >> (AD7799_128_GAIN + BITS - 1) ?

Я очень сомневаюсь, что компилер будет игнорировать порядок выполнения арифметических операция и правила приведения типов, которые описаны в любом учебнике по С/С++. Согласно общепринятым правилам, выполняются вначале выражения в скобках, затем слева направо учитывая приоритет операций. Когда результат вычитания (ADC_Value - STEP_B), который имеет тип long , умножается на VREF, имеющий тип long long, то первый операнд приводится к типу long long. Операция >> имеет меньший приоритет, чем *. Это даже не стоит проверять.
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Aug 7 2010, 15:53
Сообщение #38


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Насчёт long long Вы написали всё правильно и я на это обратил внимание (правда не сразу, потому и редактировал пост добавлением).
Цитата
Я очень сомневаюсь, что компилер будет игнорировать порядок выполнения арифметических операция и правила приведения типов, которые описаны в любом учебнике по С/С++.

Я ясно написал, что возможно проблема у препроцессора, но если бы Вы всё-таки чётко выдали нагора то неправильное число, то и гаданий было бы меньше. А приоритет операций кроме арифметическихwink.gif, представьте себе, никогда не запоминал и не собираюсь, ибо не на одном Си свет клином сошёлся. Потому если мне надо, то смотрю не учебник, а справочник. И не стесняюсь. В данном случае выдал предположение насчёт возможного нарушения обработки из-за наличия не переменных или констант в последовательной записи , а только литералов. Вам помочь пытаюсь, а Вы одно число выдать боитесьwink.gif

Ещё у Вас есть усреднение. Интересно было бы узнать значение Value.Average // (1 << NMAX) на предмет опять же переполнения Result.Data[Result.Channel].


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
alux
сообщение Aug 8 2010, 05:13
Сообщение #39


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Подключил UART. Отдельная плата с MAX232, соединяется через 4 проводка: общий, +5В, RXD, TXD. В программу добавил драйвер UART, которым всегда пользуюсь. Но почему-то всегда передает 0x00, чтобы я не посылал.
Какое-то проклятие!!! smile3046.gif

Сейчас вывожу на 7-сегм индикатор значение напряжения в микровольтах, значение int.
При правильном включении ТП показывает значение -1.5 ... -1.7 мВ. ТП прикладываю к горячему. Показания не меняются.
Но если подключить неправильно ТП ("-" ТП на AIN1+ ) , то значения меняются по температуре, но в отрицательную область!
Я уже все больше склоняюсь к мысли, может просто убрать этот минус и пусть работает так?

Но все же этому должно быть какое-то простое объяснение.

PS. Значение Value.Average = 4, и это нее приведет к переполнению.

PS2. Это ж надо так было облажаться!!!

Код
// Read from data register, it should be previously requested from ad7799_request_data, the value is signed
//------------------------------------------------------------------------------
unsigned long ad7799_ReadData()
{
    unsigned long val = 0;

..................

Нужно возвращать значение типа long !. Главное, что в шапке функции я об этом специально написал smile.gif
Все теперь работает.
Спасибо.
Go to the top of the page
 
+Quote Post
Krys
сообщение Aug 10 2010, 07:38
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(MrYuran @ Aug 6 2010, 03:32) *
Что-то мне кажется, что не должно АЦП мерить напряжение выше опоры.
Полностью поддерживаю! Это следует из принципа работы АЦП, где опора на делителе делится на много-много ответвлений, а потом происходит сравнение.

Цитата(alux @ Aug 6 2010, 12:57) *
Покажите, пожалуйста, в даташите, где сказано о том, что напряжение на входе не должно превышать опорное?
Тогда разность напряжений не должна превышать опору.
А вообще, насколько я разбирался с АЦП в Attiny (это конечно не одно и то же), то биполярный режим - это всего лишь способ представления данных: со знаком минус или без знака. А
Цитата
измерение напряжения на положительном входе относительно отрицательного входа АЦП
- это дифференциальный режим измерений, с биполярным не связанный.
Другими словами, дифференциальность производится аналогово (вычитанием на входном ОУ), а биполярность делается в цифре - смещением нуля по шкале.
И это совершенно независимые параметры.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Aug 10 2010, 14:45
Сообщение #41


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
Полностью поддерживаю! Это следует из принципа работы АЦП

АЦП бывают разных видов. Как и их входные каскады. В данном случае Вы и MrYuran ошибаетесь
Вот выдержка из DS AD7799:
The AD7798/AD7799 can be programmed to have a gain of 1, 2, 4, 8, 16, 32, 64, or 128 using Bit G2 to Bit G0 in the configuration register. Therefore, with a 2.5 V reference, the unipolar ranges are from (0 mV to 19.53 mV) to (0 V to 2.5 V), and the bipolar ranges are from ±19.53 mV to ±2.5 V. When the in-amp is active (gain ≥ 4), the common-mode voltage (AIN(+) + AIN(−))/2 must be greater than or equal to 0.5 V.
If the AD7798/AD7799 operate with a reference that has a value equal to AVDD, the analog input signal must be limited to 90% of VREF/gain when the in-amp is active for correct operation.
BIPOLAR/UNIPOLAR CONFIGURATION
The analog input to the AD7798/AD7799 can accept either unipolar or bipolar input voltage ranges. A bipolar input range does not imply that the parts can tolerate negative voltages with respect to system GND. Unipolar and bipolar signals on the AIN(+) input are referenced to the voltage on the AIN(–) input. For example, if AIN(−) is 2.5 V and the ADC is configured for unipolar mode and a gain of 1, the input voltage range on the AIN(+) pin is 2.5 V to 5 V.
If the ADC is configured for bipolar mode, the analog input range on the AIN(+) input is 0 V to 5 V. The bipolar/unipolar option is chosen by programming the U/B bit in the configuration register.


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
Krys
сообщение Aug 11 2010, 04:15
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(sensor_ua @ Aug 10 2010, 21:45) *
АЦП бывают разных видов. Как и их входные каскады. В данном случае Вы и MrYuran ошибаетесь
Вот выдержка из DS AD7799:
The AD7798/AD7799 can be programmed to have a gain of 1, 2, 4, 8, 16, 32, 64, or 128
Cогласен, я забыл о наличии усиления перед непосредственно аналого-цифровым преобразованием. Таким образом, все мои утверждения справедливы для сигнала непосредственно перед АЦП, уже после усиления.
В любом случае, автору необходимо не забывать про такую цитату:
Цитата
A bipolar input range does not imply that the parts can tolerate negative voltages with respect to system GND.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th July 2025 - 16:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01424 секунд с 7
ELECTRONIX ©2004-2016