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

crazz

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

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

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

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

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

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

:D

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

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

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

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

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

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

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

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

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

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

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

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

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

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

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 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 пользователей онлайн

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

  • Сообщения

    • Нахрена пропитывать обмотку? -Обмотка не гудит, гудит или плохо намотанное железо или сам сердечник излучает звук в результате действия магнитострикции, которая даёт о себе знать при увеличенном токе ХХ.  Этот ток для торов обычно выбирают в районе 5% от номинальной мощности.  Если железо не айс, тогда поднимают до 10%. То-есть,  для 200Вт тора мощность должна быть в районе 10 Вт или  45мА при 220вольтах.  Макс. 100мА.  
    • @Шпуляа что подключалось в качестве нагрузки на четырех-контактное реле ? нагрузка запитывалась от этого же БП?
    • Здравствуйте, подскажите пожалуйста рабочий вариант схемы на 555 1.Есть дежурный блок питания 12 v  2.Есть кнопка, очень желательно без фиксации  3.Два реле с 2 группами переключающих  Задача при включении подключить 220 через резистор ограничивающий ток,и через 1-2секунды за шунтировать на прямую нагрузку          
    • Не в прямом смысле просить, а в смысле никто не заинтересовался моей разработкой и никто меня о ней не спрашивал. Если, конечно, имеется ввиду применение импульсного блока питания с переключением выходного напряжения этого ИБП с помощью микроконтроллера PIC12F675. Многооборотные подстроечные резисторы у меня были в пакете только на 10 кОм, поэтому пришлось только их применять с параллельным подключением постоянных резисторов. Но это не критично - главное что всё настроил как мне нужно было. Как я понимаю - в основном предпочитают делать этот БП с достаточно тяжёлыми трансформаторами и большими радиаторами для силовых транзисторов.
    • Да,но я и хочу использовать телескопическую антенну примерно 1 метр в растянутом положении Та я сам не знаю что с тем приемником,при этом абсолютно все транзисторы кроме одного того что вы сказали не робочий с этой схемы которые менял и изначально ставил оказались рабочими,я вам также писал что я смог его настроить адекватно чтоб роботал но там номиналы были очень-очень не похожими на схемные Та темболее уже не надо я нашел схему ару хоть и не в отдельном виде но отделил вставил и сделал очень крутой приемник 2-в-2 на 6 транзисторах,который на 12 метров антенну ловит 15 станций без заземления достаточно громко на наушники,и на телескопическую антенну 4 станции при этом в нем есть АРУ пороговое более мение роботает но перегружается бывает все равно приемник при очень мощном входном сигнале,при этом я эго полностью не доделал (завтра до настрою и в паяю его в корпус экранированный) и буду начинать делать унч хорошое по такой же схеме как сегодня использовал только соберу хорошо все и как надо. Схема приемника пока только в голове,если хотите потом нарисую выложу если интересно  Грубо говоря получилась та7642 только намного стабильней и более лучшая в плане конструкции 
    • второй усилитель есть? тогда подать моно сигнал на два усилителя, АС направить друг на дружку (ну, 1 м.) если фаза правильная то громкость будет выше, чем фаза на одном будет отрицательная (перепутан + и -).
    • Есть у меня трансы, на которых написано, что первичка намотана на 220В, и что, работают без проблем и не гудят. Но они наши, не забугорные. Еще не могу понять предложений, типа, домотать, пропитать. Так первичку, он же написал, никто не трогал, снимали только вторичку. И железо не разматывали. Но трансформатор же работал, когда то с этой первичкой. Что с ним не так стало, после намотки вторички? Информация к размышлению: Штирлиц знал, что 2х2 будет 4, но он не знал, знает ли это Мюллер.
  • Похожий контент

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