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


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

> Описание: Фото, видео, описание.
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;

unsigned char usart_data = 's';


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

PORTD ^= 0b01000000;

count += 1;

if( count == 80 )
{
TCCR0B = 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<<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)
{
// 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 = 0b01000000;
PORTD = 0b00000000;


// Baud Rate 9600 bps
USART_Init(51);


// 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)
{
_delay_ms(100);

USART_Receive();

count = 0;
TCCR0B = 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;
TCCR0B = 0b00000001;
while( count != 80 );
}

return 0;
}

Прикреплено изображение
img_0068.jpg

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

 
 Top
alex91 Post Id



Маршал


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



mihail спасибо очень интересно надо и мне попробовать ваш код
 
 Top
mihail Post Id



Гуру


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



Программа для управления роботом с компьютера. Написана на http://www.python.org/ Для работы с COM портом используется http://pypi.python.org/pypi/pyserial
#!/usr/bin/env python

import serial

# open port
ser = serial.Serial(0,
9600,
bytesize = serial.EIGHTBITS,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
timeout = 1)

print ser, '\n' # print information

command = ''

while command != 'e' :

command = raw_input( ' forward left stop right backward exit [f/l/s/r/b/e] : ' )

if command == 'f' :
print 'forward'
elif command == 'l' :
print 'left'
elif command == 's' :
print 'stop'
elif command == 'r' :
print 'right'
elif command == 'b' :
print 'backward'
elif command == 'e' :
print 'exit'
else :
command = 's'
print 'stop'

ser.write(command)
# print ser.read() # test

ser.close() # close port

Чудный, интуитивно понятный, консольный интерфейс не в себе
Прикреплено изображение
com_1.png

(Отредактировано автором: 17 Июня, 2011 - 13:18:10)

 
 Top
alex91 Post Id



Маршал


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



mihail а можно с терминала управлять роботом ?Или это не так удобно
 
 Top
mihail Post Id



Гуру


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



Роботом можно управлять с помощью любой программы ПК которую можно использовать для связи с МК через USART.

Программа приведенная выше лишь показывает как написать свою программу.

(Отредактировано автором: 18 Июня, 2011 - 00:37:19)

 
 Top
mihail Post Id



Гуру


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



К вопросу об удобстве. Графический интуитивно понятный пользовательский интерфейс на python сделать несложно. Ниже приведена программа управления роботом с GUI.
#!/usr/bin/env python


import serial

def serial_port(data) :

ser = serial.Serial(0,
9600,
bytesize = serial.EIGHTBITS,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
timeout = 3)
ser.write(data)
# print ser.read() # test
ser.close()


def button_forward() :
serial_port('f')
print "forward"

def button_left() :
serial_port('l')
print "left"

def button_stop() :
serial_port('s')
print "stop"

def button_right() :
serial_port('r')
print "right"

def button_backward() :
serial_port('b')
print "backward"


from Tkinter import *

tk = Tk()
tk.title('control panel')

button_1=Button(tk, text='forward', width=10, command=button_forward)
button_1.grid(row=0, column=1)

button_2=Button(tk, text='left', width=10, command=button_left)
button_2.grid(row=1, column=0)

button_3=Button(tk, text='stop', width=10, command=button_stop)
button_3.grid(row=1, column=1)

button_4=Button(tk, text='right', width=10, command=button_right)
button_4.grid(row=1, column=2)

button_5=Button(tk, text='backward', width=10, command=button_backward)
button_5.grid(row=2, column=1)

tk.mainloop()

А выглядит это так :)
Прикреплено изображение
gui_1.png

 
 Top
cjA Post Id



Генерал


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



если у МК робота есть встроенный УАРТ или пропрограммированый УАРТ
alex91 это очень медленный способ и в быстрых системах эффекта не будет, а в медленных - не будет эффекта.
 
 Top
nest Администратор Post Id



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


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



cjA пишет:
если у МК робота есть встроенный УАРТ или пропрограммированый УАРТ
alex91 это очень медленный способ и в быстрых системах эффекта не будет, а в медленных - не будет эффекта.
это к чему всё?
какого эффекта? куда не будет? почему?
 
 Top
cjA Post Id



Генерал


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



отлаживать программы в МК через уарт. ИМХО это плохой способ, только для кружковцев в восьмом классе ради развлечения.
а почему- nest, вы сами наберете штук пять причин, да еще я четыре добавлю Улыбка
(Добавление)
(есть же аппноут как юсб к тиньке подключить (nest, вы же сами об этом говорили что давно уже ... это все там...))
 
 Top
-dead- Post Id


Президент


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



cjA пишет:
отлаживать программы в МК через уарт. ИМХО это плохой способ, только для кружковцев в восьмом классе ради развлечения.

Я по отладочному выводу на экран (читай уарту) отлаживал кучу разных программ на ПК и пачку программ через уарт отлаживал на МК. Крайне редко нужно собирать информацию в реальном времени или получить больше информации от программы, чем проходит по уарту за разумное время.
 
 Top
cjA Post Id



Генерал


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



-dead-, допустим у вас тиних5 - соотношение отладчика и какой результирующий код? Ах да, вы же за то чтобы скупать меги пачками. Дед, это у вас МК проффесия, а у нас, большинства - прихоть. Подмигивающий

(а вобщето я не понял- Вы за уарт как отладчик или против.)
 
 Top
-dead- Post Id


Президент


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



При чем тут меги пачками. Разница в цене тини15 и меги88 обычно не более 30 рублей.
Неужели 30 рублей стоят того, чтобы быть ограниченным в оперативной памяти, количестве ног и флеше?

PS: У меня профессия - системы учета/контроля и оперативного управления компанией (не промышленная автоматика, а торговая), а МК - можете считать прихоть Улыбка но в программировании и отладке я очень даже понимаю.

(Отредактировано автором: 19 Июня, 2011 - 10:36:48)

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



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


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



cjA пишет:
а почему- nest, вы сами наберете штук пять причин, да еще я четыре добавлю
жду 4 причины.
 
 Top
nestandart Супермодератор Post Id



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


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



mihail

А как у вас организовано питание пульта ду ?

Я вот тоже буду делать пульт и мне интересна тема питания МК и двух светодиодов.

Может использовать 4 батареи CR через КРЕН ?
 
 Top
nest Администратор Post Id



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


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



nestandart пишет:
Может использовать 4 батареи CR через КРЕН ?
4 батарейки по "1,5" вольта как раз ложатся в питание напрямую.
 
 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