roboforum.ru

Технический форум по робототехнике.

Мой первый Бот :)

Наше хобби — конструировать и программировать.
Демонстрация готовых роботов и устройств построенных своими руками.

Мой первый Бот :)

Сообщение pashteet » 30 авг 2009, 22:25

Всем здравствуйте!
Очень долго читал ваш форум, истекал слюной и учился паять :) И наконец-то у меня хоть что-то получилось :oops: Представляю на обозрение свю первую конструкцию :Yahoo!: Имя ей я еще не придумал, так как ожила она примерно час назад. Робота строил по статье, представленной на робоклубе http://projects.roboclub.ru/ (вариант с упровляемыми колесами)
Контроллер использовал ATtiny2313V
По задумке робот должен после включения находится в режиме "свободный поиск", если фоторезисторы фиксируют наличае света, то робот начинает двигаться на свет, также в наличае есть два бампера
Фотографии робота прилогаются
P1000763.JPG

P1000764.JPG

P1000765.JPG

P1000766.JPG

P1000767.JPG

P1000768.JPG

P1000769.JPG

P1000770.JPG


Ну вот и первая беда :cry:
После того как робот отъездил минут 15 в свободном поиске, решил подключить фоторезисторы (3 контакта рядом с кнопкой "reset", после подключения датчиков робот стал ездить только назад, я отключил датчики, но результат остался тем же :cry: Едет все время назад и только изредка вперед, повороты вообще молчат :cry:

Ребят подскажите плиз, что с ним могло случится? Может контроллер прошит криво (прошивал через LPT 5 проводков)
Кстати, прошивку взял ту, что на робоклубе выложенна (ссылка вверху)
И еще, бамперы пока не подключал (3 штырька, возле выхода на программатор), только один контакт допаял (землю, а то раньше было только два)
Очень надеюсь на Вашу помощь :beer: , ато я себе уже голову сломал :o
Последний раз редактировалось pashteet 01 сен 2009, 19:01, всего редактировалось 1 раз.
Аватара пользователя
pashteet
 
Сообщения: 930
Зарегистрирован: 28 авг 2009, 12:50
Откуда: Волжский
Skype: pashok0988
ФИО: Павел Петрович

Re: Мой первый Бот :)

Сообщение nest » 30 авг 2009, 22:45

адаптация прошивки делалась с AT90S2313 для тини2313 ?
вообще то и так, может быть, работает :)

после "подключения/отключения" фоторезисторов перепрошивать µC пробовал ?
Аватара пользователя
nest
 
Сообщения: 977
Зарегистрирован: 21 янв 2005, 12:16
Откуда: Germany
Предупреждения: -4
прог. языки: asm

Re: Мой первый Бот :)

Сообщение pashteet » 30 авг 2009, 23:03

В том то и дело, что я в программировании такой же Бот, и даже и не подозревал что надо делать адаптацию под другой контроллер :o
Эх, а прошиться побыстрому не получится , потомучто у меня на компе нет LPT, я для этого дела в гости ходил :sorry:
Кстати, щас уже начал ездить и вперед и назад, только в определенной последовательности, сначала вперед, а потом все время назад
Аватара пользователя
pashteet
 
Сообщения: 930
Зарегистрирован: 28 авг 2009, 12:50
Откуда: Волжский
Skype: pashok0988
ФИО: Павел Петрович

Re: Мой первый Бот :)

Сообщение yak-40 » 30 авг 2009, 23:37

Учи программирование, пиши программу под своего робота и будет всё ОК :good:
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!
Аватара пользователя
yak-40
 
Сообщения: 3037
Зарегистрирован: 23 окт 2007, 22:03
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец

Re: Мой первый Бот :)

Сообщение pashteet » 30 авг 2009, 23:45

Спасибо за наставление :D Сейчас активно изучаю "краткий курс по AVR"
Если не сложно, разъясните вкратце, как "адаптировать" прошивку под мой МК, просто завтра пойду в гости и хотелось бы прошить заново, а ночи боюсь нехватит, чтобы весь курс освоить :sorry:
Аватара пользователя
pashteet
 
Сообщения: 930
Зарегистрирован: 28 авг 2009, 12:50
Откуда: Волжский
Skype: pashok0988
ФИО: Павел Петрович

Re: Мой первый Бот :)

Сообщение =DeaD= » 30 авг 2009, 23:47

Ночью спать надо :wink: а прошивку писать по мере получения знаний. Личный опыт бесценен!
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Мой первый Бот :)

Сообщение pashteet » 31 авг 2009, 01:01

Млин, почитал программу, вроде ниче сложного нет, сравнил с даташитом выходы, входы, все совпадает, ума неприложу что могло случится. Ув. специалисты, глянте прогу пожайлуста, буду очень признателен!
Код: Выделить всёРазвернуть
//------------------------------------------------------------------------
// Окончательный вариант программы для простого мобильного робота
// 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();

}
Аватара пользователя
pashteet
 
Сообщения: 930
Зарегистрирован: 28 авг 2009, 12:50
Откуда: Волжский
Skype: pashok0988
ФИО: Павел Петрович

Re: Мой первый Бот :)

Сообщение EdGull » 31 авг 2009, 07:19

пиши на бейсике и не парься
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Мой первый Бот :)

Сообщение =DeaD= » 31 авг 2009, 07:44

В каком месте бейсик будет проще? :) тут же нету всяких штук типа
Код: Выделить всёРазвернуть
c+=(f-- + r << ++v)>0 ? 43%f : 0
? ;)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Мой первый Бот :)

Сообщение EdGull » 31 авг 2009, 07:55

1. в любом!
2. пусть pashteet сначала поймет что это выражение вообще означает :wink:
3. за вечер на Сях он ничему не научится, а на васике за вечер у него уже всё работать будет
4. пошли воевать в отдельную ветку
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Мой первый Бот :)

Сообщение =DeaD= » 31 авг 2009, 07:58

2EdGull: Нее, так не пойдёт :) я не собираюсь рубиться за васик\си вообще, я про конкретно эту программу сказал, так что после фразы "в любом" можно обсуждение не продолжать :)

2pashteet: А вы в каких местах программу меняли от исходной рабочей под свои порты?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Мой первый Бот :)

Сообщение pashteet » 31 авг 2009, 08:59

В том то и дело, что я всю программу просмотрел и незаметил каких либо отличий от datasheet по своему контроллеру, поэтому и попросил посмотреть, вполне может быть что я незаметил каких-либо значимых параметров или команд :pardon:

to EdGull
C "васиком" немного знаком,но буду учить С++

Добавлено спустя 13 минут 41 секунду:
И еще один момент, недоконца разобрался как правильно прошивать
Данную программу прошивал PonyProg по следующему алгоритму:

Выбрать в меню Device-AVRmicro-ATtiny2313.

Включить программатор в плату с процом.

Меню Configuration and Security bits...
Появляется табличка:

Нажать "Read" - если все ОК, появятся какие-то флажки.
Значит программатор видит процессора и процессор запустился...
Тыркаем в PonyProg в Commands-Program Options...
Ставим флажки Reload Files, Erase, Write Program memory (FLASH)... "ОК"
Тыркаем File-Open Program (FLASH) file.
Выбираем каталог, куда распакован zip.
Выбираем расширение *.hex.
Появляются байтики.

Тыркаем Command-Program (или желтую стрелочку)
Он сначала стирает... Некоторое время записывает...
Потом проверяет...
И по идее должен сказать "Successful", мол все хорошо...
Светодиод должен замигать...

Светодиоды замигали, символизируя работу двигателей.
На врем прошивки драйвер двигателя вынимал из постели
Аватара пользователя
pashteet
 
Сообщения: 930
Зарегистрирован: 28 авг 2009, 12:50
Откуда: Волжский
Skype: pashok0988
ФИО: Павел Петрович

Re: Мой первый Бот :)

Сообщение =DeaD= » 31 авг 2009, 09:00

Вообще надо смотреть не отличия по даташиту, а специальный аппноут по замене одного контроллера другим аналогичным более новым, конкретно тут это AVR091: http://www.atmel.com/dyn/resources/prod ... oc4298.pdf

Добавлено спустя 1 минуту 7 секунд:
Фьюзы на 4МГц выставили?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Мой первый Бот :)

Сообщение pashteet » 31 авг 2009, 09:15

Блин, как многого я еще не знаю :crazy: думал, что если фьюзы не трогать, то все ок будет
Я так понял, что после моей прошивки мк работает от внутренего кварца :o
Уже 3ий раз буду перечитывать 7-ую. страницу курса :crazy:
Аватара пользователя
pashteet
 
Сообщения: 930
Зарегистрирован: 28 авг 2009, 12:50
Откуда: Волжский
Skype: pashok0988
ФИО: Павел Петрович

Re: Мой первый Бот :)

Сообщение =DeaD= » 31 авг 2009, 09:22

Если фьюзы не трогали, то да, МК работает на 1МГц скорее всего.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

След.

Вернуться в Наши проекты

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

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