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

 
 
> неправильно считает дефайн и таймер
the_victor
сообщение Dec 13 2007, 15:32
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 7-04-07
Из: Пермь
Пользователь №: 26 848



вобщем есть такие фрагменты кода из проекта, которые еще работает только частично.
#define F_CPU 8000000 //тактовая частота
#define TIC0 ((unsigned char)(F_CPU/(1024*255))) //столько раз в секунду переполняется таймер 0
#define SCROLL_TIME ((unsigned char)(0,5*TIC0))

SIGNAL(TIMER0_OVF_vect)
{
tics.led_scroll++;
}

main()
{
//тактовая для таймера0 = F_CPU/1024
//разрешаем прерывание по переполнению таймера0
TCCR0=(1<<CS02) | (1<<CS00);
TIMSK|=(1<<TOIE0);

if ( tics.led_scroll == SCROLL_TIME )
{
tics.led_scroll = 0;
и тд прокрутка бегущей строки.
}
}

в общнм проблема: по логике вещей таймер переполняется 8000000(такт частота) / ( 1024(делитель)*256(разрядность счетной переменной) ). если ето сделать через дефайн, то работает, прокручивается на глаз где-то за пол секунды. если посчитать на калькуляторе то получим значение 30. но компилятор вычисяляет значение 124(выводил на индикатор). при том если поставить в условие 30, то прокрутка становится очень быстрой. то есть таймер срабатывает в несколько раз чаще чем должен и при этом дефайн вычисляется во столько же раз больше. ето не поддается моему пониманию.
я думаю что как то неверно преобразуются типы. но все равно ничего не понимаю.
если в формуле дефайна делить на 255 то работает, а если на 256 (что точнее), то программа даже не заходит в прокрутку, бегущая строка замирает. все типы uint8_t.
warning: integer overflow in expression в условии сравнения. WinAVR-20070525
в архиве все что я накодил. бегущая строка работают, кнопки не не так как должны(срабатывает длинное нажатие, но это все из за этих глючных дефайнов). в принципе можно смириться, но охото понять почему так, и для длительной задерки 5сек для кнопки не охото вводить 16бит пременную.
Go to the top of the page
 
+Quote Post



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

 


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


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