Кто паял тахометр?

Vitaly

Моргают. Как раз во время обновления информации. То бишь, 3 раза в секунду. Как от этого избавиться - не знаю. Чес слово. Я плюнул. В конце концов, цифры видно - и ладно. Делалось давно, а теперь вылизывать прошивку нет ни смысла ни времени.

6egemot

вы будете смеяться:
АОН Русь-20, старый такой. в Москве индикатор не моргает, в Люберцах моргает - видно как обновляется.
привожу обратно в Москву - не моргает. хоть стреляйся.

либо освещение разное, либо ток в розетке кривой 😃

toxa

RPM.C :
добавляем глобальную переменную:

WORD    oldRpm;  // предыдущее измеренное значение

в функцию RpmInit:

oldRpm = 0xFFFF; // любое число не равное wRpm

RPM.H :
добавить после wRpm:

extern WORD    oldRpm;            // предыдущее измеренное значение

DISPLAY.C :
в функци RefreshDisplay:

if( btRpmMode ) {
if (PrepareRpmData(wLockedRpm, byBladeCnt)) ShowDisplayData();
} else {
PrepareTimeData(wLockedTime, btTimerOn);
ShowDisplayData();
}

декларация PrepareRpmData меняется, будет:

int PrepareRpmData(WORD wRpm, BYTE byBladeCnt)

в начало функции (сразу после “{”) надо вставить:

if (wRpm == oldRpm) return 0;

а в самый конец (перед последней “}”) добавить:

oldRpm = wRpm;
return 1;

KBD.C :
в функции ProcessKey, в ветви SWITCH case KEY_MODE: после btRpmMode = !btRpmMode; добавить:

oldRpm = 0xFFFF;

По-идее проблема должна решиться (не вся, так частично). Можно пойти дальше, и обновлять только изменившиеся разряды.

Для этого надо вместо всего, что я выше написал, в display.c сделать еще один буфер дисплея:

BYTE byOldDisplay[10];        // буфер данных, для вывода на экран

и переписать соответствующим образом ShowDisplayData. Не знаю, можно ли выводить символы произвольно, либо надо делать это последовательно. Если второе - то не получится.

ps: рецепт писал прямо сюда. за синтаксис не отвечаю, но по-идее должно компилироваться. эффект не проверял, так как ни тахометра, ни даже компилятора C для atmel на работе не имею.
pps: если есть желающие, welcome исправить прошивку более грамотно.

18 days later
serj

У меня ничего не мигает.
я использую эти индикаторы много и часто,
дохлых изначально еще встречал.
есть минус у индикаторов с большой стекляшкой- от вибрации
( примерно через год эксплуатации по 8 часов в день- используюся в манипуляторах для намазывания клея при сборке динамиков) отсыхает контакт печатного кабеля от платы и некоторые сегменты дохнут. правда, это был единичный случай.
вот моя стандартная программа вывода.

//------------------------------------------------------------------------------
// Вывод 1 знака на экран
//------------------------------------------------------------------------------
void OutSymbol(byte symbolX)
{
byte i; // Счетчик битов в выводимом символе.
// 4 бита - 1 символ

for(i=0; i<4; i++)
{
PORTB.4= ( (symbolX& 0x08)?1:0);// Выставляем на DI бит данных(первый в symbolX)
delay_us(5); //ждем
PORTB.3=0; // Выключаем и включаем CLK, индикатор считывает
delay_us(5); //ждем
PORTB.3=1;
symbolX <<= 1; //сдвигаем на разряд для доступа к следующему разряду
}
}

//------------------------------------------------------------------------------
// Вывод экранного буфера на индикатор
//------------------------------------------------------------------------------
void indicatorOut(void)
{
byte i; // Счетчик выводимых символов.
for(i=0; i<10; i++)
OutSymbol(symbol[digit[i]]);// выводим 10 текущих цифр
}
//-------------------------------------------------------------------------------
// орем как прищемленный кот…
//-------------------------------------------------------------------------------
void alarm(void)
{

Сергей. pp_serj@ mail.ru

romychs

Да блин, по собственному опыту и даташиту скажу. Этот индикатор не моргать не может, принцип работы у него такой. Символы в него передаются последовательно. Символ записали - он отображается в крайней правой позиции, записали следующий - первый сдвинулся на одну поз. влево. Таким образом, один изменившийся символ обновить на индикаторе нельзя, только все десять. Т. е. Индикатор по любому помаргивает, другое дело, заметно это или нет. Чуть снизив напряжение питания можно уменьшить заметность этого моргания, но уменьшается и яркость и засветка “нерабочих” сегментов. Тут нужен компромис, на питание можно впаять переменник и попробовать с разным напряжением питания (1,4 - 1,6В). Еще уменьшить заметность мерцания можно минимизируя задержки при выводе символов, т.е. после вывода бита - четь больше 1мкс и между символами больше 5 мкс (если правильно помню). И третье, самое очевидное, и все об этом здесь говорят, реже обновлять информацию на дисплее.

11 days later
serguey

У меня ничего не мигает.
я использую эти индикаторы много и часто,
дохлых изначально еще встречал.

Привет Serj! 😃
Очень радует, что индикатор в твоем тахометре не мигает.
Я, со своим замучился. 😢 Что только не делал…. Прошивку, правда, не менял.
Если есть нормальный вариант прошивки на данное изделие, скинь пожалуйста. 😃