Самодельный передатчик (часть 2)

Denn

Скорее всего, да. Многое зависит от версии CodeVision и настроек.

Dj_smart
MLT:

А можно ли непосредственно в HEXе кодера поменять значение контрастности?

Короче полез я в эти дебри:). У меня есть два хекса под 3410 с разной контрастностю. При помощи WinHEX открыл оба, и нашёл отличающиеся ячейки. Но их там по две оказалось. Причем в прошивке с более низкой контрасностью значение одной меньше чем в более контрастной, а в другой ячейке больше. Взял и добавил-убавил по единичке. Дудки:). Даже не стартует. Впрочем, этого стоило ожидать.

mega_john

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

Dj_smart
mega_john:

программатор разве не ругался?

Лошади матом не умеют. Понипрогу что, шо засунул, то он и зашил.

Denn

В процессе эксплуатации появились предложения по улучшению программы - хочется услышать другие мнения о них:

  1. Уменьшить скорость изменения триммеров и ( или ) сделать остановку в изменении на 0,5 сек в нейтральном положении
    триммера - чтобы точнее его выставить.
  2. Указатели триммеров можно сделать в 4 пикселя высотой - лучше заметно.
    3.Может быть стоит немного изменить логику меню " Curve " : столкнулся с ситуацией, когда в режиме “free” пытался войти
    в режим корректировки кривой, на “автомате” нажал кнопку “ВПРАВО” - и сбросилась вся моя кривая! Так как у меня все
    изменения сохраняются сразу ( без возможности отмены ), пришлось спасать данные выключением питания…
    Если сделать 2 пункта меню " Curve " - “Free” и “Standart” , и выбрав кнопкой “ВПРАВО” дальше редактировать кривую,
    при этом , желательно сохранить значения и в “Free” и в “Standart”, чтобы можно было переключаться между ними.
EagleB3
Denn:

В процессе эксплуатации появились предложения по улучшению программы - хочется услышать другие мнения о них:

  1. Уменьшить скорость изменения триммеров и ( или ) сделать остановку в изменении на 0,5 сек в нейтральном положении
    триммера - чтобы точнее его выставить

Уменьшать, думаю, не надо. А к паузе - я, пожалуй, присоединяюсь.
Можно, наверное, не делать паузу, а после выдачи “бипа” о том, что триммер пришел в нейтраль пропустить следующие N нажатий на триммер без изменения значения (как вариант - пропустить N нажатий в том же направлении регулировки). Если триммер отпустили или направление изменилось - сбросить счетчик N.

P.S. Вскрыл вчера нерабочую оптическую мышку (дешевейшую!..) - а в ней на колесике валкодер с кликами. Как мне его захотелось (вместо кнопок вверх и вниз)!..
А ведь есть еще и мышки, у которых колесо можно прижимать вправо-влево.
P.P.S. Только управление таймером (пуск-стоп-ресет) при этом надо на отдельную кнопку отсадить. Или управлять им по трем…пяти кликам колеса подряд - чтобы случайным задеванием не запускать и не сбрасывать.

oskar
Denn:

3.Может быть стоит немного изменить логику меню " Curve " : столкнулся с ситуацией, когда в режиме “free” пытался войти
в режим корректировки кривой, на “автомате” нажал кнопку “ВПРАВО” - и сбросилась вся моя кривая! Так как у меня все
изменения сохраняются сразу ( без возможности отмены ), пришлось спасать данные выключением питания…
Если сделать 2 пункта меню " Curve " - “Free” и “Standart” , и выбрав кнопкой “ВПРАВО” дальше редактировать кривую,
при этом , желательно сохранить значения и в “Free” и в “Standart”, чтобы можно было переключаться между ними.

Поддержу идею ,сам сталкивался с етим при настройке кривых шаг -газ вертушки!

EagleB3

…Покрутил валкодер из мышки. Прикольная конструкция!
Три ноги (два канала и общий).
Сначала чуть мозги не вывихнул, отлавливая на каналах классические меандры, сдвинутые по фазе.
Потом заметил, что:

  1. Состояние одного из каналов меняется при повороте вала на 1 клик в любую сторону;
  2. Когда кручу вал по часам, то выходы каналов всегда равны (0 и 0 или 1 и 1). Против часов - всегда различны (0 и 1 или 1 и 0).

И все стало просто:

#define ChnA PIND.3
#define ChnB PIND.4

volatile char CurrentValue=128, CurrEncC1, CurrEncC2, LastEncState;

void EncoderPoll (void) {
CurrEncC1 = ChnA;
CurrEncC2 = ChnB;
if (!( CurrEncC1 == LastEncState)) {
LastEncState = CurrEncC1;
if (CurrEncC1 == CurrEncC2) {
CurrentValue++;
}
else {
CurrentValue–;
};
printf(“%d (C1=%d,C2=%d)\r\n”,CurrentValue, CurrEncC1, CurrEncC2);
};
}

Опрашиваю энкодер раз в 5…10 мС.
Работает как часы; никакого дребезга.

AndyBig

Энкодеры очень просто обрабатывать - следишь за одним из выходов, когда на нем появляется переход в единицу, смотришь в каком состоянии в этот момент второй выход: если в единице - одно направление, если в нуле - другое 😃

EagleB3

Угу… Часа три следил по этому алгоритму. Прерывание на rise поставил. И по одному каналу пробовал, по второму. И задержки ладил (думал - дребезг какой). И значения осреднял. И фигушки.

Имел по два прерывания на клик.
И мало того - по одному каналу уровни кликов всегда чередуемые: если сейчас “0”, то на следующем клике будет “1”. А на очередном - опять “0”.
Ну как так может быть (по классическому алгоритму), чтобы по два фронта между кликами, а уровень на кликах - чередуемый?
У BOURNS’ов (если верить прочитанному) - клик по одному из каналов всегда в нуле. И да, между кликами всегда фронт (один…) и по второму каналу смотрим куда оно крутится. А в этом - нет.

AndyBig

Значит этот энкодер какой-то нестандартный… Надо было посмотреть осциллом по обоим каналам чередование сигналов 😃

EagleB3

Кстати! Если кто (в Москве…) хочет получить такой энкодер - велкам, поделюсь.
Сегодня на радостях обнес ящик с мусором у наших сисадминов - 6 таких мышей нарыл!

Dj_smart

Пока только “оживляю”, и попутно инструкцию к нему читаю. cncfiles.ru/showp.php?id=9147
Просветите в таком вопросе: “значения триммеров через 30 секунд записываются…” и тд . Это значит, что при следующем включении ручка в нейтрали, а серва “уже учла” значение триммера? Или?

Denn

Да, учла, если успело записаться.

Dj_smart
Denn:

если успело записаться.

Понятно, спасибо.

Dj_smart

Народ, а как заставить пищалку гудеть? При включении что-то должно быть? А то поставил, и мёртво…

Tigra74
Dj_smart:

Народ, а как заставить пищалку гудеть? При включении что-то должно быть? А то поставил, и мёртво…

Есть пищалки со встроенным генератором-запищит и от батарейки-и без-от постоянного напряжения не запищит-
а какая у вас версия схемы?- судя по вашему дисплею не последняя?
Вам нужно другую пищалку и проверить выход с платы на неё

Dj_smart
Tigra74:

Вам нужно другую пищалку

Какую? Стоит пьезик , без генератора. А прошивка… Самя в сях ноль, поделились под 3410. Пьезик надо с генератором, или без?

Tigra74
Dj_smart:

Какую? Стоит пьезик , без генератора. А прошивка… Самя в сях ноль, поделились под 3410. Пьезик надо с генератором, или без?

Проверьте прибором идут скачки напряжения на выходе на пикалку при нажатиях-пьезик с генератором попробуйте поставить.И в ранних версиях схемы звук был выведен на другую ножку Атмеги-под какую схему рассчитана ваша прошивка?

EagleB3

Начинать надо, как правильно сказано, в таком порядке:

  1. Версия прошивки. Должна соответствовать железу.
  2. Версия железа. На какой ноге пищалка сейчас?
  3. Пищалка суть железо и должна соответствовать железу.

В версиях прошивки старше 1.8 пищалка сидит на ноге PE3, и она должна быть пассивной (рингтоны различаются (зависят от ситуации); генерируются они контроллером).
Историю версий смотреть вот здесь, если нужно что-то специфическое - искать по ветке или спрашивать в ветке.

Dj_smart
EagleB3:

В версиях прошивки старше 1.8 пищалка сидит на ноге PE3

Точно там и сидит. Спросил у человека, который дал прошивку, оказывается пищик… в опциях включить надо:). Вот и всё:).