Перейти к содержанию

crazz

Рекомендуемые сообщения

Блин, я уже набросал почти всю прогу, как только отлаживать стал в Мплаб, так опрос кнопки не срабатывает в прерывании хоть тресни.

Казалось бы все просто, прерывание каждые 65мс, в нем опрашиваем кнопку, запоминаем если нажата и декремнетируем .153(10сек)выходим

Потом основнои цикл , устанавливаем.153 взводим таимер, подготовительные операции.Проверяем регистр, на который повлияла кнопка, если есть изменение( +1), то смотрим что было до этого: охрана или станд бай, если охрана то снимаем, если станд бай, то ставим на охрану.и после 10 сек смотрим на датчик движения.

Врубитесь наконец в простую мысль.

Нажатие на кнопку НЕ ОПРЕДЕЛЯЕТСЯ В ПРЕРЫВАНИИ

:D

Не могу никак, наверно уже завтра.

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

Вот уже и запутались в прерываниях ... ничего в прерывании не надо проверять. В цикле уже проверяем произошло ли прерывание и только в этом случае проверяем состояние кнопки, если нажата - переходим на метку другого режима(сняли с охраны), если счетчик времени(тот что 10 сек отсчитывает) досчитал до конца, это означает что кнопка не была нажата - переходим на метку "сигнал"...

Впрочем, тут надо подумать, ведь подавлять дребезг не нужно - тогда кнопку можно проверять сразу в бесконечном цикле, но конечно лучше бы реагировать на нажатие кнопки только если она нажата 2-3 проверки подряд(по 65мс), это исключит такую вероятность как случайное срабатывание кнопки от ЭМИ.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Вот уже и запутались в прерываниях ...

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

Вы предлагаете ему и дальше не знать?

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Сначала, нужно разработать алгоритм в виде блок-схем, а уж потом делать программу.

С этим трудно не согласиться... :)

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Вы опять о своем, а я все пытаюсь понять вчерашнюю мысль, которая сразила меня наповал. Как не проверять кнопку в прерывании :lol: ???

Можете не отвечать пока я перевариваю информацию почерпаную за три дня)))

пытаюсь составить более разумную блок схему.

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

Давайте представим себе картину на бытовом уровне.

Сидите Вы в кресле, читаете интересную книгу и пытаетесь не пропустить начало фильма по ТВ.

Для этого Вы настроили некий таймер на звонки каждые 2 минуты. Таймер себе тикает и гудит в установленное время, а Вы, услышав таймер, поднимаете голову на мгновение и проверяете не начался ли фильм(звук выключен ибо мешает читать).

Вот таймер - это реальное время - только в прерываниях.

А голову Вы можете поднять и чуть позже, чуть раньше после сигнала. Это режим опроса. У вас своя какая то работа (чтение), но слух при чтении не выключен (периодически с частотой "чтения" проверяет звук)... Вот это называется ПРОГРАММНЫЙ цикл. Он к прерываниям отношения не имеет.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Спасибо ,Марк, только закончил рисовать блок схемку. Готов поделиться, но надо оформлять в каком-то формате, а то мои каляки никто не разберет))

вроде поверхостно получилось, кое что лишнее и может чего-то не хватает. Мне кажется я именно так и "поднимаю голову" в этои схеме.))

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

Ну вот на ваш суд :) представляю.

Только сильно не пинайте.

XgwMJ.jpg

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

Останется досчитать задержки от прерываний для реализации сигнала, вызова ( нажатие на кнопку телефона)

Изменено пользователем Andrey_Ch8

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

Так трудно понять написанное.

Есть стандартные УГО (условные графические изображения) блоков в блок схемах. В том числе и блок-схемах алгоритмов.

Блоки условий обозначают как ромб:

post-35709-036831200 1285674672_thumb.jpg

А остальные блоки как прямоугольники.

Стрелки-связи выходят из блоков. Входить в блок может ТОЛЬКО ОДНА СВЯЗЬ. Поэтому если на вход блока выходят несколько стрелок, то они соединяются до блока в одну стрелку-связь и она уже входит в блок.

Перерисуйте пожалуйста.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

wC3dw.jpg

Охрана сигнал, там-же

goto start

end

Изменено пользователем Andrey_Ch8

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

Как поставить точку останова на то событие, когда TMR0 переполняется, в Мплаб есть Complex Breakpoints- add breakpoints- data memory- выбираю TMR0- запись специфического значения- FE (.254) или FF. Но таимер не останавливается точка не срабатывает.

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

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

ЗЫ. Блок схему разберу позже. Пока занят.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Хотел посмотреть откуда пришли в прерывание, потому и ставил 254 или 255, чтоб вручном режиме досчитать до 00000000 и посмотреть в каком месте произошло прерывание, хотя это не так важно.

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

Что бы увидеть откуда вошли в прерывание, нужно из него выйти. Попадете как раз на следующую за выходом команду.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

проблемка, В прерывании необходимо сбросить флаг переполнения таимера, а в основном цикле мне необходимо проверить было ли переполнение, чтоб проверить кнопку каждые 65мс.

Я смотрел на флаг, естевственно он был опушен, до кнопки так и не дошла программа.:)

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

Для проверки было ли переполнение, флаг прерывания НЕ ГОДИТСЯ.

Для этого нужно заводить СПЕЦИАЛЬНЫЙ программный флаг.

В качестве него может служить переменная задержки равная 1.

После первого же прерывания она будет 0.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

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

В алгоритме, что указан на блок-схеме есть существенный изъян, а именно проверка состояния кнопки. Нужно проверять не состояние кнопки, а её переход из опущено в нажато. Иначе, когда вы нажмете кнопку в режиме охраны, программа отработает на начало - будет режим снятие с охраны, и тут же через 56мс проверка нажатия кнопки и опять срабатывание - схема станет в режим охраны. Ведь вы не будете гадать момент и держать кнопку меньше чем 56мс? По хорошему, нажатие кнопки необходимо запоминать с предыдущей проверки и сравнивать с текущим значением и только когда текущее значение = нажато, а прошлое - отпущено только тогда считать что кнопка нажата. И подтвердить этот факт коротким сигналом.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

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

Это как??? Не понял...:blink:

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Мда, автоматически он не сбрасывается, но сбросить можно. Даже если прерывания запрещены, этот бит T0IF устанавливается при переполнении таймера. Считывая его состояние можно узнать произошло ли переполнение с прошлой проверки и сбросить этот признак.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

По хорошему, нажатие кнопки необходимо запоминать с предыдущей проверки и сравнивать с текущим значением и только когда текущее значение = нажато, а прошлое - отпущено только тогда считать что кнопка нажата. И подтвердить этот факт коротким сигналом.

Можно подробнее о запоминании состояний, кнопки.

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

Вот тут этот вопрос про кнопку подробно рассмотрен, правда на Си, но суть уловить можно: http://forum.cxem.net/index.php?showtopic=57524&pid=710913&st=60entry710913

Будьте проще и люди к вам потянутся.

Ссылка на комментарий
Поделиться на другие сайты

Там какой-то странный пример... не очень очевидный. Вобщем, что надо?

1) записать текущее состояние порта в 0-й бит переменной.

2) сделать переменной AND 0x03

3) Проверить, если переменная = 0 - отпущена(постоянно), 1 - нажатие(момент), 2 - отпускание(момент), 3 - нажата(постоянно). Выполнить необходимое действие.

4) Cдвинуть переменную влево(в сторону старшего бита).

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Обычно я делаю примерно так:

//--------Чтение состояния линии
void city_line_read(flag_tmp* fl_tmp)
{
static uchar8 key_acc; //переменная для хранения послед. состояний кнопки

key_acc <<=1; // Сдвигаем аккумулятор влево на 1 бит
key_acc |= !(CITY_LINE_PIN); // читаем состояние ножки и добавляем новое значение к аккумулятору

switch(key_acc)
{
case 0:
fl_tmp->city_line_state=ZERO;
break;

case 0xFF:
fl_tmp->city_line_state=ONE;
break;

default://дребезг
fl_tmp->city_line_state=RANDOM;
break;

}

}

Вариант использования:

if(fl.city_line_police)
{ //если разрешено чтение линии
city_line_read(&fl_tmp); //читаем состояние линии
switch(fl_tmp.city_line_state)  //анализируем состояние
   {
   case ZERO:
   if(fl_tmp.city_line_last)count.city_line_front++;
   fl_tmp.city_line_last=0;
   break;

   case ONE:
   if(!fl_tmp.city_line_last)count.city_line_front++;
   fl_tmp.city_line_last=1;
   break;

   case RANDOM:

   break;

   default:
   break;


   }
//...
}

Тут и антидребезг, и анализ предыдущего состояния. Все довольно просто и прозрачно. Флаг fl.city_line_police можно выставлять и в прерывании. Либо другим арбитром.. На асм, думаю, нетрудно перевести...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Там какой-то странный пример... не очень очевидный. Вобщем, что надо?

1) записать текущее состояние порта в 0-й бит переменной.

2) сделать переменной AND 0x03

3) Проверить, если переменная = 0 - отпущена(постоянно), 1 - нажатие(момент), 2 - отпускание(момент), 3 - нажата(постоянно). Выполнить необходимое действие.

4) Cдвинуть переменную влево(в сторону старшего бита).

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

Да кстати там не один пример.

Goodefine

ИМХО, зачем такие сложности разводить ?

Антидребезг можно обычным циклом сделать.

//блок инициализации переменных
char flag = 0;
int i;
char tmp = GPIO2;
//основной цикл программы
if (GPIO2 != tmp ) {for (i=0; i <= 16; i++ );} //антидребезг
if (GPIO2 != tmp ) { flag++; tmp = GPIO2; } //обработка нажатия отжатия.
if (flag >= 2 ) {  flag = 0; funcia ();}

Изменено пользователем a_sergeevich

Будьте проще и люди к вам потянутся.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...