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

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

<< < (10/15) > >>

alexbakunov:
По коду это к Стасу, а он где то затерялся в ветке с машинками

master.x:

--- Цитата: alexbakunov от 29 Апреля 2015, 08:48:21 ---По коду это к Стасу, а он где то затерялся в ветке с машинками

--- Конец цитаты ---
Принято мне не срочно.

Stannoid:

--- Цитата: alexbakunov от 29 Апреля 2015, 08:48:21 ---По коду это к Стасу, а он где то затерялся в ветке с машинками
--- Конец цитаты ---

 ;D     По диагонали еще смотрю, с небольшим запаздыванием.

 
Добавлено [time]14 Мая 2015, 01:22:11[/time]

--- Цитата: master.x от 29 Апреля 2015, 08:46:28 ---а плюшки добавить мона?  в смысле в код.
самому чую не собрать?
--- Конец цитаты ---

Надо добавим пиши какие, а вообще код простой и все с комментариями, специально для Алекса писал побольше коментов, а он не захотел разбираться. Исходник или готовый хекс могу выложить если надо.

Вот оригинальная программа. Дизасемблируй добавляй  плюшки и шей ...


--- Цитировать (выделенное) ---;* Авто RC включатель проблекового огня
;*************************************************************
;*  Gorbunov Technology Incorporated
;*  22 июля 2013 года
;* Опрашиваем ногу 3 (GP4) микросхемы, вход приемника или сервотестера (управление) .
;* Если импульсы приемника шире 1,5 мс, то начинаем моргать светодиодами поочередно согласно диаграмме
;* 20 мс импульс 20 мс пауза- всего 10 импульсов. по первому каналу GP1 нога 6 (микросхемы)
;* 20 мс импульс 20 мс пауза- всего 10 импульсов. по второму каналу GP2 нога 5 (микросхемы)
;* пауза в 500 мс и опять повтор
;* Работа с 8 ножной микросхемой PIC 12F675   1 нога питание 3-8 вольт, 8 нога - земля
;* Внутренний RC генератор с частотой 4 мгц , внутресхемный сброс
;************************************************************* 
  LIST P=12F675, 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'00011000'      ;  GP0 выход 
  movwf  TRISIO  & 0x07F  ;  GP1 выход  первый светодиод
                      ;  GP2 выход  второй светодиод   
                    ;  GP3 вход  (может работать только как вход НЕ переконфигурируется, особенность тупого контроллера)
                    ;  GP4 вход   приемника или сервотестера
                    ;  GP5 выход

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

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

 bcf    STATUS, RP0      ; БАНК 0


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

start


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

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


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

  ; цикл идущий 1,5 ms
  movlw   d'135' ;  Число повторений (1 это 13 МИКРОСЕКУНД 10 минус 6 степени) 0,013 мс
  movwf   fconter
start_d8
  nop 
  nop

  btfss  GPIO,4  ; Ждем прихода импульса 0 с приемника либо с сервотестера.
  goto   start   ; Если пришел, значит короткий импульс , то возвращаемся обратно ждать нового импульса.

  nop
  decf   fconter,f 
  movlw  d'0'   
  subwf  fconter,w
  btfss  STATUS,Z
 goto   start_d8


; итак импульс длинной больше 1,5 мс с приемника, начинаем лупить светодиодами.


bsf   GPIO,1  ; Включить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,1  ; Выключить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,1  ; Включить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,1  ; Выключить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,1  ; Включить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,1  ; Выключить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,1  ; Включить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,1  ; Выключить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,1  ; Включить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,1  ; Выключить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,1  ; Включить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,1  ; Выключить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,1  ; Включить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,1  ; Выключить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,1  ; Включить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,1  ; Выключить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,1  ; Включить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,1  ; Выключить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,1  ; Включить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,1  ; Выключить первый светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

; ПЕРВЫЙ СВЕТОДИОД ОТМОРГАЛ, моргаем вторым
; ----------------------------------------------------------

bsf   GPIO,2  ; Включить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,2  ; Выключить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,2  ; Включить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,2  ; Выключить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms


bsf   GPIO,2  ; Включить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,2  ; Выключить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,2  ; Включить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,2  ; Выключить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,2  ; Включить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,2  ; Выключить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,2  ; Включить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,2  ; Выключить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,2  ; Включить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,2  ; Выключить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,2  ; Включить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,2  ; Выключить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,2  ; Включить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,2  ; Выключить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

bsf   GPIO,2  ; Включить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms
bcf   GPIO,2  ; Выключить второй светодиод
 call delay20   ;  ЗАДЕРЖКА 20 ms

; отморгал второй светодиод ----------------------

; Итак пауза 500 мс. при pausen=50 задержка 500 мс.
  movlw   d'50' ;  сколько раз повторять
  movwf   pausen
start_d9

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

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



 goto start
;--------------------------- КОНЕЦ ОСНОВНОГО цикла --------------------------


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 от 14 Мая 2015, 00:20:46 ---Надо добавим пиши какие
--- Конец цитаты ---
Просмотрел код, но не знаю возможностей пика 12 675 он у меня есть. а хочу использовать RGB диоды в полётном режиме левое правое крыло, при посадке белые огни, ну и мерцание ну там по необходимости время интервал уже по практике выставить. и того четыре пять режимов с выходом на 6 диодов, три левое крыло три правое.

Stannoid:

--- Цитата: master.x от 14 Мая 2015, 15:03:32 ---Просмотрел код, но не знаю возможностей пика 12 675 он у меня есть.
--- Конец цитаты ---

Сам этот пик стоит 100 рублей и свободно в перми продается, мой самый ходовой контроллер для мелких проектов. Кстати его возможности знать и не обязательно, аппаратные возможности вообще не используются в программе, кроме встроенного рц генератора, даже включенный аппаратный таймер я и то не использую в программе. В конфигурации вон все выключено. Вот его полный мануал http://akizukidenshi.com/download/PIC12F675.pdf    чисто характеристики даж на русском есть  http://www.microchip.ru/d-sheets/41190.htm:PIC12F675:1x1

 Но судя по тому что ты уже написал надо 1 вход и шесть выходов. У  PIC 12F675 всего 8 ног, из них две ноги это питание и земля, всего шесть портов ввода вывода, или параллелить какие то светодиоды на один порт или использовать более многоножный пик.

Навигация

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

[#] Следующая страница

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

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