Полная версия этой страницы:
Mega8535 + TMP37
Metallist64
Jul 29 2008, 14:33
Здравствуйте!
Подскажите пожалуйста, кто подключал датчики 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 ++; // перейти к следующему каналу
}};
Помогите пожалуйста. Как получить нормальные показания???
Переменную result на входе в цикл for надо бы обнулять.
А что это за запись p_item_name[channel]->adc=(result/20)?
Цитата(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
Jul 29 2008, 15:46
Запускайте АЦП по таймеру или в режиме свободного преобразования, температура довольно медленно меняется, поэтому так часто мерять ее нет никаго практического значения.
domowoj
Jul 29 2008, 15:55
А АЦП то в Меге работает?
Если вместо датчика какое-нибудь напряж. померить.
Metallist64
Jul 29 2008, 16:12
Переменную result на входе в цикл for надо бы обнулять.
Вот спасибо! Сто раз смотрел и не замечал, поэтому показания увеличивались от канала к каналу.
А что это за запись p_item_name[channel]->adc=(result/20)?
p_item_name[channel]-> значит разыменование указателя на массив структур(name - индекс массива) и обращенение к элементу структуры - adc.
можно конечно конечно по другому, но там 2 раза надо будет разыменовывать.
Спасибо большое!
Metallist64
Jul 30 2008, 16:00
Здравствуйте!
Всем большое спасибо!
Теперь можно температуру смотреть нормально :-)
Вот только небольшое вопрос:
- Как можно сделать развязку между датчиками и АЦП?
Насколько я знаю в промышленных вещах стоит гальваническая развязка до 500в.
Большое спасибо!
Цитата(Metallist64 @ Jul 30 2008, 19:00)

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

Здравствуйте!
Всем большое спасибо!
Теперь можно температуру смотреть нормально :-)
Вот только небольшое вопрос:
- Как можно сделать развязку между датчиками и АЦП?
Насколько я знаю в промышленных вещах стоит гальваническая развязка до 500в.
Большое спасибо!
Способов много, все зависит от того зачем это вам нужно. Если просто так, то лучше не заморачиваться.
Aleksandr Baranov
Jul 30 2008, 21:07
А какой смысл в гальванической развязке температурного датчика? Он ведь электрически не связан ни с чем, кроме процессора. Или его надо питать каким-то сторонним напияжением?
AHTOXA
Jul 30 2008, 21:39
Если уж очень надо развязывать, то лучше наверное взять что-нибудь типа
TMP03/TMP04.
Они передают температуру одной логической ногой, температура вычисляется из отношения длительностей нуля и единицы. Соответственно, чтобы развязать хватит одного оптрона.
Работал с изолирующим усилителем HCPL-7840 (Agilent Technologies), доволен. Поищите подобные, если этот неустраивает. Или датчики температуры с ШИМ выходом + оптрон + изолированый источник питания (например DU1P0-05S05)
Metallist64
Jul 31 2008, 17:54
Всем большое спасибо!
Обязательно посмотрю варианты предложенные защиты.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.