роботы робототехника микроконтроллеры


 Страниц (8): « 1 2 3 4 5 6 [7] 8 »   

> Без описания
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



доброй ночи всем Улыбка
целый день занимался ик-бампером и у меня такая проблема;
раньше у меня от микроконтроллера выходила 2 генерированных выхода 36гц на ик светодиоды а сейчас я решил использовать один вывод мк и объединил оба ик-светодиоды к одной ножке мк.а сейчас добавил 3 тсоп посередине бампера и у меня не работает как надо прошивка если можете просмотрите мож где есть ошибка если нет пересмотрю монтаж хотя смотрел тышя раз Грустный
на данный момент конструкция работает так:
срабатывает только светодиод PB3 и все остальные не работают вот код

#include <avr/io.h>
#include <avr/delay.h>
#include <avr/iom8.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 8000000UL // 8 MHz

volatile int modulation=200; // длина всей посылки (можно менять)

SIGNAL(SIG_OVERFLOW0) //функция модуляции сигнала
{
if(modulation<20) //длина пачки
{
PORTB ^= 0b00000001;}

else
{
PORTB &= 0b00000000;}

if(modulation<200) //для счета длины посылки
{modulation++;}

else
{modulation=0;}

TCNT0 = 0;
}



void init_timer0 () //настройка таймера 0
{cli();
TCNT0 = 111;
TCCR0 = 1;
TIMSK = 1;
sei();
}


int main(void) //основная программа
{



DDRB |= (1<<0); /* PB0 сконфигурировать как выход, ИК-диод 1 */
/* PB1 */
/* PB2 */
DDRB |= (1<<1); /* PB1 сконфигурировать как выход, индикаторный светодиод 1 */
DDRB |= (1<<2); /* PB2 сконфигурировать как выход, индикаторный светодиод 2 */
DDRB |= (1<<3); /* PB3 сконфигурировать как выход, индикаторный светодиод 2 */
/* PB5 */
/* PB6 */
/* PB7 */

/* PC0 */
DDRC |= (1<<1); /* PC1 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<2); /* PC2 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<3); /* PC3 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<4); /* PC4 сконфигурировать как выход, драйвер двигателя */
/* PC5 */
/* PC6 */
/* PC7 */

/* PD0 */
DDRD &= (~(1<<1)); /* PD1 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<2)); /* PD2 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<3)); /* PD3 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<4)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<5)); /* PD5 сконфигурировать как вход, TSOP 1 */
DDRD &= (~(1<<6)); /* PD6 сконфигурировать как вход, TSOP 2 */
DDRD &= (~(1<<7)); /* PD7 сконфигурировать как вход, TSOP 3 */

/* PD0 */
PORTD |= (1<<1); /* PD1 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<2); /* PD2 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<3); /* PD3 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<4); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<5); /* PD5 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<6); /* PD6 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<7); /* PD7 установить "1", включаем подтягивающий резистор */
_delay_ms(100); //сброс ложного сигнала тсопа при включении (можно убрать)

init_timer0(); //инициализация таймера!!!

while(1)


/* проверка TSOP 1 */
{if ( !(PIND & (1<<5)) ) /* проверить "0" на PD5 */
{ PORTB |= (1<<1); } /* установить "1" на PB3 */
else
{ PORTB &= (~(1<<1)); } /* установить "0" на PB3 */

/* проверка TSOP 2 */
{if ( !(PIND & (1<<6)) ) /* проверить "0" на PD7 */
{ PORTB |= (1<<2); } /* установить "1" на PB4 */
else
{ PORTB &= (~(1<<2)); } /* установить "0" на PB4 */

{if ( !(PIND & (1<<7)) ) /* проверить "0" на PD5 */
{ PORTB |= (1<<3); } /* установить "1" на PB3 */
else
{ PORTB &= (~(1<<3)); } /* установить "0" на PB3 */
}
}

}

вывод
PD5-вход, TSOP 1 */
PD6-вход, TSOP 2 */
PD7-вход, TSOP 3 */
PB0-выход, ИК-диод 1 */
PB1-индикаторный светодиод1 */
PB2-индикаторный светодиод 2 */
PB3-индикаторный светодиод 3 */
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



CODE:

#include <avr/io.h>
#include <util/delay.h>
#include <avr/iom8.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 8000000UL // 8 MHz

volatile int modulation=200; // длина всей посылки (можно менять)

SIGNAL(SIG_OVERFLOW0) //функция модуляции сигнала
{
if(modulation<20) //длина пачки
{
PORTB ^= 0b00000001;}

else
{
PORTB &= 0b00000000;}

if(modulation<200) //для счета длины посылки
{modulation++;}

else
{modulation=0;}

TCNT0 = 0;
}



void init_timer0 () //настройка таймера 0
{cli();
TCNT0 = 111;
TCCR0 = 1;
TIMSK = 1;
sei();
}


int main(void) //основная программа
{


DDRB |= (1<<0); /* PB0 сконфигурировать как выход, ИК-светодиоды */
DDRB |= (1<<1); /* PB1 сконфигурировать как выход, индикаторный светодиод 1 */
DDRB |= (1<<2); /* PB2 сконфигурировать как выход, индикаторный светодиод 2 */
DDRB |= (1<<3); /* PB3 сконфигурировать как выход, индикаторный светодиод 3 */
/* PB4 */
/* PB5 */
/* PB6 */
/* PB7 */

/* PC0 */
DDRC |= (1<<1); /* PC1 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<2); /* PC2 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<3); /* PC3 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<4); /* PC4 сконфигурировать как выход, драйвер двигателя */
/* PC5 */
/* PC6 */
/* PC7 */

/* PD0 */
DDRD &= (~(1<<1)); /* PD1 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<2)); /* PD2 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<3)); /* PD3 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<4)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<5)); /* PD5 сконфигурировать как вход, TSOP 1 */
DDRD &= (~(1<<6)); /* PD6 сконфигурировать как вход, TSOP 2 */
DDRD &= (~(1<<7)); /* PD7 сконфигурировать как вход, TSOP 3 */

/* PD0 */
PORTD |= (1<<1); /* PD1 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<2); /* PD2 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<3); /* PD3 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<4); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<5); /* PD5 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<6); /* PD6 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<7); /* PD7 установить "1", включаем подтягивающий резистор */

_delay_ms(100); //сброс ложного сигнала тсопа при включении (можно убрать)

init_timer0(); //инициализация таймера!!!

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


/* проверка TSOP 1 */
if( !(PIND & (1<<5)) ) /* проверить "0" на PD5 */
{ PORTB |= (1<<1); } /* установить "1" на PB1 */
else
{ PORTB &= (~(1<<1)); } /* установить "0" на PB1 */

/* проверка TSOP 2 */
if( !(PIND & (1<<6)) ) /* проверить "0" на PD6 */
{ PORTB |= (1<<2); } /* установить "1" на PB2 */
else
{ PORTB &= (~(1<<2)); } /* установить "0" на PB2 */

/* проверка TSOP 3 */
if( !(PIND & (1<<7)) ) /* проверить "0" на PD7 */
{ PORTB |= (1<<3); } /* установить "1" на PB3 */
else
{ PORTB &= (~(1<<3)); } /* установить "0" на PB3 */


} /* закрывающая скобка бесконечного цикла */

} /* закрывающая скобка основной программы */
 
 Top
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



большое спасибо mihail теперь все тсопы работают Улыбка и реагируют на припятствия
 
 Top
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



решил проэксперементировать и хочу сделать так чтобы робот просто отъежает от препятствия
у меня три тсопа если есть препятствие на на 1 тсопе он примерно 1 сек поворачивает одну гусеницу а если есть препятствие на на 2 тсопе он примерно 1 сек едет назад и наконец если есть препятствие на на 3 тсопе он примерно 1 сек поворачивает другую гусеницу назад.
только у меня одна проблема дописал код который у меня был а он не хочет работать Грустный
светодиоды индикаторы работают а моторы нет но вроде они едва дергаются не пойму что не так вот код
#include <avr/io.h>
#include <util/delay.h>
#include <avr/iom8.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 8000000UL // 8 MHz

volatile int modulation=200; // длина всей посылки (можно менять)

SIGNAL(SIG_OVERFLOW0) //функция модуляции сигнала
{
if(modulation<20) //длина пачки
{
PORTB ^= 0b00000001;
PORTB ^= 0b00010000;
PORTB ^= 0b00100000;}

else
{
PORTB &= 0b00000000;
PORTB &= 0b00000000;
PORTB &= 0b00000000;}

if(modulation<200) //для счета длины посылки
{modulation++;}

else
{modulation=0;}

TCNT0 = 0;
}



void init_timer0 () //настройка таймера 0
{cli();
TCNT0 = 111;
TCCR0 = 1;
TIMSK = 1;
sei();
}


int main(void) //основная программа
{
DDRB |= (1<<0); /* PB0 сконфигурировать как выход, ИК-светодиоды */
DDRB |= (1<<4); /* PB0 сконфигурировать как выход, ИК-светодиоды */
DDRB |= (1<<5); /* PB0 сконфигурировать как выход, ИК-светодиоды */
DDRB |= (1<<1); /* PB1 сконфигурировать как выход, индикаторный светодиод 1 */
DDRB |= (1<<2); /* PB2 сконфигурировать как выход, индикаторный светодиод 2 */
DDRB |= (1<<3); /* PB3 сконфигурировать как выход, индикаторный светодиод 3 */
/* PB4 */
/* PB5 */
/* PB6 */
/* PB7 */

/* PC0 */
DDRC |= (1<<1); /* PC1 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<2); /* PC2 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<3); /* PC3 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<4); /* PC4 сконфигурировать как выход, драйвер двигателя */
/* PC5 */
/* PC6 */
/* PC7 */

/* PD0 */
DDRD &= (~(1<<1)); /* PD1 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<2)); /* PD2 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<3)); /* PD3 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<4)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<5)); /* PD5 сконфигурировать как вход, TSOP 1 */
DDRD &= (~(1<<6)); /* PD6 сконфигурировать как вход, TSOP 2 */
DDRD &= (~(1<<7)); /* PD7 сконфигурировать как вход, TSOP 3 */

/* PD0 */
PORTD |= (1<<1); /* PD1 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<2); /* PD2 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<3); /* PD3 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<4); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<5); /* PD5 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<6); /* PD6 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<7); /* PD7 установить "1", включаем подтягивающий резистор */

_delay_ms(100); //сброс ложного сигнала тсопа при включении (можно убрать)

init_timer0(); //инициализация таймера!!!

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


/* проверка TSOP 1 */
if( !(PIND & (1<<5)) ) /* проверить "0" на PD5 */
{ PORTB |= (1<<1);
PORTB &= (~(1<<1));
PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3);
_delay_ms(1000);} // ждем 1 сек. /* установить "1" на PB1 */
else
{ PORTB &= (~(1<<1));
PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
} /* установить "0" на PB1 */
(Добавление)
/* проверка TSOP 2 */
if( !(PIND & (1<<6)) ) /* проверить "0" на PD6 */
{ PORTB |= (1<<2);
PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
PORTC |= _BV(PC4);
_delay_ms(1000);} // ждем 1 сек. } // установить "1" на линии 4 порта C} /* установить "1" на PB2 */
else
{ PORTB &= (~(1<<2));
PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
PORTC &= ~_BV(PC4);} // установить "0" на линии 4 порта C} /* установить "1" на PB2 */ } /* установить "0" на PB2 */

/* проверка TSOP 3 */
if( !(PIND & (1<<7)) ) /* проверить "0" на PD7 */
{ PORTB |= (1<<3);
PORTC &= ~_BV(PC0); // установить "0" на линии 0порта D
PORTC |= _BV(PC1); // установить "1" на линии 1 порта D
PORTC |= _BV(PC2);
_delay_ms(1000);} // ждем 1 сек. // установить "1" на линии 2 порта D
else
{ PORTB &= (~(1<<3));
PORTC &= ~_BV(PC0); // установить "0" на линии 0порта D
PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта D
PORTC &= ~_BV(PC2);} // установить "0" на линии 2 порта D


} /* закрывающая скобка бесконечного цикла */

} /* закрывающая скобка основной программы */
(Добавление)
вроде разобрался но снова не так как я хотел на препятствия отъежает но когда нет препятствия едет назад, вправо, влево, примерно по 1 сек каждая как убрать этот глюк в программе мне только нужно чтобы он включал свои моторы при препятствии вот код переделанный
#include <avr/io.h>
#include <util/delay.h>
#include <avr/iom8.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 8000000UL // 8 MHz

volatile int modulation=200; // длина всей посылки (можно менять)

SIGNAL(SIG_OVERFLOW0) //функция модуляции сигнала
{
if(modulation<20) //длина пачки
{
PORTB ^= 0b00000001;
PORTB ^= 0b00010000;
PORTB ^= 0b00100000;}

else
{
PORTB &= 0b00000000;
PORTB &= 0b00000000;
PORTB &= 0b00000000;}

if(modulation<200) //для счета длины посылки
{modulation++;}

else
{modulation=0;}

TCNT0 = 0;
}



void init_timer0 () //настройка таймера 0
{cli();
TCNT0 = 111;
TCCR0 = 1;
TIMSK = 1;
sei();
}


int main(void) //основная программа
{
DDRB |= (1<<0); /* PB0 сконфигурировать как выход, ИК-светодиоды */
DDRB |= (1<<4); /* PB0 сконфигурировать как выход, ИК-светодиоды */
DDRB |= (1<<5); /* PB0 сконфигурировать как выход, ИК-светодиоды */
DDRB |= (1<<1); /* PB1 сконфигурировать как выход, индикаторный светодиод 1 */
DDRB |= (1<<2); /* PB2 сконфигурировать как выход, индикаторный светодиод 2 */
DDRB |= (1<<3); /* PB3 сконфигурировать как выход, индикаторный светодиод 3 */
/* PB4 */
/* PB5 */
/* PB6 */
/* PB7 */

/* PC0 */
DDRC |= (1<<1); /* PC1 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<2); /* PC2 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<3); /* PC3 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<4); /* PC4 сконфигурировать как выход, драйвер двигателя */
/* PC5 */
/* PC6 */
/* PC7 */

/* PD0 */
DDRD &= (~(1<<1)); /* PD1 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<2)); /* PD2 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<3)); /* PD3 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<4)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<5)); /* PD5 сконфигурировать как вход, TSOP 1 */
DDRD &= (~(1<<6)); /* PD6 сконфигурировать как вход, TSOP 2 */
DDRD &= (~(1<<7)); /* PD7 сконфигурировать как вход, TSOP 3 */

/* PD0 */
PORTD |= (1<<1); /* PD1 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<2); /* PD2 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<3); /* PD3 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<4); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<5); /* PD5 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<6); /* PD6 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<7); /* PD7 установить "1", включаем подтягивающий резистор */

_delay_ms(100); //сброс ложного сигнала тсопа при включении (можно убрать)

init_timer0(); //инициализация таймера!!!

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


/
(Добавление)
* проверка TSOP 1 */
if( !(PIND & (1<<5)) ) /* проверить "0" на PD5 */
{ PORTB |= (1<<1);
PORTC |= (1<<1); // установить "1" на линии 1 порта C
PORTC &= (~(1<<2)); // установить "0" на линии 2 порта C
PORTC |= (1<<3);
_delay_ms(1000); } /* установить "1" на PB1 */
else
{ PORTB &= (~(1<<1));
PORTC &= (~(1<<1)); // установить "0" на линии 1 порта C
PORTC &= (~(1<<2)); // установить "0" на линии 2 порта C
PORTC &= (~(1<<3)); // установить "0" на линии 3 порта C
} /* установить "0" на PB1 */

/* проверка TSOP 2 */
if( !(PIND & (1<<6)) ) /* проверить "0" на PD6 */
{ PORTB |= (1<<2);
PORTC &= (~(1<<1)); // установить "0" на линии 1 порта C
PORTC |= (1<<2); // установить "1" на линии 2 порта C
PORTC &= (~(1<<3)); // установить "0" на линии 3 порта C
PORTC |= (1<<4);;
_delay_ms(1000);} // установить "1" на линии 4 порта C} /* установить "1" на PB2 */
else
{ PORTB &= (~(1<<2));
PORTC &= (~(1<<1)); // установить "0" на линии 1 порта C
PORTC &= (~(1<<2)); // установить "0" на линии 2 порта C
PORTC &= (~(1<<3)); // установить "0" на линии 3 порта C
PORTC &= (~(1<<4));} // установить "0" на линии 4 порта C} /* установить "1" на PB2 */ } /* установить "0" на PB2 */

/* проверка TSOP 3 */
if( !(PIND & (1<<7)) ) /* проверить "0" на PD7 */
{ PORTB |= (1<<3);
PORTC &= (~(1<<1)); // установить "0" на линии 0порта D
PORTC |= (1<<2); // установить "1" на линии 1 порта D
PORTC |= (1<<3);
_delay_ms(1000);} // установить "1" на линии 2 порта D
else
{ PORTB &= (~(1<<3));
PORTC &= (~(1<<1)); // установить "0" на линии 0порта D
PORTC &= (~(1<<2)); // установить "0" на линии 1 порта D
PORTC &= (~(1<<3));} // установить "0" на линии 2 порта D


} /* закрывающая скобка бесконечного цикла */

} /* закрывающая скобка основной программы *

(Отредактировано автором: 07 Июня, 2010 - 13:11:54)

 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



Mihail? Голливудская улыбка
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



о, ужас ! Улыбка
 
 Top
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



что ужас? Замешательство
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



alex1991, код длинючий. В чужом коде не очень то комфортно разбираться.
Так что ... скорее всего вам придётся самому.
Учитесь локализировать ошибки :)
Разбейте код на составные части и отыскивайте по частям, где что не работает.

Но подождём mihail-а :)
 
 Top
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



спасибо за совет извенити меня за свои каракули я только начинаю разбиратся в программировании и мне пока мало что в этом деле понятно Улыбка в коде постараюсь разобратся а если все-же не смогу разобраться буду ждать помощи mihail-а Улыбка
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



В прикрепленном zip архиве мой вариант программы. Попытался программку разместить в сообщении, но не получилось. Пишет, что слишком большая Улыбка

Это еще ничего Ухмылка Вот когда alex1991 станет в программе прикручивать радиоуправление... Вот тогда Жуть
(Добавление)
Программа для просмотра архива 7-Zip http://www.7-zip.org/ Улыбка
Скачать файл: programma.zip
Скачан раз: 281
 
 Top
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



перепрошил по вашему mihail и все равно едет беспорядочно вперед назад вправо влево изолировал все ик-диоды от тсопов все равно едет беспорядочно потом отключил от питания ик-светодиоды убрал от солнца своего робота подумал что оно засвечивает тсопы все равно не работает но на преграды реагирует Улыбка
 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



alex1991 пишет:
перепрошил по вашему mihail и все равно едет беспорядочно вперед назад вправо влево изолировал все ик-диоды от тсопов все равно едет беспорядочно потом отключил от питания ик-светодиоды убрал от солнца своего робота подумал что оно засвечивает тсопы все равно не работает но на преграды реагирует Улыбка


Стабилизируй напряжение питания (кренкой например) хотя бы у МК, если это еще не сделано, возможно это из за прыжков напряжения при работе двигателей, и помех по цепям питания - кондеры на движки хотя бы 0.1uF и в цепи питания МК 50-100 uF электролит поставь.

В любом случае после таких мероприятий точно будешь знать что дело в программе а не в косяках по питанию МК.
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Когда делал ИК-бампер на TSOPиках, столкнулся с такой проблемой: материал непроницаемый для обычного света может быть прозрачен для ИК-излучения!!!

Проверить программу просто. Необходимо зафиксировать робота так, чтобы он никуда не уехал и нагрузка на моторчики была минимальна. Отключить ИК-светодиоды программно (изменить прошивку). Затем светить пультом дистанционного управления от телевизора (тем самым) в каждый TSOPик по отдельности и смотреть на реакцию робота. Для верности, можно программно отключить не проверяемые TSOPики.

А вообще, настройка ИК-бампера на одном TSOPике и микроконтроллере - то еще шаманство и развлечение на любителя.

У Вас же их три. Следовательно и радость от процесса тройная Ухмылка
 
 Top
alex1991 Post Id



Генерал


Сообщений всего: 91
Дата рег-ции: Май 2010  



спасибо за советы Улыбка
буду пробовать Ухмылка
(Добавление)
только что поставил на моторы тсопы и на мк по 0,1мкф и глюки исчезли вроде все работает нормально осталось только радиоуправление в программе установить и все будет лады Ухмылка Улыбка
спасибо за помошь Улыбка
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



alex1991 пишет:
поставил на моторы тсопы и на мк по 0,1мкф и глюки исчезли вроде все работает нормально
в эту тему есть специальная статья: О питании. Часть вторая. Помехи в схемах. Раздельное питание и г альваническая развязка.
А раздельное питание вам всё равно придётся сделать.
 
 Top
Страниц (8): « 1 2 3 4 5 6 [7] 8 »
« Делаем роботов »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru