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

Atmega8_ TC2 .


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

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

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

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

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

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

 

 

Снимок.PNG

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

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

1 час назад, ;tv сказал:

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

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

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

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

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

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

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

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

6 часов назад, ;tv сказал:

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

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

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

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

Можно сделать все! Но чем больше можно, тем больше нельзя!

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

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

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

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

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

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

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

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

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

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

Цитата

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

 

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

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

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

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

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

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

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

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

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

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

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

    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
    • А что нить из ассортимента активных щупов производства СССР..))
    • Типа такого: https://aliexpress.ru/item/2044864227.html?sku_id=58855020183
    • поняли неправильно. У ТЛ494 никакой защиты нет, усилители ошибки не защита, они не должны приводить к ложным импульсам. Причем тут "микруха" ?  надо нагружать ВСЁ. До сих пор вообще непонятно о каком ИИП идет речь и сколько у него каналов. Бесполезно схему рисовать? - Помогать так бесполезно. Картина кривая по самое "немогу" продолжаются картинки, снятые через ногу и без цены деления.
×
×
  • Создать...