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

Вопросы от начинающих по МК


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

1 час назад, Alexeyslav сказал:

Но тут есть ньюанс, операция с этой переменной не атомарна

:crazy: Алексей, это Вы о чем? Какая еще атомарность нужна для событий происходящих с периодом в СОТНИ ТЫСЯЧ машинных циклов? И как умудриться поменять указатель строго одновременно с вращением энкодера?

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

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

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

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

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

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

ISR(INT0_vect)//для atmega328 если появился сигнал на int0  PD2
{
	if (PINB&(1<<7))//то если на PB7 появилась 1 (крутим влево)
	{
		inst_volt++;
	}
	if (!(PINB&(1<<7)))//если на PB7 0 (крутим вправо)
	{
		inst_volt--;
	}
	_delay_ms(20);// антидребезг
	EIFR=(1<<INT0);//сбрасываем флаг прерывания
}
int main(void)
{
	unsigned int inst_volt=512;//установленное напряжение
	port_ini();
	lcd_ini();
	//ADC_ini();
	Enc_ini();
	sei();//глобально разрешаем прерывания
	while (1)
	{		
    lcd_poz(0);
    lcd_chisla(inst_volt);
    }
}

прописывая sei() перестает работать дисплей. почему?

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

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

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

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

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

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

В 27.04.2019 в 18:20, my504 сказал:

Какая еще атомарность нужна для событий происходящих с периодом в СОТНИ ТЫСЯЧ машинных циклов?

Она нужна независимо от количества циклов. Всегда существует шанс катастрофических разрушений если вы попадёте ровно в нужный момент. Вероятность этого события мала, но оно может произойти и вот вы крутите ручку напряжения, доводите до одной десятой вольта и тут БАЦ переменная принимает какое-то максимальное значение, всё сгорает к чертям... даже если аткое произойдёт раз в год, приятного мало. Тем такие ошибки и коварны.

Всё что имеет разменость больше байта, или делается не в один машинный цикл и осуществляется доступ с двух разных мест - требует очень аккуратного обращения, гарантирующего что в работу не уйдёт половина изменений. Вот возникнет прерывание в момент когда одну половину указателя поменяли, а вторую нет. Что будет хорошего? Да ничего... На большом процессоре спасают критические секции, для МК это уже тяжелая артилерия, есть методы обеспечить и попроще. Например, прерывание запрещать перед изменением указателя использующегося в прерывании. Причем во всех местах программы, иначе может выстрелить в самый неподходящий момент.

В 27.04.2019 в 18:20, my504 сказал:

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

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

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

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

Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

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

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

Вы вообще не о том. Прерывание не влияет на указатель. Прерывание ставит флаги. При входе в функцию передается флаг. Это атомарное действие. В функции флаг локален и выставление нового флага на процесс не влияет. 

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

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

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

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

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

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

Кто о чём, а голодный об обеде...

Конечно прерывание не влияет на указатель, это указатель влияет на работу прерывания. Верней нет, на работу не влияет а на результат выполнения влияет. И если что, я про вариант когда переменная, которой надо управлять, задаётся указателем извне.

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

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

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

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

Если уж очень хочется иметь 2 переменные для обработки энкодером, то почему бы их сразу 2 и не изменять ? А работать с той, которая нужна.
Хотя и это тоже какой-то костыль, такой-же как и с указателями. Хватит вполне одной локальной в модуле обработки энкодера, для абсолютно любых случаев. И читать её атомарно, когда это необходимо в любом потоке.
Не могу даже представить, для чего ТС'у это понадобилось. И он молчит как партизан по этому поводу...

 

3 часа назад, Дмитрий Мамедиев сказал:

прописывая sei() перестает работать дисплей. почему?

Отладка Вам даст ответ. Скорее всего, висите тупо где-то в прерывании.

 

Кстати, вот это :

3 часа назад, Дмитрий Мамедиев сказал:

если на PB7 появилась 1 (крутим влево)

если на PB7 0 (крутим вправо)

неправильное мнение.
На любом из 2-ух выводах энкодера, при любом направлении вращения, могут появляться любые уровни (1 или 0).

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

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

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

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

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

9 часов назад, Alexeyslav сказал:

Кто о чём, а голодный об обеде...

Конечно прерывание не влияет на указатель, это указатель влияет на работу прерывания. Верней нет, на работу не влияет а на результат выполнения влияет. И если что, я про вариант когда переменная, которой надо управлять, задаётся указателем извне.

Алексей... Голодный тут Вы. И похоже, ОЧЕНЬ голодный.

Прерывания таймера по которому вообще возможно что либо изменять энкодером и выбирать что изменять кнопкой происходят с интервалом примерно 5...10 мс. Если обработчик этого прерывания в результате анализа машины состояний энкодера  взвел флаг требования и определил направление счета  и/или  взвел флаг для смены указателя, то каким таким образом при передаче флагов в функцию вычисления реального параметра регулирования может быть нарушена атомарность?

И каким таким образом даже если указатель передать в эту функцию он может быть изменен в течении 5...10 мс? ЧЕМ ИЗМЕНЕН? Силой мысли? Или Господом Богом?

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

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

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

9 часов назад, Alex сказал:

Если уж очень хочется иметь 2 переменные для обработки энкодером, то почему бы их сразу 2 и не изменять ? А работать с той, которая нужна.

для начала бы сделать чтоб работало с одной переменной, а потом буду думать  как работать с двумя.

 

9 часов назад, Alex сказал:

Хватит вполне одной локальной в модуле обработки энкодера, для абсолютно любых случаев

это был бы идеальный вариант к нему и стремился

 

9 часов назад, Alex сказал:

На любом из 2-ух выводах энкодера, при любом направлении вращения, могут появляться любые уровни (1 или 0)

да, но если построено на внешних прерываниях и к примеру на нарастающем фронте, то согласно картинки если вправо то на нижнем графике будет 0, если влево будет 1

enc11.jpg

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

25 минут назад, Дмитрий Мамедиев сказал:

просто переходит как ни в чем не бывало.

Кто переходит ? Куда ?
Отладка - наимощнейший инструмент. С её помощью легко можно определить почему не работает кусок кода. Достаточно знать как работает код и пройтись по нему.
 

56 минут назад, Дмитрий Мамедиев сказал:

то согласно картинки если вправо то на нижнем графике будет 0, если влево будет 1

Неправда Ваша... Хоть в какую сторону крути его, на любом из выводов будут появляться либо 1 либо 0.

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

5 минут назад, Alex сказал:

Кто переходит ? Куда ?

шаг отладчика

 

6 минут назад, Alex сказал:

Хоть в какую сторону крути его, на любом из выводов будут появляться либо 1 либо 0.

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

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

Только что, Дмитрий Мамедиев сказал:

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

Просто анализом текущих сигналов определить вращение НЕВОЗМОЖНО. Вращение определяется по ПРЕДЫДУЩЕМУ и ТЕКУЩЕМУ значениям.

Таким образом анализируется ЧЕТЫРЕ БИТА. Два прошлых и два текущих. Они образуют всего 16 комбинаций. Их и анализируют. Все это я Вам выше написал. Читайте.

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

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

да мне  с вами тоже сложно. подожду ИМХО мне с ним как то легче.

1 минуту назад, my504 сказал:

Читайте

читал, но мы говорим о разных вещах. я о прерываниях а вы о сравнении

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

7 минут назад, Дмитрий Мамедиев сказал:

я о прерываниях

Без разницы на чём Вы ловите фронт. Без анализа состояния соседнего вывода, определить направление - невозможно !
Как Вы это не можете понять ?

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

Я, кажется, начал понимать.
Вот в этой картинке :
2019-04-29_12-05-46.png.a0359c320b0092b2888983f7f4a94ee3.png
Вы считаете, что верхний сигнал - это крутим в одну строну, а нижний - крутим в другую. Так ?

1 минуту назад, Дмитрий Мамедиев сказал:

да мое

А зачем Вы тогда спрашиваете, что это такое ? :)

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

13 минуты назад, Дмитрий Мамедиев сказал:

я о прерываниях а вы о сравнении

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

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

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

верхний от прерываний а нижний отслеживаем

1 минуту назад, my504 сказал:

кучу проблем с формированием данных для анализа

конкретней пожалуста

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

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

PS: Будем ждать IMXO. Он, похоже, единственный, кто его (и наоборот) понимает ... :)

PSPS: Кстати,  давно его что-то не было. Пасху, похоже, до сих пор отмечает :D

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

10 минут назад, Alex сказал:

Пасху, похоже, до сих пор отмечает :D

ему надо пивка холодного отправить

Изменено пользователем Дмитрий Мамедиев
Ссылка на комментарий
Поделиться на другие сайты

25 минут назад, Alex сказал:

Марк, да не хочет он по таймеру делать

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

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

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

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

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

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

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

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

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

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

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

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

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

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