реклама на сайте
подробности

 
 
16 страниц V  « < 4 5 6 7 8 > »   
Reply to this topicStart new topic
> три частоты на АТмегу 128 с использованием таймеров, оределить изменения каждой частоты
=GM=
сообщение Aug 22 2007, 15:43
Сообщение #76


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Яrik @ Aug 22 2007, 14:23) *
ТО GM
БОООООльшое спасибо. smile.gif, за ответ. Буду пробовать. a14.gif

На здоровье.

ДолОжите нам(:-), какую максимальную частоту удалось измерить.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Яrik
сообщение Aug 22 2007, 16:52
Сообщение #77


Частый гость
**

Группа: Новичок
Сообщений: 110
Регистрация: 8-01-07
Из: Украина
Пользователь №: 24 216



Цитата
currenTime-oldTime)<OneSec

Это переменные?

Цитата(=GM= @ Aug 22 2007, 18:43) *
На здоровье.

ДолОжите нам(:-), какую максимальную частоту удалось измерить.

Завтра, сегодня нет времени.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Aug 23 2007, 08:48
Сообщение #78


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Яrik @ Aug 22 2007, 15:52) *
Это переменные?

Я ж написал там в комментарии: "пункт 1-условно, можно сделать по-другому".
Ну поставьте для начала тупой цикл на ОДНУ секунду, ИЛИ делайте другую задачу в течение одной секунды (примерно, точность здесь не важна) ИЛИ опрашивайте флаг таймера, взведённого на 1 сек ИЛИ сравнивайте число в N1 с текущим содержимым таймера 1, всё зависит от разработчика программы, т.е. от вас. Главное, вы должны выдержать период измерения.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Яrik
сообщение Aug 23 2007, 15:18
Сообщение #79


Частый гость
**

Группа: Новичок
Сообщений: 110
Регистрация: 8-01-07
Из: Украина
Пользователь №: 24 216



Цитата(=GM= @ Aug 22 2007, 18:43) *
На здоровье.

ДолОжите нам(:-), какую максимальную частоту удалось измерить.


По данному коду в симуляторе VMlab удалось померять частоту 6,25МГц (выше не пробывал). Но меня терзают самнения может я что то не так делаю, я где то на форуме читал, что максимальная частота измерения для АВР пол тактовой, а то и меньше.

Код
#include <mega8.h>
#include <delay.h>

static float Fx;
unsigned long int N1, N2, N;
unsigned long int M1, M2, M;
unsigned int Perepol_Timer0=0, Perepol_Timer1=0;
unsigned int count_T1, count_T0;

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void){
Perepol_Timer0++;

}

// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void){
Perepol_Timer1++;
}

// Timer 1 input capture interrupt service routine
interrupt [TIM1_CAPT] void timer1_capt_isr(void){
TIMSK&=0xDF;
count_T0=TCNT0;
count_T1=ICR1;

}


void main(void)
{
PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;


PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
TCCR0=0x07;
TCNT0=0x00;

// Timer/Counter 1 initialization
TCCR1A=0x00;
TCCR1B=0x41;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x05;

// Analog Comparator initialization
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

Perepol_Timer1=0;
N1=0;M1=0;
while (1){
delay_ms(1000);
TIMSK|=0x20;                        
while ((TIMSK&0x20)==0x20){}            
N2=(unsigned long int)(Perepol_Timer1)*65536+count_T1;
M2=(unsigned long int)Perepol_Timer0*256+count_T0;
N=N2-N1;                              
M=M2-M1;
Fx=(float)8000000.0*(float)M/(float)N;
N1=N2;                                
M1=M2;
} }
Go to the top of the page
 
+Quote Post
=GM=
сообщение Aug 23 2007, 16:27
Сообщение #80


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Яrik @ Aug 23 2007, 14:18) *
По данному коду в симуляторе VMlab удалось померять частоту 6,25МГц (выше не пробывал). Но меня терзают самнения может я что то не так делаю, я где то на форуме читал, что максимальная частота измерения для АВР полтактовой, а то и меньше.

Сомнения вас терзают правильно, для тактовой частоты 8 МГц, вы выше 4 МГц не введёте. Вернее, ввести-то можно всё, не будет адекватности, вот в чём беда.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Яrik
сообщение Aug 23 2007, 16:43
Сообщение #81


Частый гость
**

Группа: Новичок
Сообщений: 110
Регистрация: 8-01-07
Из: Украина
Пользователь №: 24 216



Тоесть программа работает правильно, это симулятор идиализирует возможности МК и реальные измерения частоты 6 МГц возможны но не будут постоянны.
Я правильно понял?

То GM.
Вы не могли бы обяснить все что необходимо для реализации цикла приведенного Вами (с его помощью можно менять время измерения):
Код
while ((currenTime-oldTime)<OneSec)    //п.1-условно, можно сделать по-другому
{
}

Что считает время currenTime, oldTime?

Спасибо.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Aug 23 2007, 21:56
Сообщение #82


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Яrik @ Aug 23 2007, 16:43) *
То есть программа работает правильно, это симулятор идиализирует возможности МК и реальные измерения частоты 6 МГц возможны но не будут постоянны. Я правильно понял?

Неправильно. Для 8-МГц аврки выше 4 МГц вы принципиально ничего не померяете.
Цитата(Яrik @ Aug 23 2007, 16:43) *
То GM.
Вы не могли бы обяснить все что необходимо для реализации цикла приведенного Вами (с его помощью можно менять время измерения):
Код
while ((currenTime-oldTime)<OneSec)    //п.1-условно, можно сделать по-другому
{
}

Что считает время currenTime, oldTime?

Ну ещё раз, вот вам варианты, на выбор:

1) Поставьте тупой цикл на Тизм (например, Тизм={0.1, 1.0, 10.0}) в виде программной задержки - в цикле вызываете подпрограмму задержки на 1 мс. Меняя счётчик цикла, будете менять время счёта.

2) Вызовите некую подпрограмму с подходящим временем работы Тизм. После её окончания можно приступать к измерению частоты.

3) Таймер1 у вас фактически является счетчиком некоего времени, поэтому вычисляйте
Т=(unsigned long int)(Perepol_Timer1)*65536+count_T1 - N1, до тех пор пока оно не станет равным заданному Тизм.

4) Заведите отдельный таймер, если он есть, запустите его, пусть он взводит флаг через Тизм, в фоне опрашивайте флаг таймера, как только он взведён - наступило время измерения.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Tomade
сообщение Jul 21 2008, 07:04
Сообщение #83


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 26-05-08
Пользователь №: 37 817



Знатоки, подскажите, пожалуйста, как реализовать частотомер по методу GM на ATMega64L. По описанию, у этого микроконтроллера нет входа для внешнего сигнала T0. Может, можно вместо таймера Т0 использовать таймер Т2?
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 21 2008, 11:24
Сообщение #84


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Не только можно, но и нужно. Как сделать - почитайте весь топик повнимательнее, этого достаточно.

На этом проце вообще можно сделать частотомер до 4 МГц (то есть до Fclk/2) с программой на си (мечта Яrik'а) с непревзойдённой точностью, скажем, до ±0,005 Гц на одном измерении, а с обработкой и того меньше.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 21 2008, 12:59
Сообщение #85


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(=GM= @ Jul 21 2008, 14:24) *
На этом проце вообще можно сделать частотомер до 4 МГц (то есть до Fclk/2) с программой на си (мечта Яrik'а) с непревзойдённой точностью, скажем, до ±0,005 Гц на одном измерении, а с обработкой и того меньше.

Только не надо про ±0,005 Гц говорить.
Не будет на частотах 4Mhz такой точности. Подставьте числа в ваши же формулы. Fo = 8Mhz, Fx=4Mhz.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 21 2008, 13:31
Сообщение #86


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(defunct @ Jul 21 2008, 11:59) *
Только не надо про ±0,005 Гц говорить.
Не будет на частотах 4Mhz такой точности. Подставьте числа в ваши же формулы. Fo = 8Mhz, Fx=4Mhz.

Ну подставьте сами. А в качестве интервала измерения возьмите 100 секунд. И заметьте, это оценка предельно допустимой ошибки, реальная ошибка будет всегда меньше.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 21 2008, 14:36
Сообщение #87


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(=GM= @ Jul 21 2008, 16:31) *
А в качестве интервала измерения возьмите 100 секунд.

Прибор с абсолютной точностью при бесконечном интервале измерения? smile.gif

Цитата
скажем, до ±0,005 Гц на одном измерении

и что ради ±0,005 Гц на 4Mhz, будем тормозить 100сек и на более низких частотах?
Тогда нет смысла извращаться с захватом. Метод "ворот" проще и даст те же ±0,005 Гц на 100 секундном интервале (разбив его на 100 интервалов с последующим усреднением).

Цитата(=GM= @ Jul 21 2008, 16:31) *
И заметьте, это оценка предельно допустимой ошибки, реальная ошибка будет всегда меньше.

Заметил. Само-собой.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 21 2008, 14:56
Сообщение #88


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



defunct:Прибор с абсолютной точностью при бесконечном интервале измерения?

Ну, 100с явно не бесконечный интервал. Отвлекусь. Когда-то работал в пейджинговой компании, у меня было 12 стоваттных передатчиков, работающих синхронно. Пользовался похожим портативным прибором, сделанным на пике кстати, который давал ДЕСЯТЬ значащих цифр. Период измерения составлял 1с, 10с и 100с. Да, неудобно было ждать результата почти 2 минуты, но это же разовая операция. Не знаю другого доступного способа померить частоту в полевых условиях с такой точностью, находясь на радиорелейной башне на высоте 120 м от земли. (Потом, когда всё было настроено, можно было мерять частоту и корректировать дистанционно из единого центра)

defunct: и что ради ±0,005 Гц на 4MГц, будем тормозить 100сек и на более низких частотах?

Проще написать программу, которая автоматом решает, что делать в конкретном случае. Относительная погрешность составляет ±1,25Е-9, вам что, всегда нужна предельная погрешность? Кстати, покажите, какую точность вы получите методом ворот, измеряя 1 кГц?

defunct:Тогда нет смысла извращаться с захватом. Метод "ворот" проще и даст те же ±0,005 Гц на 100 секундном интервале (разбив его на 100 интервалов с последующим усреднением).

С усреднением метод захвата даст тот же результат, что и метод ворот, но на секундном интервале, а не на 100с.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 21 2008, 15:42
Сообщение #89


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(=GM= @ Jul 21 2008, 17:56) *
Проще написать программу, которая автоматом решает, что делать в конкретном случае

Ок принимается.

Цитата
Кстати, покажите, какую точность вы получите методом ворот, измеряя 1 кГц?

Все те же ±0.5Гц на секундном интервале.
Здесь бесспорно "захвать" выиграет.

Цитата
С усреднением метод захвата даст тот же результат, что и метод ворот, но на секундном интервале, а не на 100с.

Обоснуйте. Fo = 8Mhz, Fx = 4Mhz.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 21 2008, 16:31
Сообщение #90


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



defunct: Все те же ±0.5Гц на секундном интервале. Здесь бесспорно "захвать" выиграет.

Выиграет естественно, но как! С непревзойдённой точностью: ±0.0000625 Гц. Может она и не нужна на таких частотах, но сама получается и на "голой" аврке. А в методе ворот, вообще-то будет ±1 Гц, а не ±0.5Гц, как вы считаете, не пойму?

defunct: Обоснуйте. Fo = 8Mhz, Fx = 4Mhz.

Моим методом (ну не совсем моим, он известен давно, просто я его приспособил к периферии аврки, в этом смысле он мой) за 1 с интервал вполне реально сделать 1000 НЕЗАВИСИМЫХ измерений, потом обработать результат, вот и всё обоснование.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

16 страниц V  « < 4 5 6 7 8 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 16:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01509 секунд с 7
ELECTRONIX ©2004-2016