Форум myROBOT.ru » Шаг за шагом » Делаем роботов » Простой робот :)

Страниц (13): « 1 2 3 4 [5] 6 7 8 9 ... » В конец
 

61. alex91 - 21 Июня, 2011 - 02:10:54 - перейти к сообщению
И проект робота
62. mihail - 21 Июня, 2011 - 14:38:27 - перейти к сообщению
В проекте пульта все хорошо.

В программе для робота с ATmega8 была ошибка. Я ее исправил. http://myrobot.ru/forum/topic.ph...89872#1308589872

В проекте для робота неверно указана тактовая частота МК. Исправьте на 2000000 Hz.
63. alex91 - 21 Июня, 2011 - 14:59:11 - перейти к сообщению
mihail точно ступил забыл поменять но почему то у меня все светодиоды срабатывают все сразу при любой команде пульта
А как все же заставить код на робота работать на 8мгц а то у меня при двух бутлайдер не хочет видеться АврСтудия наверно частота плавает без кварца мега8 у меня
Объясните что менять что подкрутить в коде чтоб код работал на 8мгц пожалуйста
64. mihail - 21 Июня, 2011 - 15:52:09 - перейти к сообщению
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;
}
65. alex91 - 21 Июня, 2011 - 16:37:20 - перейти к сообщению
mihail спасибо буду пробовать
66. alex91 - 22 Июня, 2011 - 00:29:50 - перейти к сообщению
Здравствуйте Улыбка
Снова не получается разобраться с новой задачей пульт с RS232 переделать под мегу8 думал нечего сложного все компилиться но не работает ик-светодиод не горит на отправку команд f,l,s,r и b.
Почему я решил использовать атмегу8 да потому что менять прошивку быстро могу с АврСтудии при помощи бутлайдера про него можно почитать здесь http://easyelectronics.ru/avr-uc...bootloadera.html
Плата работает на 8мгц ик-светодиод весит на PD6
Регистры настройки RS232 проверил вроде б все должно работать таймеры-счетчики поменял на TCCR0 как позапрошлом коде под мегу8 но не работает
Вот мой проект, прошу помогите
67. nest - 22 Июня, 2011 - 01:18:36 - перейти к сообщению
alex91, чтото я не заметил в программе управления портами, только задержки.
68. alex91 - 22 Июня, 2011 - 01:31:25 - перейти к сообщению
nest в коде я нечего не менял кроме того что я перечислил в посте выше
Я так понял что дерганья ногами быть не должно кроме
PORTD ^= 0b01000000;
пишется команда в терминале одна из этих f,l,s,r и b и передаются по rs232 на МК и взаимозависимости от команды кодируется и передаются на ик-светодиод который уже отправляет шифрованную команду на ТСОП робота
69. mihail - 22 Июня, 2011 - 01:34:34 - перейти к сообщению
Программа для пульта.
/*******************************************
Program : transmitter
Compiler : WinAVR
Chip type : ATmega8
System Clock : 8 MHz
*******************************************/


#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>


volatile unsigned char count = 0;

unsigned char usart_data = 's';


// Timer 0 overflow interrupt service routine
ISR(TIMER0_OVF_vect)
{
TCNT0 = 160;

PORTD ^= 0b01000000;

count += 1;

if( count == 80 )
{
TCCR0 = 0b00000000;
}
}


void USART_Init( unsigned int baud )
{
/* Set baud rate */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8 data, 1 stop bit */
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}


void USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) );
/* Get and return received data from buffer */
usart_data = UDR;
}


int main(void)
{
// Input/Output Ports initialization

// Port B initialization
DDRB = 0b00000000;
PORTB = 0b11111111;

// Port C initialization
DDRC = 0b00000000;
PORTC = 0b00000000;

// Port D initialization
DDRD = 0b01000000; // PD6 LED
PORTD = 0b00000000;


// Baud Rate 9600 bps
USART_Init(51);


// Timer/Counter 0 initialization

// Timer/Counter 0 Control Register
// Bits: - - - - - CS02 CS01 CS00
TCCR0 = 0b00000000;

// Timer/Counter 0
TCNT0 = 160;


// Timer(s)/Counter(s) Interrupt(s) initialization

// Timer/Counter Interrapt Mask Register
// Bits: OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 – TOIE0
TIMSK = 0b00000001;


// Global enable interrupts
sei();


while(1)
{
_delay_ms(100);

USART_Receive();

count = 0;
TCCR0 = 0b00000001;
while( count != 80 );

if( usart_data == 'f' )
{
_delay_us(500);
}

if( usart_data == 'l' )
{
_delay_us(2500);
}

if( usart_data == 's' )
{
continue;
}

if( usart_data == 'r' )
{
_delay_us(4500);
}

if( usart_data == 'b' )
{
_delay_us(6500);
}

count = 0;
TCCR0 = 0b00000001;
while( count != 80 );
}

return 0;
}
70. alex91 - 22 Июня, 2011 - 01:40:35 - перейти к сообщению
mihail спасибо попробую
71. N_I_K - 22 Июня, 2011 - 20:30:08 - перейти к сообщению
скажите пожалуйста где можно дастать мик.293d кроме магазинов???
(Добавление)
L293D
72. Роботов - 22 Июня, 2011 - 20:41:33 - перейти к сообщению
Интернет-магазины подойдут?
Вот тут например:http://mkpochtoi.narod.ru/price.htm
73. nestandart - 22 Июня, 2011 - 23:38:15 - перейти к сообщению
Цитата:
скажите пожалуйста где можно дастать мик.293d кроме магазинов???


Микросхема довольно специфическая , так что
выпаять ее из , какого нибудь , старого магнитофона не получиться.
74. killgur - 23 Июня, 2011 - 09:56:05 - перейти к сообщению
nestandart пишет:
Цитата:
скажите пожалуйста где можно дастать мик.293d кроме магазинов???


Микросхема довольно специфическая , так что
выпаять ее из , какого нибудь , старого магнитофона не получиться.


продаются до сих пор

КР1128КТ3А до 1А (без встроенных диодов)

КР1128КТ4, КР1128КТ4А до 600мА (аналог l293D )

В двое дешевле, и не греются ... могут быть обнаружены в видеомагнитофонах Электроника ВМ-...
75. alex91 - 23 Июня, 2011 - 15:41:22 - перейти к сообщению
Еще раз здравствуйте Улыбка
Хотел спросить а возможно передавать команды не ик-путем а радио передачей
Есть у меня несколько приемников и передатчиков от китайских игрушек возможно их использовать для передачи цифровой информации
На RX - платка пульта игрушки передатчик
TX- плата приемника от игрушки
И так с двух сторон (робота и компьютера)
Возможно ли это устроить подскажите пожалуйста