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

 
 
> MegaAVR, Timer
Duduka
сообщение Feb 28 2007, 11:49
Сообщение #1





Группа: Новичок
Сообщений: 12
Регистрация: 28-02-07
Пользователь №: 25 758



[font=Times New Roman][size=4]
Привет, всем посетителям форума!
Возникла проблема с мегой 128...Может кто-нибудь из специалистов обратит внимание и разъяснит неопытному пользователю в чем проблема?

А вопрос в следующем...пытаюсь измерить период с точностью до 0,1 мкс. Для этого задействована пара счетчиков (вариантов уже накопилось множество, поэтому прикладываю самый простой на, мой взгляд). Измеряемый диапазон частот 600 Гц-2,5 кГц

Используется два таймера:
-Т/С0-генерирует 102, 4 кГц, при каждом совпадении счетного регистра осуществляется инкремент регистров-результата;
-Т/С2-считает импульсы с датчика-для обеспечения заданной точности 100*Т .
Как только досчитали до 100 останавливаем , обнуляем таймеры и передаем по ком порту на комп.
Мегу тактирую 7,3728 МГц (реально 7,3724 МГц)

Проблема в том, что откудо-то берется погрешность: при такой конфигурации программы 0, 2 мкс на всех измеряемых частотах...Но если расширить возможности программы и передавать на комп после различных преобразований, то результирующее число заметно искажается причем чем меньше измеряемая частота, тем больше прогрешность. Т.е. фактически, если между остановкой и новым запуском счетчиков вставить цикл (инкремент регистров), то в зависимости от к-ва выполняемых операций, меняется результат в результирующих регистрах счетчиков. Не ясно почему?

Работаю с STK500/501, AVR Studio 4.12 и самодельным Jtag ICE.
В качестве сигнала с датчика использую кварц STK500.
Прикрепленные файлы
Прикрепленный файл  mega128.rar ( 1.74 килобайт ) Кол-во скачиваний: 100
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
IgorKossak
сообщение Feb 28 2007, 13:42
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



1. Прерывание OC2addr_int: не содержит инструкции reti или я что-то не понял?
2. В прерывании OC0addr_int: строка cpi numberL,0xFF явно лишняя.
3. С Вашими настройками нулевого таймера полная каша. Проверьте то ли Вы пишете и в те ли регистры.
Go to the top of the page
 
+Quote Post
Duduka
сообщение Feb 28 2007, 17:15
Сообщение #3





Группа: Новичок
Сообщений: 12
Регистрация: 28-02-07
Пользователь №: 25 758



Цитата(IgorKossak @ Feb 28 2007, 13:42) *
1. Прерывание OC2addr_int: не содержит инструкции reti или я что-то не понял?
2. В прерывании OC0addr_int: строка cpi numberL,0xFF явно лишняя.
3. С Вашими настройками нулевого таймера полная каша. Проверьте то ли Вы пишете и в те ли регистры.


По поводу прерывания: да инструкции действительно нет, но там есть команда

rjmp wait_write

но при таком выходе из п/п мне следовало бы заново проинициализировать стек?!

По поводу лишней строчки согласна, т.к. проверяю состояние флага Z.

А вот, что за каша в настройках нулевого таймера??

out ASSR,zero; выбираем синхронный режим
ldi temp,0x23 ; модуль счета
out OCR0,temp ;
ldi temp,0x99 ; режим работы
out TCCR0,temp ;
out TCNT0,zero ; обнуляем счетный регистр

В чем ошибка?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Feb 28 2007, 18:17
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Duduka @ Feb 28 2007, 16:15) *
По поводу прерывания: да инструкции действительно нет, но там есть команда

rjmp wait_write

но при таком выходе из п/п мне следовало бы заново проинициализировать стек?!

Да если бы только в этом дело. Сейчас может этого и хватит, но при минимальном развитии программы такой подход крайне неэлегантен. Поэтому подпрограммы и прерывания (особенно) желательно завершать штатным образом. Да и на С в будущем проще будет портировать.
Цитата(Duduka @ Feb 28 2007, 16:15) *
По поводу лишней строчки согласна, т.к. проверяю состояние флага Z.

Строчка не столько лишняя, сколько ошибочная, т. к. инкремент старшей части надо делать при переходе младшей в 0х00, а не в 0xFF.
Цитата(Duduka @ Feb 28 2007, 16:15) *
А вот, что за каша в настройках нулевого таймера??

out ASSR,zero; выбираем синхронный режим
ldi temp,0x23 ; модуль счета
out OCR0,temp ;
ldi temp,0x99 ; режим работы
out TCCR0,temp ;
out TCNT0,zero ; обнуляем счетный регистр

В чем ошибка?

Здесь я имел в виду навороченность настроек TCCR0.
На мой взгляд управлять выходом OC0 нет необходимости, т. к. Вы принудительно дёргаете shinad,inter0. Настройка в этом случае будет выглядеть как ldi temp,0x09.
Проверьте, может я и не прав.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Duduka   MegaAVR   Feb 28 2007, 11:49
- - IgorKossak   Цитата(Duduka @ Feb 28 2007, 10:49) Испол...   Feb 28 2007, 11:55
|- - Duduka   [font=Times New Roman][size=4] А прикрепленный фа...   Feb 28 2007, 13:11
|- - Duduka   Да, вы правы, ненчего лишний раз дергать вывод... ...   Feb 28 2007, 19:21
- - SasaVitebsk   Прерывания ни когда не дадут точный временной инте...   Feb 28 2007, 14:17
|- - Duduka   Цитата(SasaVitebsk @ Feb 28 2007, 14:17) ...   Feb 28 2007, 18:03
- - SasaVitebsk   Цитата(Duduka @ Feb 28 2007, 12:49) А воп...   Feb 28 2007, 23:48
|- - Duduka   Цитата(SasaVitebsk @ Feb 28 2007, 23:48) ...   Mar 2 2007, 16:46
- - bodja74   Саша ,у таймера есть прерывание по захвату,так что...   Mar 1 2007, 00:59
- - IgorKossak   Действительно, варианта с Input Capture было бы вп...   Mar 1 2007, 10:55
- - SasaVitebsk   Согласен с обоими. Конечно любой разработчик при з...   Mar 2 2007, 00:02
|- - =GM=   Поскольку входной сигнал асинхронен по отношению к...   Mar 2 2007, 02:30
|- - SasaVitebsk   Цитата(=GM= @ Mar 2 2007, 03:30) Поскольк...   Mar 2 2007, 03:32
|- - =GM=   Цитата(SasaVitebsk @ Mar 2 2007, 00:32) Ц...   Mar 2 2007, 16:44
|- - Duduka   [quote name='=GM=' date='Mar 2 2007, 1...   Mar 2 2007, 17:57
|- - =GM=   Цитата(Duduka @ Mar 2 2007, 14:57) Знаете...   Mar 2 2007, 18:48
- - SasaVitebsk   Да... Лоханулся... Измерять N-периодов мне почему-...   Mar 3 2007, 01:08


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th July 2025 - 19:02
Рейтинг@Mail.ru


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