Page 41 of 55

Re: Тахометр на ATtiny2313

Posted: 27 Sep 2014 02:34
by 7-clown
Прототип...

Добавлено спустя 3 часа 21 минуту 15 секунд:
Вот...

Re: Тахометр на ATtiny2313

Posted: 04 Oct 2014 12:54
by Ashatshem
Anderer wrote:hardlock, большое спасибо за устройство. Сегодня собрал и проверил от генератора. Работает без глюков :) Живьем, к сожалению пока проверить не могу, как назло снова ударили морозы :(
Видео работы:
http://youtu.be/V-FDOQRnYO4
А исходник с эффектом при запуске есть у кого? А то у меня плата полностью своя, распиновка вообще другая...

Добавлено спустя 1 час 35 минут 51 секунду:
Уже сам нашёл, как переделать тоже.

Re: Тахометр на ATtiny2313

Posted: 06 Oct 2014 12:42
by hardlock
beloff12 wrote:Доброе время суток. Наткнулся на Ваш проект по тахометру. У меня вопрос, если Вас не затруднит. На схеме указан контроллер AT90S2313, которых у меня имеется несколько штук. Я знаю, что это аналог ATtiny2313, но полностью ли совместима Ваша прошивка для обоих этих контроллеров, а главное для AT90 фьюзбиты выставляются также, как Вы указали в статье, или есть нюансы?
Спасибо за ответ.
1. Прочитайте, пожалуйста объявление вверху страницы и дальше вопросы задавайте в теме.
2. Компилировалась поод тиню, работоспособность на АТ90 не гарантируется, но теоретически 98% вероятности. Можно и перекомпилировать, указав другой контроллер
3. Фьюзов у АТ90 нету...

Re: Тахометр на ATtiny2313

Posted: 06 Oct 2014 20:27
by beloff12
Я прошу прощения, первый раз в форуме, не прочитал шапку. С AT90 никогда не сталкивался, потому задал вопрос о фьюзах. Дело в том, что я далек от программирования и если Вам не сложно, перекомпилируйте, пожалуйста, под AT90, а выложите либо здесь, либо скините мне в личку.
Спасибо!

Re: Тахометр на ATtiny2313

Posted: 06 Oct 2014 21:58
by Ashatshem
Интересно, если в прошивке указать что кварц 4, впаять на самом деле 8, вместо "одна катушка" указать что "две катушки". Подсоединив тахометр к одной катушке на 4 горшковом четырёхтактнике, получим ли точное кол. оборотов но с удвоенной скоростью обработки?

Re: Тахометр на ATtiny2313

Posted: 07 Oct 2014 08:46
by propell_ant
Ashatshem wrote:Интересно, если в прошивке указать что кварц 4, впаять на самом деле 8, вместо "одна катушка" указать что "две катушки". Подсоединив тахометр к одной катушке на 4 горшковом четырёхтактнике, получим ли точное кол. оборотов но с удвоенной скоростью обработки?
Да. Но зачем?

Re: Тахометр на ATtiny2313

Posted: 07 Oct 2014 09:17
by hardlock
beloff12 wrote: если Вам не сложно, перекомпилируйте, пожалуйста, под AT90
мне не сложно, но нету возможности.

Re: Тахометр на ATtiny2313

Posted: 07 Oct 2014 10:39
by Ashatshem
propell_ant wrote:Да. Но зачем?
Увеличить скорость обработки, уменьшить запаздывание отображения.

Re: Тахометр на ATtiny2313

Posted: 07 Oct 2014 15:37
by beloff12
Уважаемые форумчане, огромная просьба к тем, кто может перекомпиликовать прошивку ATtiny2313 для AT90S2313-10SI. Помогите, пожалуйста.

Re: Тахометр на ATtiny2313

Posted: 07 Oct 2014 18:07
by IYra
beloff12 wrote:перекомпиликовать прошивку ATtiny2313 для AT90S2313-10SI.
Вот выкладываю архив. Там подкорректированный проект и два хекса для ОА и ОС. Кварц - 4 Мгц.
в Протеусе вроде работает

Re: Тахометр на ATtiny2313

Posted: 07 Oct 2014 18:51
by beloff12
Огромное спасибо, IYra. Попробую прошить. Еще один вопрос. Я впервые сталкиваюсь с программированием АТ90. В Code Vision есть параметр SCK Freq. По умолчанию он стоит на максимуме - 460800. Здесь нужно что-то менять, или оставлять как есть?

Re: Тахометр на ATtiny2313

Posted: 07 Oct 2014 19:36
by IYra
beloff12 wrote: В Code Vision есть параметр SCK Freq. По умолчанию он стоит на максимуме - 460800. Здесь нужно что-то менять, или оставлять как есть?
Из Code Vision не прошивал. Пользуюсь программатором UNIPROF. Поэтому подсказать не смогу

Re: Тахометр на ATtiny2313

Posted: 07 Oct 2014 20:07
by beloff12
У меня программатор под USB, а насколько я помню, UNIPROF работает только с LPT и COM портами.

Re: Тахометр на ATtiny2313

Posted: 31 Oct 2014 00:31
by this4me
Добрый день. Переделываю Ваш исходник на спидометр. Начинаю измерять частоты (генерирую звуковой картой компа) - получаю нестабильные показания. (при 100 Гц получаю от 100 до 110)
Может ли прошивка обеспечить стабильность измерений малых частот (до 200 Гц) или просто у меня нестабильный источник?
Либо что необходимо изменить в исходниках?
Спс!

Re: Тахометр на ATtiny2313

Posted: 31 Oct 2014 09:28
by IYra
this4me wrote: Начинаю измерять частоты (генерирую звуковой картой компа) - получаю нестабильные показания. (при 100 Гц получаю от 100 до 110)
или просто у меня нестабильный источник?
А если попробовать подключить к 220в/50гц через понижающий трансформатор

Re: Тахометр на ATtiny2313

Posted: 31 Oct 2014 15:00
by this4me
Трансформатора нет под руками. Вечером возьму осциллограф и буду точно измерять частоту от звуковой платы. (раньше баловался ардуиной и там частотомер стабильно работал, но был другой комп)
Меня интересует вопрос - сможет ли обработчик прерывания interrupt [EXT_INT0] void RPM_PULSE_interrupt(void) точно и стабильно измерять частоту от 1 Гц до 300-400 Гц?
И если есть возможность построчно прокомментировать код, которым можно повлиять на измерение для моего случая
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;
}
Добавлено спустя 6 минут 13 секунд:
lTmp /= ((wTimerOvfCnt << 8) + TCNT0);
Делит длительность для получения частоты?

Re: Тахометр на ATtiny2313

Posted: 31 Oct 2014 17:24
by IYra
this4me wrote:Трансформатора нет под руками.
Тогда в Протеусе. В коде все вроде правильно. Надо только еще округление до 10 убрать.
В приложении подправленный проект и протеус.
Погонял немного. Меряет частоту нормально

Re: Тахометр на ATtiny2313

Posted: 31 Oct 2014 18:17
by propell_ant
Делит длительность для получения частоты?
неа

Code: Select all

 //wFlashCnt умножили на частоту 62500 - получили количество принятых импульсов за время (см. ниже)
//результат умножили на 60 - заранее переведем в импульсы в минуту
lTmp = (62500L * 60L * (long)wFlashCnt);
// результат разделим на точное время, равное количеству переполнений таймера умноженных (<<8) на 256 плюс количество отсчетов с последнего переполнения 
lTmp /= ((wTimerOvfCnt << 8) + TCNT0);
//делим на количество импульсов на один оборот вала
lTmp /= byBladeCnt;
//результат отдаем на отображение
wRpm = lTmp;
еще придется поправить константу NO_PULSES_INTERVAL, сейчас она настроена на 200 и сброс счетчика происходит каждые 800 мс (примерно), тебе нужно где-то каждые 2с (с запасом), это будет

Code: Select all

#define NO_PULSES_INTERVAL  500UL
У меня где-то есть прошивка под твои частоты, устанешь возиться - пиши в личку.

Re: Тахометр на ATtiny2313

Posted: 31 Oct 2014 23:13
by this4me
Заголовок: Тахометр на ATtiny2313
propell_ant wrote:
Делит длительность для получения частоты?
неа

Code: Select all

 //wFlashCnt умножили на частоту 62500 - получили количество принятых импульсов за время (см. ниже)
//результат умножили на 60 - заранее переведем в импульсы в минуту
lTmp = (62500L * 60L * (long)wFlashCnt);
// результат разделим на точное время, равное количеству переполнений таймера умноженных (<<8) на 256 плюс количество отсчетов с последнего переполнения 
lTmp /= ((wTimerOvfCnt << 8) + TCNT0);
//делим на количество импульсов на один оборот вала
lTmp /= byBladeCnt;
//результат отдаем на отображение
wRpm = lTmp;
еще придется поправить константу NO_PULSES_INTERVAL, сейчас она настроена на 200 и сброс счетчика происходит каждые 800 мс (примерно), тебе нужно где-то каждые 2с (с запасом), это будет

Code: Select all

#define NO_PULSES_INTERVAL  500UL
У меня где-то есть прошивка под твои частоты, устанешь возиться - пиши в личку.
У меня где-то есть прошивка под твои частоты, устанешь возиться - пиши в личку.
Пока я занимался блоком и прошивкой, то мой товарищ делал задающий шкив на кардан. Сделал 7 зубьев для датчика :) Частота датчика поднялась в 7 раз. Увеличил количество пропусков для отображения - показания стали более плавные. - в принципе работает.

Что изменил я - Убрал из (((((lTmp = (62500L * 60L * (long)wFlashCnt);)))) 60L ( а что изначает буква L?), убрал делитель lTmp /= byBladeCnt; и в конце умножил на нужный коэффициент 0.88. - из оборотов/мин получил скорость км/час. - как то коряво.

Если быть правильным то для измерения скорости нужно зная количество (62500L * (long)wFlashCnt); импульсов разделить на время ((wTimerOvfCnt << 8) + TCNT0); и умножить на дистанцию колеса между импульсами датчика? (потом преобразовать в км/час)

ЗЫ А что такое за число присвоено #define NO_PULSES_INTERVAL 500UL Что за буквы?

Re: Тахометр на ATtiny2313

Posted: 01 Nov 2014 06:34
by hardlock
L - тип long, UK - unsigned long. Это надо, чтобы компилятор не обрезад результат до более мелкого типа.

Re: Тахометр на ATtiny2313

Posted: 01 Nov 2014 10:47
by IYra
this4me wrote:
Частота датчика поднялась в 7 раз.

Code: Select all

            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;
У меня так получилось

Re: Тахометр на ATtiny2313

Posted: 07 Nov 2014 22:31
by this4me
Здравствуйте! Долго не отвечал - был в командировке.
Спидометр поставил. С моим вариантом куска кода. Скорость меряет отлично - десятые ( с некоторой кратностью), благодаря большому периоду обновления (30) значения не скачут, но и оперативно обновляется.
Схему и исходник использовал с соседней темы тахометра с светодиодами. Сделал на каждый светодиод по 1 км/час. Плату переразвёл для корпуса z-29. Могу скинуть плату. Фотографий не делал.
Большое спасибо всем причастным!
ПыСы hardlock, так как своё устройство пошло в коммерцию то считаю справедливым поддержать проект. Тебе будет приятно, и мне ещё обращаться за помощью. Куда отблагодарить?

Re: Тахометр на ATtiny2313

Posted: 09 Nov 2014 19:17
by kishy
Собрал тахометр с авторской прошивкой, подключил ( клема К - вывод конца первичной обмотки катушки Ваз 2109, поправте если нужно не туда ), на холостых показывает 850-950, при этом могут проскакивать и "левые значения", при увеличении оборотов двигателя показания падают до 200 - 300. Подскажите в чем искать причину, и что сделать для более устойчивых показаний.

Как переделать прошивку автора 7-clown для общего катода и 1 катушки?
7-clown » 22 сен 2014 17:32
Разрешите предложить свой вариант прошивки для данного устройства. Все та же прошивка, но просто я добавил несколько строк помехоустойчивости, путем замера 3 импульсов подряд и проверкой их корректности. Также, ниже 600 оборотов показывает прочерки, сигнализируя о не работающем двигателе. Обновление дисплея сделал не по таймеру, а по условию разности 2 последовательных замеров и при отличии больше чем на 50 - обновлени

Re: Тахометр на ATtiny2313

Posted: 26 Nov 2014 22:07
by Wanderer123
Здравствуйте! Собрал тахометр, прошил на общий К, выставил фьюзы вроде все правильно, но при включении на одну секунду горит 0 а потом начинает показывать странные значения, вот видео

Re: Тахометр на ATtiny2313

Posted: 27 Nov 2014 08:03
by hardlock
Wanderer123, ничего подобного в моей прошивке быть не может пробуйте прошить ещё раз, другую прошивку...