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

 
 
> Вопрос по режиму захвата таймера Т1, ATmega8
straighter
сообщение Mar 30 2016, 14:28
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 29-06-12
Пользователь №: 72 555



Уважаемые форумчане, помогите разобраться... ATmega8 работает с кварцем 8 Мгц. На вход встроенного компаратора подаю синусоиду 20 кГц от стабильного генератора. По положительному перепаду на выходе компаратора происходит захват значения в Timer/Counter1. Возникает прерывание, значение f увеличивается на 1. Когда f достигает значения d, то PORTC.2 устанавливается в 1 на время 10мкс, а затем снова устанавливается в 0. После этого в основном цикле программы PORTC.3 устанавливается в 1 на время 10мкс, а затем снова устанавливается в 0.
Когда я задаю значение d меньше или равное 255, то все работает нормально, после каждого импульса на выходе PORTC.2 возникает импульс выходе PORTC.3, как и должно быть. Но если я задаю значение d больше или равное 256, то импульсы на выходе PORTC.3 так и продолжают идти, но не каждому из них предшествует импульс на выходе PORTC.2.
Пробовал разные частоты синусоиды - то же самое.
В чем причина?

Фрагмент кода:
CODE

unsigned int d=255; // Заданное кол-во НЧ-периодов счета (кол-во сработок компаратора)

unsigned int f; // Текущее кол-во НЧ-периодов счета (кол-во сработок компаратора)

// Timer1 input capture interrupt service routine
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
// Place your code here

PORTC.0=1;
delay_us(10);
PORTC.0=0;

if (f==1) {

PORTC.1=1;
delay_us(10);
PORTC.1=0;

};

if (f==(d)) {

PORTC.2=1;
delay_us(10);
PORTC.2=0;

};

f=f+1;

}

void main(void)
{

f=0;

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

while (1)
{
// Place your code here

while (f<(d+1));

#asm("cli")

PORTC.3=1;
delay_us(10);
PORTC.3=0;

delay_us(100);

PORTC.4=1;
delay_us(10);
PORTC.4=0;

f=0;

#asm("sei")

};
}


Осциллограммы :

d=255; синий цвет - вых. РС2; желт. цвет - вых. РС3; Здесь все правильно и понятно:

Прикрепленное изображение


d=256; синий цвет - вых. РС2; желт. цвет - вых. РС3; Видно, что нет импульса на РС2, а соответствующий импульс на РС3 есть:

Прикрепленное изображение


Желт. цвет - сигнал на входе компаратора; синий цвет - на вых. РС0 (смотри код программы):

Прикрепленное изображение
Go to the top of the page
 
+Quote Post



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

 


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


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