Обявления |
---|
Для полноценной работы рекомендуется пройти регистрацию. Рекламные сообщения будут удаляться вместе с пользователем. Что есть реклама - буду решать я. |
Anderer писал(а):hardlock, большое спасибо за устройство. Сегодня собрал и проверил от генератора. Работает без глюковЖивьем, к сожалению пока проверить не могу, как назло снова ударили морозы
Видео работы:
http://youtu.be/V-FDOQRnYO4
beloff12 писал(а):Доброе время суток. Наткнулся на Ваш проект по тахометру. У меня вопрос, если Вас не затруднит. На схеме указан контроллер AT90S2313, которых у меня имеется несколько штук. Я знаю, что это аналог ATtiny2313, но полностью ли совместима Ваша прошивка для обоих этих контроллеров, а главное для AT90 фьюзбиты выставляются также, как Вы указали в статье, или есть нюансы?
Спасибо за ответ.
Да. Но зачем?Ashatshem писал(а):Интересно, если в прошивке указать что кварц 4, впаять на самом деле 8, вместо "одна катушка" указать что "две катушки". Подсоединив тахометр к одной катушке на 4 горшковом четырёхтактнике, получим ли точное кол. оборотов но с удвоенной скоростью обработки?
beloff12 писал(а): если Вам не сложно, перекомпилируйте, пожалуйста, под AT90
propell_ant писал(а):Да. Но зачем?
beloff12 писал(а):перекомпиликовать прошивку ATtiny2313 для AT90S2313-10SI.
beloff12 писал(а): В Code Vision есть параметр SCK Freq. По умолчанию он стоит на максимуме - 460800. Здесь нужно что-то менять, или оставлять как есть?
this4me писал(а): Начинаю измерять частоты (генерирую звуковой картой компа) - получаю нестабильные показания. (при 100 Гц получаю от 100 до 110)
или просто у меня нестабильный источник?
interrupt [EXT_INT0] void RPM_PULSE_interrupt(void)
{
long lTmp;
GIMSK &= ~0x40;
if(btFirstLowRateFlash)
{
// Первый импульс, сбрасываем счетчик периода и
// счетчик импульсов
wTimerOvfCnt = 0;
wFlashCnt = 0;
TCNT0 = 0;
TIFR = 0x02;
TCCR0B = 0x03; // FCK / 64 ( 62.5 KHz )
TCNT0 = 0;
TIMSK |= 0x02; // Разрешаем прерывания от TMR0
btFirstLowRateFlash = FALSE;
}
else
{
wFlashCnt++;
// Проверяем, не пора ли закончить измерения
if( wTimerOvfCnt > TIMER_OVF_ENOUGHT )
{
TCCR0B = 0; // Останавливаем TMR0
GIMSK &= 0x40; // Запрещаем прерывания от INT0
TIMSK &= ~0x02; // Запрещаем прерывания от TMR0
if(TIFR & 0x02)
wTimerOvfCnt++; // Учитываем возможность переполнения
lTmp = (62500L * (long)wFlashCnt);
lTmp /= ((wTimerOvfCnt << 8) + TCNT0);
// lTmp /= byBladeCnt;
wRpm = lTmp;
// Перезапускаем измерения
btFirstLowRateFlash = TRUE;
wTimerOvfCnt = 0;
TCNT0 = 0;
TCCR0B = 0x03; // FCK / 64 ( 62.5 KHz )
TCNT0 = 0;
TIFR = 0x02;
TIMSK |= 0x02; // Разрешаем прерывания от TMR0
// GIFR = 0x40;
}
}
EIFR = 0x40;
GIMSK |= 0x40;
}
lTmp /= ((wTimerOvfCnt << 8) + TCNT0);
this4me писал(а):Трансформатора нет под руками.
неаДелит длительность для получения частоты?
//wFlashCnt умножили на частоту 62500 - получили количество принятых импульсов за время (см. ниже)
//результат умножили на 60 - заранее переведем в импульсы в минуту
lTmp = (62500L * 60L * (long)wFlashCnt);
// результат разделим на точное время, равное количеству переполнений таймера умноженных (<<8) на 256 плюс количество отсчетов с последнего переполнения
lTmp /= ((wTimerOvfCnt << 8) + TCNT0);
//делим на количество импульсов на один оборот вала
lTmp /= byBladeCnt;
//результат отдаем на отображение
wRpm = lTmp;
#define NO_PULSES_INTERVAL 500UL
propell_ant писал(а):неаДелит длительность для получения частоты?
- Код: Выделить всё
//wFlashCnt умножили на частоту 62500 - получили количество принятых импульсов за время (см. ниже)
//результат умножили на 60 - заранее переведем в импульсы в минуту
lTmp = (62500L * 60L * (long)wFlashCnt);
// результат разделим на точное время, равное количеству переполнений таймера умноженных (<<8) на 256 плюс количество отсчетов с последнего переполнения
lTmp /= ((wTimerOvfCnt << 8) + TCNT0);
//делим на количество импульсов на один оборот вала
lTmp /= byBladeCnt;
//результат отдаем на отображение
wRpm = lTmp;
еще придется поправить константу NO_PULSES_INTERVAL, сейчас она настроена на 200 и сброс счетчика происходит каждые 800 мс (примерно), тебе нужно где-то каждые 2с (с запасом), это будетУ меня где-то есть прошивка под твои частоты, устанешь возиться - пиши в личку.
- Код: Выделить всё
#define NO_PULSES_INTERVAL 500UL
У меня где-то есть прошивка под твои частоты, устанешь возиться - пиши в личку.
this4me писал(а):
Частота датчика поднялась в 7 раз.
Tmp = (282857L * (long)wFlashCnt ); // 625000 * 0.88 * 3600 = 198000/7 = 282857
lTmp /= ((wTimerOvfCnt << 8) + TCNT0); // Скорость с десятыми
// Округляем
wRpm = lTmp % 10;
lTmp /= 10 ;
if (wRpm>4) lTmp++ ;
wRpm = lTmp;
Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 5