Easyelectronics.ru

Электроника для всех
Текущее время: 25 авг 2019, 18:43

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Работа с LM35DZ
СообщениеДобавлено: 11 янв 2014, 16:23 
Заглядывает иногда

Зарегистрирован: 19 окт 2012, 16:01
Сообщения: 87
Откуда: Чебоксары
Здравствуйте. Пробую считать температуру с аналогового датчика, но контроллер выдаёт какую-то хрень. Почему-то при нагреве датчика, значение ADC10MEM уменьшается, а не наоборот. Что я делаю не так?
В коде, дабы избежать операций с дробными выражениями, привёл формулу у виду temp = (ADC10MEM*35)/100. В итоге дробная часть отбрасывается.
Датчик питается от 5В, взятых с usb на ланчпаде.
Show Код


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с LM35DZ
СообщениеДобавлено: 11 янв 2014, 17:29 
Старожил

Зарегистрирован: 19 июн 2012, 14:17
Сообщения: 3440
Проверьте вольтметром с входным сопротивлением >1MОм работает ли датчик вообще. Возможно еще стоит добавить RC цепочку ему на выход, ну и дроссель + конденсатор по питанию.
Ну и в коде:
- после старта преобразования АЦП, неплохо бы подождать окончания преобразования перед тем как читать ADC10MEM.
- _BIS_SR(LPM3_bits + GIE); положить в петлю while(1){}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с LM35DZ
СообщениеДобавлено: 11 янв 2014, 17:36 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
dr_wap писал(а):
Что я делаю не так?
У Вас элементарно ошибка переполнения.
"int temp" - это 16-тибитное значение со знаком. При умножении на 35 значения, считанного из АЦП, результат не влезает в значащие 15 бит переменной temp и переходит в область отрицательных значений. Поэтому и кажущееся уменьшение при нагреве.

Лекарств три - выбирайте любое или примените несколько:
1) unsigned int temp; - расширит область положительных значений вдвое.
2) long temp; - не будет переполнения.
3) в формуле сократите общие сомножители: *7/20 вместо *35/100 .

Ну, и то, что яверт посоветовал - тоже всё полезно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с LM35DZ
СообщениеДобавлено: 11 янв 2014, 18:28 
Заглядывает иногда

Зарегистрирован: 19 окт 2012, 16:01
Сообщения: 87
Откуда: Чебоксары
Ни одна из рекомендаций к сожалению не помогла. RC цепочку только пока не пробовал. Попробовал с другим датчиком - такая же ерунда.

яверт писал(а):
Проверьте вольтметром с входным сопротивлением >1MОм работает ли датчик вообще. Возможно еще стоит добавить RC цепочку ему на выход, ну и дроссель + конденсатор по питанию.
Ну и в коде:
- после старта преобразования АЦП, неплохо бы подождать окончания преобразования перед тем как читать ADC10MEM.
- _BIS_SR(LPM3_bits + GIE); положить в петлю while(1){}


Когда датчик к светодиоду подключаю, последний начинает светиться в четверть яркости примерно. Это ведь можно считать за признак работоспособности? А то мультиметра пока под рукой нет. Задержку же поставил по таймеру.

AlexPM писал(а):
dr_wap писал(а):
Что я делаю не так?
У Вас элементарно ошибка переполнения.
"int temp" - это 16-тибитное значение со знаком. При умножении на 35 значения, считанного из АЦП, результат не влезает в значащие 15 бит переменной temp и переходит в область отрицательных значений. Поэтому и кажущееся уменьшение при нагреве.

Лекарств три - выбирайте любое или примените несколько:
1) unsigned int temp; - расширит область положительных значений вдвое.
2) long temp; - не будет переполнения.
3) в формуле сократите общие сомножители: *7/20 вместо *35/100.


Всё равно идёт уменьшение значения.
Правильно ли у меня настроен АЦП?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с LM35DZ
СообщениеДобавлено: 11 янв 2014, 20:00 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
dr_wap писал(а):
Когда датчик к светодиоду подключаю, последний начинает светиться в четверть яркости примерно. Это ведь можно считать за признак работоспособности? А то мультиметра пока под рукой нет.
Н-дааа, без мультиметра плохо :-(
Но можно сделать эксперимент с другого конца: не замену АЦП на светодиод, а замену LM-ки на пальчиковую батарейку 1.5V . С ней будет проще отладить код АЦП. Добейтесь адекватных показаний, и тогда переходИте с батарейки опять к LM35.

З.Ы. Светодиод, надеюсь, через резистор подключали? ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с LM35DZ
СообщениеДобавлено: 11 янв 2014, 22:48 
Старожил

Зарегистрирован: 03 мар 2010, 14:10
Сообщения: 1514
Откуда: Беларусь, Минск
Вы видимо не до конца поняли про ожидание АЦП. Надо так:
Код:
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A(void)
{
   (void)TAIV;
   ADC10CTL0 |= ENC+ADC10SC;
   while (ADC10CTL0 & ADC10SC);
   temp = ((unsigned long)ADC10MEM*35u)/100u;
}

Ещё: сбрасывать флаг прерывания лучше так. Такая конструкция сбрасывает флаг именно того прерывания, которое сработало.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с LM35DZ
СообщениеДобавлено: 19 янв 2014, 00:22 
Заглядывает иногда

Зарегистрирован: 19 окт 2012, 16:01
Сообщения: 87
Откуда: Чебоксары
Дошли наконец руки :) Действительно была проблема во времени, которое я отводил на преобразования АЦП. Большое спасибо за ответы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с LM35DZ
СообщениеДобавлено: 07 фев 2014, 21:26 
Здравствуйте!

Зарегистрирован: 07 фев 2014, 21:25
Сообщения: 4
Какая получается точность с таким датчиком и в каком диапазоне?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB