реклама на сайте
подробности

 
 
> Вывод на ЖКИ значения напряжения
andrei89
сообщение Oct 1 2010, 13:03
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 1-10-10
Пользователь №: 59 865



АЦП встроенный в контроллер (ADuC812) оцифровывает аналоговый сигнал, в результате имеем два регистра с результатом оцифровки - ADCDATAH и ADCDATAL. Каким образом можно преобразовать значения в этих регистрах в напряжение и выдать на дисплей? Функция вывода на дисплей строки работает. Если можно то примером кода, пожалуйста. Заранее спасибо.

Сообщение отредактировал andrei89 - Oct 1 2010, 13:03
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andrei89
сообщение Oct 4 2010, 15:27
Сообщение #2





Группа: Участник
Сообщений: 12
Регистрация: 1-10-10
Пользователь №: 59 865



Все равно не реагирует. Странные дела sad.gif

Может поможет полный код программы:

#include <ADuC812.h>
#include <stdio.h>


#define set_first_line 0x80
#define set_second_line 0xC0
unsigned char lcd_buffer[6];

sbit RS=P2^2;
sbit RW=P2^1;
sbit En=P2^0;
unsigned char i,j;

void delay(void) {
for(i=0; i<5; i++) {
for(j=0;j<50;j++) {}
}
}

void send_lcd_4bit(unsigned char send_data) {
P2=(P2 | 0xF0);
send_data=(send_data | 0x0F);
P2=(P2 & send_data);
En=1;
delay();
En=0;
}

void send_lcd_cmd(unsigned char send_data) {
RS=0;
send_lcd_4bit(send_data);
send_data=(send_data << 4);
send_lcd_4bit(send_data);
delay();
}

void send_lcd_data(unsigned char send_data) {
RS=1;
send_lcd_4bit(send_data);
send_data=(send_data << 4);
send_lcd_4bit(send_data);
delay();
}

void send_lcd_symbol(unsigned char adress, unsigned char send_data) {
send_lcd_cmd(adress);
send_lcd_data(send_data);
}

void LCD_Init(void) {
delay();

send_lcd_4bit(0x30);
delay();
send_lcd_4bit(0x30);
delay();
send_lcd_4bit(0x30);
delay();
send_lcd_4bit(0x20);
delay();
send_lcd_cmd(0x28);
delay();
send_lcd_cmd(0x0C);
delay();
send_lcd_cmd(0x06);
delay();
send_lcd_cmd(0x01);
}

void send_lcd(unsigned char line,unsigned char *txt) {
unsigned int i=0;
while(txt[i]!=NULL) {
send_lcd_symbol(line+i, txt[i]);
i++;
}
}

void display_voltage(void) interrupt 6 {

unsigned int ADCValue;
ADCValue = (ADCDATAL + (ADCDATAH&0x0F))<<8;
ADCValue=((long)ADCValue*2500UL)>>12;
ADCValue=(ADCValue/1000);
sprintf (lcd_buffer,"U=%i V", ADCValue);

}

void ADC_Init(void) {
EA=0;
EADC=0;
SCONV=0;
ADCCON1=0x7C;
ADCCON2=0x03;
EA=0;
EADC=0;
}


void main(void) {

unsigned char *txt = "Freq. :";
P2=0x00;
delay();
En=0;
RW=0;
LCD_Init();
delay();
send_lcd(set_second_line, txt);
delay();
ADC_Init();
EA=1;
EADC=1;
SCONV=1;
while(1) {
send_lcd(set_first_line, lcd_buffer);
delay();
}

}
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 4 2010, 15:34
Сообщение #3


Гуру
******

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



Цитата(andrei89 @ Oct 4 2010, 19:27) *
ADCValue = (ADCDATAL + (ADCDATAH&0x0F))<<8;
Спешите куда-то... Вы внимательно скобочки расставляйте...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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   Ну если смотреть после ресета, то напряжение посто...   Oct 4 2010, 09:55
|- - Палыч   Цитата(andrei89 @ Oct 4 2010, 13:55) Где ...   Oct 4 2010, 14:14
|- - rezident   Цитата(Палыч @ Oct 4 2010, 20:14) После у...   Oct 4 2010, 14:46
- - 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   Исправил, но толку это не принесло( 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 12:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01406 секунд с 7
ELECTRONIX ©2004-2016