БАНо

bocman74

скажите а кто собирал бано с сайта 5v.ru

скажите а кто собирал бано с сайта 5v.ru там в разделе избранные ссылки есть бортовые огни авиационной модели

5 months later
DJ_URAN

Господа комрады! Объясните, пожалуйста начинающему осваивателю программы, где в данной схеме блок захвата PPM?
Откуда и как вычисляются числа 1200, 900, и так далее?
Можно ли организовать с одного канала управления свичер на несколько выходов (предположим 8) и как это сделать?
Есть ли возможность следить за 3-мя каналами управления сразу?

Спасибо всем за помощь заранее!

ВитГо
DJ_URAN:

Господа комрады! Объясните, пожалуйста начинающему осваивателю программы, где в данной схеме блок захвата PPM?

гм… могу ошибаться (не читал тему с начала поэтому не знаю логики работы устройства) - но похоже что подсчет идет по 2м каналам, соответственно на блоксхеме это вторая и третья подпрограммы (считаем слева на право)
просто считывается значение счетчика в соответвующую переменную (period и period1 соответственно)

про: откуда взялись числа 1200, 900 и т.д. - гм… из головы разработчиков наверное 😃) это обычный способ дискретной передачи через пропорциональный канал

про свитчер на 8 выходов - сделать можно, один импульс канала в ppm может иметь диапазон от 1000 до 2000 у любой аппы (хотя вру, помоему у когото в стандарте от 1100 до 2100, но это сильно ситуацию не меняет)
ну так вот - делим диапазон (2000-1000) на 8 частей и получаем набор длительностей 1000, 1125, 1250, 1375, 1500, 1625, 1850, 1975 - вот вам и восемь возможных значений…

можно ли следить за 3мя каналами сразу - гм. зависит от применяемой железки… хоть за всеми восьми каналами сразу!

DJ_URAN
ВитГо:

гм. зависит от применяемой железки

с этого места поподробнее если можно.
правильно ли я понимаю, что можно слепить (дописать) 3-ю подпрограмму External 3 для считывания состояния 3-го канала. И получим состояние pind.4, записав значение в period2, получается?
Да, еще, за что отвечает первый блок Reset?

ВитГо:

ну так вот - делим диапазон (2000-1000) на 8 частей и получаем набор длительностей 1000, 1125, 1250, 1375, 1500, 1625, 1850, 1975 - вот вам и восемь возможных значений…

это понятно. так и предполагалось ранее.
Я про дискретный свич имел в виду. По умолчанию на канале “1000”. Жмем кнопку - “2000” (пример)
В общем при изменении этого параметра поочередно приходят лог.0 на 8 выходов атмеги. ну а далее или все в ноль или в обратном порядке.

Мне интересно, если все программы начинаются этими тремя блоками, тогда все просто: условия дописать всегда проще, имея заранее написанные универсальные блоки захвата PPM.
Если при разных условиях, разное начало - тогда сложнее.

ВитГо
DJ_URAN:

с этого места поподробнее если можно.
правильно ли я понимаю, что можно слепить (дописать) 3-ю подпрограмму External 3 для считывания состояния 3-го канала. И получим состояние pind.4, записав значение в period2, получается?

все зависит от того какой контроллер применяется.
например у atmega8 есть 2 входа внешних прерываний- на них и заводить каналы… третьего входа нет… соответственно описанный вами способ применить не получиться, по крайней мере “влоб”…

в блоке RESET - первоначальная настройка… вообще я не работал никогда в алгоритмбуилдере… 😦

DJ_URAN:

Мне интересно, если все программы начинаются этими тремя блоками, тогда все просто: условия дописать всегда проще, имея заранее написанные универсальные блоки захвата PPM.
Если при разных условиях, разное начало - тогда сложнее.

ну в данной задаче да

если кто захочет поразбираться у меня есть реализация захвата сигнала с приемника на ассемблере…
там настройка устройств, захват импульса с приемника (с различными правилами). ну и потом выдача импульсов на выходные каналы…

кстати, если приемник выдает канальные импульсы на выходах не одновременно а с некоторым сдвигом (а у большинства это так и есть) - то можно немного добавив диодов опрашивать несколько каналов приемника используя только один вход внешнего прерывания - но ИМХО это тупиковый пусть, помоему проще сделать 4 логических выключателей на каждый из 2х каналов - итого 8 выключателей: фары, габариты, аварийка, поворот влево, поворот вправо, стопы, сирена, еще что нить!
ну или если помудрить то на 2х каналах можно много что еще передать ! чуть усложнив передачу (например по первому каналу группу выключателей выбираем, а по второму значения) - можно увеличить количество выключателей еще в двое-четверо !

DJ_URAN

Мне в общем-то нужна реализация света на авто, с поворотниками и полицейскими стробами.
вот, просил одного человека из ветки посодействовать, понял, что придется осваивать самому. пропал тот человек.
с фарами и свичем все понятно, но как реализовать сложные мигания типа строб - этого я не знаю.
эффект должен быть например таким: …mylivepage.ru/…/579_Полицейская_мигалка_на_15_эфе….
но это другой контроллер, соответственно, другая среда.
эффектов хотяб один-два нужно. + это должно включаться и выключаться соответственно с пульта, а это уже 3 канала обрабатывать надо.
Если исключить поворотники и оставить только аварийку (подумал, как нелепо будут мигать поворотники, учитывая то, что поворачивать приходится часто и нелолго. они и не нужны в общем-то), то каналов 2, то что надо.

avisenja
ВитГо:

все зависит от того какой контроллер применяется.
например у atmega8 есть 2 входа внешних прерываний- на них и заводить каналы… третьего входа нет… соответственно описанный вами способ применить не получиться, по крайней мере “влоб”…

Кстати у ПИКов один вход инт , но можно использовать ещё четыре входа - прерывание по изменению уровня, обычно исп под клаву, но можно под что угодно, так-что 5 входов прерывания - без проблем;)

ВитГо
DJ_URAN:

Мне в общем-то нужна реализация света на авто, с поворотниками и полицейскими стробами.
вот, просил одного человека из ветки посодействовать, понял, что придется осваивать самому. пропал тот человек.
с фарами и свичем все понятно, но как реализовать сложные мигания типа строб - этого я не знаю.
эффект должен быть например таким: …mylivepage.ru/…/579_Полицейская_мигалка_на_15_эфе….
но это другой контроллер, соответственно, другая среда.
эффектов хотяб один-два нужно. + это должно включаться и выключаться соответственно с пульта, а это уже 3 канала обрабатывать надо.
Если исключить поворотники и оставить только аварийку (подумал, как нелепо будут мигать поворотники, учитывая то, что поворачивать приходится часто и нелолго. они и не нужны в общем-то), то каналов 2, то что надо.

помоему путаешь сам эффект с командой на его включение…

давай по порядку - сколько и какие эффекты нужны?

  1. поворот влево
  2. поворот направо
  3. фары
  4. стопы
  5. аварийка
  6. полицейская мигалка
  7. сирена

что еще ?

avisenja:

Кстати у ПИКов один вход инт , но можно использовать ещё четыре входа - прерывание по изменению уровня, обычно исп под клаву, но можно под что угодно, так-что 5 входов прерывания - без проблем;)

изголиться то можно, вопрос только - не жалко каналов приемника на эту фигню?

логику можно сделать примерно такую:
по каналу управления (1) передаем импульс 1000 если нужно включить эффект, 1500 если действие не требуется, 2000 если нужно выключить эффект
по каналу выбора (2) передаем импульс выбора эффекта:
1000 - левый поворот
1125 - правый поворот
1250 - аварийка
1375 - сирена
1500 - мигалка полицейская
1625 - фары
1750 - стопы
1875
2000

кстати, самое время определить что за аппаратура у нас будет - потому как если данные значения аппа выдавать не сможет, то нужно придумать другой алгоритм передачи команд

DJ_URAN

В общем. схема не очень простая. (кстати, аппа 2,4 от FlySky модель GT3B известна, полагаю)
задействоваться будет 3 канала:
1 - канал руля, его команды снимаются для передачи команд по включению/отключению соответствующих поворотников.
2 - канал газа, его команды - это дальний свет фар и стопы.
3 - канал дискретный, но с возможностью изменения сигнала на единицу (-100%, -99%, -98% … 0 … +98%, +99%, +100%. 2 кнопки вверх и вниз, имитирующие работу стика пошагово. также есть возможность изменения шага: -100%, -90%, -80% или -100%, -75%, -50%… в общем как угодно и в любом направлении)
3-й канал в идеале должен отвечать за:
включение/отключение света вообще.
включение работы дальнего света.
включение мигалки.

То есть поехали, нажали кнопку 3-го канала вверх один раз - включились габариты + работа стопов (про поворотники пока думаю, нужны ли).
нажали опять - стал работать дальний свет при подаче газа например на 10-20%.
нажали опять - к этому всему включилась мигалка.

но говорят, 3 канала нереал. программа сложная выйдет.

valera_o

Как знакома схема программы…😉
Использованный контроллер имеет все порты с функцией прерывания по изменению состояния.
Смотрим в описание контроллера, распределяем ноги для входов каналов, прописываем прерывания по этим каналам и одним таймером отсчитываем длительности каждого из импульсов. Потом составляем алгоритм переключения. В теле main сравниваем имеющиеся значения или флаги, которые можно поднимать при опреденных значениях, и зажигаем то что нужно. Предварительно распределив ноги выходов.
Забейте на пики, раз уж начали на атмеле писать. 😉

ВитГо

3ий канал с последовательным изменением не совсем удобен 😦

DJ_URAN
ВитГо:

3ий канал с последовательным изменением не совсем удобен 😦

отчего?

valera_o:

Использованный контроллер имеет все порты с функцией прерывания по изменению состояния.

уточните, какая микросхема необходима?

ВитГо
DJ_URAN:

отчего?

потому что когда нужно включить например фары нужно будет пройти через поворотки стопы сирену и т.д - то что включать как раз не нужно…

DJ_URAN
DJ_URAN:

То есть поехали, нажали кнопку 3-го канала вверх один раз - включились габариты + работа стопов (про поворотники пока думаю, нужны ли).
нажали опять - стал работать дальний свет при подаче газа например на 10-20%.
нажали опять - к этому всему включилась мигалка.

я ж написал.
всего 3 нажатия

valera_o

Самым лучшим по отношению цена\качество - атмега48. Все порты могут быть отслежены по прерываниям. 3 таймера на борту. В общем есть где разгуляться и стОит она меньше чем какая-нибудь аттини.
можете организовать хоть 6 каналов. Просто в прерываниях устанавливайте программные флаги, а основном теле анализируйте и распределяйте. Одним таймером измерять длительности всех каналов можно, они ведь идут последовательно, не перекрываясь.
Первые 2 канала понятны. С третьим как-то сложно. На аппе нет случайно 3-х поциционного тумблера?
Для танка пользую турниджи9х, рассовал по каналам на сколько хватило.

DJ_URAN
valera_o:

На аппе нет случайно 3-х поциционного тумблера

есть в виде кнопки. жмешь - положение меняется. от 2-х до 200 положений

ВитГо
DJ_URAN:

я ж написал.
всего 3 нажатия

ну тогда вперед!
контроллер уже посоветовали, в принципе для вашей цели пойдут многие…
скорее всего лучше будет использовать кварц для задания частоты.

для программирования можно попробовать как Си так и асм…
для Асма инициализация примерно такая

.include "2313def.inc" ;=== мой проект использовал tiny2313

; ---------------------------------------------------------------------------------------
; Константы

.equ                    LICHT = 1            ; бит порта к которому подключен светодиод
.equ                    LPORT = PORTB        ; порт к которому подключен светодиод


; ---------------------------------------------------------------------------------------
; Переменные

.DSEG

READY:                    .DB        1            ; признак готовности работать
PHASE:                    .DB        1            ; фаза ожидаемого сигнала

CH_DIV:                    .DB        2            ; значение коррекции длительности


.CSEG

.ORG     0
                        RJMP    START

.ORG     INT1addr        ; прерывание захвата каналов с приемника
                        RJMP    IRQ_INT1                    ; файл irq_int1.asm


;----------------------------------------------------------------------------------------
START:            ; главный вызов, инициализация
                        CLI

                        LDI        R16        , RAMEND            ; установка стека
                        OUT        SPL        , R16

                ; конфигурация портов ввода-вывода
                        LDI        R16        , 0
                        OUT        DDRD    , R16                ; все линии на вход
                        OUT        PORTD    , R16                ; подтяжки нет

                        LDI        R16        , 0b11110010
                        OUT        DDRB    , R16                ; пины портов на выход
                        LDI        R16        , 0b00000000        ;
                        OUT        PORTB    , R16                ; выведем на все линии ноль

                ; инициализация переменных
                        LDI        R16        , 0x00            ; признак failsave
                        STS        READY    , R16


                ; инициализация модуля захвата по входу INT1
                        LDI        R16        , 0x01            ; ожидаемая фаза сигнала - "фронт"
                        STS        PHASE    , R16
                        LDI        R16        , (1<<ISC11)|(1<<ISC10)    ; прерывание по фронту импульса
                        OUT        MCUCR    , R16            ;
                        LDI        R16        , (1<<INT1)        ; разрешение прерываний по int_1
                        OUT        GIMSK    , R16            ;

                        SEI                                ; разрешим прерывания
MAINLOOP:
;
;=== сюда нужно будет воткнуть обработчики по захваченным каналам
;
; этот код будет работать в цикле.
;
                        RJMP    MAINLOOP


.include        "irq_int1.asm"                            ; прерывание захвата (в другом файлике сохранено)

соответственно прерывание осуществляющее захват можно сделать из этого:

; файл irq_int1.asm прерывание захвата каналов

;-------------------------------------------------------------------------
;
;  ЗАХВАТ КАНАЛОВ С ПРИЕМНИКА
;
;-------------------------------------------------------------------------

IRQ_INT1:                ; прерывание по входу INT1

                        IN        ZL        , TCNT1L        ; прочитаем значение счетчика
                        IN        ZH        , TCNT1H

                        LDI        R16        , 0                ; сбросим счетчик для счета с нуля
                        OUT        TCNT1H    , R16
                        OUT        TCNT1L    , R16

                        LDS        R16        , PHASE            ; берем ожидаемую фазу сигнала

                        CPI        R16        , 1                ; фаза "фронт" ?
                        BRNE    REQ_INT1_SAVE_CH        ; получили спад!

                        ; у нас получен фронт импульса
                        LDI        R16        , 0                ; ставим флаг ожидания спада
                        STS        PHASE    , R16            ;

                        LDI        R16        , (1<<ISC11)|(0<<ISC10)    ; прерывание по спаду импульса
                        OUT        MCUCR    , R16            ;

                        RJMP    IRQ_INT1_EXIT            ; выходим


REQ_INT1_SAVE_CH:        ; получили спад
                        ; нужно сохранить длительность канального импульса
                        ; в Z длительность захваченного импульса, нужно его проанализировать для полного счастья
                        ; по идее сохранить куда нить в память чтобы потом анализировать его длительность в цикле
                        ; MAINLOOP

IRQ_INT1_EXIT:
                        RETI

правил прямо здесь (поэтому нужно будет еще раз внимательно пересмотреть алгоритм), но думаю что основная идея понятна… осталось только добавить вашу логику работы 😃

p.s. здесь только для int1 входа на прерывание (от одного канала), второй аналогичен

1 month later
Анатолий24

Подскажите пожалуйста хочу собрать огоньки с этого сайта www.homepages.paradise.net.nz/…/navlights.html есть программатор extra pic и микроконтроллер pic12а629
при програмированнии м.к. программа icprog пишет еrror
фаил на этом сайте который называется я сохраняю как txt. вставляю в icprog и нажимаю прошить м.к.
Source code (PIC12C508/9 or 12F630/75)

alexspy2
Анатолий24:

Подскажите пожалуйста хочу собрать огоньки с этого сайта www.homepages.paradise.net.nz/…/navlights.html есть программатор extra pic и микроконтроллер pic12а629
при програмированнии м.к. программа icprog пишет еrror
фаил на этом сайте который называется я сохраняю как txt. вставляю в icprog и нажимаю прошить м.к.
Source code (PIC12C508/9 or 12F630/75)

…com.ua/…/78-programmirovanie-pic-12f629.html

Анатолий24
alexspy2:

Подскажите пожалуйста хочу собрать огоньки с этого сайта www.homepages.paradise.net.nz...navlights.html есть программатор extra pic и микроконтроллер pic12а629
при програмированнии м.к. программа icprog пишет еrror
фаил на этом сайте который называется я сохраняю как txt. вставляю в icprog и нажимаю прошить м.к.
Source code (PIC12C508/9 or 12F630/75)

Спасибо с прогромматором я разобрался но коректно прошить 12f629 пока не удалось где-то на просторах интернета вчера нашел что extra pic 12f629 прошивает корректно только первый раз хотя пробовал перепрошивать 16f628 все работает

alexspy2
Анатолий24:

Спасибо с прогромматором я разобрался но коректно прошить 12f629 пока не удалось где-то на просторах интернета вчера нашел что extra pic 12f629 прошивает корректно только первый раз хотя пробовал перепрошивать 16f628 все работает

А калибровочную константу в 12f629 сохранил?

Анатолий24

Да я это знаю купил несколько 12f629 попробовал потренероваца скачал несколько небольших светодеодных схем с прошивками все работает 😃
стирается прошивается снова без проблем просто я не силен в програмировании
и не пойму что такое source code на этом саите
www.homepages.paradise.net.nz/…/navlights.html
я сохранил HEX file (PIC12F675) как txt фаил хотя написано pic12f675 а на схеме 12f679 не поиму
короче он прошивается и работает не корректно не понять как один светодиод горит второй мигает после включения аппаратуры начинают гореть еще три что не так 😵

alexspy2
Анатолий24:

не пойму что такое source code на этом саите

Это исходник в ассемблере

Анатолий24

Алексей а как его скомпелировать под pic 12f629
там на сайте лежит один hex но я так понимаю что он под другой контроллер