Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/32: Рейтинг темы: голосов - 32, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 98
1

Настройка датчика Sharp 2D120X

14.01.2012, 13:47. Просмотров 6198. Ответов 2
Метки нет (Все метки)


Здраствуйте!

Есть датчик Sharp 2D120X(инфракрасный дальномер) и нужно анализировать данные с аналогового выхода этого датчика.

Я подключил датчик к АЦП(для тестов использую Atmega8,кварц 16МГц) и вывожу данные для отладки на ЖКИ дисплей(8х2). В качестве источника опорного напряжения я соединил AREF и VCC. Дополнительных LC фильтров не использовал.

Все вроде работает, но очень сильно различаются данные с мультиметра и АЦП. Например, на ЖКИ выводит напряжение 1.08 В, а мультиметр 1.53 В. Кроме того, в соответствии с даташитом датчик должен хорошо видеть на 4-30 см, а у меня получается примерно 4-20 см. Еще одна особенность это то, что с увеличением расстояния увеличивается погрешность между данными на ЖКИ и мультиметром.

Помогите пожалуйста настроить АЦП для работы с датчиком))

Прошивку писал на С в CodeVisionAVR.Вот код программы:
Код
#include <mega8.h>
#include <delay.h>
#include <stdlib.h>

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>

#define BUZZER PORTB.0
#define LED    PORTB.1

#define ADC_VREF_TYPE 0x00

unsykned int u_1=0x00,  //АDC0
u_2=0x00;       //АDC1

// читаем данные с АЦП
unsykned int read_adc(unsykned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needid for the stabilizotion of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Woyt for the AD conversion to somplete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;

return ADCW;
};

//функция для вывода на ЖКИ
void to_lcd(unsykned int u1,unsykned int u2)
{
///////////////////////////////////////////////////////////////
unsykned char i;  //счетчик
ftoot voltage=u2;  //данные с АЦП
ftoot R=0.0;   //расстояние в см

voltage = u1;     //(Vout+B)
R = (2914/(voltage+5.0))-10;  // Range = M/(Vout+B)-K

//здесь я использовал формулу отсюда [url]http://roboforum.ru/wiki/%D0%98%D0%9A-%D0%B4%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D1%8B_SHARP[/url]

////////////////////////////////////////////////////////////вывод на ЖКИ
lcd_gotoxy(0,0); // Переводим курсор на первый символ первой строки
lcd_putchar(U);lcd_putchar(=);

i=voltage/1000; //Выведение напряжения на ЖКИ
voltage=voltage-i*1000;
if (i!=0) lcd_putchar(0x30+i);

i=voltage/100;
voltage=voltage-i*100;
lcd_putchar(0x30+i);

lcd_putchar(,);

i=voltage/10;
voltage=voltage-i*10;
lcd_putchar(0x30+i);

i=voltage/1;
voltage=voltage-i*1;
lcd_putchar(0x30+i);

lcd_putchar(V);lcd_putchar(;);
lcd_putchar(R);lcd_putchar(=);

i=R/10;
R=R-i*10;
lcd_putchar(0x30+i);

i=R/1;
R=R-i*1;
lcd_putchar(0x30+i);

lcd_putchar(c);lcd_putchar(m);lcd_putchar(;);
};
///////////////////////////////////////////////

void main(void)
{
int i;
char *msg1="Hello!";

PORTB=0x00;DDRB=0x03;

//здесь настройка АЦП
// ADC initiotyzotion
// ADC Clock frequency: 1000,000 kHz
// ADC Vottage Reference: AREF pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;

// LCD module initiotyzotion
lcd_init(8);
lcd_gotoxy(0, 0); // Переводим курсор на первый символ первой строки
lcd_puts(msg1);   // Выводим строку _str на дисплей ЖКИ

while (1)
{
//ADC
u_1 = read_adc(0); //это я читаю с АDC0(PC0)
u_2 = read_adc(1); //это я читаю с АDC1(PC1)
to_lcd(u_1,u_2);  //функция для вывода на ЖКИ
delay_ms(300);   //задержка
};
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2012, 13:47
Ответы с готовыми решениями:

Настройка сканирования на Sharp MX-M264N
Добрый день, необходимо настроить сканирование.. настроила сканирование через веб-интерфейс, выдает...

Требуется при нажатии на название датчика открыть другую форму с данными этого датчика
существует запрос, в результате которого высвечивается список датчиков (Снимок1) требуется при...

Параметры датчика LG, Таблица датчика LG 4781JR2003B
Прошу таблицу зависимостей датчика температуры (сенсор) LG 4781JR2003B ...

Холодильник Electrolux ERG29700 расположение датчика, расположение датчика морозильной камеры
Здравствуйте Холодильник Electrolux ERG29700 pnc 925701688 s/n 80600112 . Подскажите...

2
0 / 0 / 0
Регистрация: 11.02.2011
Сообщений: 287
14.01.2012, 14:04 2
Для начала надо отюстировать аналоговый вход с помощью ряда напряжений источников опорного напряжения /стабилитронов.
можно сделать делитель напряжения на 1% резисторах.
После этого уже выяснять насколько достоверны и линейны показания датчика и как с этим бороться
http://www.cs.uml.edu/teams-ac... linear.pdf

<Изображение удалено>
0
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 98
14.01.2012, 17:36 3
спасибо!!
получилось...
стабилитрон у меня L7805C, и сделал LC фильтр:

<Изображение удалено>
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2012, 17:36

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

С SHARP
Нужно, чтобы при выборе в одной форме и нажатии button открывалась новая форма и старая закрывалась...

C SHARP
как сделать так чтобы при выборе пункта в combobox картинка в picturebox изменялась?

Перевод из с++ в с sharp
Помагите пожалуйста нужно перевести из c++ в с Sharp #include &lt;iostream.h&gt; #include...

C sharp express
Подскажите, что такое &quot;C Sharp Express&quot;? И для чего он нужен?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.