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