|
Вывод на ЖКИ значения напряжения |
|
|
|
Oct 1 2010, 13:03
|
Группа: Участник
Сообщений: 12
Регистрация: 1-10-10
Пользователь №: 59 865

|
АЦП встроенный в контроллер (ADuC812) оцифровывает аналоговый сигнал, в результате имеем два регистра с результатом оцифровки - ADCDATAH и ADCDATAL. Каким образом можно преобразовать значения в этих регистрах в напряжение и выдать на дисплей? Функция вывода на дисплей строки работает. Если можно то примером кода, пожалуйста. Заранее спасибо.
Сообщение отредактировал andrei89 - Oct 1 2010, 13:03
|
|
|
|
|
 |
Ответов
|
Oct 4 2010, 09:55
|
Группа: Участник
Сообщений: 12
Регистрация: 1-10-10
Пользователь №: 59 865

|
Ну если смотреть после ресета, то напряжение постоянно скачет. Из - за чего не могу понять. Если выводить вот такую строку sprintf (lcd_buffer,"U=%u V", ADCDATAL), то значение этого регистра постоянно меняется, выводятся числа типа -16896, 18176, 12800. Абракадабра короче говоря.
Переделал в int, дробную часть пока не вывожу. Он сейчас должен хотя бы 1В показывать, а показывает 0. Отчего это может быть? Где тут ошибка?
void display_voltage(void) interrupt 6 {
unsigned char lcd_buffer[6]; int ADCValue; ADCValue = ((ADCDATAL + (ADCDATAH&0x0F))<<8); ADCValue=ADCValue*2500/4096; ADCValue=(ADCValue/1000); sprintf (lcd_buffer,"U=%i V", ADCValue); send_lcd(set_first_line, lcd_buffer); }
|
|
|
|
|
Oct 4 2010, 14:14
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(andrei89 @ Oct 4 2010, 13:55)  Где тут ошибка? Вот тут Цитата(andrei89 @ Oct 4 2010, 13:55)  ADCValue=ADCValue*2500/4096; После умножения 16-ти разрядов не всегда достаточно для представления результата. Нужно записать, например, так: ADCValue= (long)ADCValue*2500/4096;
|
|
|
|
Сообщений в этой теме
andrei89 Вывод на ЖКИ значения напряжения Oct 1 2010, 13:03 Savrik (знач_АЦП*опорное_напр)\разрядность_АЦП
Что... Oct 1 2010, 14:13 rezident Кодunsigned int ADCresult;
ADCresult=ADCDATAH... Oct 1 2010, 14:28 andrei89 Контроллер ADuC812, дисплей МТ16s2d (на контроллер... Oct 1 2010, 14:32 rezident А float-то зачем тут?
Какой сигнал измеряете? П... Oct 1 2010, 14:44 andrei89 Ну значение с плавающей точкой же должно быть? Пау... Oct 2 2010, 07:18 Herz Цитата(andrei89 @ Oct 2 2010, 09:18) Ну з... Oct 2 2010, 14:26 rezident Цитата(andrei89 @ Oct 2 2010, 13:18) Ну з... Oct 2 2010, 19:33 andrei89 Все равно выводит только 0. Может еще можно каким ... Oct 4 2010, 14:48 Палыч Цитата(andrei89 @ Oct 4 2010, 18:48) Все ... Oct 4 2010, 14:54 andrei89 Сейчас начал цифры показывать вместо нуля, но неве... Oct 4 2010, 14:56 rezident Цитата(andrei89 @ Oct 4 2010, 20:56) ADCV... Oct 4 2010, 15:01 andrei89 Вывожу значение регистра ADCDATAL, в шестнадцатери... Oct 4 2010, 15:12 Палыч Наверное, вызов процедуры send_lcd(set_first_line,... Oct 4 2010, 15:17 ut1wpr Цитата(andrei89 @ Oct 4 2010, 18:12) Выво... Oct 4 2010, 17:06  rezident Цитата(ut1wpr @ Oct 4 2010, 23:06) Откуда... Oct 4 2010, 18:27 andrei89 Все равно не реагирует. Странные дела
Может помо... Oct 4 2010, 15:27 Палыч Цитата(andrei89 @ Oct 4 2010, 19:27) ADCV... Oct 4 2010, 15:34 andrei89 Исправил, но толку это не принесло(
ADCValue = ADC... Oct 4 2010, 15:45 andrei89 Так, процесс кажется пошел. Вывожу значения ADCDAT... Oct 4 2010, 18:31 rezident Цитата(andrei89 @ Oct 5 2010, 00:31) Выво... Oct 4 2010, 19:03  andrei89 Цитата(rezident @ Oct 4 2010, 23:03) Так ... Oct 4 2010, 19:25   rezident Цитата(andrei89 @ Oct 5 2010, 01:25) С че... Oct 4 2010, 19:37 andrei89 И еще заметил такую штуку - чем дольше держать рес... Oct 4 2010, 19:51 MrYuran Цитата(andrei89 @ Oct 4 2010, 23:51) Аном... Oct 5 2010, 05:49
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|