БАНо

valera_o

внес изменения в обработчик по переполнению и в разделе переменных ввёл переменную flag_ovf и переменные период и период1 сделал 16-ти битными. Добавил условия в обработчики прерываний по каналам управления.

МаркАнтоний

Валерий, мысль понял, спасибо! Но у Вас нет обнуления этого флага, ведь стоит один раз произойти переполнеию и он постоянно будет приплюсовывать 255. Но всё равно спасибо за подсказку!

valera_o

да, забыл. его надо после приплюсовки очищать.

МаркАнтоний

Часы изысканий привели к следующему: Переполнение таймера происходит всего лишь на 1-4 единицы. Я считаю что этим можно пренебречь и в прерывании при переполнении таймера можно записывать 255 в наши регистры, а число что в счётном регистре просто не учитывать. Это сделал.
Но всё равно какаято ошибка есть. Когда стики на пульте не трогаю светодиоды живут своей жизнью. Почему не понятно, ведь когда в отладчике смотрю значения, они не меняются. Отладка в реальном времени с макетной платы.

Авто.rar

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

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

У меня была проблема с уровнем сигнала с приёмыша, попробуйте запитать макетку от ТРЁХ вольт и посмотрите на поведение светодиодов!!!

МаркАнтоний

С питанием не прокатило.
А своя жизнь это так: стик поворотников стоит в среднем положении, а светодиоды в это время моргают, причём моргаю как хотят, закономерности нет, сначала моргает один, потом может моргнуть второй а потом первый.
Я в тупике! Если обхожу условие подмены во внешнем перывании, то работает, а добавляю его всё ломается.

valera_o

Напомните “идеологию” управления. что и чем должно управлять? Почему два канала, нельзя ли одним каналом поворота? Судя по проге управление только от “период”, зачем второй канал?
И еще, ext0 и ext1 это метки или переменные? В одном месте они вписаны как метки, в другом это похоже на обнуление переменных.
Порог 130 надо уменьшить, в этом крайнем положении будет вываливаться из индикации поворота.

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

С питанием не прокатило.

Жаль, такая идея была 😃

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

причём моргаю как хотят,

И кто у Вас там моргает то непонятно??? 😃 😃

Хинт: У вас по второму прерыванию присваивается Период1, а не просто Период, поэтому канал второй НЕ обрабатывается.

МаркАнтоний

Рассказываю задумку. Делаю свет для авто. На авто у нас какой свет бывает? Габариты, фары, поворотники. Так вот, один канал у нас управляет поворотниками, а другой-крутилка включает габариты и свет.
Первая проблемма: при максимальном отклонении стика “поворотники” вправо (длительность импульса максимум) правый поворотник перестаёт моргать. Эту проблемму я поборол, но вылезла другая, а именно: Когда стик “поворотники” не трогаем, но в это время выкручиваем крутилку “свет” на максимум начинают моргать поворотники, причём и левый и правый, как хотят! Это то, что натворил Я!
А с последними изменениями в программе вообще ерунда творится, светодиоды поворотников моргаю постоянно, хотя стики в средних положениях.
Пока задействован только регистр Period потому что не получается наладить нормально прерывания, Period1 будет включать габариты и фары, но видимо до этого ещё очень далеко!

Я не пойму единственного, почему у меня одно прерывание может влиять на другое!?

V_Alex

При малом разрешении Вы не добьетесь нормальной работы света относительно базовых устройств (сервы поворота и регулятора хода). Попробуйте обойтись без таймера и будет Вам щастье.

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

При малом разрешении Вы не добьетесь нормальной работы света относительно базовых устройств (сервы поворота и регулятора хода). Попробуйте обойтись без таймера и будет Вам щастье.

Не понял вообще!😃

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

Чиво непонятно? Вот готовый девайс : rcmag.ru/manuf/62#product/9076 .
Без таймера 😃. Немного подумаете и у Вас получится.

А с чего Вы взяли что в данном девайсе не используется таймер? Вы помоему не особо понимаете о чём идёт речь! Как же по Вашему там измеряется длительность канального импульса?

Rula

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

valera_o

Убрал всё не относящееся к сигналам поворотов. В симе работает.
Уточните выходы на светодиоды.

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

А с чего Вы взяли что в данном девайсе не используется таймер? Вы помоему не особо понимаете о чём идёт речь! Как же по Вашему там измеряется длительность канального импульса?

Не, я точно понимаю, о чем идет речь 😂. Там моя прошивка 😃. Камешек - тини 12 с внешним резонатором. Обработка сигнала - в основном цикле.
Если у Вас используется тини 24 или 2313, можете перейти на 16-разрядный таймер 1. Это тоже вариант избавиться от лишних глюков по прерываниям и поднять точность обработки.
P.S. Очень рекомендую книжку : Джон Мортон, “Микроконтроллеры AVR. Вводный курс.” Там есть все, что нужно.

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

Убрал всё не относящееся к сигналам поворотов. В симе работает.
Уточните выходы на светодиоды.

Валерий, в том то и есть вся беда! В симе и у меня работает, а в железе глючит! К вечеру выложу видео, чтоб наглядно объяснить в чём проблемма. Спасибо за участие.

valera_o

Антон, с моей сегодняшней версией работает или тоже глючит?

V_Alex

Ребяты, я не злобствую. Просто на этих граблях (когда в симе работает, а на плате радуется своей богатой внутренней жизни), я как начинающий AVR-программер, натопталсо по самое небалуйся. Поэтому могу лишь присоединиться к рекомендации Rula - либо обработка в основном цикле, либо только на прeрываниях по Timer1.

valera_o

Уговорили, пусть будет на 16-битном таймере.
Теперь границы представлены более наглядными цифрами. 😉