Счетчик через прерывания

Megawollt
Offline
Зарегистрирован: 06.12.2015

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

Есть круг с  9ью магнитами, 8 по окружности и еще один для нулевого положения. На это все реагируют два датчика Холла. Один считает, второй ловит ноль.

Скажите, насколько будет правилен такой код для данной конструкции:

volatile bool zero = 0;                
volatile byte counter=0;

void setup() {

pinMode(2, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
attachInterrupt(0,increase, FALLING);
attachInterrupt(1, zer, FALLING);
}

void increase(){
counter++;
zero = 0; 
}

void zer(){
zero = 1;
counter = 0;
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А зачем два раза

pinMode(2, INPUT_PULLUP); ???

Для надёжности?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

ЕвгенийП, видимо он хотел на 3 пин. да недоглядел :))

Megawollt
Offline
Зарегистрирован: 06.12.2015

dimax пишет:

ЕвгенийП, видимо он хотел на 3 пин. да недоглядел :))

Именно так

Megawollt
Offline
Зарегистрирован: 06.12.2015

Никто не знает?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Нет, никто. Вы ведь не объяснили задачу. "Один считает, другой ловит ноль". Как считает? Что считает? После 0 сбрасывает или дальше считает? Ловит 0 куда? Для чего? Что с ним (пойманным нулём) делает? У Вас в голове, возможно и есть ответы, но у нас нет. А без этого, кто ж знает подойдёт Ваше код или нет.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Megawollt пишет:

Один считает, второй ловит ноль.

третий складирует нули в ящики, которые подвозит на тележках четвёртый, который отвозит тележки с нулями на склад готовой продукции, где пятый принимает привезённое на хранение и записывает в амбарную книгу.

Megawollt
Offline
Зарегистрирован: 06.12.2015

Ноль это верхнее положение, начало.На нем 2 датчика сразу . Остальные магниты по кругу. При проходе датчик Холла выдаёт 0 и срабатывает прерывание.

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

Вопрос как этого избежать........

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Megawollt пишет:

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

Вопрос как этого избежать........

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

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Megawollt пишет:
Проблема в том, что при проходе магнита через датчик, переменная увеличивается не на один пункт, а иногда сразу на несколько.

Вопрос как этого избежать........

Вероятно пологие фронты - ставить шмигер.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Andy пишет:

Megawollt пишет:
Проблема в том, что при проходе магнита через датчик, переменная увеличивается не на один пункт, а иногда сразу на несколько.

Вопрос как этого избежать........

Вероятно пологие фронты - ставить шмигер.

встроенный же в датчик Холла.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Там не фронты, там дребезг, когда магнит на грани чувствительности датчика. 

ТС - бортесь с дребезгом.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

brokly пишет:

ТС - бортесь с дребезгом.

я запретил.

Megawollt
Offline
Зарегистрирован: 06.12.2015

Клапауций 234 пишет:

Megawollt пишет:

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

Вопрос как этого избежать........

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

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Megawollt пишет:

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

Вопрос как этого избежать........

Для начала нужно понять, почему так происходит.

Если "дребезг", то ФНЧ + триггер Шмитта.

Если люфты, немонотонное вращение и пр. - регулировать механику.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

andriano пишет:

Для начала нужно понять, почему так происходит.

сначала нужно убедиться, что у него не аналоговый датчик Холла.

триггер встроен в правильный датчик Холла и от дребезга не спасёт, ФНЧ - чай не 18-й век.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. Триггер не может быть встроен в датчик Холла по определению. Максимум - в модуль, включающий датчик Холла.

2. Ни датчик Холла, ни ФНЧ сами по себе от дребезга не спасают. Могут спасти (в некоторых случаях) только при совместном использовании.

3. Если у кого-то ФНЧ ассоциируются с XVIII веком - это его проблемы. (На всякий случай: как лично Вы расшифровываете аббревиатуру ФНЧ?)

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

andriano пишет:

1. Триггер не может быть встроен в датчик Холла по определению. Максимум - в модуль, включающий датчик Холла.

2. Ни датчик Холла, ни ФНЧ сами по себе от дребезга не спасают. Могут спасти (в некоторых случаях) только при совместном использовании.

3. Если у кого-то ФНЧ ассоциируются с XVIII веком - это его проблемы. (На всякий случай: как лично Вы расшифровываете аббревиатуру ФНЧ?)

1. та, да - всё так и есть...

датчики Холла с логическим выходом имеют встроенный триггер Шмитта для преобразования линейного сигнала и имеют только два состояния на выходе: высокий или низкий уровень.

2. алё, гараж - тебя зовут Рептилоид, а не Капитан Очевидность.

3. если кто-то бредит ФНЧ для борьбы с дребезгом на цифровой линии - это его личные проблемы.

Megawollt
Offline
Зарегистрирован: 06.12.2015

Датчик Холла SS543AT цифровой. Если честно, то я и не знал, что они бывают цифровые и аналоговые.
Сегодня мастера выточат колесо с магнитами, буду пробовать. До этого пробовал на макете

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Megawollt пишет:
Датчик Холла SS543AT цифровой.

быть такого не может по определению!(с)Рептилоид

Megawollt
Offline
Зарегистрирован: 06.12.2015

Да, тролль Вы знатный :)

А есть ли смысл использовать какой нибудь код защиты, типа как для кнопки? Или для Холла и прерывания не имеет смысла?

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Megawollt пишет:

А есть ли смысл использовать какой нибудь код защиты, типа как для кнопки? Или для Холла и прерывания не имеет смысла?

а, ты просто попробуй подключить свой датчик Холла к пину кнопки класс титановый велосипед для тактовой кнопки, static const byte bounce_  =   50; // длительность отслеживания дребезга подбери, что бы не пропускало твои магниты, но не двоило. 

и, всё.

Megawollt
Offline
Зарегистрирован: 06.12.2015

Спасибо, попробую