Программирование PIC16F84A в программе Realizer Gold

Yuriy

Вступление: руководитель нашего кружка хочет возродить кордовый моделизм с пионерами, но на электротяге. Отсюда вытекает необходимость в ограничении времени полета и регулировки мощности мотора. Устройство видится таким: джамперами задается время и мощность двагателя, к нему подключается ESC с BEC’ом, далее нажимаем кнопку “старт” и мотор запускается в соответствии с заданными установками, по окончании заданного времени, мотор останавливается.
Задача:

  • сделать таймер на 2, 3, 4, 5, 6, 7, 8, 10 минут, время выбирать 3-мя джамперами;
  • регулятор на четыре положения с длительностью импульса 1,7; 1,8; 1,9; 2,0 мс, также задается 2-мя джамперами;
  • по окончании заданного времени длительность импульса становится 1,0 мс.
    Что сделано: вообще-то я радист по образованию, но работал со старой элементной базой. Никого не нашел, кто бы мог запрограммировать микропроцессор и потому сильно обрадовался, когда прочитал статью в журнале “Радио” 2010 года №6 - “Как превратить принципиальную схему в программу”. Решено самому запрограммировать PIC16F84A с помощью программы Realizer Gold фирмы Actum Solutions.
    Купил микросхемы и кварцы на 4МГц, сделал программатор, нарисовал схему в программе. Таймер работает исправно, проблем нет, а вот формированием импульсов для регулятора возникли проблемы.
    Возникшие сложности: при формировании короткого импульса, время задается в формате хх:хх:хх:хх.ххх - дни:часы:минуты:секунды.тысячные доли секунды. Вот и проблема меньше 1 мс время не выставить. Хотя в общих настройках программы базовое время можно задать в 100 мкс, но на выходе получается только с дискретностью в 1 мс. Причем минимальное время 1 мс, а по факту на выходе где-то 1,35 мс; вместо 2 мс - примерно 2,1 мс.
    Причем симулятор программы отказывается правильно показывать даже импульсы с периодом в 20 мс, хотя по факту все работает.
    Пути решения:
  1. Купить что-то типа серво-тестера и пропускать сигнал через этот таймер, но душа не лежит к такому варианту.
  2. Может кто-то поможет поправить код на ассемблере, хотя подозреваю, что в сгенерированном коде разобраться не легче чем заново все написать.
  3. Может кто-то что-нибудь подскажет еще.

Прошу прощения за длинный пост, но хотел все описать. если счто-то не указал, то добавлю.

Timer&Reg.rar

ubd

А зачем таймер делать? У нас на СЮТ уже давно летают на электро-кордовых, и нафига тамер то? Для имитации того, что типа топливо кончилось? Бред… Просто, на ручке установлен простейший регулятор оборотов на таймере 555, и ручка регулировки оборотов. Аккумы свинцовые 12В по два шт в послед, на модели ничего нет, только провода до мотора. На кордах падает около 5-7В, в зависимости от тока. И летают по очереди, пока аккум не сядет, аккума 7,5Ач хватает не очень на долго, при 5-10А токе. Смотря ещё какой мотор, или Speed, или от автомобильных замков электро приводов дверей. В качестве корд используется 0,5-0,6мм медный провод в эмалевой изоляции. Длинна корд не превышает 5М. Летают в основном в спорт-зале, иногда на улице.
Проводятся да же соревнования среди школьников, по кордовым электро моделям (гонки, полукопии, копии, экспериментальные), я там сам присутсвую в качестве судьи, и ни у кого на этих соревнованиях нет таймеров, и в положении соревнований, они не требуются.

Регулятор хода для кордовой на NE555.rar

Yuriy

У руководителя нашего кружка, идея сделать модель с устанвленным аккумулятором на модели и двигатель использовать безколлекторный, корды стандартные. Тяга у моделей будет побольше, корды подлиннее, класс другой. Чтоб не только пионеры, но и сам с удовольствием полетал. Он так хочет, а я хочу ему помочь. Да вот пока не получается.
А таймер нужен, чтоб не разрядить да конца аккумулятор, чтоб ограничить время, кто-то может 10 мин полетать, кому-то и 3 для начала достаточно. Соответственно и регулятор мощности.

ubd

Это всё мы проходили. БК моторы на модели то же ставили, регулятор и аккум были на модели, но управление шло с ручки. На ручке был генератор канального импульса (серво-тестер), который изменялся переменным резистором, и по кордам канальный импульс шёл к модели, корды то же должны быть изолированны, но по ним уже не шёл большой ток, и их сечение не важно. Короче, регулируется газ с ручки.
Вам можно так же сделать. Только с таймером. И опять же таймер тут не нужен, зачем усложнять жизнь. Когда захотел тогда и убрал газ, а не ждать когда на модели время выйдет. Вдруг что то произойдёт, и газ не уберёшь.

Я когда, в детстве, занимался кордовыми моделями, то у меня всегда было желание регулировать газ с ручки, но тогда двигатели были без этой возможности и по кордам было сложно передать информацию о уровне газа.

А таймер нужен, чтоб не разрядить да конца аккумулятор, чтоб ограничить время, кто-то может 10 мин полетать, кому-то и 3 для начала достаточно. Соответственно и регулятор мощности.

Аккум до конца всё ровно не разрядишь, т.к. на регуляторе отческа есть и ниже чем 2,85В на банку не разрядится.
Так вот, я говорю, нет смысла в таймере, если управления газом будет с ручки, так ещё проще, если у пилота голова закружилась, то он убирает газ и садит, когда захочет, а не ждёт когда время выйдет.

На ручке достаточно сделать сервотестер, на то же 555. Питание от 9В (Крона), прямо на ручке. Ниже схема.
Всё очень просто, вы зря усложняете жизнь себе и другим.

И вообще, если писать программы, то не наким способом что у вас, нужен хотя бы PIC Basic, там всё точно с выдержками времени. А лучше АСМ, но там думать много нада…

Регулятор хода для кордовой.rar

Yuriy

Вот это другое дело, конечно регулировать газ на ручке - это здорово. Конечно тогда отпадет и необходимость в таймере (хотя он-то и работает, а не работает регулятор хода).
Что Вы использовали в качестве корд? На большой длине корд сигнал нормально доходит? Никакого усилителя дополнительно не делали?
Ранее, в качестве корд, использовался тросик 0,55 мм из 11жил, очень мягкий, допускает до 10 скруток.
Кроме того, если бы получился мой вариант, то хочется его использовать для таймерных моделей (с другими временами конечно).

ubd

Что Вы использовали в качестве корд? На большой длине корд сигнал нормально доходит? Никакого усилителя дополнительно не делали?

Сигналл доходит нормально, это проверенная схема. В качестве корд, тот же медный провод в эмалевой изоляции, диаметром 0,5мм.

Схем сервотестеров в инете, море.

Yuriy

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

ubd:

В качестве корд, тот же медный провод в эмалевой изоляции, диаметром 0,5мм.

При натяжении до 10 кг, этот проводок не выдержит.

ubd

При натяжении до 10 кг, этот проводок не выдержит.

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

Yuriy
ubd:

если писать программы, то не наким способом что у вас, нужен хотя бы PIC Basic, там всё точно с выдержками времени. А лучше АСМ

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

ubd

Вот сайт: www.picbasic.ru
Скачай книгу автор Чак Хелибайк, там были примеры, для работы с серво-механизмом. Всё очень просто и работает!

Например: вывод канального импульса длительностью 1,5мс.

Puls:                    'Метка Puls
  PULSOUT PORTA.0, 150   'Вывод импульса длительностью 1,5мс на порт А.0
  PSUSEUS 20000          'Пауза 20 мс
GOTO Puls                'Возврат на метку Puls
Yuriy

Спасибо огромное, вроде смотрится просто, это уже радует. (ассемблер меня просто пугает).
Сейчас поищу книгу и буду пробовать. Надеюсь получится.

ubd

Я на этом языке написал программу реверсивного регулятора хода для автомоделей, и для судомоделей есть с раздраем. ШИМ формировал, аппаратным ШИМ-модулятором, есть не во всех процах, я использовал те процы где он есть.
Если заинтерисуешься помогу написать программу.

Yuriy

Да, думаю буду осваивать, сейчас немного полистал книгу, написано, что минимально возможная выдержка с кварцем 4 МГц - 24 мкс, уже приемлемо.
За помощью обращусь, только надо сначала мне почитать книгу, чтоб предметно о чем-то спрашивать. Еще раз спасибо большое. Все же надо осваивать программирование микросхем, уже не раз была необходимость. Не паять же на дискретных элементах.

Pav_13
Yuriy:

…(ассемблер меня просто пугает).

Преодолейте этот страх - не пожалеете!

У ассемблера PIC16F84 всего 35(!) команд… Для написания большинства программ вряд-ли потребуется даже половина из них… Бейсик не намного “интеллектуальнее” ассемблера - если логическое мышление позволяет писать на Бейсике, то на ассемблере справитесь без проблем… Я учился по циклу статей в “Радио” за 2001 год с №8 и далее…
А если уж учиться писать на языке высокого уровня - то лучше сразу на “С” - время не зря потрачено будет…

Yuriy

Кроме всего прочего, времени не хватает. Что-то сложное освоить хорошо, надо много времени потратить. Потому сначала и обратился к программе Realizer Gold, быстро разобрался для конкретной задачи, но правда все в пустую…

Aleksey_Gorelikov

А почему в пустую то? Если в ней программу написали, то берите получившийся хекс файл и в любой программатор. Делов то!

ubd

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

Используйте Proteus для отладки программ, очень удобно.

Я вот подсел на Бейсик с самого детства, ещё на ZX Spektrum программы писал, и сейчас узнал что есть для PICов Бейсик так попробовал, и не могу слезть, пересилить себя что бы AVR и СИ изучать. Если ставлю задачу, то решаю её на Бейсике, пока нет задачь для которых не хватило бы Бейсика. Иногда приходиться применять мощные и дорогие процы, в которых есть нужные мне аппаратные средства, когда как если писать на АСМе то можно обойтись любым дешёвым процом. Только есть разница, что на АСМе программу пришлось бы писать месяц, а на Бейсике максимум несколько дней. Это я для сравнения.
Если срочно нужно написать типа таймера, с выходом канального импульса, то проще на Бейсике, время займёт, максимум 1 час.

Yuriy
Aleksey_Gorelikov:

А почему в пустую то? Если в ней программу написали, то берите получившийся хекс файл и в любой программатор. Делов то!

Запрограммировал, таймер работает, вообще все работает но не правильно, длительность импульсов для регулятора меняется с дискретностью 1 мс и меньше не позволяет программа, а надо 100мкс (в начале писал)

ubd:

Я вот подсел на Бейсик с самого детства, ещё на ZX Spektrum программы писал.

Я тоже на нем тренировался, только не в детстве, а постарше.

ubd:

Если срочно нужно написать типа таймера, с выходом канального импульса, то проще на Бейсике, время займёт, максимум 1 час.

Может уделите мне часик? Хотя я так и не освою это дело. Или если у меня не получится к новому году, то уделите мне часик? Книгу начал читать, программу установил.

ubd

Может уделите мне часик?

Завтра попробую, набросать что ни будь.

Yuriy

В таком случае, на всякий случай выложу схемку, т.к. уже сделана печатная плата. Чтоб выводы попали в нужное место.
Кстати, а резисторы подтягивающие до 5В обязательны?

ubd

Кстати, а резисторы подтягивающие до 5В обязательны?

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

Pav_13
ubd:

…у этого нет

Есть!

Для Yuriy: На вход MCLR (4) припаяйте конденсатор на землю 0,1 мкФ… Правильнее будет…

Кстати, могу подарить идею… Тут Вам уже советовали вместо таймера сделать управление газом с ручки по изолированным кордам, но Вас это вроде не вдохновило по нежеланию применять изолированные корды… Предлагаю Вам сделать все-таки управление газом с ручки, но… по инфракрасному каналу - в ручке разместить излучатель в сторону модели, на модели ИК-приемник на соответствующем боку… Начинку можно “выковырять” из дешевой китайской игрушки… Поскольку излучатель и приемник при любых эволюциях модели всегда направлены друг на друга, управление должно быть устойчивым даже на улице…
Мне кажется, это будет удобнее таймера при сопоставимых материальных и трудозатратах…

ubd

Правильнее будет…

PICу это не нужно.

управление должно быть устойчивым даже на улице…

Не факт. В пасмурную погоду хорошо будет работать, а при ярком солнце будет глюк, т.к. у солнца очень широкий диапазон излучения, и игрушки на ИК управлении на солнце не работают, я проверял.
Хотя идея хорошая, если бы не солнце.

В общем вот набросал. На прогу действительно ушло 1 час 15 мин.
S1 - у меня в программе как кнопка без фиксации. Т.е. нажал, отжал пошло время и двиг работает. Опять нажал, отжал, остановилось время и двиг выключился.
Так же сделал плавное нарастание газа перед стартом таймера.
Единственно с выдержками времени может быть не точно, примерно +/- 1-2 сек.
В протеусе рабоатет с тормозами, по этому нужно в железе точно время проверять. В протеусе получается вместо 2 мин, где то 2,5мин. Видимо из-за работы виртуального осциллографа.

Таймер для кордовой электро.rar

Yuriy

Да, быстро Вы сделали. Спасибо огромное за помощь. Все-таки буду осваивать Бейсик, еще не раз пригодится.
Сегодня вечером попробую, что получилось.

Для Pav_13: насчет управления по ИК порту, мы уже обсуждали с руководителем кружка, что можно даже использовать простейшую аппаратуру р/у для управления каналом газа. Но хочет он таймер и все. Идея у него использовать еще для свободнолетающих таймерных моделей, только время у таймера другое будет и все.

Просмотрел программу, красиво то как…😃

Yuriy

Попробовал, все работает и все правильно работает, времена правильные. Ура!!!😃
Показалось слишком долгое нарастание газа, поэтому убрал цикл по А и вообще убрал эту переменную.
’ Плавное нарастание газа
FOR X = 0 TO 100
Y = 100 + X
PULSOUT OUT, Y
PAUSEUS 19000
IF Y = TROUTLE THEN GOTO PULS_OUT
NEXT X
Все очень понравилось, доступно, эффективно и есть книга на русском языке.
Еще раз Вам огромное спасибо и за программу и за то, что надоумили где мне дальше разбираться.😃
Теперь отдам таймер в кружек, пускай пробуют.😁