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


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

> Описание: Фото, видео, описание.
mihail Post Id



Гуру


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



Раздельное питание Улыбка
Прикреплено изображение
img_0036.jpg

(Отредактировано автором: 22 Мая, 2011 - 20:39:51)

 
 Top
mihail Post Id



Гуру


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



Проверочная программа и схема.
/*******************************************
Program : test robot
Compiler : WinAVR
Chip type : ATtiny2313
System Clock : 1 MHz
*******************************************/

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

int main (void)
{
PORTA = 0b00000000;
PORTB = 0b00000000;
PORTD = 0b00000000;

DDRA = 0b00000000;
DDRB = 0b00000000;
DDRD = 0b00111100;

unsigned char i = 0;

while (1)
{
/* поворачиваем в одну сторону */
for(i=0; i<200; i++)
{
PORTD |= 0b00000100; /* установка 1 на PD2 */
_delay_us(1000); /* задержка */
PORTD &= 0b11111011; /* установка 0 на PD2 */

PORTD |= 0b00001000; /* установка 1 на PD3 */
_delay_us(1000); /* задержка */
PORTD &= 0b11110111; /* установка 0 на PD3 */

PORTD |= 0b00010000; /* установка 1 на PD4 */
_delay_us(1000); /* задержка */
PORTD &= 0b11101111; /* установка 0 на PD4 */

PORTD |= 0b00100000; /* установка 1 на PD5 */
_delay_us(1000); /* задержка */
PORTD &= 0b11011111; /* установка 0 на PD5 */

_delay_ms(16); /* задержка */
}

_delay_ms(1000); /* стоим на месте */

/* поворачиваем в другую сторону */
for(i=0; i<200; i++)
{
PORTD |= 0b00000100; /* установка 1 на PD2 */
_delay_us(2000); /* задержка */
PORTD &= 0b11111011; /* установка 0 на PD2 */

PORTD |= 0b00001000; /* установка 1 на PD3 */
_delay_us(2000); /* задержка */
PORTD &= 0b11110111; /* установка 0 на PD3 */

PORTD |= 0b00010000; /* установка 1 на PD4 */
_delay_us(2000); /* задержка */
PORTD &= 0b11101111; /* установка 0 на PD4 */

PORTD |= 0b00100000; /* установка 1 на PD5 */
_delay_us(2000); /* задержка */
PORTD &= 0b11011111; /* установка 0 на PD5 */

_delay_ms(12); /* задержка */
}

_delay_ms(1000); /* стоим на месте */
}

return 0;
}

Прикреплено изображение
cxema_1.gif

 
 Top
cjA Post Id



Генерал


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



mihail пишет:
робот соответствует требованиям регламента простого кегельринга

mihail пишет:
Есть кое какие мыслишки


неужели лазание по канату? Жуть
 
 Top
mihail Post Id



Гуру


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



Схема иллюстрирующая раздельное питание.
Прикреплено изображение
cxema_2.gif

 
 Top
mihail Post Id



Гуру


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



Почти сделал пульт дистанционного управления для робота.
Прикреплено изображение
img_0054.jpg

 
 Top
mihail Post Id



Гуру


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



Подключение TSOP 2136 к контроллеру. Надо сказать, что подключение не совсем правильное. Правильное подключение TSOPиков смотрите http://myrobot.ru/wiki/index.php...rojects.MyLINKER
Прикреплено изображение
img_0051.jpg

(Отредактировано автором: 31 Мая, 2011 - 11:24:06)

 
 Top
mihail Post Id



Гуру


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



Тестовая программа и схема ПДУ.
/*******************************************
Program : simple transmitter
Compiler : WinAVR
Chip type : ATtiny2313
System Clock : 8 MHz
*******************************************/


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


volatile unsigned char count = 0;


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

PORTD ^= 0b00000010;

count += 1;

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


int main(void)
{
// System Clock Prescaler initialization

// Clock Prescale Register
// Bits: CLKPCE - - - CLKPS3 CLKPS2 CLKPS1 CLKPS0
CLKPR = 0b10000000;
CLKPR = 0b00000000;


// Input/Output Ports initialization

// Port A initialization
DDRA = 0b00000000;
PORTA = 0b00000000;

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

// Port D initialization
DDRD = 0b00000010;
PORTD = 0b00000000;


// Timer/Counter 0 initialization

// Timer/Counter 0 Control Register A
// Bits: COM0A1 COM0A0 COM0B1 COM0B0 Reserved Reserved WGM01 WGM00
TCCR0A = 0b00000000;

// Timer/Counter 0 Control Register B
// Bits: FOC0A FOC0B Reserved Reserved WGM02 CS02 CS01 CS00
TCCR0B = 0b00000000;

// Timer/Counter 0
TCNT0 = 160;


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

// Timer/Counter Interrapt Mask Register
// Bits: TOIE1 OCIE1A OCIE1B Reserved ICIE1 OCIE0B TOIE0 OCIE0A
TIMSK = 0b00000010;


// Global enable interrupts
sei();


while(1)
{
while( PINB == 0b11111111 );

_delay_ms(100);

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

if( (PINB & (1<<3)) == 0 )
{
_delay_us(500);
}

if( (PINB & (1<<4)) == 0 )
{
_delay_us(2500);
}

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

while( PINB != 0b11111111 );

_delay_ms(100);
}

return 0;
}

Прикреплено изображение
cxema_3.gif

 
 Top
mihail Post Id



Гуру


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



Тестовая программа робота и схема подключения TSOP.
/*******************************************
Program : simple receiver
Compiler : WinAVR
Chip type : ATtiny2313
System Clock : 1 MHz
*******************************************/

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

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

// Port A initialization
DDRA = 0b00000000;
PORTA = 0b00000000;

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

// Port D initialization
DDRD = 0b00111100;
PORTD = 0b00000000;

unsigned char i;
unsigned char flag;

while(1)
{
flag = 0;
while( (PINB & (1<<7)) != 0 );
_delay_us(2000);
if( (PINB & (1<<7)) != 0 ) flag = 1;
else flag = 2;

if( flag == 1 )
{
/* поворачиваем */
for(i=0; i<50; i++)
{
PORTD |= 0b00000100; /* установить 1 на PD2 */
_delay_us(1000); /* задержка */
PORTD &= 0b11111011; /* установить 0 на PD2 */

PORTD |= 0b00001000; /* установить 1 на PD3 */
_delay_us(1000); /* задержка */
PORTD &= 0b11110111; /* установить 0 на PD3 */

PORTD |= 0b00010000; /* установить 1 на PD4 */
_delay_us(1000); /* задержка */
PORTD &= 0b11101111; /* установить 0 на PD4 */

PORTD |= 0b00100000; /* установить 1 на PD5 */
_delay_us(1000); /* задержка */
PORTD &= 0b11011111; /* установить 0 на PD5 */

_delay_ms(16); /* задержка */
}
}

if( flag == 2 )
{
/* едем прямо */
for(i=0; i<50; i++)
{
PORTD |= 0b00000100; /* установить 1 на PD2 */
_delay_us(2000); /* задержка */
PORTD &= 0b11111011; /* установить 0 на PD2 */

PORTD |= 0b00001000; /* установить 1 на PD3 */
_delay_us(2000); /* задержка */
PORTD &= 0b11110111; /* установить 0 на PD3 */

PORTD |= 0b00010000; /* установитьа 1 на PD4 */
_delay_us(1000); /* задержка */
PORTD &= 0b11101111; /* установить 0 на PD4 */

PORTD |= 0b00100000; /* установить 1 на PD5 */
_delay_us(1000); /* задержка */
PORTD &= 0b11011111; /* установить 0 на PD5 */

_delay_ms(14); /* задержка */
}
}
}

return 0;
}

Прикреплено изображение
cxema_4.gif

 
 Top
nest Администратор Post Id



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


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



mihail пишет:
и схема ПДУ
а чем кодируем?
 
 Top
mihail Post Id



Гуру


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



Хороший вопрос. Может картинку надо нарисовать?
При нажатии кнопки пульт генерирует две пачки по 40 импульсов. Продолжительность задержки между пачками определяет нажатую кнопку. Проще можно, но дальше некуда Улыбка
 
 Top
nest Администратор Post Id



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


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



mihail пишет:
При нажатии кнопки пульт генерирует две пачки по 40 импульсов. Продолжительность задержки между пачками определяет нажатую кнопку.
хм, ну... гуд Улыбка дёшево-сердито Улыбка
 
 Top
mihail Post Id



Гуру


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



Сделал приемлемое управление роботом.
Программа пульта:
/*******************************************
Program : transmitter
Compiler : WinAVR
Chip type : ATtiny2313
System Clock : 8 MHz
*******************************************/


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


volatile unsigned char count = 0;


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

PORTD ^= 0b01000000;

count += 1;

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


int main(void)
{
// System Clock Prescaler initialization

// Clock Prescale Register
// Bits: CLKPCE - - - CLKPS3 CLKPS2 CLKPS1 CLKPS0
CLKPR = 0b10000000;
CLKPR = 0b00000000;


// Input/Output Ports initialization

// Port A initialization
DDRA = 0b00000000;
PORTA = 0b00000000;

// Port B initialization
DDRB = 0b00000000; // PB4, PB3, PB2, PB1, PB0 - button
PORTB = 0b11111111;

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


// Timer/Counter 0 initialization

// Timer/Counter 0 Control Register A
// Bits: COM0A1 COM0A0 COM0B1 COM0B0 Reserved Reserved WGM01 WGM00
TCCR0A = 0b00000000;

// Timer/Counter 0 Control Register B
// Bits: FOC0A FOC0B Reserved Reserved WGM02 CS02 CS01 CS00
TCCR0B = 0b00000000;

// Timer/Counter 0
TCNT0 = 160;


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

// Timer/Counter Interrapt Mask Register
// Bits: TOIE1 OCIE1A OCIE1B Reserved ICIE1 OCIE0B TOIE0 OCIE0A
TIMSK = 0b00000010;


// Global enable interrupts
sei();


while(1)
{
while( PINB != 0b11111111 );
_delay_ms(100);

while( PINB == 0b11111111 );
_delay_ms(100);

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

if( PINB == 0b11111110 )
{
_delay_us(500);
}

if( PINB == 0b11111101 )
{
_delay_us(2500);
}

if( PINB == 0b11111011 )
{
continue;
}

if( PINB == 0b11110111 )
{
_delay_us(4500);
}

if( PINB == 0b11101111 )
{
_delay_us(6500);
}

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

return 0;
}

(Добавление)
Программа робота:
/*******************************************
Program : receiver
Compiler : WinAVR
Chip type : ATtiny2313
System Clock : 2 MHz
*******************************************/


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


volatile unsigned char count = 0;
volatile unsigned char var_1000 = 0b11111111;


// Timer 0 overflow interrupt service routine
ISR(TIMER0_OVF_vect)
{
if( count == 0 )
{
PORTD |= 0b00111100;
}

if( count == 7 )
{
PORTD &= var_1000;
}

if( count == 15 )
{
PORTD &= 0b11000011;
}

count += 1;

if( count == 156 )
{
count = 0;
}
}


volatile unsigned char flag = 0;


int main(void)
{
// System Clock Prescaler initialization

// Clock Prescale Register
// Bits: CLKPCE - - - CLKPS3 CLKPS2 CLKPS1 CLKPS0
CLKPR = 0b10000000;
CLKPR = 0b00000010;


// Input/Output Ports initialization

// Port A initialization
DDRA = 0b00000000;
PORTA = 0b00000000;

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

// Port D initialization
DDRD = 0b00111100;
PORTD = 0b00000000;


// Timer/Counter 0 initialization

// Timer/Counter 0 Control Register A
// Bits: COM0A1 COM0A0 COM0B1 COM0B0 Reserved Reserved WGM01 WGM00
TCCR0A = 0b00000000;

// Timer/Counter 0 Control Register B
// Bits: FOC0A FOC0B Reserved Reserved WGM02 CS02 CS01 CS00
TCCR0B = 0b00000000;

// Timer/Counter 0
TCNT0 = 0;


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

// Timer/Counter Interrapt Mask Register
// Bits: TOIE1 OCIE1A OCIE1B Reserved ICIE1 OCIE0B TOIE0 OCIE0A
TIMSK = 0b00000010;


// Global enable interrupts
sei();


while(1)
{
flag = 0;
while( (PINB & (1<<7)) != 0 );
_delay_us(2000);
if( (PINB & (1<<7)) == 0 ) flag = 1;
_delay_us(2000);
if( (PINB & (1<<7)) == 0 ) flag = 2;
_delay_us(2000);
if( (PINB & (1<<7)) == 0 ) flag = 3;
_delay_us(2000);
if( (PINB & (1<<7)) == 0 ) flag = 4;

if( flag == 1 )
{
/* едем прямо */
var_1000 = 0b11001111;
TCCR0B = 0b00000001;
}

if( flag == 2 )
{
/* поворачиваем */
var_1000 = 0b11000011;
TCCR0B = 0b00000001;
}

if( flag == 3 )
{
/* поворачиваем */
var_1000 = 0b11111111;
TCCR0B = 0b00000001;
}

if( flag == 4 )
{
/* едем назад */
var_1000 = 0b11110011;
TCCR0B = 0b00000001;
}

_delay_ms(50);
while( (PINB & (1<<7)) != 0 );

/* стоим на месте */
while( count < 150 );
TCCR0B = 0b00000000;
_delay_ms(50);
}

return 0;
}

(Добавление)
Небольшое пояснение по функциям возложенным на кнопочки пульта:
РВ0 – вперед,
РВ1 – поворот в одну сторону,
РВ2 – стоп,
РВ3 – поворот в другую сторону,
РВ4 – назад.
 
 Top
robot2000 Post Id



Лейтенант


Сообщений всего: 25
Дата рег-ции: Апр. 2011  



а мне нравиться.лично я сейча делаю своего робота на колёсах и не получается.,.. Грустный
 
 Top
mihail Post Id



Гуру


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



Сделал замечательную вещь. С ее помощью можно соединить микроконтроллер и компьютер.
Прикреплено изображение
img_0066.jpg

(Отредактировано автором: 16 Июня, 2011 - 14:35:04)

 
 Top
mihail Post Id



Гуру


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



Схема. Все конденсаторы керамические по 0.1 микрофарад.
Прикреплено изображение
cxema_5.gif

(Отредактировано автором: 16 Июня, 2011 - 14:37:38)

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


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





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