roboforum.ru

Технический форум по робототехнике.

palindroid

Re: palindroid

Nikitoz » 23 фев 2010, 00:13

В общем то и без резистора тсоп замечательно работает , ошибок нет совсем при передаче
Сейчас во пишу подобие операционки для него , ато больно размашистая программа получается уже.
Мало блен времени им заниматься :(
научился работать с джойстиком PSX, скоро будет печатка и пульт для всего этого

Re: palindroid

Nikitoz » 10 мар 2010, 19:05

Есть прогресс!!!
Сварганил контроллер джойстика.
Теперь умеем ездить по нажатию кнопочек на крестовине в полную скорость, а также плавненько рулить бортами отклоняя аналоговые стики вперед/назад. Ну еще убрал оставшиеся миллиграммы соплей =)
Вложения
P1030534.JPG
красиво закрепил выключатель питания
P1030528.JPG
Контроллер джойстика
P1030532.JPG
Контроллер джойстика

Re: palindroid

MegaBIZON » 10 мар 2010, 22:29

Радуются глазья мои :)
Всё аккуратно, родные колёса, переключатель достойно расположен :good:
В остальном не шарю, ато бы ещё налюбезничал :oops:

Re: palindroid

Nikitoz » 30 мар 2010, 14:03


вот видео как катается с пульта

Re: palindroid

vadinator » 30 мар 2010, 14:39

МОЛОДЦА!!! :good:

Re: palindroid

TrashVigor » 30 мар 2010, 17:36

Я се тоже такой джойстик сварганил saitec бывший, самое что дешовое в магазине лежало, аналоговые джойстики мне понравились, ускорение на них делать. На тсопах это хорошая идея. :good:

Re: palindroid

CALLIKA » 30 мар 2010, 18:11

А тсопы чтоли с каждой стороны по одному ?

Re: palindroid

кулер 23 » 30 мар 2010, 18:45

CALLIKA писал(а):А тсопы чтоли с каждой стороны по одному ?

вообще он там один на рооте.....больше нигде не вижу...

Re: palindroid

CALLIKA » 03 апр 2010, 15:03

кулер 23 писал(а):
CALLIKA писал(а):А тсопы чтоли с каждой стороны по одному ?

вообще он там один на рооте.....больше нигде не вижу...

я просто думаю так как управление идет по ик-каналу, а робот поворачивается на 360 градусов то 1 тсопа прямо направленного мало будет...

Re: palindroid

Nikitoz » 03 апр 2010, 21:14

тсоп товарищи на роботе всего один :) его хватает чтобы очень хорошо принимать сигнал на дальности метров 15 , а в комнате 3х5 в результате пере отражений очень стабильный прием, ошибок нет, никаких потерь. Вот так то :)
правда в пульте стоит 2 ик светодиода без всякого токоограничения, по 2 канала ULN2003 на каждый светодиод , и протокол я конечно долго мучил ...

Re: palindroid

Vovan » 03 апр 2010, 23:11

2 Nikitoz: а как насчет поделиться протокольчиком? :wink:
всё же не одни сишники тут тусят :oops:
Вообще-то у меня просто не доходили руки до него, не было надобности, но вскоре понадобится и чтоб долго не сидеть над ним, хорошо бы иметь под рукой :) , ну если нет, то нет, без никаких обид канешно :)

Re: palindroid

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
ir_tx.jpg (18 КиБ) Просмотров: 1652

Re: palindroid

Vovan » 04 апр 2010, 21:31

Спасибо СЭР! :good: Всё круто и понятно :)
Эх... побольше б таких продвинутых чувакоф...


Rambler\'s Top100 Mail.ru counter