;tv Опубликовано 3 декабря, 2019 Поделиться Опубликовано 3 декабря, 2019 Приветствую вас! С целью разобраться таймером, прописал самый простой код, но так и не смог понять причину появления одного действия микроконтроллера. Задача: в теле обработчика прерывания, сканировать уровень лог. уровень входящего от генератора сигнала. Начало отсчета OCR2, спадающий фронт П-образного колебания. При совпадений OCR2 c TCNT2, программа уходит в прерывание и там при желании и можно сделать замер лог.уровня. Все вроде очень просто, но по неизвестной мне причине, программа заходит в тело прерывания по совпадению не только в момент OCR2 =TCNT2, а еще и при спадающем фронте сигнала. Как от этого входа в тело прерывания избавиться и почему это происходит, никак не пойму. Извращался над кодом всяко разно, но никак!! Знаю все просто, но когда знаешь! Подскажите чтоб знал! Спасибо, с уважением к вам! P.S. код и протеус (фото) прилогаеться.1.c1.c 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Lexter Опубликовано 3 декабря, 2019 Поделиться Опубликовано 3 декабря, 2019 (изменено) 1 час назад, ;tv сказал: все просто, но когда знаешь. Подскажите чтоб знал. Откройте даташит на этот контроллер и почитайте про настройку и работу прерываний. Напишите на бумажке, что и как надо настроить под вашу задачу. Потом посмотрите и сравните, как они настроены у вас в коде. Изменено 3 декабря, 2019 пользователем Lexter 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
ruhi Опубликовано 4 декабря, 2019 Поделиться Опубликовано 4 декабря, 2019 (изменено) 6 часов назад, ;tv сказал: а еще и при спадающем фронте сигнала так вы сделали чтобы таймер запускался по внешнему фронту? Значит у вас там какое то прерывание разрешено по запуску/сбросу/переполнению/... таймера - в зависимости от ваших настроек таймера и его прерываний и способа его запуска - смотрите внимательно, там вроде было что то, когда прерывание сравнения срабатывает и по переполнению или сравнение меняет направление счета счетчика таймера. Там хороший таймер - много настроек ! Вот это все надо проверять - самому полезнее разобраться : ) ! Изменено 4 декабря, 2019 пользователем ruhi 0 Можно сделать все! Но чем больше можно, тем больше нельзя! Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Геннадий Опубликовано 4 декабря, 2019 Поделиться Опубликовано 4 декабря, 2019 Или Вы лукавите и выложили кастрированный(не полный) код или глючит Ваш Протез. Другой симулятор выдает следующее: 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
;tv Опубликовано 5 декабря, 2019 Автор Поделиться Опубликовано 5 декабря, 2019 04.12.2019 в 03:50, Lexter сказал: Откройте даташит на этот контроллер и почитайте про настройку и работу прерываний. Напишите на бумажке, что и как надо настроить под вашу задачу. Потом посмотрите и сравните, как они настроены у вас в коде. С бумажкой в стране напряженка и поэтому разберу код в соответствии моих знаний/незнаний, тут! В настройках таймера прописаны комментарии, откуда следует что таймер в режиме СТС-(WGM-21),число для срабатывания по совпадению указана в OCR2,=50 делитель частоты установлен в максимум -1024, общие прерывания разрешены (sei). Условия работы таймера прописаны, и осталось только запустить его. В бесконечном цикле кодом while(PIND&_BV(PD0)){}; обусловливается точка запуска таймера, т.е. после завершения данного условия включается таймер TIMSK|=(1<<OCIE2);. при условии TCNT2=0; , т.к. На графике протеуса она отражается контрольной точкой КТ-6. В момент совпадения OCR2 и TCNT2, код уходит в прерывание и тут и должна сработать КТ-7, НО!!! На графике протеуса, КТ-7 срабатывает еще и сразу после TIMSK|=(1<<OCIE2);. С КАКОГО ПЕРЕПУГУ??? Постоялец ruhi, пишите: смотрите внимательно, там вроде было что то, когда прерывание сравнения срабатывает и по переполнению или сравнение меняет направление счета счетчика таймера. Там хороший таймер - много настроек ! Поясните пожалуйста что зашифровано в вашем послании? Сторожил Генадий, спасибо за подсказку! Мне говорили что протеус это протез, (как вы упомянули), но как и у всех, неверие до своих шишек! После сообщения Генадий, с позитивным настроем собрался просмотреть работу кода в осциллографе, и вот господа, оказывается "протез" не совсем протез! Скрин говорит сам за себя! Желтый график КТ6, зелный КТ7. КТ-7 как и в протеусе срабатывает 16-раз, а по коду в прерывание по совпадению должен уходить 8-рас. В чем ошибка? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Геннадий Опубликовано 5 декабря, 2019 Поделиться Опубликовано 5 декабря, 2019 (изменено) Параметры сигнала PD0 озвучьте. Я Вам дал картинку симуляции кода, но у меня частота входного сигнала оказалась выше. Ваша ошибка вот в чем. Вы активно работаете с регистром TIMSK (маской прерываний), но забываете о регистре флагов прерываний (TIFR). Да, Вы запрещаете вызов обработчика прерывания по совпадению Т2, но Вы не останавливаете его работу при высоком уровне сигнала на PD0, а значит событие совпадения OCR2 наступает даже при высоком входе PD0. Флаг TIFR поднимается но, т.к. прерывания Вами запрещены, то обработчик не вызывается и флаг TIFR не сбрасывается автоматически. Он просто ждет "удобного случая"... и тот наступает как только Вы меняете TIMSK (разрешаете прерывание, а флаг уже поднят ранее). Отсюда и "ложное" по Вашему алгоритму срабатывание. Сбрасывайте регистр флагов TIFR!!! Вот как-то так. Изменено 5 декабря, 2019 пользователем Геннадий 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
DrobyshevAlex Опубликовано 5 декабря, 2019 Поделиться Опубликовано 5 декабря, 2019 (изменено) Цитата • Bit 7 – OCIE2: Timer/Counter2 Output Compare Match Interrupt Enable When the OCIE2 bit is written to one and the I-bit in the Status Register is set (one), the Timer/Counter2 Compare Match interrupt is enabled. The corresponding interrupt is executed if a Compare Match in Timer/Counter2 occurs (that is, when the OCF2 bit is set in the Timer/Counter Interrupt Flag Register – TIFR). Сбросьте ручками бит, вы просто выключаете обработку прерывания, но таймер считает, и бит устанавливается. Когда вы обнуляете счетчик, не важно что в нем 0, важно что он от прошлого прохода остался установлен и вы его не очистили. я про бит Цитата The OCF2 Flag is automatically cleared when the interrupt is executed. Alternatively, the OCF2 Flag can be cleared by software by writing a logical one to its I/O bit location. То есть просто перед включением прерываний TIFR |= 1 << OCF2; Изменено 5 декабря, 2019 пользователем DrobyshevAlex 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
;tv Опубликовано 8 декабря, 2019 Автор Поделиться Опубликовано 8 декабря, 2019 Генадий и DrobyshevAlex, спасибо большое! И всем кто уделил внимание! Реально ошибка была в игнорировании состояния OCF2. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.