roboforum.ru

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


Proteus умеет врать?

Учиться можно на своих ошибках, но учиться на чужих — быстрее и дешевле ;)

Proteus умеет врать?

Сообщение AsonD » 30 июл 2008, 17:25

В обсчем, я собрал схему в протеусе и она работает абсолютно так как я и хотел, но почему-то миня мучают сомнения, что если собрать это в реале, то не заработает, насколько прав или не прав могет быть протеус?
Аватара пользователя
AsonD
 
Сообщения: 110
Зарегистрирован: 14 мар 2008, 17:22
Откуда: Череповец
прог. языки: С/С++

Re: Proteus умеет врать?

Сообщение Myp » 30 июл 2008, 18:13

ты бы схемку чтоли привёл...

а вобще у протеуса есть такой минус, если в реале у тя кондёры тсопы нафиг повзрывались от перенапряжения и тя убило взрывной волной
то протеус скорей всего об этом не знает, и будет думать что схема работает...
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Proteus умеет врать?

Сообщение AsonD » 30 июл 2008, 18:28

В общем-то частично я уверен в правильности этого, но я не уверен в правильном подключении блока l293d с фотоэлементами и еще я не уверен с количеством тактов за секунду, я примерно экспериментально мерял, дак получаетсо что за 2,5 секунды МК делает в районе 6500 тактов... а как будет в реале хз
Вложения
F-Bot Proteus Screen.JPG
Аватара пользователя
AsonD
 
Сообщения: 110
Зарегистрирован: 14 мар 2008, 17:22
Откуда: Череповец
прог. языки: С/С++

Re: Proteus умеет врать?

Сообщение -= Александр =- » 30 июл 2008, 18:54

А еще меандр через трансформатор черт знает как передается. На первичку даю размах от -10 до 10 вольт, а со вторички почему-то от 0 до 20 получается. (обмотки 1:1). А синус передает нормально...

Добавлено спустя 7 минут 14 секунд:
AsonD писал(а):В общем-то частично я уверен в правильности этого, но я не уверен в правильном подключении блока l293d с фотоэлементами и еще я не уверен с количеством тактов за секунду, я примерно экспериментально мерял, дак получаетсо что за 2,5 секунды МК делает в районе 6500 тактов... а как будет в реале хз


По-моему проще фоторезисторы включить через компараторы. К тому-же у тебя они включены неправильно. Его надо включать с еще одним резистором как плечо делителя, а сигнал снимать со средней точки. Так можно его вообще прямо в контроллер включить, но лучше с компаратором.

Так как у тебя нарисовано может работать только фотоэлемент, который создает ЭДС, а у тебя простое сопротивление.
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: Proteus умеет врать?

Сообщение AsonD » 30 июл 2008, 20:58

оу... забыл со всем про резюки, спс))
не, ну в протеусе-то все работает, а через компараторы я хз как, я схему доганяю не полностью, да и мудитсо с ней не охота, так проще
Аватара пользователя
AsonD
 
Сообщения: 110
Зарегистрирован: 14 мар 2008, 17:22
Откуда: Череповец
прог. языки: С/С++

Re: Proteus умеет врать?

Сообщение blindman » 30 июл 2008, 21:06

Схема просто нелепая. Фоторезисторы подключить к входам драйвера двигателя, а с выходов подавать на контроллер - это еще додуматься надо :shock: Есть же АЦП в контроллере - туда и надо фоторезисторы подключать.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Proteus умеет врать?

Сообщение AsonD » 30 июл 2008, 21:11

Но все-таки, у миня в программе организован свободный поиск, робот меняет направление как только переменная станет равной 6500 (каждый такт прибавляетсо единица), в протеусе это происходит примерно за 2,5 секунд (значение переменной брал на вскидку), как по вашему, в реальности как сильно может измениться время прохода 6500 тактов? :o
Аватара пользователя
AsonD
 
Сообщения: 110
Зарегистрирован: 14 мар 2008, 17:22
Откуда: Череповец
прог. языки: С/С++

Re: Proteus умеет врать?

Сообщение blindman » 30 июл 2008, 21:13

А как ты узнал, что увеличивается именно на каждом такте?
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Proteus умеет врать?

Сообщение AsonD » 30 июл 2008, 21:14

Простите канечна, но как врубить фотоэлементы напрямую к МК я не в курсах, компараторы юзать тож не умею, а так все проверено и в принципе работает, если что-то не нравитсо подскажи пожалста

Добавлено спустя 48 секунд:
Потому что я сам писал программу, и написал "++Q", логично?)))
Аватара пользователя
AsonD
 
Сообщения: 110
Зарегистрирован: 14 мар 2008, 17:22
Откуда: Череповец
прог. языки: С/С++

Re: Proteus умеет врать?

Сообщение blindman » 30 июл 2008, 21:20

Абсолютно нелогично. Давай уже показывай свою программу.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Proteus умеет врать?

Сообщение AsonD » 30 июл 2008, 21:23

Ну смотри) Компилятор - CV AVR
Там правдо лишнего наверное будет многа (прога пока в разработке)
Код: Выделить всёРазвернуть
/*****************************************************************************************************************
// Программа для мобильного робота (пока только ездит на свет; свободный поиск в разработке)
// Компилятор: CodeVision AVR
// (с) ASAR.my1.ru 2008
******************************************************************************************************************/

#include "mega16.h"
#include "delay.h"

// обьявляем переменные
int p;
long int g;
int x = 0;
int y = 6;
int Q = 0;

/****************
Таблица вероятностей
*******************/
int ai[5][6] = {
{ 1, 5, 2, 4, 3, 2 },
{ 5, 3, 6, 2, 3, 1 },
{ 2, 4, 3, 1, 1, 2 },
{ 3, 2, 1, 5, 3, 4 },
{ 1, 1, 5, 3, 2, 6 }
};

/*********************************************************************************************************
  Варианты выбора направления
*********************************************************************************************/   
void F() // Forward - движение вперед
{
PORTD.0 = 1;
PORTD.1 = 0;
PORTD.2 = 0;
PORTD.3 = 0;

PORTD.5 = 0;
PORTD.6 = 1;
}

void B() // Backward - движение назад
{
PORTD.0 = 0;
PORTD.1 = 1;
PORTD.2 = 0;
PORTD.3 = 0;

PORTD.6 = 0;
PORTD.5 = 1;


void L() // движение просто влево и вправо  - запасные(просто так их использовать не получится), вдруг пригодятся))
{
PORTD.0 = 0;
PORTD.1 = 0;
PORTD.2 = 1;
PORTD.3 = 0;
}

void R()
{
PORTD.0 = 0;
PORTD.1 = 0;
PORTD.2 = 0;
PORTD.3 = 1;
}

void FL() // Forward-Left - движение вперед-влево
{
PORTD.0 = 1;
PORTD.1 = 0;
PORTD.2 = 1;
PORTD.3 = 0;

PORTD.5 = 0;
PORTD.6 = 1;
}

void FR() // Forward-Right - движение вперед-вправо
{
PORTD.0 = 1;
PORTD.1 = 0;
PORTD.2 = 0;
PORTD.3 = 1;

PORTD.5 = 0;
PORTD.6 = 1;
}

void BL() // Backward-Left - движение назад-влево
{
PORTD.0 = 0;
PORTD.1 = 1;
PORTD.2 = 1;
PORTD.3 = 0;

PORTD.5 = 1;
PORTD.6 = 0;
}

void BR() // Backward-Right - движение назад-вправо
{
PORTD.0 = 0;
PORTD.1 = 1;
PORTD.2 = 0;
PORTD.3 = 1;

PORTD.5 = 1;
PORTD.6 = 0;
}   

void STOP() // стоп
{
PORTD = 0x00;


/**********************************
Выбор случайного направления
*********************************/
void snum()
{

  Q++;  // каждый цикл этой переменной будет добавляться единица

if (Q == 6500)  // 6 500 взято на вскидку экспериментально в протеусе; примерно за 2,5 секунды программа сделает 6 500 циклов
{
  Q = 0; //после проделывания 6500 циклов переменная обнуляется и отчет начинается сначала (и так до бесконечности)

  ++x; //каждые 6500 циклов или 2,5 секунды добавляем переменной единицу 
 
 
 
  if (x == 6) //каждый раз как x будет набирать число 6 по единицам, от у будет вычитаться единица
  {
  x = 0;//обнуляем переменную
  --y; // вычитаем 1 (каждый цикл при х = 6)
  }
 
  if (y == -1) // если у становится меньше нуля - возвращаем переменной первоначальное значение, а тоесть 6
  {y = 6;}
 
  }

p = ai[x][y]; //переменная будет равна такому числу в таблице вероятностей, где x -номер числа по горизонтали, а у - по вертикали

}

/*******************************************
Обработка информации с контактных датчиков
***********************************************/
void contact()
{
//*********************************************************
if ((PINB.4 == 1)&&(PINB.5 == 0)&&(PINB.6 == 0)&&(PINB.7 == 0))
{
BL();
delay_ms(150);
FR();
delay_ms(150);
F();
delay_ms(50);

}
//*********************************************************
  if ((PINB.5 == 1)&&(PINB.4 == 0)&&(PINB.6 == 0)&&(PINB.7 == 0))
{
FR();
delay_ms(150);
F();
delay_ms(50);
}
  //*********************************************************
  if ((PINB.6 == 1)&&(PINB.5 == 0)&&(PINB.4 == 0)&&(PINB.7 == 0))
{
FL();
delay_ms(150);
F();
delay_ms(50);

}
  //*********************************************************
  if ((PINB.7 == 1)&&(PINB.5 == 0)&&(PINB.6 == 0)&&(PINB.4 == 0))
{
BR();
delay_ms(150);
FL();
delay_ms(150);
F();
delay_ms(50);

}
  //*********************************************************

}

/******************************
Обработка информации с фотоэлементов
*********************************/
void photo()
{
if ((PINB.0 == 0)&&(PINB.1 == 1)&&(PINB.2 == 1)&&(PINB.3 == 1)&&(PINB.4 == 0)&&(PINB.5 == 0)&&(PINB.6 == 0)&&(PINB.7 == 0))
{
STOP();
FR();

delay_ms(25);
STOP();
}
////////////////////////////////////////////////////////////*
 
if ((PINB.1 == 0)&&(PINB.0 == 1)&&(PINB.2 == 1)&&(PINB.3 == 1)&&(PINB.4 == 0)&&(PINB.5 == 0)&&(PINB.6 == 0)&&(PINB.7 == 0))
{
STOP();
FL();


delay_ms(25);
STOP();}
////////////////////////////////////////////////////////////*

if ((PINB.2 == 0)&&(PINB.1 == 1)&&(PINB.0 == 1)&&(PINB.3 == 1)&&(PINB.4 == 0)&&(PINB.5 == 0)&&(PINB.6 == 0)&&(PINB.7 == 0))
{
STOP();
BR();

delay_ms(100);
FL();
delay_ms(100);
STOP();}
////////////////////////////////////////////////////////////*

if ((PINB.3 == 0)&&(PINB.1 == 1)&&(PINB.2 == 1)&&(PINB.0 == 1)&&(PINB.4 == 0)&&(PINB.5 == 0)&&(PINB.6 == 0)&&(PINB.7 == 0))
{
STOP();
BL();

delay_ms(100);
FR();
delay_ms(100);
STOP();} 
////////////////////////////////////////////////////////////*

if ((PINB.0 == 0) && (PINB.1 == 0)&&(PINB.2 == 1) && (PINB.3 == 1)&&(PINB.4 == 0)&&(PINB.5 == 0)&&(PINB.6 == 0)&&(PINB.7 == 0))
{
STOP();
F();

delay_ms(25);
STOP();} 
////////////////////////////////////////////////////////////*

if ((PINB.2 == 0) && (PINB.3 == 0) && (PINB.0 == 1) && (PINB.1 == 1)&&(PINB.4 == 0)&&(PINB.5 == 0)&&(PINB.6 == 0)&&(PINB.7 == 0))
{
STOP();
B();

delay_ms(25);
STOP();}
////////////////////////////////////////////////////////////*
}

/***************************
варианты "случайного" направления
************************/
void direction()
{

snum(); //выбираем значение случайного направления (р) 


//-----
//Дальше выбираем направление по ранее найденому значению
if (p == 1)
{F();}

if (p == 2)
{FR();}

if (p == 3)
{BL();}

if (p == 4)
{FL();}

if (p == 5)
{BR();}

if (p == 6)
{B();}

}

/********************************************************
Главная программа
**********************************************************/
void main(void)
{
DDRD = 0xff; // назначаем все линии порта B на выход
PORTD = 0x00;

DDRB = 0x00; // назначаем все линии порта D на вход
PORTB = 0x00;


while(1) //бесконечный цикл
{

photo(); //запускаем фототранзисторное "зрение"
contact(); //запускаем контактные датчики

/****************************************
Свободный поиск
*******************************/

if (PORTB == 0) // Если с датчиков не поступает информация, включить свободный поиск
{
direction();
}
     
}
}   
Аватара пользователя
AsonD
 
Сообщения: 110
Зарегистрирован: 14 мар 2008, 17:22
Откуда: Череповец
прог. языки: С/С++

Re: Proteus умеет врать?

Сообщение blindman » 30 июл 2008, 21:32

Под тактом обычно понимают период тактовой частоты процессора.

В твоей программе период вызова snum() будет зависеть от состояния датчиков, потому что есть задержки, выполняемые при определенных условиях.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Proteus умеет врать?

Сообщение AsonD » 30 июл 2008, 21:37

Не.. ну это-то понятно, он выполняетсо тока если не идет информации ни с одного из датчиков, просто мне то нужно узнать, как сильно отличаютсо данные протеуса от реальности, просто если примерно также будет работать то меня все устраивает, в протеусе все работает так как я и планировал
Аватара пользователя
AsonD
 
Сообщения: 110
Зарегистрирован: 14 мар 2008, 17:22
Откуда: Череповец
прог. языки: С/С++

Re: Proteus умеет врать?

Сообщение blindman » 30 июл 2008, 21:43

Можешь дергать какой-нибудь ногой в цикле, и добавить график, по которому сможешь точно замерять время.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Proteus умеет врать?

Сообщение AsonD » 30 июл 2008, 21:59

как ты должен был уже заметить я не спец в программировании и электроникой занялсо не так давно, поэтому не мог бы ты пояснить что еще за график, по которому можно следить за временем?
Аватара пользователя
AsonD
 
Сообщения: 110
Зарегистрирован: 14 мар 2008, 17:22
Откуда: Череповец
прог. языки: С/С++

След.

Вернуться в Осторожно — грабли ;)

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

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