таймер микроконтороллеров Avr

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Арсений
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Пн июн 01, 2009 21:27:46

таймер микроконтороллеров Avr

Сообщение Арсений »

Кто нибудь может помочь разобраться с таймером МК Avr (например у мк AT90S1200). Интересует как написать программу для запуска таймера, и измерения определенного интервала времени!
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18671
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

1. Вы выбрали дико устаревший МК
2. Воспользуйтесь поиском по форуму - таких тем куча!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
TechMike
Прорезались зубы
Сообщения: 247
Зарегистрирован: Сб дек 15, 2007 23:00:54
Откуда: Moscow
Контактная информация:

Сообщение TechMike »

МК действительно старый, как запустить таймер написано в datasheet.

Вы его скачали, на чем пишите, какие ошибки возникают при компиляции?
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Сообщение AI_Disable »

Арсений,
Во-первых, опишите, что вы имеете виду под "измерения определенного интервала времени", а то масло масленое получается. Если этот интервал времени уже определён, то зачем его измерять?
Во-вторых, AT90S1200 уже очень старый МК, в нём даже нет прерывания таймера по совпадению с регистром сравнения, только по переполнению.
И в последних скажите хотя бы, под какой компилятор код то нужен?
Реклама
Эиком - электронные компоненты и радиодетали
Арсений
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Пн июн 01, 2009 21:27:46

Сообщение Арсений »

AI_Disable писал(а):Арсений,
Во-первых, опишите, что вы имеете виду под "измерения определенного интервала времени", а то масло масленое получается. Если этот интервал времени уже определён, то зачем его измерять?
Во-вторых, AT90S1200 уже очень старый МК, в нём даже нет прерывания таймера по совпадению с регистром сравнения, только по переполнению.
И в последних скажите хотя бы, под какой компилятор код то нужен?
мне нужно измерить частоту в интервале 0.5- 4 Гц, я никак не могу разобраться с работой таймера (никак не могу понять как написать подпрограмму для подсчета интервала). И не обязательно чтобы мк был AT90S1200 и не очень важно какой компилятор.(главное что бы на ассемблере)
Реклама
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Сообщение AI_Disable »

Арсений писал(а): ... не обязательно чтобы мк был AT90S1200
Далеко не во всех аврках таймеры настраиваются одинаково. Для начала определитесь с контроллером.
Арсений писал(а): ...и не очень важно какой компилятор...
Не знаю как с ассмом, но вот в Си, например, важно. Вы же даже язык изначально не указали.
Реклама
TechMike
Прорезались зубы
Сообщения: 247
Зарегистрирован: Сб дек 15, 2007 23:00:54
Откуда: Moscow
Контактная информация:

Сообщение TechMike »

Арсений писал(а):
AI_Disable писал(а):Арсений,
мне нужно измерить частоту в интервале 0.5- 4 Гц, я никак не могу разобраться с работой таймера (никак не могу понять как написать подпрограмму для подсчета интервала). И не обязательно чтобы мк был AT90S1200 и не очень важно какой компилятор.(главное что бы на ассемблере)
Какие действия кроме измерения частоты должен делать МК?
Vladimir.F
Родился
Сообщения: 3
Зарегистрирован: Вт фев 01, 2011 10:26:28

Re: таймер микроконтороллеров Avr

Сообщение 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);
}
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: таймер микроконтороллеров Avr

Сообщение ChipKiller »

Vladimir.F писал(а):У меня такая проблема: Timer0 на Atmega16 неправильно делит частоту. По моим подсчётам на выходе должно быть 40 Гц, а частотомер показывает 39.5 Гц.
.. проще всего ИМХО посмотреть из за чего набегает ошибка и проверить свои подсчеты в симуляторе - AVR Studio вполне хватит.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: таймер микроконтороллеров Avr

Сообщение ChipKiller »

Арсений писал(а):мне нужно измерить частоту в интервале 0.5- 4 Гц, я никак не могу разобраться с работой таймера (никак не могу понять как написать подпрограмму для подсчета интервала).
для at90s1200 можно поступить следующим образом. Создаете обработчик прерывания для T0, который увеличивает значение переменной (допустим размером DWORD). Измеряемую частоту заводите на INT0. При изменении уровня на INT0 - читаете DWORD. Измеряемая частота = частоту переполнения T0 / DWORD . В более новых МК конечно проще применить режим совпадения.
Vladimir.F
Родился
Сообщения: 3
Зарегистрирован: Вт фев 01, 2011 10:26:28

Re: таймер микроконтороллеров Avr

Сообщение Vladimir.F »

Спасибо, буду разбираться. :dont_know:
Vladimir.F
Родился
Сообщения: 3
Зарегистрирован: Вт фев 01, 2011 10:26:28

Re: таймер микроконтороллеров Avr

Сообщение Vladimir.F »

Проблема решена, настроил таймер в режим СТС. :)
Аватара пользователя
aleksey_gregul
Встал на лапы
Сообщения: 130
Зарегистрирован: Ср дек 29, 2010 17:30:34

Re:

Сообщение aleksey_gregul »

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

Вернуться в «Микроконтроллеры и ПЛИС»