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

vikar

Всем привет!!
Собрал тахометр по схеме с этого сайта.
Все работает как надо. Но индикатор мигает символами в пустых знакоместах.
Кто то может подсказать как это лечится? Неприятно немного…

Заранее благодарен.
Виктор.

serguey

Привет Виктор 😁
Хотел собрать такой тахометр.
Не нашел индикатора
Да и описание его то же не нашел.
Какой марки ты индикатор использовал?
Где его можно приобрести?

11 days later
hary

Меняй индикатр у меня третий пощел только, хотя покупал все непаячные.
Индикатор применяется от телефона, совместимый с HOLTEK, но унас ходят как правило не понятно где сделанные и с сомнительным качеством. У меня была подобная проблема, поменял индикатор все пошло. Есть еще один прикол: тахометр ловит люмиисцентные лампы и коллекторные двигатели, имейте ввиду, в остальном схема работает на 200%.

Vitaly

Индикаторы могли не работать, потому что у них бывают разные распиновки. Поэтому есть смысл при покупке выбирать именно те, у которых написано назначение выводов (шелкографией). Тогда проблем быть не должно.

NetWood
  1. Лечится кратковременным закорачиванием питания индикатора на землю.
  2. Поставить большой электролит на питание индикатора, причем паять его прямо на входы.
  3. Если первые два не помогают - передать привет братьям китайцам 😆 и поменять на другой.
3 months later
serguey

Я сменил четыре индикатора!!! 😦
Ставил большой электролит на питание индикатора.
Как они подмаргивали, так и подмаргивают.
Может быть, дело не в индикаторах? 😉

NetWood
  1. Попробуй снизить напряжение питания.
  2. Точно не помню и не видел схему тахометра, но поставить последовательно DI и CLK резисторы. Номинал около 100ом. В общем подобрать.

Вообще с этими индикаторами сплошные “танцы с бубнами” …

NetWood

На сайте www.aon.spb.ru есть много схем приставок АОН с такими индикаторами. Посмори подключение там …

serguey

Танцы с бубном продолжаются!!! 😢
Понижал напряжение питания индикатора,
ставил последовательно сопротивления на вход DI и CLK,
и что же…………….
Как они подмаргивали, так и подмаргивают. 😈
Может быть, дело не в индикаторах? 😦

vikar

Всем привет.
Я перестал броться, пользую как есть.
Дело не в индикаторах!!!
Они моргают в такт импульсной посылки.
Когда проц подвешиваешь (пальцем все ноги коротишь 😊 ), индикатор не моргает… (импульсы не идут). Вот так… На рынке, АОН-щики говорят (да и енто видно на телефонах), что у них не моргает.
Как с этим бороться, незнаю… 😢

Удачи!!!

toxa

Они моргают в такт импульсной посылки.

Я, наверное, сейчас скажу какую-нибудь глупость… Но мне кажется, что дело в прошивке.

Как с этим бороться, незнаю… :cry:

Перерисовывать то, что находится на индикаторе только в случае несоответствия данных на экране с вновь расчитанными значениями.

serguey

Мне кажется пора вмешаться автору тахометра
и дать соответствующие пояснения 😎
Vitaly у тебя, в твоем тахометре, индикаторы подмаргивают?
Что надо сделать чтоб не моргали?

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