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

Отсчет Времени


pomo_al

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

Есть потребность в измерени промежутков времени в меге8. Например: пришло внешнее прерывание, считывается значение счетчика и отправляется по usart. Вот только не могу понять, как сделать этот счетчик и как вычислить какое время в физичиских величинах получилось(секунда, микросекунда)??? может кто расскажет как это сделать?

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

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

как сделать этот счетчик и как вычислить какое время в физичиских величинах получилось(секунда, микросекунда)???

Сначала определимся, какое минимальное время нужно измерить (мкс, мс, с, мин,...)

Потом - какое максимальное (секунда, час, день, неделя ;))

Счётчик организуем в виде переменной нужной разрядности (скорее всего на unsigned long мутить придётся...)

Насчёт привязки: мы же знаем какое время выполняется 1 командный цикл в МК... а дальше немножко напрячь логику...

Мне это именно так представляется.

может кто расскажет как это сделать?

В книге Шпака по-моему был такой пример (см. http://dasbook.ru/index.php?book=129 (не пример, а книгу ;))

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

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

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

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

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

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

За минимум примем 1 мс, за максимум 2 секунды.

Мне не понятно как вообще работать с таймером. Если делать прерывание по переполнению, как отслеживать количество этих прерываний.

Может есть у кого-нибудь примерчик готовый, его все равно переделывать надо будет...

А считать все равно в секунда придется, т.к. потом это время используется для вычисления скорости.

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

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

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

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

Мне не понятно как вообще работать с таймером.

Прочтите книгу, там расжеванно. А как Вы тогда переделаете прогу???

Множно еще и через цикл, но точность пострадает.

Пишу на Си CCS PICC для PIC, CVAVR для AVR, и иногда IAR для NEC. Особенно привык к SIM300dz.

ICQ: 288449055

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

Может есть у кого-нибудь примерчик готовый, его все равно переделывать надо будет...

Что-то я перестаю понимать приколы такого рода :)

Говорят же - есть книга, в ней пример, бери нехочу. В ответ: дайте готовый пример. Аааа... :ph34r: [таак, спокойнее, спокойнее :blink: ]

ОК.

Качаем книгу, открываем стр. 168, читаем заголовок "Измерение ширины импульсов". Это и есть пример :rolleyes:

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

Да нихрена тек не спокойнее, просто до этой книги не дошел еще, а в остальных всякая лажа... где то видел конкретный пример ля вычисления скорости, но моих познаний и опыта программирования недостаточно.. поэтому и прошу пример с подробными объяснениями... просто кроме этого таймера гемора еще куча....

Дошел до книги, в принципе понятно...

Но есть пара вопросов... :

стр. 168 - внизу листа код:

PulseClocks= (unsigned long)EdgeF-(unsigned long)EdgeR+(unsigned long)OverflowC*0x10000;

Вопрос 1:(unsigned long)OverflowC*0x10000; - зачем идет умножение?

Вопрос 2: "PORTC=PulseClocks/500; // Отображаем значение в миллисек?" - откуда взято, что это будут миллисекунды, и куда уходит это отображение(как я понимаю будут тупо гореть какие-то из светодиодов, подключенные к порту с?

Вопрос 3: Как рассчитать и выбрать коэфф предделителя(вообще для чего он нужен), чтобы знать в каких величинах будет реально считать счетчик (а то что мне дадут 65535 импульсов при переполнении - физически 1 - это сколько???).

Пока пожалуй все...

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

PulseClocks= (unsigned long)EdgeF-(unsigned long)EdgeR+(unsigned long)OverflowC*0x10000;

Вопрос 1:(unsigned long)OverflowC*0x10000; - зачем идет умножение?

0x10000 = 65536, это макс. число тиков которые помещаются в счётчик, после чего он сбрасывается в ноль.

Что такое OverflowC и как он инкрементируется написано в коде.

Зачем идёт умножение - чтобы вычислить задержку с учётом многократных сбросов счётчика.

Вопрос 2: "PORTC=PulseClocks/500; // Отображаем значение в миллисек?" - откуда взято, что это будут миллисекунды, и куда уходит это отображение

Почему 500?... Да хз, но это всё можно рассчитать и понять. Простите, но мне лень браться за даташит, калькулятор и бумагу ;)

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

Угу.

Вопрос 3: Как рассчитать и выбрать коэфф предделителя(вообще для чего он нужен), чтобы знать в каких величинах будет реально считать счетчик.

В начале книге обо всём этом написано. Предделитель нужен чтобы умерить пыл счётчика, другими словами чтобы он не так часто сбрасывался. Вы вообще с таймерами работали на AVR ???

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

но моих познаний и опыта программирования недостаточно.. поэтому и прошу пример с подробными объяснениями...

Таймер-счетчик (в дальнейшем просто счётчик) предназначен для подсчета (измерения) времени или событий.

Тактовыми, увеличивающими значение счетчика на единицу, могут быть импульсы внутренней синхронизации, или импульсы внешнего источника. Частота внутренней синхронизации равна Fclk (смотреть даташит надо, чему она там равна).

Более того, когда для тактирования счетчика используют внутреннюю синхронизацию, есть возможность пользоваться предделителем. Он, по желанию пользователя, уменьшает частоту тактирования счетчика в 8,64,256,1024 раза. Предделитель это, по сути, тоже счетчик. Его значение для удобства пользователя можно обнулить в нужный момент.

Наример: внутренняя частота синхронизации равна 1Мгц, значит, при соотв. программировании режимов, 16битное значение счетчика будет увеличиваться каждую микросекунду на 1 (или каждую 8,64,256,1024 микросекунду на 1, если использовать предделитель), независимо от того чего там выполняется еще в программе пользователя.

При переполнении счетчика (переход из FFFF в 0000) возникает прерывание по переполнению.

Если нужно считать время, то задаются минимальным квантом времени, а затем подсчитывают кол-во квантов и делают вывод, что прошло время Т. Всё это происходит в подпрограмме обработки прерывания по переполнению счётчика.

Пример: Fclk=1МГц. Считаем секунды. Квант времени задем 50мкс

Основая программа:

1. Обнуляем счетчик квантов

2. Обнуляем счетчик секунд

3. Программируем таймер-счетчик в 16битном режиме без предделителя, по возможности с автоперезагрузкой.

4. Загружаем в таймер-счетчик значение 65536-50=65486

5. Разрешаем прерывания, запускаем таймер-счетчик.

6. Выводим счетчик секунд на индикатор

7. GO TO 6.

Подпрограмма прерывания по переполнению таймер-счетчика:

1. Перезагрузить значение таймер-счетчика (если не автоперезагружаемый);

2. Увеличить счетчик квантов

3. Если счетчик квантов не равен 50 то GO TO 7

4. Обнуляем счетчик квантов

5. Увеличиваем счетчик секунд

6. Десятичная коррекия счетчика секунд (ну тут и часы с минутами можно приделать, не принципиально)

7. Прерывание обслужено

8. RET

Вот, то что я тут понаписал, это универсально для любого МК. Вы можете заниматься чем угодно, а время "тикает".

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

Спасибо за ответ, снова вопросы...:

но моих познаний и опыта программирования недостаточно.. поэтому и прошу пример с подробными объяснениями...

Пример: Fclk=1МГц. Считаем секунды. Квант времени задем 50мкс

Основая программа:

1. Обнуляем счетчик квантов

2. Обнуляем счетчик секунд

3. Программируем таймер-счетчик в 16битном режиме без предделителя, по возможности с автоперезагрузкой.

4. Загружаем в таймер-счетчик значение 65536-50=65486

Я так понимаю, 65536-50=65486, нужно, чтобы переполнение было через 50 значений, т.е. 50 мкс? т.е. если,допустим взять не 50, а 1000 - то переполнение будет через 1мс, правильно?

1. Перезагрузить значение таймер-счетчика (если не автоперезагружаемый);

Это нужно для того, что бы следующий счет опять начался со значения 65486?

2. Увеличить счетчик квантов

3. Если счетчик квантов не равен 50 то GO TO 7

4. Обнуляем счетчик квантов

5. Увеличиваем счетчик секунд

почему? Считаю 50*50=250мкс, почему увеличиваем счетчик секунд?

6. Десятичная коррекия счетчика секунд (ну тут и часы с минутами можно приделать, не принципиально)

Для чего это нужно не совсем понял, но это видимо непринципиально?

Практически все понятно, за исключением приведенных выше вопросов. Осталось разобраться с вычислением скорости.

Буду ждать ответов на последние вопросы, пока буду разбираться с тем что узнал...

P.S.

По поводу того,что все советуют смотреть книги, отвечу... Для понимания вопроса нет ничего более приемлемого чем ответ более сведующего в это вопросе человека. Спасибо тем, кто ответил по существу

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

Спасибо за ответ, снова вопросы...:

Я так понимаю, 65536-50=65486, нужно, чтобы переполнение было через 50 значений, т.е. 50 мкс? т.е. если,допустим взять не 50, а 1000 - то переполнение будет через 1мс, правильно?

Да!

Это нужно для того, что бы следующий счет опять начался со значения 65486?

Точно!

почему? Считаю 50*50=250мкс, почему увеличиваем счетчик секунд?

Это я специально тебя запутал.

Молодец! Не поддался.

Конечно считать надо до 1/50мкс=20000

Для чего это нужно не совсем понял, но это видимо непринципиально?

Это тем у кого секундомер.

Практически все понятно, за исключением приведенных выше вопросов. Осталось разобраться с вычислением скорости.

Буду ждать ответов на последние вопросы, пока буду разбираться с тем что узнал...

А скорость чего надо измерять?

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

Скорость надо мерить у вентильного двигателя... Если интересно расскажу про этот проект подробнее

про двигатель это понятно...

Конкретно какое устройство порождает сигнал?

Какой датчик и что за сигнал?

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

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

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

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

Понятно.

В принципе можно без прерываний от датчика. Ты же собрался отсчитывать время.

Есть еще один таймер-счетчик. Его можно настроить на синхронизацию от внешних импульсов (с твоего фототранзистора). Тогда он будет считать импульсы. Кол-во импульсов за известное время можно инетрпретировать как среднюю скорость.

Или измерять длительность периода следования импульсов с датчика, и инетрпретировать как мгновенную скорость.

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

Можно и так, но буду делать по первому варианту.

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

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

Можно и так, но буду делать по первому варианту.

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

Я думаю, что в этом файле Вы найдете много чего вкусного!!!

Пишу на Си CCS PICC для PIC, CVAVR для AVR, и иногда IAR для NEC. Особенно привык к SIM300dz.

ICQ: 288449055

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

Спасибо, статья интересная но 80% из этой статью уже известно. Все это теория. Как и везде управление коллекторным 1фазным двигателем - не ново везде в теории именно это и описано. А еще интересный момент управление трехфазным многополюсным синхронным двигателем, как вентильным.. оч интересное дело... теперь разобрались, осталось все воедино собрать.

Хотя еще и много нюансов с практической реализацией:

например:

как отправить полученное число?, т.е. чем его преобразовать в char *str, как отправить символы из "в кавычках" это я нашел, при использовании itoa(), компилятор матерится, пишет, что нельзя тип инсигн чар несовместим с флеш инсигн чар, при поиске этого типа в хелпах ничего не нашел. вот и сижу думаю, как же отправить это злополучное число (по моим подсчетам макс. 1 минута, поэтому взял unsigned int и квант времени 1мс). может и тут чего подскажите, али носом куда тыкните?

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

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

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

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

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

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

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

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

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

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

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