Jump to content

-=FISHER=-

Members
  • Content Count

    1023
  • Joined

  • Last visited

Community Reputation

12 Обычный

About -=FISHER=-

  • Rank
    Живу я тут

Информация

  • Город
    Уфа

Электроника

  • Стаж в электронике
    Менее года
  • Сфера радиоэлектроники
    Автоэлектрика

Recent Profile Visitors

2319 profile views
  1. Простите за глупый вопрос, время же по кругу гоняем? Например в переменной uint16_t?
  2. Последний наверное вопрос: дребезг нужно как-то отслеживать или приемлемый для моей задачи результат можно достигнуть без фильтрации?
  3. У меня же два сигнала. А внешнее прерывание одно. Я ещё раз напомню, что у меня нет задачи точно измерить время импульса. Мне всего лишь нужно отследить момент, когда время от примерно 112 мкс упадёт до 0 и потом момент когда восстановится до 112 мкс. Грубо говоря, есть хоть какой-то цифровой сигнал на входе или там 0.
  4. Согласен на attiny13 не получится на 1 мкс. Я проверял на Atmega8 на 16 МГц и счётный регистр заносил число 240.
  5. Я просто вижу алгоритм так: завожу таймер на 1 мкс, затем в прерывании отслеживаю появление на ножке высокого уровнях, поднимаю флаг. Затем ждём низкого уровня - флаг опускаем и ждём опять появление высокого. А уже по количеству переполнения таймера с поднятым флагом - вычисляем длительность импульса. Но что будет в случае, если высокий уровень так и не появится?
  6. А как в таком случае отследить момент когда продолжительность импульса до 0 упадёт?
  7. Расскажите пожалуйста, какие пути решения вы видите? Я ардуиновские библиотеки решил использовать исключительно из-за функции pulsein.
  8. Почему то Arduino IDE мне сообщает что нет такой функции...Хотя оранжевым цветом её подсвечивает.
  9. Не обязательно одновременно, можно немного разнести во времени, допустим на 10 мс. Я вот просто хоть убейте, не понимаю. Почему у меня не может выполнить второе условие? Почему всегда только первое работает? Я даже тупую задержку ставлю между измерением я всё равно не срабатывает второе условие. if(pulseIn(IN_1, HIGH, 100000)<8){digitalWrite(OUT_1, HIGH);} //на этой ноге сигнал с временем полупериода 100 мкс if(pulseIn(IN_2, HIGH, 100000)<8){digitalWrite(OUT_2, HIGH); //на этой ноге сигнал с временем полупериода 0 мкс Почему же не срабатывает второе условие?
  10. А может тогда ещё проще сделать, что-то типа приходят прерывания - значит есть какой-то то сигнал, 120 мкс например. Ну а если не приходят совсем, значит 0 мкс. Логично же? У меня ведь задачи измерить какой именно продолжительности сигнал, мне нужно определить есть ли он там вообще или нету. Только осталось определить временной интервал, в течении которого если нет прерываний, значит и нет сигнала.
  11. На самом деле нет, мне нужно понимать когда на ноге есть хоть какой-то сигнал и когда там совсем 0 МКС.
  12. Если вам не сложно, можете поподробнее объянить пожалуйста, как лучше мне это обработать? Задача я уже описал, нужно отследить момент когда время положительного фронта в сигнале, упадёт условно со 112 мкс до нуля. И нужно мониторить сразу два пина, два сигнала. Момент когда время импульса падает и момент когда опять становится ~100 мкм. Спасибо!
  13. Опишу немного входные данные: на обоих пинах присутствует прямоугольный сигнал 112 мкс длина положительного фронта. Мне нужно отловить момент когда на одном из них время упадет до 0. Так что если на первом падает до 0, на втором оно остаётся прежним 112 мкс. Вот поэтому я и не понимаю, почему когда первый раз функция возвращает 0, то второй раз её значение должно быть больше 100 мкс, но никак не 0... Вот в чем загвоздка.
  14. Хорошо, первый раз вызвали-вернулся 0, но ведь я вызываю её второй раз потом. Разве она не должна заново отработать и вернуть новое значение исходя из состояния сигнала на пине?
  15. А как тогда обьяснить, что после выполнения первого условия - автоматически начинает выполняться второе?
×
×
  • Create New...