roboforum.ru

Технический форум по робототехнике.

Проблема с градусником (LM35dz)

Проблема с градусником (LM35dz)

bloodaxe » 15 мар 2010, 21:25

Всем привет. Помогите разобратся с градусником. Проблема в том, что вывод температуры на семесигментник чё-то каряво пашет. Температура выводится что 2 градуса т.е 2, 4, 6, ... , 98, 100. Немогу понять где пропадают остальные показания.
[youtube] http://www.youtube.com/watch?v=kATHA_UTvMg [/youtube]
Вложения
7segment_indicator.rar
Мк-atmega8, прога на avr_studio 4.0.
(70.43 КиБ) Скачиваний: 1

Re: Проблема с градусником (LM35dz)

avr123.nm.ru » 15 мар 2010, 21:32

В коде можно вставить фиксированые числа или счетчик и убедится что они верно выводятся на индикато - тогда анализировать что с градусника принимаете. Любо если индикатор фаольшивит - его код править.

Re: Проблема с градусником (LM35dz)

bloodaxe » 15 мар 2010, 23:49

Пробивал, индикатор отоброжает цифри нормально. Думал ацп неуспевает обработать инфу, повысил частоту-непомогло. Предпологаю что дело может быть в округлении чисел, но мои опыты над этим, к положительному результату так и не привели.

Re: Проблема с градусником (LM35dz)

boez » 23 мар 2010, 11:31

А что вот это за фигня???

Код: Выделить всёРазвернуть
ADCSRA &(1 << ADSC); // zdiom paka konvertacija zakoncitsa


Ожидание где?

Вообще рекомендую расположить операции наоборот:

Код: Выделить всёРазвернуть
for(;;) {
  чтение ADCH
  старт конверсии
  вывод числа на индикатор
}


Тогда ничего ждять не надо.

Re: Проблема с градусником (LM35dz)

bloodaxe » 24 мар 2010, 21:46

Пробывал писать while(!(ADCSRA & (1<<ADSC))); ни чё неменяется..

Re: Проблема с градусником (LM35dz)

boez » 25 мар 2010, 12:56

bloodaxe писал(а):Пробывал писать while(!(ADCSRA & (1<<ADSC))); ни чё неменяется..


В даташите написано: при чтении бит ADSC равен 1 если преобразование идет, и 0 если завершилось. То есть нужно "пока 1, ждать". А этот while ждет "пока 0", понятное дело он сразу выпадает.

Re: Проблема с градусником (LM35dz)

bloodaxe » 25 мар 2010, 14:53

Т.е надо так :while((ADCSRA & (1<<ADSC))); ?


Rambler\'s Top100 Mail.ru counter