Супрессор защищает от выбросов. Причем довольно неплохо.
А про вилочки диодные я и говорю. Правда еще вопрос, какие быстрее — у HER-ов как правило емкость перехода меньше на порядки.
В своей девайсине у меня стоят Шотки из БП-шников компьютерных — что было под рукой.
Код указанный выше. И в нем есть очень неявная ошибка.
Задача кода — устанавливать выход в единицу по фронту сигнала А, а сбрасывать — по фронту сигнала Б.
Два «независимых» условия, каждое смотрит текущее и предыдущее состояния и в стучае фронта — делает свое дело.
Вот только если сначала появляется фронт А, а потом Б — все работает как надо (что идеально работает как раз с упомянутой кнопкой).
Но вот если крутить наоборот, т.е. сначала Б, потом А, то операция (EncPortData[1]>>1) портит данные. Именно этим меня утром и осенило :) Попытался найти подобный случай в Макконнелле(Совершенный код), но нашел только приведенную выше цитату на первой же странице результатов поиска :)
Ложась спать, меня вдруг покоробило «Но я же видел Правильные осциллограммы!»
Утром я буквально вскочил за пол часа до будильника с пониманием того, где закралась проблема. Разумеется, состояние энкодера выводится на семисегментник.
Считывается состояние так:
EncPortData[1]=(ENCODERINPORT>>5)&0x03;//прочли сырое значение
Выводится это состояние так:
PORTC&=~0x30; PORTC|=(EncPortData[1]<<4);
А между ними код, подавляющий дребезг контактов. К слову сказать работающий без сбоев для какой-то там кнопки, где-то на реальной железке. Вчера я его не смог приладить к энкодеру, догадайтесь почему. Код фиксирует фронты по друм линиям. По фронту одной линии сетит, другой — ресетит.
if ((EncPortData[1])&0x01 && !(EncPortData[0])&0x01)//нарастающий фронт по А!
if ((EncPortData[1]>>1) & 0x01 && !(EncPortData[0]>>1) & 0x01)//нарастающий фронт по B!
Вопрос знатокам — почему код правильно отрабатывает свое предназначение при вращении энкодера в одну сторону и взрывает мозг в другую?
В одну сторону крутишь, выдает последовательность 0/3
в другую сторону крутишь, выдает последовательность 1/2
Тут, правда, с определением направления вращения еще проще — XOR(a,b) и делов.
Взял с полки непаянный — та же хрень.
Два вопроса:
Первый — почему такая схема, с учетом самоблокировки не может сама вырубить генератор?
И второй вопрос, вытекающий из первого — допустим, неплохо бы и подождать некоторое время после повторного включения сети, что помешало использовать реле времени? Все равно ж релюшку пришлось покупать :)
А подобную И-логику я реализовывал в переносной сигнализации.
Кстати есть отличная книга по построению релейной логики:
Юрасов А.Н. Теория построения реленых схем(1962г.). называется.
Несмотря на свой полувековой возраст данные в ней не устарели :)
Я тут игрался с энкодером стоящим на плате — там механика, так только промежуточная система Set/Reset спасла от дребезга. Но там и не надо каждый фронт следить.
Ну, по первому тут главное код Грея чтоб выдавался. В противном случае любая логика ругаться начнет.
У конкретно того энкодера, который в кадре паспортный выход «открытый коллектор», но бывают и комплементарный и дифференциальный выходы.
Ну и сам энкодер отличается точностью выходного сигнала:
Да, такой подход накладывает определенные ограничения на программиста и программу. Но ведь часто требуется опросить те же кнопки, или датчики.
Вообще, суть именно массива указателей на функции изначально была написана как раз для обработчика кнопок.
Когда при запуске приложения, оно пишет свой/свои обработчик(и) кнопок в массив и тот спокойно выполняется.Хитрость заключалась, например, в том, что в менюОС2 появились фоновые приложения, которые настраивали под себя, например, только одну кнопку, при этом мы спокойно гуляем где были. Но об этом в другой статье :)
Обмениваться с openSCADA пакетами, управляя при этом объектом с постоянной времени в единицы и десятки секунд вполне хватает. Тут хватает.
Вот насколько быстро это вообе можно делать, а самое главное — как, об этом и будет моя предновогодняя статья)
Кстати почему именно этот МК, т.е. 1280-й. Он самый мощный в линейке Мег. и 2560-й, с чуть большей памятью.
Очень не понял фразу «данный МК не умеет». Что он не умеет? По UART работать? по SPI с Ethernet дружить? На другой частоте до 20МГц завестись?
Я не ярый фанат AVR. Главное что в текущих приложениях мне его хватает. Плата проста для старта в первую очередь, во вторую — удобна для работы, когда все под рукой. Уверен, если на плате будет (а на ней будет) STM32, вы и сами заинтересуетесь платой.
Кстати отличная идея, надо создать установку для проведения испытаний на устойчивость к статическим разрядам.
А если взять запоминающий осциллограф…
По блогу, спасибо, в работе материал по SDK под AVR Stduio — новая менюОС не захотела под ним сразу заводиться.
По SEO. Рейтинг занижается у плагиатчиков. И у сайтов, использующих перекрестные ссылки.
Для сайта, с копипастой статьи и указанием оригинала грозит лишь оказаться ниже исходного сайта.
И для серьезного «бана в гугле», сайт должен почти целиком из копипасты состоять
А про вилочки диодные я и говорю. Правда еще вопрос, какие быстрее — у HER-ов как правило емкость перехода меньше на порядки.
В своей девайсине у меня стоят Шотки из БП-шников компьютерных — что было под рукой.
Спасибо тебе добрый человек.
Задача кода — устанавливать выход в единицу по фронту сигнала А, а сбрасывать — по фронту сигнала Б.
Два «независимых» условия, каждое смотрит текущее и предыдущее состояния и в стучае фронта — делает свое дело.
Вот только если сначала появляется фронт А, а потом Б — все работает как надо (что идеально работает как раз с упомянутой кнопкой).
Но вот если крутить наоборот, т.е. сначала Б, потом А, то операция (EncPortData[1]>>1) портит данные. Именно этим меня утром и осенило :) Попытался найти подобный случай в Макконнелле(Совершенный код), но нашел только приведенную выше цитату на первой же странице результатов поиска :)
Ложась спать, меня вдруг покоробило «Но я же видел Правильные осциллограммы!»
Утром я буквально вскочил за пол часа до будильника с пониманием того, где закралась проблема. Разумеется, состояние энкодера выводится на семисегментник.
Считывается состояние так:
Выводится это состояние так:
А между ними код, подавляющий дребезг контактов. К слову сказать работающий без сбоев для какой-то там кнопки, где-то на реальной железке. Вчера я его не смог приладить к энкодеру, догадайтесь почему. Код фиксирует фронты по друм линиям. По фронту одной линии сетит, другой — ресетит.
Вопрос знатокам — почему код правильно отрабатывает свое предназначение при вращении энкодера в одну сторону и взрывает мозг в другую?
в другую сторону крутишь, выдает последовательность 1/2
Тут, правда, с определением направления вращения еще проще — XOR(a,b) и делов.
Взял с полки непаянный — та же хрень.
Посему либо Холл, либо оптика.
А защита от дребезга… Расскажу через пару часов про нее.
Первый — почему такая схема, с учетом самоблокировки не может сама вырубить генератор?
И второй вопрос, вытекающий из первого — допустим, неплохо бы и подождать некоторое время после повторного включения сети, что помешало использовать реле времени? Все равно ж релюшку пришлось покупать :)
Кароч, ставь микроконтроллер, полюбому понадобится :)
А подобную И-логику я реализовывал в переносной сигнализации.
Кстати есть отличная книга по построению релейной логики:
Юрасов А.Н. Теория построения реленых схем(1962г.). называется.
Несмотря на свой полувековой возраст данные в ней не устарели :)
Я тут игрался с энкодером стоящим на плате — там механика, так только промежуточная система Set/Reset спасла от дребезга. Но там и не надо каждый фронт следить.
У конкретно того энкодера, который в кадре паспортный выход «открытый коллектор», но бывают и комплементарный и дифференциальный выходы.
Ну и сам энкодер отличается точностью выходного сигнала:
Вообще, суть именно массива указателей на функции изначально была написана как раз для обработчика кнопок.
Когда при запуске приложения, оно пишет свой/свои обработчик(и) кнопок в массив и тот спокойно выполняется.Хитрость заключалась, например, в том, что в менюОС2 появились фоновые приложения, которые настраивали под себя, например, только одну кнопку, при этом мы спокойно гуляем где были. Но об этом в другой статье :)
Добавил архив с библиотекой.
Вот насколько быстро это вообе можно делать, а самое главное — как, об этом и будет моя предновогодняя статья)
Кстати почему именно этот МК, т.е. 1280-й. Он самый мощный в линейке Мег. и 2560-й, с чуть большей памятью.
Я не ярый фанат AVR. Главное что в текущих приложениях мне его хватает. Плата проста для старта в первую очередь, во вторую — удобна для работы, когда все под рукой. Уверен, если на плате будет (а на ней будет) STM32, вы и сами заинтересуетесь платой.
А если взять запоминающий осциллограф…
По блогу, спасибо, в работе материал по SDK под AVR Stduio — новая менюОС не захотела под ним сразу заводиться.
По SEO. Рейтинг занижается у плагиатчиков. И у сайтов, использующих перекрестные ссылки.
Для сайта, с копипастой статьи и указанием оригинала грозит лишь оказаться ниже исходного сайта.
И для серьезного «бана в гугле», сайт должен почти целиком из копипасты состоять