БАНо

Catsw
МаркАнтоний:

Андрей, а схема правильно собрана? Может там ошибка? Вход сигнала должен быть на 13 ножке, это порт А0 программа по нему смотрит.

Конечно… Подозреваю, что что то не так с самим сигналом:( Изучаю тут на досуге хелп по АБ, разбираюсь в таймере - в симуляторе он работает идеально - научился заданное кол-во тактов давать на камень, при длительности 1мс - отключает всё, при 2мс - включает, так что часть версий отпала.
Вывод есс-но 13й, я выводы уже наперечёт помню, даже в одной попытке его ставил на А1 (12) - и подал сигнал туда - то же не помогло.

Но сама прошивка на изменение сигнала отлично реагирует 😦 Замыкаю с самого начала на ноль и жму пуск - начинает мигать (при старте регистры то нулевые, и срабатывает условие 😃 ) Так что до первой единицы прерывание на запишет высокие “выключающие” значения в Р2 (Период).
Так вот, мигает, как только убираю перемычку продолжает мигать ещё секунд 20…30 (видно до первой помехи), или сразу выключается, если вывод коснуться рукой!
А вот назад не включает, по крайней мере от импульсов сервотестера и даже приёмника - не поленился посмотреть осциллографом изменение длинны импульса именно на этот раз от приёмника(ну там что бы канал или микшер не был перепутан)
Так что только на физику теперь думаю…

МаркАнтоний:

Андрей, давай лучше выкладывай свою программу, будем её смотреть.

Моя благодарность не будет иметь границ!!! 😃

BANO_FULL.rar

Иван

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

Catsw

С ума сойду с этим БАНО 😃 Изменил программу - добавил в Маин проверку Период = 0 и зажигание светодиода на одной из ног - горит! Пишу любое значение кроме 0 - гаснет. Т.е. период всегда равен нулю? Что за ерунда - ума не приложу 😦 Проверка проводилось при подключенном серво тестере во всём его диапазоне…

valera_o

пролистал прогу в симе. Работает. Единственно, что в симе подключил внешний генератор на ногу А0. проверить в железе не могу. Давно не покупал тини24, одно время пропали было, перешел на тини25\85. Длительность вх. импульлсов точно в диапазоне 1-2мс?

Catsw
valera_o:

Длительность вх. импульлсов точно в диапазоне 1-2мс?

Если верить сервотестеру - то да, для гарантии пробовал от приёмника - то же самое 😦

Я не понимаю, в симе всё и у меня отлично - в реале - как будто она получает постоянные прерывания - сама программа (маин) практически не выполняется, если не с начала поставить условие - оно не срабатывает, как будто прерывание перехватило на себя, а потом опять в начало МАИН отдало. Но это же какую частоту надо подать, что бы пару десятков тактов не успевали отработать???

valera_o

Подтянул ногу А0 к +5В и переставил условие фильтрации длительности импульса снизу. Некритично, но так понятнее, для меня. 😉 Может из-за этого. пока ничего больше не придумалось.

Catsw
valera_o:

Подтянул ногу А0 к +5В

Внутренним Пулл-АП? Или на плате изменить?

У меня на плате 5,1кОм на землю и 1кОм на сигнал (на 13й ноге)…

Catsw
valera_o:

я в проге назначил “подтяжку”.

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

Продолжил… Всё то же самое, для наглядности поставил на хвост (таил) светодиод, при ЛЮБОМ положении сервотестера он горит, а это возможно только при “период” =0 …

Demo_BANO.rar

МаркАнтоний
valera_o:

Подтянул ногу А0 к +5В и переставил условие фильтрации длительности импульса снизу. Некритично, но так понятнее, для меня. 😉 Может из-за этого. пока ничего больше не придумалось.

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

Андрей, а попробуте поизменять резисторы которые стоят по входу.

Catsw
МаркАнтоний:

Андрей, а попробуте поизменять резисторы которые стоят по входу.

Пробовал вообще без них, форму сигнала контролирую осциллографом периодически - сигнал чистый и красивый, только размах смущает - 2вольта. На приёмнике чуть больше - но всё равно БАНО не работает, а серва (со второго выхода сервотестера - подключаю иногда) - работает отлично).
Если не трудно - в предыдущем сообщении выложил “демо” - гляньте на начало “маин”, пожалуйста…

А если перед записью нуля в порт хвоста поставить del_25ms - то до зажигания светодиода не доходит, что то сбрасывает программу в начало - а это только прерывание может быть. ПРИЧЁМ НЕ загорается даже при отсутствии импульсов на 13й ноге - с отключённым сервотестером… Могут там какие то другие прерывания формироваться? Почему оно сбрасывает на начало МАИН в кристалле, а в симуляторе отлично работает?

МаркАнтоний

Странно. В протеусе тоже работает.
Длинна канального импульса меняется в свойствах генератора. 1,2мс = 6% от 50Гц (20мс) 2,2мс = 11%

В начале МАИН всё вроде нормально, ничего криминального не вижу.

Catsw:

сигнал чистый и красивый, только размах смущает - 2вольта.

2 вольта, это очень мало. Кристал просто не понимает, что происходит изменение уровня. Посмотрите в даташитах какой должен быть минимальный уровень чтоб контролер понимал его.

Протеус.rar

Catsw
МаркАнтоний:

2 вольта, это очень мало. Кристал просто не понимает, что происходит изменение уровня. Посмотрите в даташитах какой должен быть минимальный уровень чтоб контролер понимал его.

Да в том то и дело, что и уровень поднимал , и даташит изучал… Ещё раз попробую поиграться с уровнем, но дело то не в этом - прерывания то идут - а вот откуда - ХЗ. Как будто ещё один таймер работает… ХЗ, копаю дальше…

МаркАнтоний

Андрей, я вот обратил внимание: Когда создаёшь настройщик прерываний, то справа ВСЕ квадратики отмечены галочками, а в вашем проекте одной галочки нет (PCMSK1) может она нужна? Не пробовали? На работу в протеусе она не влияет.

Catsw
МаркАнтоний:

проекте одной галочки нет (PCMSK1) может она нужна? Не пробовали? На работу в протеусе она не влияет.

Оо!!! Идея!!! Сейчас подкинул транзистор с резистором - поднялись уровни - “0” - 0,4в, “1” 4,2в, не помогло… Сейчас буду галочку ставить! Ведь всё 100 раз проверено, а вот в этих нюансах я ещё слаб 😦

Ставил/убирал галочку, менял амплитуду на входе - не выходит каменная чаша 😦 По прежнему Период = 0 и постоянное срабатывание какого то прерывания…

А если сверху МАИН - где все порты в "1"цу переводятся дописать 200 -> Period то всё мигает по всем ногам идеально, крутясь в основном цикле (маин) Как только хочешь отдать Период таймеру - в симуляторе всё отлично - в реале либо Период = 0, либо что то постоянно срабатывает, вне зависимости от наличия/отсутствия сигнала на 13й ноге…

МаркАнтоний

Андрей, попробуйте дописать перед 1->I строчку ^Period (обнуление регистра), потом ещё вставте строчку r16 -> (запись регистра в стек) после заголовка Pin_Change_0 и строчку -> r16 перед строкой выхода из прерывания reti. Народ пишет что из-за прерываний теряются данные из рабочего регистра. Может поможет. А так ещё чего нибудь думаю.

А ещё, если с r16 не получится, попробуй изменить на r17. Я смотрю он тоже там используется при сравнении.

Catsw

Дописал - ничего… ИМХО какая то не правильная интерпретация АБ, т.е. он то считает всё правильно, а вот при работе в кристалле что то не так идёт. Я не нашёл а АБ никакого средства мониторинга в режиме запуска с кристаллом, или это я размечтался??? 😃

valera_o

“Фильтрация” - это два условия “меньше 170” и “больше 250”, отсекает импульсы длительностью не вписывающейся в “ворота” 1-2мс.

Catsw
valera_o:

“Фильтрация” - это два условия “меньше 170” и “больше 250”, отсекает импульсы длительностью не вписывающейся в “ворота” 1-2мс.

А насколько правильно таймер считает? Эти условия отсекают уже от результата, выданного таймером. Насколько я понял его логику ( а вот её я как раз не до конца понял ) - то первый “таймер” - запускает инкрементирование при появлении лог 1, а второй (нижний) его останавливает, когда сработает прерывание на изменение на выводе, и условие скажет, что там 0. А как там с частотой? Вроде как он переполняется как раз при 2+ мс или я не правильно понял его делители? Может он переполняется раньше, чем надо? Или наоборот… Ведь вся остальная программа и задержи для мигания, и переходы - работает отлично…

valera_o

Таймер “щелкает” на единицу каждые 8мкс. По прерыванию, если на ноге “1”, то таймер обнуляется и начинается счет. Если по прерыванию на ноге “0”, то запоминается насчитаное таймером значение, таймер обнуляется и в дальнейшем оценивается записанное значение. Если оно больше 170(*8 = 1360мкс) и меньше 250(*8 = 2000мкс), то проделываются какие-то действия, есл вне этого диапазона, то программа переходит на начало. Типа так задумывалось.

МаркАнтоний
Catsw:

Я не нашёл а АБ никакого средства мониторинга в режиме запуска с кристаллом, или это я размечтался???

Нет, это Вы невнимательно читали МАНУАЛ. Страница 37 глава Отладка алгоритма на кристалле (мониторная отладка)

Catsw:

Насколько я понял его логику ( а вот её я как раз не до конца понял ) - то первый “таймер” - запускает инкрементирование при появлении лог 1, а второй (нижний) его останавливает, когда сработает прерывание на изменение на выводе, и условие скажет, что там 0. А как там с частотой? Вроде как он переполняется как раз при 2+ мс или я не правильно понял его делители? Может он переполняется раньше, чем надо? Или наоборот…

Принцип работы таков: При появлении 1 запускается таймер и считает он до появлении 0 максимум что он может насчитать это 2,048 мс, а число что записано в счётчике таймера максимум 256, дальше произойдёт обнуление. В принципе нам этого в полне достаточно. Так что всё там должно работать.