Зарегистрирован: 12 апр 2007, 18:10 Сообщения: 49 Откуда: ВОЛГОГРАД
вот код рограммы и где смотреть
//------------------------------------------------------------------------ // Окончательный вариант программы для простого мобильного робота // http://projects.roboclub.ru/index.shtml?attempt // (с) RodoClub.ru 2003 //------------------------------------------------------------------------
// назначение определений для удобства работы с периферией #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
// текущее направление движения unsigned char this_move;
//------------------------------------------------------------------------------ // Включение комбинации моторов для движения в заданном направлении //------------------------------------------------------------------------------ void go(unsigned char direction){
//------------------------------------------------------------------------------ // Выбор направления движения в следующем шаге по таблице вероятностей //------------------------------------------------------------------------------ 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));
Зарегистрирован: 04 май 2007, 11:46 Сообщения: 2 Откуда: Moskow
TOSIK писал(а):
если прошивка компилирована под AT90S2313 а прошил я ей ATTINY2313 , на работу МК это не влеяет .
Они отличаются набором регистров перефирии, как правило программа написаная для AT90S2313, будет работать в ATTINY2313. поскольку последний болеефункциональный. Но всеже рекомендуется прожечь фьюз, сейчас не помню какой, посмотри даташит, тогда будет полная идентичность двух микроконтроллеров
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения