RC.ПЕРМЬ.РУ > Клуб FPV
Тех задание - RC таймер для Sony NEX
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мс выкл. ну примерно.
Навигация
Перейти к полной версии