Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение текущего времени ATmega, С какой стороны подойти? 
V
    Опции темы
RebornCrusader
Дата 28.11.2007, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 18.1.2007
Где: Владивосток

Репутация: нет
Всего: 6



 smile Я совсем недавно начал изучать МК. Возможно ли как-то прочитать текущее время в программе (и в каких оно единицах?), или нужны какие-то внешние часы? 
Вообще мне требуется засечь время, прошедшее между двумя сигналами, с точностью до 1 мс. Может я должен работать с прерываниями, каждый раз получать и пересчитывать какие-то внутренние тики в милисекунды? В документации много написно про таймеры, но как я понимаю, это не то что мне нужно.

Контроллер ATmega8515, компилятор CodeVisionAVR.
--------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier"
PM   Вверх
Lazin
Дата 28.11.2007, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 3
Всего: 154



Цитата(RebornCrusader @  28.11.2007,  09:05 Найти цитируемый пост)
В документации много написно про таймеры, но как я понимаю, это не то что мне нужно.

Как раз наоборот, тебе нужно использовать режим "захвата"(Capture) таймера. Настраиваешь таймер на нужную частоту и режим, далее при приходе сигнала на вход захвата таймера, значение счетчика таймера сохраняется в регистре (ICR), и генерируется прерывание(что-бы генерировалось нужно его сначала настроить). В обработчике считываешь значение счетчика и обнуляешь счетчик таймера, вот и все. Так можно частоту сигнала измерить, главное правильно настроить таймер, что-бы он не переполнялся и считал с нужной точностью(точность измерения будет равна периоду таймера).
Цитата(RebornCrusader @  28.11.2007,  09:05 Найти цитируемый пост)
Возможно ли как-то прочитать текущее время в программе (и в каких оно единицах?), или нужны какие-то внешние часы

Нет, для этого к контроллеру нужно подключить микросхему RTC, либо реализовать программно на одном из таймеров(это хуже и сложнее).
PM MAIL Skype GTalk   Вверх
RebornCrusader
Дата 29.11.2007, 05:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 18.1.2007
Где: Владивосток

Репутация: нет
Всего: 6



Спасибо. Много непонятных слов, но уже есть за что зацепиться. Можно пример, если не трудно? 
--------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier"
PM   Вверх
Lazin
Дата 29.11.2007, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 3
Всего: 154



Этот код для ATMega128 - компилятор - WinAvr (Code Vision - хлам))
здесь настраивается 3-й таймер на режим захвата
Код

unsigned int time_span = 0;//период следования импульсов (в тиках таймера)
*******
//Настройка 3-го таймера, режим Capture
void timer3_init(void)
{
    TCCR3B = 0x00; //stop
    TCNT3H = 0x00; //setup
    TCNT3L = 0x00;
    // - normal mode no compare -
    TCCR3A = 0x00;
    // - rising edge capture -
    TCCR3B = 0x44;//TCCR3B = 0x45;
}

//настройка портов вв
void io_init(void)
{
****
    DDRE  = 0x00;    
    PORTE = 0xFF;
****
}

//прерывание - "захват" таймера
ISR (TIMER3_CAPT_vect)
{
    time_span = ICR3; //сначала обязательно считываем значение регистра
    TCNT3 = 0x00; //обнуляем таймер, что-бы интервалы времени измерялись правильно
}

принцип работы такой: на вход захвата таймера идут импульсы с частотой f, таймер работает с частотой ft. ft > f, и ft зависит от нужной точности измерения периода. При каждом новом импульсе на входе захвата, таймер помещает значение счетчика TCNTn в регистр захвата (ICRn), после этого вызывается прерывание. В прерывании нужно сначала прочитать регистр ICRn в переменную, потом обнулить счетчик таймера TCNTn. В результате в переменной содержится количество тиков таймера между 2мя последними импульсами, пришедшими на вход захвата таймера. Зная частоту таймера, можно расчитать частоту входного сигнала, а так-же период. Точность зависит от частоты таймера, чем она больше, тем точнее измерение. Если не хватает разрядности таймера, то можно обрабатывать прерывание переполнения таймера.

Это сообщение отредактировал(а) Lazin - 29.11.2007, 09:09
PM MAIL Skype GTalk   Вверх
cardinal
Дата 29.11.2007, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Цитата(Lazin @  29.11.2007,  07:58 Найти цитируемый пост)
Если не хватает разрядности таймера, то можно обрабатывать прерывание переполнения таймера.

Думаю в данном случае (точность до 1 мс) таймера хватит за глаза.
RebornCrusader, теперь тебе осталось только узнать какое же значение сидит в переменной time_span. Можно просто 8 диодиков повесить и выдавать бинарное представление числа (что годится для чисел <=0xff), для остального пользуйся printf...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
RebornCrusader
Дата 30.11.2007, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 18.1.2007
Где: Владивосток

Репутация: нет
Всего: 6



Большое спасибо! 
Вывод - отдельная задача, будет несколько семисегментников с динамической индикацией. Сейчас я пока ими занимаюсь и с этим всё понятно.
--------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier"
PM   Вверх
cardinal
Дата 30.11.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



А что будет за прибор то? smile 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
RebornCrusader
Дата 1.12.2007, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 18.1.2007
Где: Владивосток

Репутация: нет
Всего: 6



А фиг знает smile Мне поручили разработать узел, поскольку наш главный электронщик с программированием и МК совсем уж не дружит.
--------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier"
PM   Вверх
cardinal
Дата 1.12.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



А с чем же он тогда дружит?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.