0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
|
|
1 | |
Работа с LM35DZ10.01.2014, 16:36. Показов 9629. Ответов 7
Метки нет (Все метки)
Здравствуйте. Пробую считать температуру с аналогового датчика, но контроллер выдаёт какую-то хрень. Почему-то при нагреве датчика, значение ADC10MEM уменьшается, а не наоборот. Что я делаю не так?
В коде, дабы избежать операций с дробными выражениями, привёл формулу у виду temp = (ADC10MEM*35)/100. В итоге дробная часть отбрасывается. Датчик питается от 5В, взятых с usb на ланчпаде. Код Код
#include <msp430g2553.h> int temp; void main() { WDTCTL = WDTPW|WDTHOLD; ADC10CTL0 |= ADC10ON+SREF_0; ADC10CTL1 |= INCH_0+ADC10SSEL_1+CONSEQ_1; ADC10AE0 |= BIT0; ADC10CTL0 |= ENC+ADC10SC; TA0CCR0 = 0x1000; TA0CTL = TASSEL_1+ID_3+MC_1+TAIE; _BIS_SR(LPM3_bits + GIE); } #pragma vector=TIMER0_A1_VECTOR __interrupt void Timer_A(void) { ADC10CTL0 |= ENC+ADC10SC; temp = (ADC10MEM*35)/100; TA0CTL &= ~(TAIFG); }
0
|
10.01.2014, 16:36 | |
Ответы с готовыми решениями:
7
"Прыгает" температура LM35DZ Работа в игровом проекте. Работа с php. Работа с платежными системами. Работа с базами данных Работа с строками,Работа со структурными типами данных,Работа с файлами!! Работа - проведение обучающих семинаров по C#. Работа по выходным дням ( сб-вс - 32 часа). От 30 000р. Нужна летиратура, в которой бы описывались работа с событиями, работа с элементами управления |
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
|
|
10.01.2014, 17:42 | 2 |
Проверьте вольтметром с входным сопротивлением >1MОм работает ли датчик вообще. Возможно еще стоит добавить RC цепочку ему на выход, ну и дроссель + конденсатор по питанию.
Ну и в коде: - после старта преобразования АЦП, неплохо бы подождать окончания преобразования перед тем как читать ADC10MEM. - _BIS_SR(LPM3_bits + GIE); положить в петлю while(1){}
0
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|
10.01.2014, 17:49 | 3 |
Сообщение от dr_wop
"int temp" - это 16-тибитное значение со знаком. При умножении на 35 значения, считанного из АЦП, результат не влезает в значащие 15 бит переменной temp и переходит в область отрицательных значений. Поэтому и кажущееся уменьшение при нагреве. Лекарств три - выбирайте любое или примените несколько: 1) unsykned int temp; - расширит область положительных значений вдвое. 2) long temp; - не будет переполнения. 3) в формуле сократите общие сомножители: *7/20 вместо *35/100 . Ну, и то, что яверт посоветовал - тоже всё полезно.
0
|
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
|
|
10.01.2014, 18:41 | 4 |
Ни одна из рекомендаций к сожалению не помогла. RC цепочку только пока не пробовал. Попробовал с другим датчиком - такая же ерунда.
Сообщение от яверт
Сообщение от OtyxPM
"int temp" - это 16-тибитное значение со знаком. При умножении на 35 значения, считанного из АЦП, результат не влезает в значащие 15 бит переменной temp и переходит в область отрицательных значений. Поэтому и кажущееся уменьшение при нагреве. Лекарств три - выбирайте любое или примените несколько: 1) unsykned int temp; - расширит область положительных значений вдвое. 2) long temp; - не будет переполнения. 3) в формуле сократите общие сомножители: *7/20 вместо *35/100. Всё равно идёт уменьшение значения. Правильно ли у меня настроен АЦП?
0
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|
10.01.2014, 20:13 | 5 |
Сообщение от dr_wop
Но можно сделать эксперимент с другого конца: не замену АЦП на светодиод, а замену LM-ки на пальчиковую батарейку 1.5V . С ней будет проще отладить код АЦП. Добейтесь адекватных показаний, и тогда переходИте с батарейки опять к LM35. З.Ы. Светодиод, надеюсь, через резистор подключали? ;-)
0
|
omx
|
|
10.01.2014, 23:01 | 6 |
Вы видимо не до конца поняли про ожидание АЦП. Надо так:
Код
#pragma vector=TIMER0_A1_VECTOR __interrupt void Timer_A(void) { (void)TAIV; ADC10CTL0 |= ENC+ADC10SC; while (ADC10CTL0 & ADC10SC); temp = ((unsykned long)ADC10MEM*35u)/100u; } |
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
|
|
18.01.2014, 00:35 | 7 |
Дошли наконец руки :) Действительно была проблема во времени, которое я отводил на преобразования АЦП. Большое спасибо за ответы.
0
|
oykmoshiv
|
|
06.02.2014, 21:39 | 8 |
Какая получается точность с таким датчиком и в каком диапазоне?
|
06.02.2014, 21:39 | |
06.02.2014, 21:39 | |
Помогаю со студенческими работами здесь
8
Работа формы в фоне, вне фокуса (работа с раскладкой клавиатуры) Количество подведенного и отведенного тепла, работа сжатия, работа расширения Работа с ems api: корректная работа при указании веса. Работа с Меню. Сохранение, печать, создать новый. Работа с рисованием Работа с файловой системой (системное название некоторых папок и работа со скрытыми документами) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |