Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Mega8535 + TMP37
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Metallist64
Здравствуйте!
Подскажите пожалуйста, кто подключал датчики TMP37 на Мегу???
Всего датчиков - 4.
У меня проблема с подключением датчиков (схеме внизу).
1. Без датчиков в результате преобразования имею мусор.
2. Полученное значение всегда разное от 50-350 ??? даже при усреднении.

Может я неправильно входы переклачаю?
ставлю задержку 1мс.

Вот сама функция:

void adc_result (p_menu p_item_name)
{
unsigned char i;
unsigned char channel = 0;
unsigned int result = 0;
while (channel < 4)
{
if(channel == 0) ADMUX = 0b11000000;
if(channel == 1) ADMUX = 0b11000001;
if(channel == 2) ADMUX = 0b11000010;
if(channel == 3) ADMUX = 0b11000011;

delay_ms(1); //задержка 1мс для гарантированного переключения входа мультиплекстора


for (i=0;i<20;i++) // цикл для 20 ти преобразований.
{
ADCSRA.6 = 1; // начало проеобразования

while(ADCSRA.6); // ждем конца преобразования

result += ADCW; // записываем значение
}
p_item_name[channel]->adc = (result / 20) ; // записать среднего от 20ти преобраз-й в p_item_name[index]->adc
channel ++; // перейти к следующему каналу
}};



Помогите пожалуйста. Как получить нормальные показания???
=GM=
Переменную result на входе в цикл for надо бы обнулять.

А что это за запись p_item_name[channel]->adc=(result/20)?
sKWO
Цитата(Metallist64 @ Jul 29 2008, 17:33) *
Помогите пожалуйста. Как получить нормальные показания???

попробуйте задерку поставить здесь
Код
for (i=0;i<20;i++) // цикл для 20 ти преобразований.
{
ADCSRA.6 = 1; // начало проеобразования
while(ADCSRA.6); // ждем конца преобразования
result += ADCW; // записываем значение
delay_ms(1);
}

таким образом Вы дадите время на перезаряд ёмкости АЦП, если конечно в этом проблема.
и ещё, как показывает практика достаточно восьми измеряных значений, что даст возможность заменить
деление сдвигом.
Stanislav_S
Запускайте АЦП по таймеру или в режиме свободного преобразования, температура довольно медленно меняется, поэтому так часто мерять ее нет никаго практического значения.
domowoj
А АЦП то в Меге работает?
Если вместо датчика какое-нибудь напряж. померить.
Metallist64
Переменную result на входе в цикл for надо бы обнулять.
Вот спасибо! Сто раз смотрел и не замечал, поэтому показания увеличивались от канала к каналу.
А что это за запись p_item_name[channel]->adc=(result/20)?

p_item_name[channel]-> значит разыменование указателя на массив структур(name - индекс массива) и обращенение к элементу структуры - adc.

можно конечно конечно по другому, но там 2 раза надо будет разыменовывать.

Спасибо большое!
Metallist64
Здравствуйте!
Всем большое спасибо!
Теперь можно температуру смотреть нормально :-)
Вот только небольшое вопрос:
- Как можно сделать развязку между датчиками и АЦП?
Насколько я знаю в промышленных вещах стоит гальваническая развязка до 500в.
Большое спасибо!
sKWO
Цитата(Metallist64 @ Jul 30 2008, 19:00) *
- Как можно сделать развязку между датчиками и АЦП?
Насколько я знаю в промышленных вещах стоит гальваническая развязка до 500в.

Вы о чём это? Лично я первый раз о таком слышу.
Знаю что для сетевух применяют трансформаторы с коеф трансф 1:1, может он подойдёт?
Хотя как по мне зря. Лучше так не делать. опять же ИМХО.
Stanislav_S
Цитата(Metallist64 @ Jul 30 2008, 21:00) *
Здравствуйте!
Всем большое спасибо!
Теперь можно температуру смотреть нормально :-)
Вот только небольшое вопрос:
- Как можно сделать развязку между датчиками и АЦП?
Насколько я знаю в промышленных вещах стоит гальваническая развязка до 500в.
Большое спасибо!

Способов много, все зависит от того зачем это вам нужно. Если просто так, то лучше не заморачиваться.
Aleksandr Baranov
А какой смысл в гальванической развязке температурного датчика? Он ведь электрически не связан ни с чем, кроме процессора. Или его надо питать каким-то сторонним напияжением?
AHTOXA
Если уж очень надо развязывать, то лучше наверное взять что-нибудь типа TMP03/TMP04.
Они передают температуру одной логической ногой, температура вычисляется из отношения длительностей нуля и единицы. Соответственно, чтобы развязать хватит одного оптрона.
sKWO
Работал с изолирующим усилителем HCPL-7840 (Agilent Technologies), доволен. Поищите подобные, если этот неустраивает. Или датчики температуры с ШИМ выходом + оптрон + изолированый источник питания (например DU1P0-05S05)
Metallist64
Всем большое спасибо!
Обязательно посмотрю варианты предложенные защиты.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.