roboforum.ru

Технический форум по робототехнике.

изменение частоты срабатывания таймеров АТmega128???

изменение частоты срабатывания таймеров АТmega128???

wolly » 19 ноя 2007, 13:49

Пробовал ли кто-нибудь изменять частоту срабатывания таймеров по ходу выполнения программы?
Вот например:
при инициализации частота переполнения TIM1 100Hz задана стартовым числом (TCNT1H=0xF6; TCNT1L=0xFE;)
по ходу программы необходимо изменить частоту срабатывания TIM1 до 10Hz.

Пробовал следующий прием: if(что-либо) { #asm("cli") TCNT1H=0xA5; TCNT1L=0xFE; #asm("sei") delay_us(100);}
Контроллер отвечал следующим - таймер TIM1 "затыкался" на некоторое время (видимо на время заданное новым стартовым числом + задержка + циклы) и... начинал исправно отсчитывать срабатывания на старой частоте 100Hz :shock:

SOS SOS!!!

Re: изменение частоты срабатывания таймеров АТmega128???

avr123.nm.ru » 19 ноя 2007, 15:43

В этом случае нужно посмотреть АСМ листинг и содержимое регистров таймера в симуляторе - т.е. проверить во что конкретно превращается ваш Си код.

Re: изменение частоты срабатывания таймеров АТmega128???

Vooon » 19 ноя 2007, 17:22

сдается мне, что вы те же константы перегружаете в прерывании

Re: изменение частоты срабатывания таймеров АТmega128???

rig » 19 ноя 2007, 19:57

при настройке таймера в начале программы есть такой код(цифры от балды из моей программы, у вас другие но принцип тотже)
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0xD8;
OCR0A=0x00;
OCR0B=0x00;

далее в ПП таймера есть такой
// Reinitialize Timer 0 value
TCNT0=0xFE;

А, ваш случай посложней вот так в ПП таймера возвращаются старые значения.
// Reinitialize Timer 1 value
TCNT1H=0xF7;
TCNT1L=0xBD;

вам надо объявить какую нибудь переменную типа my_TCNT1_H, my_TCNT1_L. и менять данные в ней.
// Reinitialize Timer 1 value
TCNT1H=my_TCNT1_H;
TCNT1L=my_TCNT1_L;


Иницилизация в начале программы
my_TCNT1_H=0xF0; // тут ваши значения
my_TCNT1_L=0xBD; // тут ваши значения

в теле по смыслу:
if(что-либо)
{ #asm("cli") my_TCNT1_H=0xA5; my_TCNT1_L=0xFE; #asm("sei") [/code]delay_us(100);}


ПС, как в теге CODE выделить жирным строку/слово/символ?

в теге CODE это невозможно, тк в CODE находится plain text. <V>

Re: изменение частоты срабатывания таймеров АТmega128???

wolly » 23 ноя 2007, 01:21

rig писал(а):...как в теге CODE выделить жирным строку?

Зачем именно в теге CODE, если ты выделяешь вот так "[b] [\b]" ?

По теме
:good: Ур-а-а заработало! Тормозит и ускоряется. А дело как всегда в мелочи - ведь видел же строку // Reinitialize Timer 1 value, но почему-то не вдумался в смысл прочитанного :oops:

Re: изменение частоты срабатывания таймеров АТmega128???

rig » 23 ноя 2007, 08:28

wolly писал(а):Зачем именно в теге CODE, если ты выделяешь вот так &quot;[b] [\b]&quot; ?

красивенько же код получается как был задуман. А жирным чтоб внимние акцетрировать.
wolly писал(а): Ур-а-а заработало!

воо и славно, глядишь и меня чему нибудь научишь. железяку то покажи :oops:

Re: изменение частоты срабатывания таймеров АТmega128???

wolly » 24 ноя 2007, 00:25

rig писал(а):железяку то покажи

Нет пока железячки :oops: Есть только два ДШ200, Техническое Задание, мое желание и обещание руководства колледжа выделить финансы по представленной смете на компоненты :D
Все крутится в VMLab-e


Rambler\'s Top100 Mail.ru counter