Технический форум по робототехнике.
Nikitoz » 23 фев 2010, 00:13
В общем то и без резистора тсоп замечательно работает , ошибок нет совсем при передаче
Сейчас во пишу подобие операционки для него , ато больно размашистая программа получается уже.
Мало блен времени им заниматься
научился работать с джойстиком PSX, скоро будет печатка и пульт для всего этого
Nikitoz » 10 мар 2010, 19:05
Есть прогресс!!!
Сварганил контроллер джойстика.
Теперь умеем ездить по нажатию кнопочек на крестовине в полную скорость, а также плавненько рулить бортами отклоняя аналоговые стики вперед/назад. Ну еще убрал оставшиеся миллиграммы соплей =)
- Вложения
-
- красиво закрепил выключатель питания
-
- Контроллер джойстика
-
- Контроллер джойстика
MegaBIZON » 10 мар 2010, 22:29
Радуются глазья мои
Всё аккуратно, родные колёса, переключатель достойно расположен
В остальном не шарю, ато бы ещё налюбезничал
Nikitoz » 30 мар 2010, 14:03
vadinator » 30 мар 2010, 14:39
МОЛОДЦА!!!
TrashVigor » 30 мар 2010, 17:36
Я се тоже такой джойстик сварганил saitec бывший, самое что дешовое в магазине лежало, аналоговые джойстики мне понравились, ускорение на них делать. На тсопах это хорошая идея.
CALLIKA » 30 мар 2010, 18:11
А тсопы чтоли с каждой стороны по одному ?
кулер 23 » 30 мар 2010, 18:45
CALLIKA писал(а):А тсопы чтоли с каждой стороны по одному ?
вообще он там один на рооте.....больше нигде не вижу...
CALLIKA » 03 апр 2010, 15:03
кулер 23 писал(а):CALLIKA писал(а):А тсопы чтоли с каждой стороны по одному ?
вообще он там один на рооте.....больше нигде не вижу...
я просто думаю так как управление идет по ик-каналу, а робот поворачивается на 360 градусов то 1 тсопа прямо направленного мало будет...
Nikitoz » 03 апр 2010, 21:14
тсоп товарищи на роботе всего один
его хватает чтобы очень хорошо принимать сигнал на дальности метров 15 , а в комнате 3х5 в результате пере отражений очень стабильный прием, ошибок нет, никаких потерь. Вот так то
правда в пульте стоит 2 ик светодиода без всякого токоограничения, по 2 канала ULN2003 на каждый светодиод , и протокол я конечно долго мучил ...
Vovan » 03 апр 2010, 23:11
2 Nikitoz: а как насчет поделиться протокольчиком?
всё же не одни сишники тут тусят
Вообще-то у меня просто не доходили руки до него, не было надобности, но вскоре понадобится и чтоб долго не сидеть над ним, хорошо бы иметь под рукой
, ну если нет, то нет, без никаких обид канешно
Nikitoz » 04 апр 2010, 13:33
на самом деле ничего сложного в протоколе нет
по таймеру настроенному ровно на 72 кГц, происходит переключение туда сюда ноги со светодиодом.
таким образом я формирую 64 импульса , а потом жду еще 64 импульса не дергая ногой, так передаю 1 бит
первый бит имеет длину 32 импульса , он стартовый ,чтобы через период бита опрос тсопа был именно в серединке следующего значащего бита.
- Код: Выделить всё • Развернуть
;***********************************************************************
;*
;*
;*
;* Library infrared data resiving and transmitting
;*
;* file: ir_data.asm
;* developer: Nikitoz
;*
;* using TIMER0
;*
;* interrupt vector:
;* rjmp ir_timer (tim0 ovf)
;*
;*
;***********************************************************************
;*
;* Prototypes
;*
;* ir_send - послать байт из temp по ИК
;* ir_resive - при обнаружении сигнала на ноге TSOP принять байт
;* ir_resive_wait - одидать приема байтаи
;*
;*
;***********************************************************************
;.equ irport = portB
;.equ irled = 0
;.equ TSOPpin = pinD
;.equ TSOP = 3
.def takts = r18 ;количество полупериодов в пачке
.def bits = r19 ;счетчик битов в пачке
.def ir_dr = r20 ;резервный регистр данных
/*
ir_send:
push ir_dr
push takts ;эти байты можно незаморачиваясь использовать
push bits
push temp1
mov ir_dr, temp ;резервируем данные, там стартбит пока будет
in temp1, timsk ;сохранение в стеке текущих астроек таймера
push temp1
in temp1, tccr0
push temp1
ldi temp1, 1 ;инициализация таймера
out tccr0, temp1
ldi temp1, (1 << toie0)
out timsk, temp1
ldi takts, 192;96
clr bits
ldi temp, 1 ;стартовый бит еденица
sei
overprov:
cpi bits, 9
brne overprov
pop temp1 ;извлекаем из стека предыдущие настройки таймера
out tccr0, temp1 ;и инициализируем как было
pop temp1
out timsk, temp1
pop temp1 ;извлекаем из стека предыдущие значения локальных переменных
pop bits
pop takts
pop ir_dr
ret
;-----------------------------------
ir_timer:
ldi temp1, ir_long
out tcnt0, temp1
sbrs temp, 0 ;если в данных нулевой бит установлен то пляшем ,или сначала стартбит
rjmp pc + 7
cpi takts, 129;65 ;это чтобы первая половина колебалась, вторая молчала
brmi ir_timer_1
sbrs takts, 0 ;если нечетное то 0
sbi irport, irled
sbrc takts, 0 ;если четное то 1
cbi irport, irled
ir_timer_1:
dec takts ;если пачка кончилась то на следущий бит
brne end_ir_timer
inc bits ;следущий бит
clr takts;, 128 ;нормальные биты по 33 полупериода в пачке
lsr temp ;LSB вперед
cpi bits, 1 ;первый - старт бит
brne pc + 2
mov temp, ir_dr ;начиная со второго по счету бита данные
cpi bits, 9 ;конец посылки
brne pc + 5
clr temp ;включаем таймер
out timsk, temp
out tccr0, temp
cli ;запрещаем прерывания
end_ir_timer:
reti
*/
;-----------------------------------
ir_resive_wait: ;если старт бит ещё ожидается
sbic TSOPpin, TSOP
rjmp ir_resive_wait
ir_resive: ;если старт бит уже пришел
push temp1
ldi temp1, 8
ir_resive_1: ;прием бита
ldi YL, low ( 3552 ) ;( 1778 )
ldi YH, high ( 3552 ) ;( 1778 )
rcall delay_1mks
lsr temp
sbic TSOPpin, TSOP
cbr temp, 0x80
sbis TSOPpin, TSOP
sbr temp, 0x80
dec temp1
brne ir_resive_1
ldi YL, low ( 3552 ) ;( 1778 ) ;когда последний бит уже пинят в эфире ещё идёт посылка
ldi YH, high ( 3552 ) ;( 1778 ) ;на неё может отреагировать следующий цикл приема
rcall delay_1mks ;выжидаем пока передатчик не закончит вещать
pop temp1
ret
;-----------------------------------
вот временная диаграмма передачи символа "1" (0x31)
- Вложения
-
- ir_tx.jpg (18 КиБ) Просмотров: 1652
Vovan » 04 апр 2010, 21:31
Спасибо СЭР!
Всё круто и понятно
Эх... побольше б таких продвинутых чувакоф...