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

 
 
> TIMER1 в mega8, не могу заставить работать в СТС
Метценгерштейн
сообщение May 7 2010, 22:10
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



вот его определение

Код
        TCCR1A= (1<<COM1A0);
        TCCR1B= (0<<CS02)|(0<<CS01) |(1<<CS00)|(1<<WGM12); //CTC mode, no prescaled
        TIMSK = (1<<TOIE0)|(1<<OCIE1A);   //for counter 0 and counter 1 (1<<TICIE1)|
        OCR1AL= 150; //init OCR1AL for CTC mode
        OCR1AH= 0;

хочу, чтобы счетчик досчитывал до 150, прерывался, там я инк. переменную, дальше он обнуляется и снова считает до 150...

пробовал без
Код
TCCR1A= (1<<COM1A0);

та же фигня.

моя переменная, кот. должна инк. =0 постоянно

вроде как ничего в коде не упустил?

Сообщение отредактировал rezident - May 8 2010, 23:53
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Метценгерштейн
сообщение May 24 2010, 07:20
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Спасибо за развернутый ответ.
т.к. здесь использован макрос Ascold.h, то можно ещё лучше записать, чтобы лампочкой мигать с ровным меандром

void main(void)
static unsigned int timeStamp=CntMC;

for (;;)
{
if ((CntMC-timeStamp)>=LED_BLINK_PERIOD)
cpl (LED); //Ascold.h перевернуть состояние с 0 на 1 и наоборот
timeStamp=CntMC;
}


только не понятно, как поведет себя это дело, когда тиковая переменная приблизится к концу размера своего. Ведь наша локальная переменная будет ждать, что тиковая больше неё на 200, а тиковая дойдет до границы своего размера и обнулится и больше нашей уже никогда не станет. тут не ясный момент.

Где можно почитать про объявления переменный как простые, или как static или как volatile? Или вкратце скажите, чем они отличаются?

и как выделить мой код, чтобы он стал виден как у Вас код?
Go to the top of the page
 
+Quote Post
rezident
сообщение May 24 2010, 18:13
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Метценгерштейн @ May 24 2010, 13:20) *
Ведь наша локальная переменная будет ждать, что тиковая больше неё на 200, а тиковая дойдет до границы своего размера и обнулится и больше нашей уже никогда не станет.
Переменная обнулится, произойдет ее переполнение, а счет продолжится дальше. Потеряется старший разряд, но этот момент ни на что не повлияет, т.к. вычитание в сравнении беззнаковое!
Для наглядности пример.
Допустим CntMC и timeStamp 16-и битные переменные (макс. значение 65535 в десятичном виде или 0xFFFF в 16-иричном). Значение переменной timeStamp - 65530, CntMC - 210. Совершенно точно прошло более 200 тиков прерываний, а именно (65535-65530)+1+210=216. Беззнаковое вычитание 210-65530 даст точно такой же результат - 216. 216>200, поэтому условие в сравнении ((CntMC-timeStamp)>=200) будет истинно.
Поясню откуда числа.
65535-65530 это разница в значениях счетчика до момента его переполнения.
1 - это учитываем состояние нуль.
210 - текущее значение тиковой переменной, после переполнения.
Если сомневаетесь, то переведите числа в 16-тиричный вид и посчитайте сами на виндусовом калькуляторе в инженерном режиме, ограничив его разрядность 2-мя байтами .
Цитата(Метценгерштейн @ May 24 2010, 13:20) *
Где можно почитать про объявления переменный как простые, или как static или как volatile? Или вкратце скажите, чем они отличаются?
В "букваре" языка Си. Или в стандарте Си. Вот только volatile это квалификатор, а не тип переменной, определяющий область ее распределения и видимости.
Цитата(Метценгерштейн @ May 24 2010, 13:20) *
и как выделить мой код, чтобы он стал виден как у Вас код?
Используйте тэги [ code ] и [ codebox ] для оформления цитаты кода. Кнопочка в редакторе вставляет первый из них. Второй, к сожалению, только вручную, редактированием сообщения.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Метценгерштейн   TIMER1 в mega8   May 7 2010, 22:10
- - Палыч   Цитата(Метценгерштейн @ May 8 2010, 02:10...   May 8 2010, 04:54
- - Метценгерштейн   т.е. поменять местами КодOCR1AL= 150; //init OCR1A...   May 8 2010, 05:36
|- - Палыч   Цитата(Метценгерштейн @ May 8 2010, 09:36...   May 8 2010, 06:39
- - Метценгерштейн   Кодchar __low_level_init (void) { //this...   May 8 2010, 06:45
|- - Палыч   Цитата(Метценгерштейн @ May 8 2010, 10:45...   May 8 2010, 06:58
- - Метценгерштейн   в этой таблице говорится, что если я хочу режим СТ...   May 8 2010, 07:20
|- - Палыч   Цитата(Метценгерштейн @ May 8 2010, 11:20...   May 8 2010, 09:57
|- - Метценгерштейн   "TOV1 Flag Set on" одного не пойму, в та...   May 8 2010, 17:22
- - Метценгерштейн   заработало все- почему- то копирование из даташита...   May 8 2010, 19:30
- - sigmaN   При использовании Си, чтобы не париться с порядком...   May 9 2010, 16:57
|- - demiurg_spb   Цитата(sigmaN @ May 9 2010, 20:57) При ис...   May 18 2010, 17:14
- - Метценгерштейн   можно на примере, напрмиер, для UBRRL = ((OSC / ...   May 18 2010, 14:25
- - Метценгерштейн   это понятно, имел ввиду указатель на адрес. Тут не...   May 18 2010, 17:20
|- - demiurg_spb   Цитата(Метценгерштейн @ May 18 2010, 21:2...   May 18 2010, 17:36
- - Метценгерштейн   все, понял, что нельзя для меги так   May 19 2010, 07:05
|- - demiurg_spb   Уффф.... :-)   May 19 2010, 07:54
- - Метценгерштейн   думаю, надо делать на прерываниях, например вот та...   May 21 2010, 21:18
- - Метценгерштейн   к сожалению, модератор перенес тему сюда, а что я ...   May 22 2010, 07:55
|- - demiurg_spb   Цитата(Метценгерштейн @ May 22 2010, 11:5...   May 22 2010, 09:14
|- - rezident   Цитата(Метценгерштейн @ May 22 2010, 13:5...   May 22 2010, 18:28
- - sigmaN   по-моему это вечный спор: лучше ли делать таймер г...   May 23 2010, 12:54
|- - rezident   Цитата(sigmaN @ May 23 2010, 18:54) по-мо...   May 23 2010, 19:06


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

 


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


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