Как померять мегагерцы?

Обсуждаем цифровые устройства...
svamoscow
Родился
Сообщения: 17
Зарегистрирован: Чт июл 31, 2008 14:30:05
Откуда: Москва

Сообщение svamoscow »

Вобще unsugned long int from 0 to 4294967295. Число F_CPU * TCNT1 / (TCNT0 + 256 * t0) не такое уж и большое получается, явно укладывается в эти пределы. Только вот числитель великоват, по хоже мк считает сначала числитель и офигевает, а потом уже делит. Пробовал сделать TCNT1 / (TCNT0 + 256 * t0) float или double (кстати в чём различие?), а затем умножить на F_CPU

Код: Выделить всё

unsigned long int frequ = 123456789;
float freq;
.............
freq = TCNT1 / (TCNT0 + 256 * t0);
frequ = freq * F_CPU;

получаются всегда нули непонятно почему :( . Да, ещё одна проблема когда частота слишком большая цифры низких порядков из-за неточности измерения начинают бешено бегать, как бы это исправить думаю, куда бы влепить задержку?
svamoscow
Родился
Сообщения: 17
Зарегистрирован: Чт июл 31, 2008 14:30:05
Откуда: Москва

Сообщение svamoscow »

Так что делать товарисчи?? Может посоветуете большие числа как нибудь через ассемблер умножить? Мне бы прям программой, если не трудно, а то я ассемблер не знаю совсем.
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

Код: Выделить всё

unsigned long int frequ = 123456789;
float freq;
.............
freq = TCNT1 / (TCNT0 + 256 * t0);
frequ = freq * F_CPU;


А тут и будет практически всегда 0.
Попробуйте вот так:
freq= ((float) TCNT1)/(TCNT0+256*t0)
или так
freq=((float) TCNT1)/((float) TCNT0 + 256*t0)

А что бы младшие порядки не скакали, выводить не мгновенное, а усреднённое значение.
svamoscow
Родился
Сообщения: 17
Зарегистрирован: Чт июл 31, 2008 14:30:05
Откуда: Москва

Сообщение svamoscow »

Огромное спасибо BerZerK-ku! Мучился целую неделю :shock:
Супер, всё получилось:)
Ответить

Вернуться в «Цифровая техника»