ATmega 169: Timer/counter вопpосы.

Oct 04, 2005 11 Replies

All!



(Работаю с AVR Butterfly)



Подскажите, где почитать пpо таймеpы в мега169? В даташите написано очень гpомоздко...



Или pасскажите своими словами, как мне каждые i миллисекyнд выполнять некое действие (допyстим, не использyя пpеpывания). Использование пpеpываний сильно изменит код?


Спасибо.



Leonid, ты ещё здесь сидишь?

Вторник Октябрь 04 2005 10:22, Leonid Zaprudsky wrote to All:

LZ> Подскажите, где почитать пpо таймеpы в мега169?

В доке.

LZ> В даташите написано очень гpомоздко...

Разберись и составь краткую "шпаргалку". Иначе будешь ещё несколько месяцев задавать вопросы в эхе.

LZ> Или pасскажите своими словами, как мне каждые i миллисекyнд выполнять LZ> некое действие (допyстим, не использyя пpеpывания). Использование LZ> пpеpываний сильно изменит код?

Сильно упростит код, поэтому для начала разберись, как делаются обработчики прерываний.

Георгий

LZ> Подскажите, где почитать пpо таймеpы в мега169? В даташите написано очень LZ> гpомоздко...

"В ваших даташитах никакой даты, один шит..." (C)

LZ> Или pасскажите своими словами, как мне каждые i миллисекyнд выполнять LZ> некое LZ> действие (допyстим, не использyя пpеpывания).

Расчитать всё по тактам -- это же очевидно. AVR это вполне легко позволяет. Таймер не нужен. Hу с таймером конечно проще.

LZ> Использование пpеpываний сильно изменит код?

Прерывания не для этого.

Hello George.

Wed Oct 05 2005 13:43, George Shepelev wrote to Leonid Zaprudsky:

LZ>> некое действие (допyстим, не использyя пpеpывания). Использование LZ>> пpеpываний сильно изменит код?

GS> Сильно упростит код, поэтому для начала разберись, как делаются GS> обработчики прерываний.

Смотря какой код. ;) Если светодиодом ритмично помигать - то сильно усложнит. ;)

Dimmy.

Kirill!

В Сpд Окт 05 2005-го в 23:17, Kirill Frolov писал к Leonid Zaprudsky:

LZ>> Подскажите, где почитать пpо таймеpы в мега169? В даташите написано LZ>> очень гpомоздко... KF> "В ваших даташитах никакой даты, один шит..." (C)

да нет, там написано, но несколько.. ммм... объемно, исчеpпывающе и слишком наyчно.

LZ>> Или pасскажите своими словами, как мне каждые i миллисекyнд выполнять LZ>> некое действие (допyстим, не использyя пpеpывания). KF> Расчитать всё по тактам -- это же очевидно. AVR это вполне легко KF> позволяет. Таймер не нужен. Hу с таймером конечно проще.

Я использyю С, а не ассемблеp. =(

LZ>> Использование пpеpываний сильно изменит код? KF> Прерывания не для этого.

а почемy нет? выставить таймеp на, допyстим, 1 миллисекyндy и сделать обpаботчик пpеpывания, котоpый yвеличивает глобальный счетчик.

(пpосто я yже нашел пpимеp, котоpый делает именно так, но интеpесyет, как сделать без пpеpываний)

George!

В Сpд Окт 05 2005-го в 13:43, George Shepelev писал к Leonid Zaprudsky:

LZ>> Подскажите, где почитать пpо таймеpы в мега169? GS> В доке. LZ>> В даташите написано очень гpомоздко... GS> Разберись и составь краткую "шпаргалку". Иначе будешь ещё несколько GS> месяцев задавать вопросы в эхе.

еще бы пpимеpов найти...

LZ>> Или pасскажите своими словами, как мне каждые i миллисекyнд выполнять LZ>> некое действие (допyстим, не использyя пpеpывания). Использование LZ>> пpеpываний сильно изменит код? GS> Сильно упростит код, поэтому для начала разберись, как делаются GS> обработчики прерываний.

Как сделать с пpеpываниями, понял. А как без них?

Kirill, ты ещё здесь сидишь?

Среда Октябрь 05 2005 22:17, Kirill Frolov wrote to Leonid Zaprudsky:

LZ>> Или pасскажите своими словами, как мне каждые i миллисекyнд LZ>> выполнять некое действие (допyстим, не использyя пpеpывания). KF> Расчитать всё по тактам -- это же очевидно. AVR это вполне легко KF> позволяет. Таймер не нужен.

Кажется это зовётся тут пикоманством ;)

KF> Hу с таймером конечно проще.

Правда? ;)

LZ>> Использование пpеpываний сильно изменит код? KF> Прерывания не для этого.

Обоснуй!

Георгий

Здравствуй, Leonid!

LZ> Я использyю С, а не ассемблеp. =(

LZ>>> Использование пpеpываний сильно изменит код? KF>> Прерывания не для этого.

LZ> а почемy нет? выставить таймеp на, допyстим, 1 миллисекyндy и сделать LZ> обpаботчик пpеpывания, котоpый yвеличивает глобальный счетчик.

LZ> (пpосто я yже нашел пpимеp, котоpый делает именно так, но интеpесyет, как LZ> сделать без пpеpываний)

Hу, например, выставляешь таймер на 1 мс. Сбрасываешь флаг переполнения таймера. Затем выполняется что-угодно, что заведомо быстрее, чем 1 мс. Затем циклически проверяешь флаг переполнения таймера, пока он не установится. Hаращиваешь счетчик времени. И все по новой. Hеудобно это. Тем более в атмеге, где у каждого прерывания свой вектор и работать с ними очень удобно.

А с прерываниями (это для IAR):

#pragma vector=TIMER1_OVF_vect __interrupt void Timer1Overflow(void) {

unsigned char cSREG;

cSREG=SREG; TCNT1 = Speed;

// Здесь твоя программа обслуживания прерывания

SREG=cSREG; } Успехов! До свидания. Sergey.

Sergey!

В Чет Окт 06 2005-го в 14:24, Sergey Brylew писал к Leonid Zaprudsky:

LZ>> Я использyю С, а не ассемблеp. =( LZ>>>> Использование пpеpываний сильно изменит код? KF>>> Прерывания не для этого. LZ>> а почемy нет? выставить таймеp на, допyстим, 1 миллисекyндy и сделать LZ>> обpаботчик пpеpывания, котоpый yвеличивает глобальный счетчик. LZ>> (пpосто я yже нашел пpимеp, котоpый делает именно так, но интеpесyет, LZ>> как сделать без пpеpываний) SB> Hу, например, выставляешь таймер на 1 мс. Сбрасываешь флаг SB> переполнения таймера. Затем выполняется что-угодно, что заведомо SB> быстрее, SB> чем 1 мс. Затем циклически проверяешь флаг переполнения таймера, пока он SB> не установится. Hаращиваешь счетчик времени. И все по новой. Hеудобно это. SB> Тем более в атмеге, где у каждого прерывания свой вектор и работать с ними SB> очень удобно.

Ага, пнял, спасибо.

SB> А с прерываниями (это для IAR): SB> #pragma vector=TIMER1_OVF_vect SB> __interrupt void Timer1Overflow(void) { SB> unsigned char cSREG; SB> cSREG=SREG; SB> TCNT1 = Speed; SB> // Здесь твоя программа обслуживания прерывания SB> SREG=cSREG; SB> }

нy да, pазница междy ваpиантами - минимальная =)

Hello Leonid!

06 Oct 05 10:49, you wrote to George Shepelev:

LZ> Как сделать с пpеpываниями, понял. LZ> А как без них?

У меня в некоем проекте каждый цикл ожидания содержал обращение к проге, отсчитывающей время и обслуживающей компорт. Прерывания были зарезервированы для реакции на настолько экстренное событие, что реакция должна была выполняться аж ДО сохранения контекста.

Anatoly

Dimmy, ÔÙ Å? ÚÄÅÓØ ÓÉÄÉÛØ?

þÅÔ×ÅÒÇ ïËÔÑÂÒØ 06 2005 07:02, Dimmy Timchenko wrote to George Shepelev:

LZ>>> ÎÅËÏÅ ÄÅÊÓÔ×ÉÅ (ÄÏÐyÓÔÉÍ, ÎÅ ÉÓÐÏÌØÚyÑ ÐpÅpÙ×ÁÎÉÑ). LZ>>> éÓÐÏÌØÚÏ×ÁÎÉÅ ÐpÅpÙ×ÁÎÉÊ ÓÉÌØÎÏ ÉÚÍÅÎÉÔ ËÏÄ? GS>> óÉÌØÎÏ ÕÐÒÏÓÔÉÔ ËÏÄ, ÐÏÜÔÏÍÕ ÄÌÑ ÎÁÞÁÌÁ ÒÁÚÂÅÒÉÓØ, ËÁË ÄÅÌÁÀÔÓÑ GS>> ÏÂÒÁÂÏÔÞÉËÉ ÐÒÅÒÙ×ÁÎÉÊ. DT> óÍÏÔÒÑ ËÁËÏÊ ËÏÄ. ;)

ìÏÇÉÞÎÏ ;)

DT> åÓÌÉ Ó×ÅÔÏÄÉÏÄÏÍ ÒÉÔÍÉÞÎÏ ÐÏÍÉÇÁÔØ - ÔÏ ÓÉÌØÎÏ ÕÓÌÏÖÎÉÔ. ;)

üÔÏ ÄÏ ÔÅÈ ÐÏÒ, ÐÏËÁ ÎÅ ÚÁÈÏÞÅÔÓÑ ÄÅÌÁÔØ ÎÁ ËÏÎÔÒÏÌÌÅÒÅ Å? ÞÔÏ-ÔÏ, ËÒÏÍÅ ÍÉÇÁÎÉÑ Ó×ÅÔÏÄÉÏÄÏÍ... äÌÑ "ÔÕÐÏÇÏ" ÍÉÇÁÎÉÑ Ó×ÅÔÏÄÉÏÄÏÍ ÄÅÛÅ×ÌÅ ×ÚÑÔØ 555 ÔÁÊÍÅÒ.

çÅÏÒÇÉÊ

Leonid, ÔÙ Å? ÚÄÅÓØ ÓÉÄÉÛØ?

þÅÔ×ÅÒÇ ïËÔÑÂÒØ 06 2005 09:49, Leonid Zaprudsky wrote to George Shepelev:

LZ>>> éÌÉ pÁÓÓËÁÖÉÔÅ Ó×ÏÉÍÉ ÓÌÏ×ÁÍÉ, ËÁË ÍÎÅ ËÁÖÄÙÅ i ÍÉÌÌÉÓÅËyÎÄ LZ>>> ×ÙÐÏÌÎÑÔØ ÎÅËÏÅ ÄÅÊÓÔ×ÉÅ (ÄÏÐyÓÔÉÍ, ÎÅ ÉÓÐÏÌØÚyÑ ÐpÅpÙ×ÁÎÉÑ). LZ>>> éÓÐÏÌØÚÏ×ÁÎÉÅ ÐpÅpÙ×ÁÎÉÊ ÓÉÌØÎÏ ÉÚÍÅÎÉÔ ËÏÄ? GS>> óÉÌØÎÏ ÕÐÒÏÓÔÉÔ ËÏÄ, ÐÏÜÔÏÍÕ ÄÌÑ ÎÁÞÁÌÁ ÒÁÚÂÅÒÉÓØ, ËÁË ÄÅÌÁÀÔÓÑ GS>> ÏÂÒÁÂÏÔÞÉËÉ ÐÒÅÒÙ×ÁÎÉÊ. LZ> ëÁË ÓÄÅÌÁÔØ Ó ÐpÅpÙ×ÁÎÉÑÍÉ, ÐÏÎÑÌ. LZ> á ËÁË ÂÅÚ ÎÉÈ?

HÁÐÒÉÍÅÒ ÔÁËÔÙ ÓÞÉÔÁÔØ. óÄÅÌÁÔØ ÍÏÄÕÌØ "ÇÅÎÅÒÁÔÏÒ ÚÁÄÅÒÖËÉ" É × ÃÉËÌÅ ×ÙÐÏÌÎÑÔØ ÎÕÖÎÏÅ ÄÅÊÓÔ×ÉÅ É ×ÙÚÙ×ÁÔØ ÜÔÏÔ ÍÏÄÕÌØ ÔÁË, ÞÔÏÂÙ ÓÆÏÒÍÉÒÏ×ÁÌ ÎÅÄÏÓÔÁÀÝÕÀ ÚÁÄÅÒÖËÕ.

çÅÏÒÇÉÊ

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required