RC.ПЕРМЬ.РУ > Клуб FPV

Тех задание - RC таймер для Sony NEX

<< < (15/15)

master.x:

--- Цитата: Stannoid от 16 Сентября 2015, 11:23:31 ---Ну что , Рустам, твой заказ готов.
--- Конец цитаты ---
Здорово. Закинь исходник почитать ftp://legioner:83X602GK@77.236.73.165  фтп такой же как у Артура, у тебя вроде проблемы со связью были может ИП в бан упал.

Stannoid:

--- Цитата: master.x от 16 Сентября 2015, 16:57:43 --- Закинь исходник почитать
--- Конец цитаты ---

Дак тут читай, схема подключения в виде текста в начале. После точки с запятой все комментарии.


--- Цитировать (выделенное) ---;* Авто RC включатель проблекового огня версия 2 (две RGB полоски со светодиодами на левое и правое крыло)
;*****************************************************************************************
;*  Gorbunov Technology Incorporated
;*  15 сентября 2015 года
;* Опрашиваем ногу 4 (GP3) микросхемы, вход приемника или сервотестера (управление) .
;* Пять режимов работы моргания светодиодов в зависимости от задания сервотестера.
;* Распиновка подключения цветовой ленты к ногам контроллера :
;* R1  нога 2
;* G1  нога 3
;* B1 и B2 нога 5
;* R2  нога 7
;* G2  нога 6
;*
;* Работа с 8 ножной микросхемой PIC 12F675/12F629   1 нога питание 3-8 вольт, 8 нога - земля GND.
;* Между землей и питанием микросхемы необходимо поставить два конденсатора 0,1 мкф и 100-500 мкф.
;* Внутренний RC генератор с частотой 4 мгц , внутресхемный сброс
;************************************************************* 
  LIST P=12F629, R=DEC      
  errorlevel 0,-305
  errorlevel 0,-202
  errorlevel 0,-203

  INCLUDE "p12F675.inc"

;  ПЕРЕМЕННЫЕ
 CBLOCK 0x020
_w,_status,fconter,pausen
Count                     
                          ;
 ENDC                     ;
                        ; fconter - переменная для организации задержек
                          ; pausen - длинна паузы между проблеском
                          ; Остальные переменные для временного хранения
                          ;
                       ;

  __config H'31C4' ; КОНФИГУРАЦИЯ без СР (без бита защиты прошивки в контроллере)
;  __config H'3145' ; КОНФИГУРАЦИЯ с СР         

  org    0
   goto   main


  org  4   ; Обработчик прерывания (в этой программе не используется)
Int
  movwf    _w         ;  Save Context Registers
  movf    STATUS, w
  movwf    _status
 
 ; bcf    GPIO,5           ; ЭТО НУЖНО для ЭТОГО ТУПОГО контроллера (инициализация защелок)
  bcf    INTCON,2          ;  сбросить флаг прерывания от TMR0
  movf    _status, w        ;  Restore the Context Registers
  movwf    STATUS
  swapf    _w
  swapf    _w, w
  retfie    ; ВОЗВРАТ из прерывания


main                       ;  КОНФИГУРАЦИЯ микроконтроллера

 ;CLRWDT ; Сброс сторожевого таймера
 ;bsf    STATUS, RP0      ; банк1
 ;Call 3FFh                ; Калибровка внутреннего генератора
 ;movwf OSCCAL & 0x07F

 bcf    STATUS, RP0      ; БАНК 0

  clrf  T1CON  ; Выключить таймер TMR1 (второй 2-х разрядный таймер)
  clrf   GPIO  ; Инициализация защелок GPIO

  movlw    B'00000111'
  movwf CMCON ; Все каналы контроллера цифровые выходы ТТЛ

;  movlw  B'10100000'       ; включить прерывания от таймера TMR0    
;  movwf  INTCON
  clrf    INTCON          ; выключить все прерывания

 bsf    STATUS, RP0      ;  БАНК 1   

  clrf   VRCON & 0x07F ;  Выключение опорных напряжений компораторов

  movlw    B'00000000'      ;  Выключить аналогывые входы (характерно только для PIC12F675)
  movwf    ANSEL & 0x07F

  movlw    B'00000111'      ;  включить таймер с предделителем 1:256 для TMR0 (7 бит - подтягивающие резисторы отключены)
  movwf    OPTION_REG & 0x07F


                          ; (порты когда 0 выход) (порты когда 1 вход)
  movlw    B'00001000'      ;  GP0 выход  (нога 7 ) R2
  movwf  TRISIO  & 0x07F  ;  GP1 выход  (нога 6 ) G2
                      ;  GP2 выход  (нога 5 ) B1 и B2
                    ;  GP3 вход (нога 4 )  приемника или сервотестера (может работать только как вход.НЕ переконфигурируется, особенность тупого контроллера)
                    ;  GP4 выход  (нога 3 ) G1
                    ;  GP5 выход  (нога 2 ) R1

  movlw    B'00001000'      ;  выключение всех подтягивающих резисторов GP кроме GP3
  movwf  WPU  & 0x07F     ; 

  movlw    B'00000000'      ;  выключение прерываний от GP портов
  movwf  IOCB  & 0x07F    ;

 bcf    STATUS, RP0      ; БАНК 0


;*************  НАЧАЛО ОСНОВНОГО КОДА ******************

start


 ;  Clrf   GPIO  ; Обнулить все порты

  movlw   B'11111111' ;  ВСЕ порты =1 ПОГАСИТЬ светодиоды.
  movwf   GPIO


start1

 
  btfsc  GPIO,3  ; Ждем НУЛЯ, признак начала отсчета с приемника либо с сервотестера. ....
  goto   $-1


  btfss  GPIO,3  ; Ждем прихода импульса 1 с приемника либо с сервотестера. СТАРТ.
  goto   $-1

; цикл идущий 0-1,1 ms
  movlw   d'105' ;  Число повторений (1 это 11 МИКРОСЕКУНД 10 минус 6 степени) 0,011 мс
  movwf   fconter
start_d8
  nop 
  nop
  btfss  GPIO,3  ; Ждем прихода импульса 0 с приемника либо с сервотестера.
  goto   start   ; Если пришел, значит короткий импульс , то возвращаемся обратно ждать нового импульса. Погасить ВСЕ !!!
  nop
  decf   fconter,f 
  movlw  d'0'   
  subwf  fconter,w
  btfss  STATUS,Z
 goto   start_d8

; цикл идущий 1,15-1,25 ms
  movlw   d'14' ;  Число повторений (1 это 11 МИКРОСЕКУНД 10 минус 6 степени) 0,011 мс
  movwf   fconter
start_d9
  nop 
  nop
  btfss  GPIO,3  ; Ждем прихода импульса 0 с приемника либо с сервотестера.
  goto   Regim_1 ; Если пришел, значит РЕЖИМ 1 НАШЛИ !!!
  nop
  decf   fconter,f 
  movlw  d'0'   
  subwf  fconter,w
  btfss  STATUS,Z
 goto   start_d9


; цикл идущий 1,3-1,4 ms
  movlw   d'14' ;  Число повторений (1 это 11 МИКРОСЕКУНД 10 минус 6 степени) 0,011 мс
  movwf   fconter
start_d10
  nop 
  nop
  btfss  GPIO,3  ; Ждем прихода импульса 0 с приемника либо с сервотестера.
  goto   Regim_2 ; Если пришел, значит РЕЖИМ 2 НАШЛИ !!!
  nop
  decf   fconter,f 
  movlw  d'0'   
  subwf  fconter,w
  btfss  STATUS,Z
 goto   start_d10

; цикл идущий 1,45-1,55 ms
  movlw   d'14' ;  Число повторений (1 это 11 МИКРОСЕКУНД 10 минус 6 степени) 0,011 мс
  movwf   fconter
start_d11
  nop 
  nop
  btfss  GPIO,3  ; Ждем прихода импульса 0 с приемника либо с сервотестера.
  goto   Regim_3 ; Если пришел, значит РЕЖИМ 3 НАШЛИ !!!
  nop
  decf   fconter,f 
  movlw  d'0'   
  subwf  fconter,w
  btfss  STATUS,Z
 goto   start_d11

; цикл идущий 1,6-1,7 ms
  movlw   d'14' ;  Число повторений (1 это 11 МИКРОСЕКУНД 10 минус 6 степени) 0,011 мс
  movwf   fconter
start_d12
  nop 
  nop
  btfss  GPIO,3  ; Ждем прихода импульса 0 с приемника либо с сервотестера.
  goto   Regim_4 ; Если пришел, значит РЕЖИМ 4 НАШЛИ !!!
  nop
  decf   fconter,f 
  movlw  d'0'   
  subwf  fconter,w
  btfss  STATUS,Z
 goto   start_d12

; цикл идущий 1,75-1,9 ms
  movlw   d'14' ;  Число повторений (1 это 11 МИКРОСЕКУНД 10 минус 6 степени) 0,011 мс
  movwf   fconter
start_d13
  nop 
  nop
  btfss  GPIO,3  ; Ждем прихода импульса 0 с приемника либо с сервотестера.
  goto   Regim_5 ; Если пришел, значит РЕЖИМ 5 НАШЛИ !!!
  nop
  decf   fconter,f 
  movlw  d'0'   
  subwf  fconter,w
  btfss  STATUS,Z
 goto   start_d13



 goto start
;  +++++++++++++++++++ Конец проверки +++++++++++++++++++++++


;---------------------------------------------------------------------
Regim_1 ; ПЕРВЫЙ РЕЖИМ

 movlw   B'11011101' ;  ВСЕ порты ПОГАСИТЬ кроме 5 и 1
 movwf   GPIO

bcf   GPIO,5  ; ВКЛЮЧИТЬ постоянно R1
bcf   GPIO,1  ; ВКЛЮЧИТЬ постоянно G2
 goto start1


;---------------------------------------------------------------------
Regim_2 ; ВТОРОЙ РЕЖИМ  (белый полный свет) включить ВСЕ светодиоды
bcf   GPIO,0  ; ВКЛЮЧИТЬ постоянно R2
bcf   GPIO,1  ; ВКЛЮЧИТЬ постоянно G2
bcf   GPIO,2  ; ВКЛЮЧИТЬ постоянно B1 и B2
bcf   GPIO,4  ; ВКЛЮЧИТЬ постоянно G1
bcf   GPIO,5  ; ВКЛЮЧИТЬ постоянно R1
 goto start1


;-----------------------------------------------------------------------
Regim_3 ; ТРЕТИЙ РЕЖИМ (поморгать красным то левым то правым крылом)

  movlw   B'11111111' ;  ВСЕ порты =1 ПОГАСИТЬ светодиоды. Чтобы не попали включенные с прошлого режима
  movwf   GPIO

; Моргаем десять раз красным левым крылом
bcf   GPIO,5  ; Включить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,5  ; Выключить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,5  ; Включить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,5  ; Выключить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,5  ; Включить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,5  ; Выключить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,5  ; Включить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,5  ; Выключить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,5  ; Включить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,5  ; Выключить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,5  ; Включить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,5  ; Выключить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,5  ; Включить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,5  ; Выключить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,5  ; Включить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,5  ; Выключить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,5  ; Включить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,5  ; Выключить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,5  ; Включить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,5  ; Выключить R1
 call delay20   ;  ЗАДЕРЖКА 20 ms


; Моргаем десять раз красным правым крылом
bcf   GPIO,0  ; Включить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,0  ; Выключить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,0  ; Включить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,0  ; Выключить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,0  ; Включить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,0  ; Выключить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,0  ; Включить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,0  ; Выключить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,0  ; Включить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,0  ; Выключить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,0  ; Включить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,0  ; Выключить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,0  ; Включить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,0  ; Выключить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,0  ; Включить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,0  ; Выключить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,0  ; Включить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,0  ; Выключить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms

bcf   GPIO,0  ; Включить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms
bsf   GPIO,0  ; Выключить R2
 call delay20   ;  ЗАДЕРЖКА 20 ms

 goto start1


;---------------------------------------------------------------------
Regim_4 ; ЧЕТВЕРТЫЙ РЕЖИМ (медленной перемаргивание левым правым крылом красным и зеленым)

movlw   B'11111111' ;  ВСЕ порты =1 ПОГАСИТЬ светодиоды. Чтобы не попали включенные с прошлого режима
  movwf   GPIO

bcf   GPIO,5  ; ВКЛЮЧИТЬ постоянно R1
 call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)
 call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)
bsf   GPIO,5  ; ВЫКЛЮЧИТЬ постоянно R1

bcf   GPIO,1  ; ВКЛЮЧИТЬ постоянно G2
call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)
 call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)
bsf   GPIO,1  ; ВЫКЛЮЧИТЬ постоянно G2

 goto start1

;-------------------------------------------------------------------------
Regim_5 ; ПЯТЫЙ РЕЖИМ (режим Стаса - ЦВЕТОМУЗЫКА уга га танцуют ВСЕ )

movlw   B'11111111' ;  ВСЕ порты =1 ПОГАСИТЬ светодиоды. Чтобы не попали включенные с прошлого режима
 movwf   GPIO

bcf   GPIO,5  ; ВКЛЮЧИТЬ постоянно R1
 call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)
bsf   GPIO,5  ; ВЫКЛЮЧИТЬ постоянно R1

bcf   GPIO,1  ; ВКЛЮЧИТЬ постоянно G2
 call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)
bsf   GPIO,1  ; ВЫКЛЮЧИТЬ постоянно G2

bcf   GPIO,4  ; ВКЛЮЧИТЬ постоянно G1
 call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)
bsf   GPIO,4  ; ВЫКЛЮЧИТЬ постоянно G1

bcf   GPIO,0  ; ВКЛЮЧИТЬ постоянно R2
 call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)
bsf   GPIO,0  ; ВЫКЛЮЧИТЬ постоянно R2

 call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)

bcf   GPIO,2  ; ВКЛЮЧИТЬ постоянно B1
 call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)
 call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)
bsf   GPIO,2  ; ВЫКЛЮЧИТЬ постоянно B2
 call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)
 

bcf   GPIO,2  ; ВКЛЮЧИТЬ постоянно B1
 call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)
 call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)
bsf   GPIO,2  ; ВЫКЛЮЧИТЬ постоянно B2
 call delay500   ; ЗАДЕРЖКА 500 мс (пол секунды)
 

 goto start1

                          ;  GP0 выход  (нога 7 ) R2
                          ;  GP1 выход  (нога 6 ) G2
                      ;  GP2 выход  (нога 5 ) B1 и B2
                    ;  GP4 выход  (нога 3 ) G1
                    ;  GP5 выход  (нога 2 ) R1


delay500 ; ЗАДЕРЖКА 500 мс (пол секунды)
; Итак пауза 500 мс. при pausen=50 задержка 500 мс.
  movlw   d'50' ;  сколько раз повторять
  movwf   pausen
start_d1

 call delay10   ;  ЗАДЕРЖКА 10 ms

  decf   pausen,f 
  movlw  d'0'   
  subwf  pausen,w
  btfss  STATUS,Z
  goto   start_d1
   return


delay10  ;  ЗАДЕРЖКА 10 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
  return


delay20  ;  ЗАДЕРЖКА 20 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
 call delay2   ;  ЗАДЕРЖКА 2 ms
  return

 

delay1   ;  ЗАДЕРЖКА 1 ms
  movlw   d'90' ;  Число повторений (1 это 13 МИКРОСЕКУНД 10 минус 6 степени) 0,013 мс
  movwf   fconter
start_d2
  nop 
  nop
  nop
  nop
  nop
  decf   fconter,f 
  movlw  d'0'   
  subwf  fconter,w
  btfss  STATUS,Z
  goto   start_d2
 return



delay2   ;  ЗАДЕРЖКА 2 ms
  movlw   d'181' ;  Число повторений (1 это 13 МИКРОСЕКУНД 10 минус 6 степени) 0,013 мс
  movwf   fconter
start_d3
  nop 
  nop
  nop
  nop
  nop
  decf   fconter,f 
  movlw  d'0'   
  subwf  fconter,w
  btfss  STATUS,Z
  goto   start_d3
 return


  end




--- Конец цитаты ---

master.x:

--- Цитата: Stannoid от 16 Сентября 2015, 17:28:28 ---Дак тут читай, схема подключения в виде текста в начале. После точки с запятой все комментарии.
--- Конец цитаты ---
Нашёл режим который надо будет корректировать, экпериментально или научно. 20мс мало для мерцания , глаз не видит 10-20Гц надо сделать. сколько это будет в милисекундах?
Добавлено 17 Сентября 2015, 16:12:38
третий режим сделаем 50мс вкл 50мс выкл. ну примерно.

Навигация

[0] Главная страница сообщений

[*] Предыдущая страница

Перейти к полной версии