roboforum.ru

Технический форум по робототехнике.
Текущее время: 07 май 2025, 15:21

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: 2 датчика линии
СообщениеДобавлено: 21 июн 2011, 14:51 
Не в сети

Зарегистрирован: 14 янв 2011, 02:46
Сообщения: 20
Откуда: Санкт-Петербург
ФИО: Лапко Сёма
Решил сделать робота для линии, всё на писал, спаял, всё работает,но не могу разобраться как использовать одновременно два датчика света, с одним датчиком всё работает.
я пишу на avrstudio.
помогите разобраться, а то уже два месяца мучаюсь.
код прилагаю.
и как вообще подключать >1 датчика на ацп.
Код:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>

#define BACKWARD   ((0 << PC0)|(1 << PC1)|(1 << PC2)|(0 << PC3))      
#define FORWARD      ((1 << PC0)|(0 << PC1)|(0 << PC2)|(1 << PC3))

#define STOP      ((1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3))
#define MOTOR_PORT   PORTC

ISR(ADC_vect)
{
      if (ADCH == 0)
      {
         MOTOR_PORT = STOP;
         DDRB = 1 << PB0;
         PORTB = 1 << PB0;
      }
      else
      {
          DDRB = 0 << PB0;
         MOTOR_PORT = FORWARD;
      
      }
}

void init()
{

//////////PortC Initialization////////////////////////
   DDRC  = (1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3);
   PORTC = (1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3);
//-----------------------------------------------------
//////////PortD Initialization/////////////////////////
   DDRD  = (1 << PD4)|(1 << PD5);
   PORTD = 0;
//-----------------------------------------------------

//////////Timer 1 Initialization//////////////////////
   TCCR1A = (1 << COM1A1)|(1 << COM1B1)|(1 << WGM10);
   TCCR1B = (1 << WGM12)|(1 << CS10);
   TCNT1  = 0;
   OCR1A  = 0;
   OCR1B  = 0;
//-----------------------------------------------------

//////////ADC0 Intitialization////////////////////////
   ADMUX  = (1 << ADLAR);
   ADCSRA = (1 << ADEN)|(1 << ADATE)|(1 << ADSC)|(1 << ADIE)|(3 << ADPS0);
//----------------------------------------------------
   MOTOR_PORT = STOP;
   




};



int main(void)
{
   init();
   sei();
   while(1)
   {
     OCR1A = ADCH;//здесь будет ПД регулятор на 2 датчика
     OCR1B = ADCH;//      
   };
}


заранее всем большое спасибо.

_________________
Кто не рискует тот не пьёт морковный сок!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2 датчика линии
СообщениеДобавлено: 21 июн 2011, 19:08 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2009, 20:06
Сообщения: 333
прог. языки: c, c#
ФИО: Евгений
На разные каналы АЦП цепляете фотодатчики, выбираете нужный вам канал при помощи мультиплексора, записав байт в регистр ADMUX (см. даташит) и запускаете АЦ преобразование, установив 6-ой бит ADCSRA в 1.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2 датчика линии
СообщениеДобавлено: 21 июн 2011, 20:55 
Не в сети

Зарегистрирован: 14 янв 2011, 02:46
Сообщения: 20
Откуда: Санкт-Петербург
ФИО: Лапко Сёма
Да, можно и так, но как это сделать программно?
Я точно знаю, что на ATMEGE32 есть два входа АЦП.

_________________
Кто не рискует тот не пьёт морковный сок!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2 датчика линии
СообщениеДобавлено: 21 июн 2011, 22:16 
data sheet page 199


Вернуться к началу
  
 
 Заголовок сообщения: Re: 2 датчика линии
СообщениеДобавлено: 21 июн 2011, 23:40 
Не в сети

Зарегистрирован: 14 янв 2011, 02:46
Сообщения: 20
Откуда: Санкт-Петербург
ФИО: Лапко Сёма
возможно я ошибаюсь, но что тогда такое ADC1,ADC2...?
p.s. в моём даташите только 21 страница.

_________________
Кто не рискует тот не пьёт морковный сок!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2 датчика линии
СообщениеДобавлено: 22 июн 2011, 07:25 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
sema-lap писал(а):
в моём даташите только 21 страница.

Это у вас не даташит, а так, буклетик. Скачайте даташит.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2 датчика линии
СообщениеДобавлено: 22 июн 2011, 22:44 
Не в сети

Зарегистрирован: 01 июл 2010, 20:58
Сообщения: 76
Откуда: Санкт-Петербург
прог. языки: Си
ФИО: Дмитрий
А зачем АЦП, на компараторах же проще - 1 или 0 на выходе, ничего мерять не надо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2 датчика линии
СообщениеДобавлено: 23 июн 2011, 00:47 
Не в сети

Зарегистрирован: 14 янв 2011, 02:46
Сообщения: 20
Откуда: Санкт-Петербург
ФИО: Лапко Сёма
ну как бы хочется знать на сколько я заехал на линию или съехал,а не просто на линии датчик или нет, если так можно сделать при помощи компараторов расскажите.
Я понял что раньше я сморозил полную глупость про АЦП.Простите я только учусь.

_________________
Кто не рискует тот не пьёт морковный сок!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2 датчика линии
СообщениеДобавлено: 23 июн 2011, 04:04 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Пользуйтесь официальными источниками информации.
http://www.atmel.com/dyn/resources/prod ... oc2503.pdf
И учите английский. В даташите написан ответ на ваш вопрос.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2 датчика линии
СообщениеДобавлено: 23 июн 2011, 15:51 
Не в сети

Зарегистрирован: 01 июл 2010, 20:58
Сообщения: 76
Откуда: Санкт-Петербург
прог. языки: Си
ФИО: Дмитрий
sema-lap писал(а):
ну как бы хочется знать на сколько я заехал на линию или съехал,а не просто на линии датчик или нет, если так можно сделать при помощи компараторов расскажите.

А как это сделать на АЦП? Линия либо есть, либо нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2 датчика линии
СообщениеДобавлено: 23 июн 2011, 19:59 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
На ацп это сделать элементарно. Напряжение на фототранзисторе пропорционально освещенности, а освещенность зависит от того, сколько в световом пятне черного и сколько белого.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2 датчика линии
СообщениеДобавлено: 24 июн 2011, 12:23 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2009, 20:06
Сообщения: 333
прог. языки: c, c#
ФИО: Евгений
Цитата:
Да, можно и так, но как это сделать программно?
Я точно знаю, что на ATMEGE32 есть два входа АЦП.

Скачай нормальный даташит с оф. сайта и почитай описания регистров из раздела про АЦП, обрати внимание на то как каналы АЦП переключать (т.е. посмотри назначение битов регистра ADMUX). После этого должно стать понятно как сделать программно.
В меге 32 8 каналов АЦП.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2 датчика линии
СообщениеДобавлено: 24 июн 2011, 19:08 
Не в сети

Зарегистрирован: 01 июл 2010, 20:58
Сообщения: 76
Откуда: Санкт-Петербург
прог. языки: Си
ФИО: Дмитрий
Radist писал(а):
На ацп это сделать элементарно. Напряжение на фототранзисторе пропорционально освещенности, а освещенность зависит от того, сколько в световом пятне черного и сколько белого.

Странная у вас линия, у меня такой небыло. АЦП актуально если на свет ехать.
И еще, изза инерции движения робот проскочит положение "половинной яркости", не успев на него среагировать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2 датчика линии
СообщениеДобавлено: 24 июн 2011, 20:05 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Линия как у всех, черная на белом, ширина 2 см. Если у вас не получилось - это не значит что это не возможно. Сейчас мы говорим об одном датчике, который позволяет отслеживать край линии. Уже один этот датчик позволяет организовать ПИД управление. Попробуйте это сделать на одном компараторе. Два аналоговых датчика на краях линии еще круче. А если у вас линейка датчиков и с каждого приходит код АЦП, то можно получить смещение центра линии относительно центра робота с очень хорошим разрешением (а не несколько дискретов, как в случае с компараторами). Рекомендую посмотреть в подфоруме "Алгоритмы" мою темку, где я исследовал эти вопросы, а в подфоруме "Робоспорт/лайнтрейсеры" результаты заездов при разных линейках, дискретных и аналоговых.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2 датчика линии
СообщениеДобавлено: 25 июн 2011, 21:44 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2009, 20:06
Сообщения: 333
прог. языки: c, c#
ФИО: Евгений
Radist, +100, отлично работает этот способ с аналоговыми датчиками линии и ПИДом, проверено лично.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO