Цитата(ARV @ Jul 22 2010, 12:20)

Код
#define MAX_PHASE 9500UL
#define TDIV 8
#define CONCAT(x,y) x ## y
#define DIVISOR(x) CONCAT(TIMER_CLK_DIV_,x)
#define PRESCALER DIVISOR(TDIV)
#define MAX_OCR (((F_CPU * (MAX_PHASE/TDIV) / 1000000)))
#define TCNT_INIT ((UINT16_MAX + 1UL)- MAX_OCR)
вроде бы все верно (на странно расставленные скобки в MAX_OCR не обращайте внимания - это я от безысходности расставлял их). однако следующая строка
Код
printf_P(PSTR("SI:%u;%u;%u\n"),200,MAX_OCR,TCNT_INIT);
выводит в консоль
ума не приложу, в чем дело! F_CPU у меня 11059200UL, ожидаю, что MAX_OCR будет тринадцать тысяч с хвостиком - ан нет
что не так?!
MAX_OCR = 11059200 * (9500UL / 8) / 1000000 = 13127270400UL / 1000000
Дальше все зависит от того, что такое UL. Подозреваю, что это uint32_t, тогда 13127270400UL = 0x0E724000 и вы получаете 242 в результате...
Скорее всего поможет ULL...