Jump to content

Recommended Posts

Приветствую вас!

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

Задача: в теле обработчика прерывания, сканировать уровень лог. уровень входящего от генератора сигнала. Начало отсчета OCR2, спадающий фронт П-образного 

колебания. При совпадений OCR2  c TCNT2, программа уходит в прерывание и там при желании и можно сделать замер лог.уровня. Все вроде очень просто, но по неизвестной мне причине, программа заходит в тело прерывания по совпадению не только в момент  OCR2 =TCNT2, а еще и при спадающем фронте сигнала. Как от этого входа в тело прерывания избавиться и почему  это происходит, никак не пойму. Извращался над кодом всяко разно, но никак!! Знаю все просто, но когда знаешь!  Подскажите чтоб знал! Спасибо, с уважением к вам! 

P.S. код и протеус (фото) прилогаеться.1.c1.c

 

 

Снимок.PNG

Share this post


Link to post
Share on other sites
1 час назад, ;tv сказал:

все просто, но когда знаешь. Подскажите чтоб знал.

Откройте даташит на этот контроллер и почитайте про настройку и работу прерываний. Напишите на бумажке, что и как надо настроить под вашу задачу. Потом посмотрите и сравните, как они настроены у вас в коде.

Edited by Lexter

Share this post


Link to post
Share on other sites
6 часов назад, ;tv сказал:

а еще и при спадающем фронте сигнала

так вы сделали чтобы таймер запускался по внешнему фронту? Значит у вас там какое то прерывание разрешено по запуску/сбросу/переполнению/... таймера - в зависимости от ваших настроек таймера и его прерываний и способа его запуска - смотрите внимательно, там вроде было что то,  когда прерывание сравнения срабатывает и по переполнению или сравнение меняет направление счета счетчика таймера. Там хороший таймер - много настроек :) !

Вот это все надо проверять :) - самому полезнее разобраться : ) !

Edited by ruhi

Share this post


Link to post
Share on other sites

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

Разработка новых устройств на базе беспроводного микроконтроллера STM32WB от STMicroelectronics может быть сделана в короткий срок, если выполнять некоторые важные правила и воспользоваться готовыми конструктивными решениями и рекомендациями инженеров ST.

Читать статью

Или Вы лукавите и выложили кастрированный(не полный) код или глючит Ваш Протез.

Другой симулятор выдает следующее:

567.jpg.fffdb52ed2a14b61e43112d801eb19cb.jpg

Share this post


Link to post
Share on other sites
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-рас.  В чем ошибка?

IMG_2608.jpg

Share this post


Link to post
Share on other sites
                     

CoolGaN - на предельной скорости коммутации!

Решения на галлий-нитриде (GaN) обладают фундаментальными преимуществами перед кремнием. В частности, имея более высокую критическую напряжённость электрического поля, в сравнении с традиционными кремниевыми транзисторами, транзисторы на основе галлий-нитрида обладают выдающимися динамическими характеристиками, что позволяет коммутировать их на высоких частотах. Семейство CoolGaN™ – это именно то, что необходимо, чтобы поднять ваши устройства на принципиально новый уровень. Мы собрали все самые интересные материалы по данной теме на одной странице.

Читать статьи

Параметры сигнала PD0 озвучьте.

Я Вам дал картинку симуляции кода, но у меня частота входного сигнала оказалась выше.

Ваша ошибка вот в чем. Вы активно работаете с регистром TIMSK (маской прерываний), но забываете о регистре флагов прерываний (TIFR). Да, Вы запрещаете вызов обработчика прерывания по совпадению Т2, но Вы не останавливаете его работу при высоком уровне сигнала на PD0, а значит событие совпадения OCR2 наступает даже при высоком входе PD0. Флаг TIFR поднимается но, т.к. прерывания Вами запрещены, то обработчик не вызывается и флаг TIFR не сбрасывается автоматически. Он просто ждет "удобного случая"... и тот наступает как только Вы меняете TIMSK (разрешаете прерывание, а флаг уже поднят ранее). Отсюда и "ложное" по Вашему алгоритму срабатывание. Сбрасывайте регистр флагов TIFR!!!

Вот как-то так.

Edited by Геннадий

Share this post


Link to post
Share on other sites
Цитата

• 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;

 

Edited by DrobyshevAlex

Share this post


Link to post
Share on other sites

          Генадий и DrobyshevAlex,  спасибо большое! И всем кто уделил внимание!  Реально ошибка была в игнорировании состояния OCF2. 

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Как понять вокальный по характеру?
    • К мастеру более Без обид. Навык нужен. И инструмент соответствующий   Повеселил с утра
    • Как это нет? Они там всегда были помойму.   По поводу головы - если кто то будет что то заказывать - меня возьмите в долю, а то у меня пайпал забанили, требуют копии паспорта и еше что то.
    • 1. а можно PEN соединить с RESET и подтянуть к ним резистор 10k от плюса? или лучше отделить эту фичу от ресета (хз зачем она, тот-же ресет) .? 2. какая разница между лапами 52, 53 и 22, 21 соотв. ? их нужно соединять вместе или это для удобства и без разницы через какие ноги запитывать МК ? 3. нужно ли аналоговый ноль (нога 63) соединять с нолем питания МК или ему нужен отдельный источник питания в принципе(включая AVCC) ? можно ли ноги 62,62,64  оставить в воздухе  если не нужны?  4. нужно ли по питанию МК ставить электролит+керамика? или можно керамикой 10-100n обойтись? 5. какой вообще должна выглядеть минимальная обвязка данного МК?
    • Элементарно - найти мануал или по ПП отследить включение реле - тем более, что на плате подписаны пины, связанные с питанием и управлением реле РР-ДР
    • 1. Купить -дело не хитрое, ума много не надо. Купить по адекватной цене - долго доставки ждать. А зачем тогда вообще что либо ремонтировать? Пошел, да купил новое. И форум ,только для того, чтобы погоду вчерашнюю обсудить.  2. Да, ошибся, не ту кнопку нажал. 7106.   3. Нарыл схему на Victor 88C , но там оказывается другой АЦП. На 48 ног,  ES5108... Или у меня плата-совсем плагиат, или 88С-1 v2.9(моя) по другой схеме сделана. 4. При любом раскладе хочу попытаться отремонтировать свой прибор. Он мне как память дорог, 10 лет не расстаемся.   5. Сейчас посмотрел, на 062 микруху питание не подается. Между 5 и 6 ногой 1,63В.  На АЦП тоже питания  нет.
×
×
  • Create New...