Страница 1 из 1
таймер микроконтороллеров Avr
Добавлено: Ср дек 02, 2009 01:04:49
Арсений
Кто нибудь может помочь разобраться с таймером МК Avr (например у мк AT90S1200). Интересует как написать программу для запуска таймера, и измерения определенного интервала времени!
Добавлено: Ср дек 02, 2009 08:18:26
ARV
1. Вы выбрали дико устаревший МК
2. Воспользуйтесь поиском по форуму - таких тем куча!
Добавлено: Ср дек 02, 2009 10:42:24
TechMike
МК действительно старый, как запустить таймер написано в datasheet.
Вы его скачали, на чем пишите, какие ошибки возникают при компиляции?
Добавлено: Ср дек 02, 2009 13:25:43
AI_Disable
Арсений,
Во-первых, опишите, что вы имеете виду под "измерения определенного интервала времени", а то масло масленое получается. Если этот интервал времени уже определён, то зачем его измерять?
Во-вторых, AT90S1200 уже очень старый МК, в нём даже нет прерывания таймера по совпадению с регистром сравнения, только по переполнению.
И в последних скажите хотя бы, под какой компилятор код то нужен?
Добавлено: Ср дек 02, 2009 17:20:01
Арсений
AI_Disable писал(а):Арсений,
Во-первых, опишите, что вы имеете виду под "измерения определенного интервала времени", а то масло масленое получается. Если этот интервал времени уже определён, то зачем его измерять?
Во-вторых, AT90S1200 уже очень старый МК, в нём даже нет прерывания таймера по совпадению с регистром сравнения, только по переполнению.
И в последних скажите хотя бы, под какой компилятор код то нужен?
мне нужно измерить частоту в интервале 0.5- 4 Гц, я никак не могу разобраться с работой таймера (никак не могу понять как написать подпрограмму для подсчета интервала). И не обязательно чтобы мк был AT90S1200 и не очень важно какой компилятор.(главное что бы на ассемблере)
Добавлено: Ср дек 02, 2009 17:35:22
AI_Disable
Арсений писал(а):
... не обязательно чтобы мк был AT90S1200
Далеко не во всех аврках таймеры настраиваются одинаково. Для начала определитесь с контроллером.
Арсений писал(а):
...и не очень важно какой компилятор...
Не знаю как с ассмом, но вот в Си, например, важно. Вы же даже язык изначально не указали.
Добавлено: Ср дек 02, 2009 19:55:04
TechMike
Арсений писал(а):AI_Disable писал(а):Арсений,
мне нужно измерить частоту в интервале 0.5- 4 Гц, я никак не могу разобраться с работой таймера (никак не могу понять как написать подпрограмму для подсчета интервала). И не обязательно чтобы мк был AT90S1200 и не очень важно какой компилятор.(главное что бы на ассемблере)
Какие действия кроме измерения частоты должен делать МК?
Re: таймер микроконтороллеров Avr
Добавлено: Вт фев 01, 2011 11:24:05
Vladimir.F
Здравствуйте. Извините, если не туда залез, до этого в форумах никогда не писал. Решил новую тему не создавать.
У меня такая проблема: Timer0 на Atmega16 неправильно делит частоту. По моим подсчётам на выходе должно быть 40 Гц, а частотомер показывает 39.5 Гц. Timer1 считает правильно, но он занят другой частотой. Без использования задержки на 25 и StepCount тоже получается не правильная частота.
Вот код:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
const unsigned char tab[]={0x05,0x01,0x03,0x02,0x06,0x04};
unsigned char StepCount=0;
unsigned char tmr1=0;
ISR(TIMER0_OVF_vect)
{
StepCount++;
if(StepCount>5)StepCount=0;
TCNT0=0x06;
tmr1++;
if(tmr1==25)
{
tmr1=0;
PORTB=tab[StepCount];
}
}
int main (void)
{
DDRB = 0x07;
TCCR0 = 2;
TIFR = 0;
TIMSK = 0b001;
GICR = 0;
sei();
while(1);
}
Re: таймер микроконтороллеров Avr
Добавлено: Вт фев 01, 2011 11:54:40
ChipKiller
Vladimir.F писал(а):У меня такая проблема: Timer0 на Atmega16 неправильно делит частоту. По моим подсчётам на выходе должно быть 40 Гц, а частотомер показывает 39.5 Гц.
.. проще всего ИМХО посмотреть из за чего набегает ошибка и проверить
свои подсчеты в симуляторе - AVR Studio вполне хватит.
Re: таймер микроконтороллеров Avr
Добавлено: Вт фев 01, 2011 12:18:50
ChipKiller
Арсений писал(а):мне нужно измерить частоту в интервале 0.5- 4 Гц, я никак не могу разобраться с работой таймера (никак не могу понять как написать подпрограмму для подсчета интервала).
для at90s1200 можно поступить следующим образом. Создаете обработчик прерывания для T0, который увеличивает значение переменной (допустим размером DWORD). Измеряемую частоту заводите на INT0. При изменении уровня на INT0 - читаете DWORD. Измеряемая частота = частоту переполнения T0 / DWORD . В более новых МК конечно проще применить режим совпадения.
Re: таймер микроконтороллеров Avr
Добавлено: Ср фев 02, 2011 09:05:28
Vladimir.F
Спасибо, буду разбираться.

Re: таймер микроконтороллеров Avr
Добавлено: Пт фев 04, 2011 08:08:31
Vladimir.F
Проблема решена, настроил таймер в режим СТС.

Re:
Добавлено: Пт фев 04, 2011 12:46:04
aleksey_gregul
Арсений писал(а):
мне нужно измерить частоту в интервале 0.5- 4 Гц, я никак не могу разобраться с работой таймера (никак не могу понять как написать подпрограмму для подсчета интервала). И не обязательно чтобы мк был AT90S1200 и не очень важно какой компилятор.(главное что бы на ассемблере)
Многие таймеры имеют т.н. вход захвата. (capture). Он специально предназначен для ИЗМЕРЕНИЯ временных интервалов.
По событию capture на аппаратном уровне состояние таймера очень быстро сохраняется в спец. регистре. и генерируется прерывание.
Почитайте про этот режим и все будет пучком!