5 885 сообщений в этой теме

Вектор точно тот, который нужен, PCINT2 прерывание по уровню группы PCINT23..16, короче, порта D.

Как я понял, прерывание PCINT возникает при любом изменении лог уровня на выбранных пинах. так оно ?

Пока что сделал так:

Обработчик:

ISR (PCINT2_vect)
{
	SMCR &=~(1<<SE);
	PCMSK2 =0x00;
	PCICR &=~(1<<PCIE2);
	
}
if (timersleep > 0x12C)
					{
						VFD_clear();
						VFD_write("SLEEP", 0x1B);
										
						SMCR |=(1<<SE);
						PCMSK2 |=(1<<PCINT23)|(1<<PCINT22)|(1<<PCINT21)|(1<<PCINT20);
						PCICR |=(1<<PCIE2);
						asm("sleep");
						timersleep=0x00;
					}

Непосредственно перед переходом в сон, указываю, какие пины могут вызвать прерывание, затем разрешаю прерывание PCINT.

А в обработчике сначала "выключаю" прерывание от ранее заданных пинов, затем запрет прерывания PCINT.

И как оказалось, работает.

Думал почему так, а не иначе, если не затруднит, объясните про это:

45 минут назад, Alexeyslav сказал:

Кстати, а прерывание установлено на фронты или на УРОВЕНЬ? Если установить на уровень - то прерывание будет вызываться постоянно пока удерживается уровень на порту.

Как я понял, это относится к прерываниям INT0 INT1 , по спадающему/нарастающему фронту либо по низкому уровню.

0

Поделиться сообщением


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

Это актуально и для прерывания PCINT. Скорей всего они у тебя настроены по уровню, отладка в железе через тестовый пин это бы подтвердила. Единственная разница в функциональности PCINT - не различаются фронт/спад прерывание по фронту реагирует как на переход 1-0 так и 0-1 а для INT0/1 можно выбрать на что реагировать - передний или задний фронт импульса.

У PCINT более простая схема детектора состояния - простой XOR между актуальным значением и значением на предыдущем такте, а схема INT0/1 использует триггеры ловя импульсы даже короче периода тактовых импульсов.

0

Поделиться сообщением


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

Вот поэтому и решил использовать PCINT, так как реагируют на любой переход.

сейчас еще перечитаю внимательней, но я никак не нашел регистра, в котором устанавливается как им реагировать, по уровню или по изменению уровня.

0

Поделиться сообщением


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

Странно, INT0/1 тоже настраиваются на любой перепад. таб.12-1 и 12-2 в даташите.

хммм, PCINT и правда не реагирует на уровни, только на изменения.

0

Поделиться сообщением


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

Да, INT1/0 4 настройки

58fca6fb2e948_.jpg.a82149dced6bc1ff941c446477691713.jpg

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

Еще примеров чужих не нашел, с применением PCINT, все делают INT0/1, и в обработчике отключают.

Пока оставлю так, раз работает.

У меня в программе так же есть прерывание по переполнению, и там происходит опрос энкодеров, энкодеры эти подключены к пинам, с которых щупается прерывание PCINT(то есть энкодер крутанул - мк из сна вышел), м.б. не поладили между собой 2 прерывания или дребезг контактов энкодера, хрен поймешь в общем.

0

Поделиться сообщением


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

Прерывания не могут "не ладить", они имеют приоритет.

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

А не хотите попробовать отключить группу выводов, на которых разрешено прерывание, оставив при этом и сон, и маску выводов без изменений. И сделать это сразу за командой sleep (перед обнулением таймера сна). В самом же обработчике не делать ничего ВООБЩЕ, только возврат (reti).

0

Поделиться сообщением


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

Вы правы, это уже мои "выдумки" от недостатка знаний.

Сон можно и не в обработчике, а вот отключать прерывания пробовал сразу за командой "sleep" и почему-то то это тоже вызывало нестабильную работу, прерывание вызывалось тогда, когда не надо, но еще надо проверить.

0

Поделиться сообщением


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

А Вам обязательно сон выключать?

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

0

Поделиться сообщением


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

Это так сказать для надежности, но получается, можно его и не отключать, по прерыванию мк из сна вышел, и до появления "sleep" спать не должен.

Так понимаю, говорим об этом регистре:

58fcea7f2ef35_2.thumb.jpg.b1a705e96ea5f2889e13b4f197253986.jpg

Очистить регистр уже после обработчика ?

вот, в даташите написано, флаг очищается когда прерывание выполнилось (или выполняется?), кроме того, флаг может быть очищен записью в него "1".

После выполнения, для очистки флагов писать туда 1 или 0 таки?

0

Поделиться сообщением


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

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

0

Поделиться сообщением


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

Ваша публикация должна быть проверена модератором

E
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

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

  Разрешено не более 75 смайлов.

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

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

Загрузка...

  • Сообщения

    • Очевидно вы имеете в виду скин-эффект ? Это относится к распространению ВЧ энергии и не имеет отношения к электронам. Именно изза высокой частоты энергия распространяется по поверхности проводника т.к. в этом случае поверхностНый слой для неё обладает более низким сопротивлением чем "борьба" с преодолением кристаллической решотки материала и с броуновским движением свободных электронов ...А вы не в курсе ?
      Именно поэтому медные детали контуров передатчиков серебрят , а в микроаппаратуре - золотят . А что за эффект близости ? ...предположу - это влияние на ВЧ контур  паразитной ёмкости. В результате изменяется добротность и как следствие -уменьшается амплитуда
      Происходит это изза "замыкания" рассеиваемой энергии через предметы находящиеся вблизи контура ...рука человека, неправильный расчёт экрана , взаимовлияние индуктивностей соседних каскадов...и т.д...   Откуда же мне её взять если ЭТО моя версия ! ;-) Если вы не согласны то изложите свою версию - подискутируем , возможно придём к конценсусу.   Есть такой анекдот типа....
      Звонок в дверь - дзынь-брынъ
      Открывают :
      -я твоя смерть !
      -ну и чё?
      -Да в общем то и всё!
      ;-)
    • Достался станочек   УБДН-1  Там дерево-токарное приспособление можно приспособить.  На нём двигатель       под 3000 оборотов.  Для токарного думаю многовато.   Регулятор оборотов такому двигателю возможно приспособить-изготовить ?  Или нет возможности?   
    • Сами подумайте - в случае сенсора палец придется всё время держать на весу плюс к тому неизбежны ложные, случайные нажатия. Дурацкая затея.
    • @Yurkin2015 Вот тут подробное описание работы схемы задержки. В оригинале статьи есть и видео работы собранного устройства (включение и выключение вентилятора)  Благодарю за комментарий. Но по Datasheet, всё правильно! Транзистор BD-876 p-n-p Реле времени.rar
    • Восточная мудрость, однако...
    • https://ru.aliexpress.com/item/New-Microsoft-Mouse-2-4Ghz-Flexional-Foldable-Wireless-Computer-Mouse-Folding-Arc-Touch-Mouse-fold-mouse/32807000153.html?s=p&ws_ab_test=searchweb0_0%2Csearchweb201602_4_10152_10065_10151_10068_10136_10137_10060_10138_10155_10062_10156_10154_10056_10055_10054_10059_10099_10103_10102_10096_10148_10147_10052_10053_10142_10107_10050_10051_10170_10084_10083_10080_10082_10081_10110_10111_10112_10113_10114_10181_10078_10079_10073_10070_10123_10127_10124_10125%2Csearchweb201603_2%2CppcSwitch_5_ppcChannel&btsid=a35a2d8d-64b8-4609-9669-84b75ab5e055 Не?
  • Похожие публикации

    • Автор: Евгений Гольцвeрт
      Куплю процессор MC908JL8CPE на ARDO TL105S модуль 5460079600-02 (45SX-85DX-85SX) 

      Также нужен процессор MC68HC705P6 зашитый прошивкой для ARDO A833. модуль DMPU 5460229301
    • Автор: aliv
      Здравствуйте.
      Имеется самопальное зажигание на ATmega328.
      Система отлично работает с генератором импульсов, однако при установке на автомобиль начались хаотические помехи в виде пропуска выходного сигнала.

       
      Для устранения помех пробовал:
      1. Пускать входящий сигнал через оптопару
      2. Использовать экранированные провода.
      3. Использовать металлический экран.
      4. Подключать систему от отдельного источника питания.
      В ходе экспериментов полностью отключил систему от автомобиля, подключил к генератору сигнала и запустил двигатель на родном зажигании - помехи отсутствовали,
      но стоило только подключить систему к общей массе автомобиля - помехи появились вновь.
      Подскажите, как избавиться от помех по массе.
    • Автор: Геннадий Быков
      Господа! Как-то в магазине видел рекламу каких-то сигарет и там в блок была вставлена маленькая схемка с одним диодом который мигал с периодичностью, ну наверно раз в минуту, и работал о-очень долго. Ищу как это сделать. Желательно с питанием от маленькой батарейки или аккумулятора. Не особо разбираюсь в программировании, но добросовестно и аккуратно паяю.  Поделитесь пожалуйста схемкой или ссылкой на такую. 
    • Автор: X-Fear
      Добрый день. Нужен переходник isp-jtag, у меня есть usbasp, нужно прошить флеш память 25 серии через jtag на тюнере.
    • Автор: Владимир Семионов
      Здравствуйте, форумчане! Подскажите пожалуйста как расставить биты конфигурации при прошивке контроллера в этом проекте http://cxem.net/sound/light/light19.php.
      Кто собирал данную схему? У кого заработало? Если можно, то скиньте рабочую прошивку и фото расставленных битов.