alex91 пишет:у меня все светодиоды срабатывают все сразу при любой команде пульта Так и должно быть. Отличие в длительности управляющих импульсов. Специфика управления сервоприводами
http://easyelectronics.ru/servom...inka-hs-311.html
http://easyelectronics.ru/upravl...rvomashinok.html
(Добавление)
Программа для дистанционного управления роботом http://myrobot.ru/stepbystep/r_firstbot1.php Только, TSOP необходимо подключить к PB0.
/*******************************************
Program : receiver
Compiler : WinAVR
Chip type : ATmega8
System Clock : 8 MHz
*******************************************/
#include <avr/io.h>
#include <util/delay.h>
volatile unsigned char flag = 0;
int main(void)
{
// Input/Output Ports initialization
// Port B initialization
DDRB = 0b00000000; // PB0 TSOP
PORTB = 0b00000001;
// Port C initialization
DDRC = 0b00011110;
PORTC = 0b00011110;
// Port D initialization
DDRD = 0b00000000;
PORTD = 0b00000000;
while(1)
{
flag = 0;
while( (PINB & (1<<0)) != 0 );
_delay_us(2000);
if( (PINB & (1<<0)) == 0 ) flag = 1;
_delay_us(2000);
if( (PINB & (1<<0)) == 0 ) flag = 2;
_delay_us(2000);
if( (PINB & (1<<0)) == 0 ) flag = 3;
_delay_us(2000);
if( (PINB & (1<<0)) == 0 ) flag = 4;
if( flag == 1 )
{
// ---------- вращаем моторы вперед --------------------
PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C
// -------------------------------- ---------------------
}
if( flag == 2 )
{
// ---------- поворачиваем -----------------------------
PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
PORTC |= _BV(PC4); // установить "1" на линии 4 порта C
// -------------------------------- ---------------------
}
if( flag == 3 )
{
// ---------- поворачиваем -----------------------------
PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C
// -------------------------------- ---------------------
}
if( flag == 4 )
{
// ---------- вращаем моторы назад ---------------------
PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
PORTC |= _BV(PC4); // установить "1" на линии 4 порта C
// -------------------------------- ---------------------
}
_delay_ms(50);
while( (PINB & (1<<0)) != 0 );
// ---------- стоим на месте ---------------------------
PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC |= _BV(PC4); // установить "1" на линии 4 порта C
// -------------------------------- ---------------------
_delay_ms(50);
}
return 0;
} (Отредактировано автором: 22 Июня, 2011 - 01:31:34) |