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

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

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

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

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

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

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

Выбираем схему 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 пользователей онлайн

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

  • Сообщения

    • Шота дохрена. Это если мультик может на килогерце. Обычно нет, предел 400 Гц.
    • Да, сначала был написан бутлодер для тини 24. Там нет выделенной памяти под бутлодер и заморочек с областями откуда можно записывать и перезаписывать флеш из программы, там все просто! Также там нет УАРТА, пришлось написать. Ну и самое главное: перезаписывай любые страницы флеш из любого места! В тини 24 под бутлодер ушло 48% памяти. В проекте технологи выделили слишком мало физического места под схему. Потом развел плату, оказалось, что места не так уж и мало. Потом выяснилось, что пинов впритык, и если будет дальнейшее расширение, их может не хватить. И после долгих (ну очень долгих) изысканий (цена, доступность, размеры) остановился на 88 (очень низкая цена, корпус чуть больше чем у 24, датчик температуры, а это важно, но не критически). Да, и сейчас все программируют на С и др. языках высокого уровня, что занимает очень (ну очень) много места, и чипы с небольшой памятью остаются не востребованы, и как следствие низкий спрос, и низкая цена!!! И при тупом переносе программы перезаписи страниц флеш программа не заработала... Ну и пошли изыскания, и я набрел на ВАШ проект, самый полный и законченный на то время. Нужно было выяснить чип который был у меня битый или я что-то упустил при программировании? (в бутлодерах я новичек) Недостаток 88 на сегодня, то что из пользовательской памяти нельзя перепрограммировать флеш, хотя страница стирается.   По поводу ВАШЕЙ программы: выяснилось, что при включенном фьюзе WDT в конфигурации, соединение не устанавливается, а в хелпе это не отражено. В некоторых ситуациях соединение можно восстановить лишь отключив / включив питание, сброс через ножку ресет не помагает. Будем копать дальше,... и глубже....!   Иногда при "установить соединение" выдается сообщение, "соединение не установлено", а на осциллографе виден ответ с чипа?
    • Сейчас по входу стоит керамика 0,1 мкФ + электролит 220 мкФ, иголок вроде нет, ну во всяком случае старичек С1-93 их не показывает.
    • Платы материнки и УВ пока в брак.  - Семён Семёныч... (с) Вы ничего не забыли, сэр? Как вы собрались регулировать УВ по уровню выходного сигнала??? Решение уже есть, пока в процессе. Вот так оно лучше работает.
    • Ну в идеале каптоновым скотчем как вам сказали,но можно обмотать чем угодно лижбе диалектриком было и хотябы немного высокотемпературное,я бы термо усадку взял,поидеи хорошо пойдет  Ещё видел где трансформатор медно алюминиевой жилой был на ампер 10 если не больше на вид аж,и там алюминиевая обмотка сечением пол сантиметра была замотана в бумагу пропитанную в воске,слоем миллиметр примерно эта изоляция была 
    • Всем привет. Собрал мх50, запустился с первого раза, когда делал замеры, соскочил щуп, спалил выходники и пред, заменил, все ок. Питание тор 250 ватт 30х2 выход, после выпрямителя 44В 20000мкф в плечо  увеличил входные емкости на оконечниках, добавил шунтирующую пленку  плата софт старта присутсвует цепь буше взял из ОМ2.7 ТП выставил 100мА добавлена термозащита на каждый канал( но как оказалось, с таким корпусом хрен перегреешь) АС kef q150 dac Aiyima a5 max получилось снять 81 ватт с канала при 8ом нагрузке (на фото самое точное измерение на левом мультиметре) без сигнала если прислонится к ас еле уловимое шипение  при наличии сигнала все ок, играет отлично, мне очень понравилось. в планах ОМ2.7
    • Уже 52 скачивания. Значит актуальна.
  • Похожий контент

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