Страница 1 из 2

LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 01:19:04
melandr
Добрый день. Возникла такая проблема. Изучаю АЦП на примере датчика температуры LM35. Вроде бы все работает, только когда устанавливаю температуру более 50 0С показания перестают изменяться. Показания останавливаются на 512. Хотя АЦП то 10 бит. Не могу понять в чем проблема. В архиве исходники и проект Протеус для проверки. Использую ИОН - вывод AREF - 1 В. Измерять тоже должен до 1В. А измеряет только до 0,5 В. Это 50 град.Ц Даже показания не изменяются. Заранее благодарен за ответ.

Re: LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 01:27:34
Flasher
чего-то намудрили с выравниванием и забиранием результата АЦП

Re: LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 08:40:26
melandr
Результат из регистра ADCL забирается норм. Проблема возникает, когда результат начинает считываться из регистра ADCH. Но не могу понять в чем проблема.

Re: LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 10:08:40
takei
Почему в протеусе не подключена нога AVCC?

Re: LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 19:58:20
melandr
А куда ее нужно подключить? Подключен вывод AREF к опорному напряжению 1 В.

Re: LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 20:16:30
oleg110592
Использую ИОН - вывод AREF - 1 В
У вас внешний ион?
Изображение

Re: LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 21:24:06
melandr
да внешний. тоже возник вопрос, какое напряжение можно подавать на вывод AREF. Просто программа шла в комплекте с отладочной платой EVBavr04. И там написано, что подать 1 в. А судя по вашей документации мин 2. Попробую.

Re: LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 22:02:23
oleg110592
документация не моя а производителя, действительно проект для меги8, а в комментариях - подать 1В, может ошиблись - на плату можно устанавливать мегу48 - там Vref 1В минимум.

Re: LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 22:11:21
dr.doc
in temp,ADCL ; Внимание! ПЕРВЫМ ЧИТАЕТСЯ МЛАДШИЙ РЕГИСТР!!!
in temp1,ADCH

Соблюдается? Если нет, глюки обеспечены.

Re: LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 22:17:31
melandr
dr.doc писал(а):in temp,ADCL ; Внимание! ПЕРВЫМ ЧИТАЕТСЯ МЛАДШИЙ РЕГИСТР!!!
in temp1,ADCH

Соблюдается? Если нет, глюки обеспечены.
Да читаются сначала младший, а потом старший.

Re: LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 22:22:48
melandr
Не могу найти в даташите минимальное напряжение, подаваемое на пин Vref.

Re: LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 22:24:48
dr.doc
Тогда возможная причина - опорное напряжение. Совпадает по логике - опорное напряжение равно 0,5 минимального и разрядность составляет также 0,5 от 1024.
Похожая ситуация возникает при переполнении, когда входное выше опорного.

Стр. 243 из 303

Re: LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 23:36:28
takei
takei писал(а):Почему в протеусе не подключена нога AVCC?
melandr писал(а):А куда ее нужно подключить? Подключен вывод AREF к опорному напряжению 1 В.
Ваще не понимаю, что там показывает без подключенного АЦП. Вы так свой код будете "лопатить" честные три месяца!

Re: LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 23:56:45
melandr
Не помогло. Сделал в Протеусе опорное напряжение Vref = 2 В. Показания уменьшились в 2 раза и происходит ограничение все равно на 0,5В. Было при Vref = 1 В содержимое регистра ADC = 512 и входном напряжении 0,5 В. При изменении Vref = 2 В содержимое регистра ADC = 256 при входном напряжении 0,5 В. Проблема где-то в программе, но где не понятно. Не отображает значения которые должны быть в регистре ADCH

Re: LM35 и ATmega8

Добавлено: Пт ноя 08, 2013 23:59:45
melandr
takei писал(а):
takei писал(а):Почему в протеусе не подключена нога AVCC?
melandr писал(а):А куда ее нужно подключить? Подключен вывод AREF к опорному напряжению 1 В.
Ваще не понимаю, что там показывает без подключенного АЦП. Вы так свой код будете "лопатить" честные три месяца!
Запустите Протеус и посмотрите. До 0,5 В показывает нормально. Обрубает при показаниях больше 0,5 В. При Vref = 1 В

Re: LM35 и ATmega8

Добавлено: Сб ноя 09, 2013 01:16:55
oleg110592
странно вычисляется температура

Код: Выделить всё

  	value_low = ADCL;
	value_high = ADCH;
	value = ((value_high<<2)|(value_low>>6));
10mV = 1 градус
При Vref 5В (5000mV)
Temperature = АЦП x (5000/1023)
Например при значении АЦП = 512:
512 x (5000/1023) = 2502mV = 250,2 C - это вряд ли выдержит
Например при значении АЦП = 100:
100 x (5000/1023) = 488,8mV = 48,9 C

Re: LM35 и ATmega8

Добавлено: Сб ноя 09, 2013 01:22:48
melandr
Не понятно почему рубит на 0,5В измерения. Меняю опорное напряжение, а показания считают только до 0,5В

Re: LM35 и ATmega8

Добавлено: Сб ноя 09, 2013 01:34:22
oleg110592
надо проверить это
value = ((value_high<<2)|(value_low>>6));
еще включен бит ADLAR:
ADC Left Adjust Result
The ADLAR bit affects the presentation of the ADC conversion result in the ADC Data Register.
Write one to ADLAR to left adjust the result. Otherwise, the result is right adjusted
можно проверить на компьютере (C++ Builder), сегодня уже не хочется, завтра не знаю, может не получиться

Re: LM35 и ATmega8

Добавлено: Сб ноя 09, 2013 01:50:12
takei
Да что же это за мазахизм, а понял
melandr писал(а): можно подавать на вывод AREF.
dr.doc писал(а):in temp1,ADCH
melandr писал(а):Проблема где-то в программе, но где не понятно. Не отображает значения которые должны быть в регистре ADCH
тут на форуме только программисты,
takei писал(а):не понимаю, что там показывает без подключенного АЦП
А подать питание на 20 ногу это наверное пусть на другом форуме начинающие подают.
То есть я, вот подал питание
LM35.rar
(56.73 КБ) 189 скачиваний
Теперь ковыряйте программу :tea:

Re: LM35 и ATmega8

Добавлено: Сб ноя 09, 2013 02:40:42
vitalik_1984
Я вообще не понял смысла использования бита адлар, если вы используете все биты ацп :dont_know:
Он ведь придуман только для того, чтобы можно было тупо не читать младший регистр просто используя старшие 8 бит. Если все используете, не проще взять уже готовое двухбайтное число из двух регистров? Зачем это лишнее преобразование?
Тогда(при адлар==0) будет так:

Код: Выделить всё

 value_low = ADCL;
 value_high = ADCH;
 value = (( uint16_t )ADCH<<8)|ADCL ;