roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 16:09

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




Начать новую тему Ответить на тему  [ Сообщений: 473 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9 ... 32  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 02 май 2007, 19:36 
Не в сети
Аватара пользователя

Зарегистрирован: 12 апр 2007, 18:10
Сообщения: 49
Откуда: ВОЛГОГРАД
вот код рограммы и где смотреть

//------------------------------------------------------------------------
// Окончательный вариант программы для простого мобильного робота
// http://projects.roboclub.ru/index.shtml?attempt
// (с) RodoClub.ru 2003
//------------------------------------------------------------------------

#include <inttypes.h>
#include <io.h>
#include <sig-avr.h>
#include <interrupt.h>
#include <stdlib.h>

// назначение определений для удобства работы с периферией
#define OUT PORTB
#define MOTOR_F  PB7
#define MOTOR_B  PB6
#define TURN_R   PB5
#define TURN_L   PB4

#define IN PIND
#define LIGHT_R  PD0
#define LIGHT_L  PD1
#define BUMPER_F PD2
#define BUMPER_B PD3

// Возможные режимы движения
enum {STOP, F, FR, FL, B, BR, BL};

//------------------------------------------------------------------------------
// Задержка t х 10ms
//------------------------------------------------------------------------------
#define F_CPU 4000000
#define K_DELAY_10ms F_CPU/600
void Delay_10ms(unsigned char t) {
 unsigned int i;
 if (t==0) return;
 while (t--) for(i=0;i<K_DELAY_10ms; i++);
}

// таблица вероятностей для выбора направления движения
// исходя из текущего направления движения
unsigned char p[7][7] = {
{14, 43, 57, 71, 86, 93, 100},
{7, 43, 71, 100, 100, 100, 100},
{7, 50, 93, 100, 100, 100, 100},
{7, 50, 57, 100, 100, 100, 100},
{29, 29, 29, 29, 57, 79, 100},
{36, 36, 36, 36, 71, 93, 100},
{36, 36, 36, 36, 71, 79, 100},
};

// текущее направление движения
unsigned char this_move;

//------------------------------------------------------------------------------
// Включение комбинации моторов для движения в заданном направлении
//------------------------------------------------------------------------------
void go(unsigned char direction){

 switch (direction) {
 case STOP:
   cbi(OUT, MOTOR_F);
   cbi(OUT, MOTOR_B);
   cbi(OUT, TURN_R);
   cbi(OUT, TURN_L);
   break;

 case F:
   sbi(OUT, MOTOR_F);
   cbi(OUT, MOTOR_B);
   cbi(OUT, TURN_R);
   cbi(OUT, TURN_L);
   break;

 case FR:
   sbi(OUT, MOTOR_F);
   cbi(OUT, MOTOR_B);
   sbi(OUT, TURN_R);
   cbi(OUT, TURN_L);
   break;

 case FL:
   sbi(OUT, MOTOR_F);
   cbi(OUT, MOTOR_B);
   cbi(OUT, TURN_R);
   sbi(OUT, TURN_L);
   break;

 case B:
   cbi(OUT, MOTOR_F);
   sbi(OUT, MOTOR_B);
   cbi(OUT, TURN_R);
   cbi(OUT, TURN_L);
   break;

 case BR:
   cbi(OUT, MOTOR_F);
   sbi(OUT, MOTOR_B);
   sbi(OUT, TURN_R);
   cbi(OUT, TURN_L);
   break;

 case BL:
   cbi(OUT, MOTOR_F);
   sbi(OUT, MOTOR_B);
   cbi(OUT, TURN_R);
   sbi(OUT, TURN_L);
   break;
 }
}

//------------------------------------------------------------------------------
// Выбор направления движения в следующем шаге по таблице вероятностей
//------------------------------------------------------------------------------
unsigned char next_move(void){
  unsigned char pp, i;

  pp = rand()/327;     // получаем случайное число 0..99
  for (i=0;i<7;i++){   // ищем соответствие в таблице вероятностей
     if (p[this_move][i] > pp) break;
  }
  this_move = i;       // записываем новое полученное направление как текущее
  return(i);
}

//------------------------------------------------------------------------------
// Обработка прерывания от переднего бампера (INT0 = PD2)
//------------------------------------------------------------------------------
SIGNAL(SIG_INTERRUPT0)
{
  if(this_move==FR) go(BL);
  if(this_move==FL) go(BR);
  else go(B);
  Delay_10ms(250);    // отъезд в течение 2.5 х 2 сек
  Delay_10ms(250);
  this_move=B;
}

//------------------------------------------------------------------------------
// Обработка прерывания от заднего бампера (INT1 = PD3)
//------------------------------------------------------------------------------
SIGNAL(SIG_INTERRUPT1)
{
  if(this_move==BR) go(FL);
  if(this_move==BL) go(FR);
  else go(F);
  Delay_10ms(250);    // отъезд в течение 2.5 х 2 сек
  Delay_10ms(250);
  this_move=F;
}

//------------------------------------------------------------------------------
// "Случайное блуждание"
//------------------------------------------------------------------------------
unsigned char walk(void){
  // этот цикл организует "свободное блуждание" пока
  // нет сигнала ни от одного из датчиков освещенности
  while((bit_is_set(IN, LIGHT_R)) && (bit_is_set(IN, LIGHT_L))){
      go(next_move());   // получаем следующее направление движения и
      Delay_10ms(250);   // движемся в этом направлении 2.5 сек
  }
  // этот цикл организует движение на свет, пока
  // есть сигнал хотя бы от одного из датчиков освещенности
  while((bit_is_clear(IN, LIGHT_R)) || (bit_is_clear(IN, LIGHT_L))){
      if((bit_is_clear(IN, LIGHT_R)) && (bit_is_clear(IN, LIGHT_L))) go(F);
      else if(bit_is_clear(IN, LIGHT_R)) go(FR);
      else if(bit_is_clear(IN, LIGHT_L)) go(FL);
  }

  return(0);
}

//------------------------------------------------------------------------------
// Главная программа
//------------------------------------------------------------------------------
int main(void)
{
 DDRB  = 0xff;  // назначаем все линии порта B на выход
 PORTB = 0x00;  // и устанавливаем на них низкий уровень

 DDRD  = 0x00;  // назначаем все линии порта D на вход
 PORTD = 0xff;  // подключаем внутренние нагрузочные резисторы

 // разрешаем прерывания int0 и int1
 outb(GIMSK, (1<<INT0)|(1<<INT1));

 // запрос на прерывание - по спадающим фронтам на int0 и int1
 outb(MCUCR, (1<<ISC01)|(1<<ISC11));

 // разрешаем прерывания
 sei();          

 // запускаем главный цикл
 while(1) walk();

}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 02 май 2007, 19:45 
Не в сети

Зарегистрирован: 26 фев 2006, 15:21
Сообщения: 400
Откуда: Омск
Сюда:

#define LIGHT_R  PD0 //R1
#define LIGHT_L  PD1 //R2


[/off]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 02 май 2007, 22:39 
Не в сети
Аватара пользователя

Зарегистрирован: 12 апр 2007, 18:10
Сообщения: 49
Откуда: ВОЛГОГРАД
БЛАГОДАРЕН ВСЕМ ЗА ПОМОЩЬ ! :wink:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 03 май 2007, 19:28 
Не в сети
Аватара пользователя

Зарегистрирован: 12 апр 2007, 18:10
Сообщения: 49
Откуда: ВОЛГОГРАД
если прошивка компилирована под AT90S2313  а прошил я ей ATTINY2313 , на работу МК это не влеяет .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 03 май 2007, 19:39 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Это вопрос или утверждение?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 04 май 2007, 11:12 
Не в сети
Аватара пользователя

Зарегистрирован: 12 апр 2007, 18:10
Сообщения: 49
Откуда: ВОЛГОГРАД
Master писал(а):
Это вопрос или утверждение?


Это вопрос


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 04 май 2007, 11:53 
Не в сети

Зарегистрирован: 04 май 2007, 11:46
Сообщения: 2
Откуда: Moskow
TOSIK писал(а):
если прошивка компилирована под AT90S2313  а прошил я ей ATTINY2313 , на работу МК это не влеяет .


Они отличаются набором регистров перефирии, как правило программа написаная для AT90S2313, будет работать в ATTINY2313. поскольку последний болеефункциональный. Но всеже рекомендуется прожечь фьюз, сейчас не помню какой, посмотри даташит, тогда будет полная идентичность двух микроконтроллеров


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 04 май 2007, 12:16 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Отличия описаны в апноуте AVR091.   Список апноутов для скачки в низу страницы - avr123.nm.ru/07.htm


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 04 май 2007, 15:17 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Если я не ошибаюсь, то кто-то писал что прошивка с робоклуба подходит для тини2313 безовсяких фьюзов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 май 2007, 08:02 
Не в сети
Правохранитель
Аватара пользователя

Зарегистрирован: 23 фев 2007, 02:23
Сообщения: 197
Откуда: Зеленоград
avr123.nm.ru писал(а):
Отличия описаны в апноуте AVR091.   Список апноутов для скачки в низу страницы - avr123.nm.ru/07.htm

АВР, а не можешь не ссылками говорить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 май 2007, 12:20 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Он не сможет, поверь, такого случая еще не было


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 май 2007, 18:25 
Не в сети

Зарегистрирован: 05 май 2007, 17:03
Сообщения: 42
Откуда: Украина г.КРАМОТОРСК
TOSIK писал(а):
вот что купил ; кварцевый резонатор на 4МГц, конденсатор на 22пф 2шт керамический и 0,47 мкф (керам) , фото диод СФТ3-1 2шт ,микросхема L293D, конденсатор 1000мкф 16V 2шт, резистор 10ком 4шт, LC-фильтор(дросель 39МКГн и конденсатор 0,47мкф), резистор 200(ОМ) 2шт и 100(ОМ) 2шт ,ATTINY2313-20PI   вместо АТ90S2313-10PI

Слушай вопросик есть. Почём ты купил L293D ??? Хочу сделать Beam , а низнаю скоко стоит эта штука !!!.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 май 2007, 19:40 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
efim писал(а):
Слушай вопросик есть. Почём ты купил L293D ??? Хочу сделать Beam , а низнаю скоко стоит эта штука !!!.


ну так и сделал бы серч :)
а так, наш аналог стоит около 30 р. "оригинал" - дороже. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 май 2007, 18:04 
Не в сети
Аватара пользователя

Зарегистрирован: 12 апр 2007, 18:10
Сообщения: 49
Откуда: ВОЛГОГРАД
Цитата:
Слушай вопросик есть. Почём ты купил L293D ??? Хочу сделать Beam , а низнаю скоко стоит эта штука !!


около 60р.аналог около 30р.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 май 2007, 11:03 
Не в сети

Зарегистрирован: 05 май 2007, 17:03
Сообщения: 42
Откуда: Украина г.КРАМОТОРСК
Vooon писал(а):
а так, наш аналог стоит около 30 р. "оригинал" - дороже. :)

А какая между ними разница :?:
Можно ли через инет заказать???
Только я в Украине живу... Я с Рублями не дружу у меня Гривны


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 473 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9 ... 32  След.

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


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

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


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

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