|
Gadgets Group Поддержка пользователей
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Boriska
Super Moderator
Возраст: 62 Зарегистрирован: 07.02.2006 Сообщения: 52 Откуда: Домодедово
|
|
гЙФБФБ(Андрей Кондратьев) Пров?л испытания версии1.05.
Опять несколько раз произошло самопроизвольное перепрограммирование EEPROM. При этом в окнах ввода некоторых выпадающих списков появилось недопустимое значение ? чистое поле. Предполагаю, что в РС интерфейсе чистому полю соответствует число ?1, а в PIC число 255. Возможно, это как-то связано с самопроизвольной записью.
Андрей, можно поподробней расписать, при каких условиях происходит перепрограммирование EEPROM, мне не удалось воспроизвести этот эффект.
гЙФБФБ(Андрей Кондратьев) Подключил на вход одноканальный шифратор с длительностью фрейма 20мсек и диапазоном канального импульса 0,5?3,5 мс. Настройки по умолчанию.
Ось Канал пульта
Ось1 - 1
Ось2 - 2
Ось3 - 3
Ось4 - 4
Ось5 - 5
Ось6 - 6
Ось7 - 7
Ось8 - 8
В диапазонах длительностей канальных импульсов 0,5?0,7мсек, 2,6?3,5мсек и 1,5?1,78мсек (!!!) устройство не работает. Гаснет индикатор пульта, и ползунок первого канала переходит в среднее положение.
Зона нечувствительности 1,5?1,78мсек исчезает при настройках:
... skipped
Другие варианты не смотрел. И так ясно, что есть проблема. Когда устраните е? - проверю с другим числом канальных импульсов.
В прошивке реализована небольшая "защита от дурака": сигнал должен иметь не менее 3х канальных импульсов для корректной работы. Мне интересно, как он вообще с 1 импульсом заработал. Надо проверить.
гЙФБФБ(Андрей Кондратьев) Передатчик Futaba FC-15.
Фрейм 21мсек. Амплитуда 5 Вольт. Есть 8 пропорциональных каналов, но задействованы только 5. На стальные ставил трехпозиционные тумблеры. Проблем в симуляторе не наблюдается. При конфигурировании иногда есть автоколебания одного из ползунков относительно его текущей позиции и очень редко есть незначительное взаимовлияние каналов.
Выбранные Вами значения для ограничений 1 и 2мсек считаю неправильными. Для Футабы д.б. 0,9 и 2,1. А вообще диапазон д.б. еще больше.
Насчет длительностей импульсов, отличных от стандартного я уже давно думаю. Придется, видимо вводить режим калибровки пульта, определяющего предельный диапазон изменения длительностей импульса и приводящий его к диапазону 0<->1023. Это приведет к значительному увеличению нагрузки на PIC, так как придется делить на не целое число.
гЙФБФБ(Андрей Кондратьев) Передатчик MULTIPLEX 2000.
Фрейм 24мсек. Амплитуда 10 Вольт. 6 пропорциональных каналов + 1 трехпозиционный тумблер. Диапазон канальных импульсов примерно 1,6 +/- 0,55 мсек. Перескоки в крайних позициях ручек исчезли. Но одна проблема осталась. В зависимости от длительности импульсов 5,6 и 7 каналов есть критические точки для ручек каналов 1-4. (Даже если я включаю DR и уменьшаю диапазон канальных импульсов). В этих критических точках происходит скачкообразное изменение позиций ползунков каналов 1-6. Позиции ползунков и соответствующие цифры на экране компьютера перестают соответствовать длительностям канальных импульсов, которые я одновременно наблюдаю на экране осциллографа. Предпринял дополнительную проверку версии "Глючит передатчик". Подключил к приемнику машинки, включил излучение. В критических точках машинки никуда не перескакивают! Проблема исчезает при длительности импульсов каналов 5 и 6 примерно 1,15мсек и канала 7 1,3мсек. Идей никаких.
Хотел бы уточнить, речь идет о длительности импульса или его периоде:
_.... ____
.|__|.......|_
^^^^^^^ - так ?
......^^^^^- или так?
надеюсь, что вариант ?1
гЙФБФБ(Андрей Кондратьев) РС интерфейс.
Цифры должны отображать длительность канальных импульсов передатчика. Это значит, что при установленной галочке реверса нужно проводить "обратный реверс" числа для этого канала.
Конечно, это будет непременно исправлено
гЙФБФБ(Андрей Кондратьев) Считаю, что в инструкции надо указать, что в Вашем устройстве реверс производится зеркальным отражением относительно значения 1,51мсек. Это ВАЖНО!
По моим расчетам вокруг 1,50 мс, оно расчитывается как rev = 1024-chan, где rev - реверсированное значение, а chan - считаное и приведенное к диапазону 0-1023 значение. Значению 512 должна соответствовать длительность 1,50 мс.
гЙФБФБ(Андрей Кондратьев) Если можно, увеличьте везде размер шрифта до 10. Для людей с плохим зрением.
Учту |
|
Вернуться к началу |
|
|
Андрей Кондратьев
Member
Зарегистрирован: 08.07.2006 Сообщения: 10
|
|
...Хотел бы уточнить, речь идет о длительности импульса или его периоде:
_.... ____
.|__|.......|_
^^^^^^^ - так ?
......^^^^^- или так?
надеюсь, что вариант ?1
Период - это длительность фрейма
Надеюсь, Вы ответите и на вопрос о НЕ работе с Win98. |
|
Вернуться к началу |
|
|
Boriska
Super Moderator
Возраст: 62 Зарегистрирован: 07.02.2006 Сообщения: 52 Откуда: Домодедово
|
|
Андрей Кондратьев писал(а): | Надеюсь, Вы ответите и на вопрос о НЕ работе с Win98. |
Работа с Win98 не проверялась. У меня нет ни одного компа с Win98 или WinME.
Насколько я понимаю, полноценная поддержка HID USB есть только начиная Win98SE и во всех предыдущих версиях не работает. |
|
Вернуться к началу |
|
|
Андрей Кондратьев
Member
Зарегистрирован: 08.07.2006 Сообщения: 10
|
|
Продолжил эксперименты.
Сделал устройство на PIC876, измеряющее длительности канальных импульсов, импульсов модуляции и пауз между импульсами модуляции. Таймер включается и выключается программно. Результаты моих измерений полностью соответствуют цифрам в PC интерфейсе. Прилагаю рисунок.
Попытался также проиллюстрировать перескоки.
Случай 1.
Pos1 ? исходное состояние.
Перемещаю ручку элеронов в сторону увеличения длительности канального импульса и перед критической точкой я получаю Pos2.
Дальнейшее очень незначительное перемещение ручки элеронов и попадаю в критическую точку Pos3. Обратите внимание на скачкообразные изменения для каналов 1,2,3,4,6.
Дальнейшее перемещение ручки элеронов до упора ? точка Pos4.
Случай 2. (Не является продолжением случая 1. См. каналы 5,6.)
Исходное положение ? элероны вправо до упора. Pos1-1.
Незначительное перемещение ручки канала 4 в сторону уменьшения длительности импульса приводит в критическую точку ? Pos2-1.
Дальнейшее незначительное перемещение ручки восстанавливает нормальную работу ( Pos3-1).
Позиции критических точек зависят от длительностей канальных импульсов.
Возможно эта информация поможет определить причину ненормальной работы с MULTIPLEX2000.
Самопроизвольного перепрограммирования EEPROM больше небыло. Произойдет - сообщу.
Далее пожелания к версии 1.05.
Если число каналов пульта меньше 8, в PC интерфейсе вместо длительности отсутствующих канальных импульсов писать слово ?Нет? а не ?1,51мс? как сейчас.
Минимально допустимое число каналов пульта - это не защита от дурака, а одно из ограничений на параметры входного сигнала. Это и другие ограничения ОБЯЗАТЕЛЬНО должны быть указаны в описании устройства. Выбор минимального чикла канальных импульсов тоже д.б. как-то обоснован. Реально существуют двухканальные пульты и симуляторы в которых достаточно иметь два аналоговых канала. Один такой симулятор я использую ? Виртуальный шкипер.
В описании устройства на сайте не указано какой диапазон длительностей канальных импульсов преобразуется в диапазон чисел 0?1023, передаваемых в РС. Надо указать.
Андрей писал(а): | Насчет длительностей импульсов, отличных от стандартного я уже давно думаю. Придется, видимо вводить режим калибровки пульта, определяющего предельный диапазон изменения длительностей импульса и приводящий его к диапазону 0<->1023. Это приведет к значительному увеличению нагрузки на PIC, так как придется делить на не целое число. |
Не совсем понял про деление. Для ускорения вычислений деление на нецелое число можно заменить умножением на целое и последующим делением на 2 или 4 или 8 или 16? Если сообщите формулу, подумаю более предметно. Применительно к MULTIPLEX200 основная проблема (не считая перескоков) - не хватает триммера руля высоты и модель в симуляторе висит на ручке. Даже после того, как я развернул этот потенциометр до нейтрали 1,52мсек. (Триммеры руля поворота и элеронов перемещаю до упора.) |
|
Вернуться к началу |
|
|
Boriska
Super Moderator
Возраст: 62 Зарегистрирован: 07.02.2006 Сообщения: 52 Откуда: Домодедово
|
|
Спасибо за такое детальное исследование. Посмотри, пожалуйста амплитуду сигнала при подключенном интерфейсе. И, если есть возможность, посмотри осцилографом, не затягиваются ли при этом фронты импульсов. |
|
Вернуться к началу |
|
|
Андрей Кондратьев
Member
Зарегистрирован: 08.07.2006 Сообщения: 10
|
|
Амплитуда сигнала на разъеме пульта близка к напряжению питания пульта. Сейчас 9,8 Вольт. М.б. до 11Вольт сразу зарядки аккумуляторов. Я уже сообщал, что на экране осциллографа в точках перескоков ничего необычного не наблюдается. Фронты не уходят. Попытаюсь сделать фото с экрана.
Вот новые результаты испытаний.
Ползунок канала 6 плавно перемещаю из крайней позиции к центру.
Точка 1 - Исходная точка.
Точка 2 ? Ничего необычного.
Точка 3 ? Ничего необычного. (Непосредственно перед критической).
Точка 4 ? Критическая точка.
Точка 5 ? Непосредственно после критической.
Точки 6,7,8 ? Ничего необычного.
В дополнение к картинкам с экрана прилагаю содержимое оперативной памяти процессора в этих точках.
При этих измерениях USB была отключена.
Файлы 4-1,4-2,5-1 это те же точки 4 и 5, но измеренные повторно без перемещения ручек передатчика.
Если в критической точке отключить питание пульта и включить снова, то примерно 0,5 сек в РС интерфейсе сохраняются правильные значения. Затем перескок.
Сравнение по каналу 6 в таблице. |
|
Вернуться к началу |
|
|
Administrator
Site Admin
Зарегистрирован: 07.02.2006 Сообщения: 14
|
|
Вот фрагмент кода по определению длительности импульсов:
Инициализация переменных и режимы модуля сравнения и таймеров:
Код: |
#define PULSE_OFFSET 6000
#define MIN_OFFSET 5000
void InitVars(void)
{
unsigned char i;
i_chan = 0;
noCarrier = NO_CARRIER;
Ch[0] = Ch[1] = Ch[2] = Ch[3] = Ch[4] = Ch[5] = Ch[6] = Ch[7] = 0xFFFF;
Chp[0] = Chp[1] = Chp[2] = Chp[3] = Chp[4] = Chp[5] = Chp[6] = Chp[7] = 0xFFFF;
repi = 0;
}
void Init_Timers_CCP(void)
{
OpenTimer0( TIMER_INT_OFF &
T0_16BIT &
T0_SOURCE_INT &
T0_PS_1_1 );
OpenTimer1( TIMER_INT_OFF &
T1_16BIT_RW &
T1_SOURCE_INT &
T1_PS_1_2 &
T1_OSC1EN_OFF &
T1_SYNC_EXT_OFF &
T1_SOURCE_CCP );
OpenCapture1( CAPTURE_INT_ON &
C1_EVERY_RISE_EDGE &
CAPTURE_INT_ON );
OpenCmp2( CMP2_INT & CMP_INT_ON,
CMP_PERIOD );
} //end Init_Timers_CCP |
Обработка прерываний:
Код: |
// High priority interrupt routine
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh (void)
{
if (isCapture) // Пришел фронт импульса
{
PIR1bits.CCP1IF = 0;
WriteTimer1(0);
chcmp = ReadCapture1();// читаем значение регистра захвата
if (isCmp) // если было прерывание по захвату (был получен фронт импульса)
{
isCmp = i_chan = 0; // сбрасываем счетчик канала
// Записываем во все канальные регистры значение "неопределенности"
Chp[0] = Chp[1] = Chp[2] = Chp[3] = Chp[4] = Chp[5] = Chp[6] = Chp[7] = 0xFFFF;
}
else
{
if (!err_pulse) // если кол-во "ошибочных" импульсов == 0
{
if (chcmp > MIN_OFFSET) // текущий импульс > мин значения
{
noCarrier = 0; // признак отсутствия несущей в 0
Chp[i_chan++] = chcmp; // текущее значение в ячейку канала
}
else // иначе
err_pulse++; // признак "ошибочного" импульса для следующей итерации
}
}
}
if (isCompare) // Длительность импульса больше CMP_PERIOD,
// т.е. либо нет импульсов, либо продолжается стартовый импульс
{
PIR2bits.CCP2IF = 0;
isCmp = 1;
err_pulse = 0;
if (noCarrier < NO_CARRIER) // Признак отсутствия несущей < максимального (15)
{
noCarrier++;
// если канал "определен", то записываем его текущее значение, если нет - предыдущее
Chi0[0] = (Chp[0]==0xFFFF)?Chi0[0]:Chp[0];
Chi0[1] = (Chp[1]==0xFFFF)?Chi0[1]:Chp[1];
Chi0[2] = (Chp[2]==0xFFFF)?Chi0[2]:Chp[2];
Chi0[3] = (Chp[3]==0xFFFF)?Chi0[3]:Chp[3];
Chi0[4] = (Chp[4]==0xFFFF)?Chi0[4]:Chp[4];
Chi0[5] = (Chp[5]==0xFFFF)?Chi0[5]:Chp[5];
Chi0[6] = (Chp[6]==0xFFFF)?Chi0[6]:Chp[6];
Chi0[7] = (Chp[7]==0xFFFF)?Chi0[7]:Chp[7];
}
else // если признак отсутствия несущей >= 15
{ // в канальные ячейки записывается значение "неопределенности"
Chi0[0] = Chi0[1] = Chi0[2] = Chi0[3] = Chi0[4] = Chi0[5] = Chi0[6] = Chi0[7] = 0xFFFF;
Ch[0] = Ch[1] = Ch[2] = Ch[3] = Ch[4] = Ch[5] = Ch[6] = Ch[7] = 0xFFFF;
}
isSend = 1; // признак завершения цикла передачи
}
} |
Затем каждый элемент массива значений канала обрабатывается функцией нормализации
Код: | int normCh(unsigned char ch, unsigned char rev)
// ch - номер канала
// rev - признак реверса канала
{
unsigned int c;
int a;
if (ch == 0x0f || Ch[ch] == 0xFFFF || noCarrier >= NO_CARRIER)
return 512;
c = Ch[ch];
if (c < PULSE_OFFSET)
a = 1;
else
a = (c - PULSE_OFFSET) / 6;
if (a > 1023)
a = 1023;
if (rev)
a = 1024 - a;
return a;
} |
Может это поможет что-либо понять [img]http://www.ggroup.com.ru/ipbforum/style_emoticons/<#EMO_DIR#>/cool.gif[/img]
Да, не удивляйся, "модератор Андрей" = "Administrator" _________________ With best regards, Site Administrator |
|
Вернуться к началу |
|
|
Андрей Кондратьев
Member
Зарегистрирован: 08.07.2006 Сообщения: 10
|
|
Андрей, вспомни нашу переписку когда будешь читать ниже.
В результате анализа дизассемблированного текста вер. 1.05 я сделал следующие выводы.
Минимальное количество канальных импульсов ? 1.
Предполагаемое максимальное количество канальных импульсов ? 8. (Я НЕ ПРОВЕРЯЛ устройство с большим числом импульсов и не анализировал блок-схему по этому вопросу. Займусь позже.)
Минимальная длительность канального импульса ? 833 мксек.
Минимальная длительность синхропаузы ? 3 мсек.
Максимальная длительность синхропаузы ? 13,922мсек. (Пояснения по этому параметру на прилагаемом рисунке. Если синхропауза больше 13,922мсек ? вместо ожидаемого захвата происходит сравнение.)
В передатчике MULTIPLEX2000 синхропауза 11,156?17,747 мсек.
В передатчике FUTABA FC-15 расчетная синхропауза 5,96?13,96 мсек.
Теперь понятна проблема и я предлагаю измененные прошивки вер. 1.05.
RC-Joy-105-6mS.hex ? минимальная длительность синхропаузы увеличена до 6 мсек, максимальная до 16,922 мсек. (FC-15 ? нет проблем. MULTIPLEX2000 ? проблемы только когда на всех каналах минимальные длительности. А это в симуляторе практически не бывает.)
RC-Joy-105-preddelitel.hex ? В TMR1 предделитель увеличен до 1:4. В результате минимальная синхропауза 3 мсек, максимальная синхропауза 24,845 мсек.
При изучении подпрограммы, в которой обнуляется TMR1, я споткнулся на тексте
4195 20C4 50DB MOVF PLUSW2, W, ACCESS
4196 20C6 6ECF MOVWF TMR1H, ACCESS
4197 20C8 50DF MOVF INDF2, W, ACCESS ;возможно переполнение TMR1L !
4198 20CA 6ECE MOVWF TMR1L, ACCESS
4199 20CC 52E5 MOVF POSTDEC1, F, ACCESS
Теоретически возможно переполнение TMR1L после записи TMR1H. При этом ошибка составит H?100? = 40мксек при предделителе 1:2. Предлагаю остановить таймер на время записи TMR1.
Теперь о главном.
ВЕЛИКОЛЕПНЫЙ, НЕ ИМЕЮЩИЙ АНАЛОГОВ БЕСПЛАТНЫЙ РС ИНТЕРФЕЙС ?
вот то, почему что я сразу захотел иметь такое устройство. Вот почему я веду интенсивную переписку с авторами.
Не понимаю, почему заглох этот форум!!!
Я решил выложить сюда свои пожелания, ранее изложенные в личной переписке с автором. Возможно, кто-то захочет их дополнить или отвергнуть.
Как пользователь я хочу быть ПОЛЬЗОВАТЕЛЕМ этого бесплатно распространяемого устройства, а не ИССЛЕДОВАТЕЛЕМ. Я хочу знать, а не угадывать ?Что в черном ящике?.
Все ограничения, имеющиеся в устройстве, должны быть известны пользователю.
Вспомните и о том, что в передатчике некоторые каналы это сумма ручки и триммера. Как в Windows откалибровать джойстик, чтобы крайние положения соответствовали суммам крайних положений ручек и триммеров? Я не знаю. Как сделать так, чтобы при средних позициях ручки и триммера в Windows было число 512? Я не знаю. А это проблема. Иногда хода триммеров передатчика не хватает для балансировки в полете и самолет в симуляторе ?висит? на ручках. Не всякий передатчик позволяет скомпенсировать это программно или дополнительным триммером. Это намек на желательное дополнение РС интерфейса триммерами, которые можно будет сохранять.
Рядом с окном реверса будет великолепно смотреться окно с наборным счетчиком. Диапазон ?250?250мксек. Можно с шагом 2, если сохранять как однобайтное число.
Конечно, я сам могу задействовать АЦП и дополнить устройство потенциометрами. Их придется крутить, глядя на экран РС. Но согласитесь, триммер в РС интерфейсе ? это стильно, солидно и удобней !!! Все-таки Gadgets Group ? это ГРУППА а не кустарь ? одиночка как я..
После дополнения ползунков окошками, в которых содержатся измеренные устройством длительности канальных импульсов, пользователь получил немыслимые до того удобства в настройке и проверке передатчика. В том числе самодельного!!!
Устройство позволяет сохранить настройку в ЕЕРROM. Только ОДНУ настройку!!!
Вспомните FMSUSB Manager.exe для аналогичного устройства на PIC16.
Предлагаю дополнить РС интерфейс возможностью сохранения настроек в файле. И загрузки из файла для текущей работы. Вспомните о том, что передатчики и самолеты в симуляторах бывают разные. Компьютерный передатчик может содержать много сложных настроек. При включении компьютерного передатчика пилот выбирает какую-то ?МОДЕЛЬ?. Эта ?МОДЕЛЬ? хранится либо в памяти передатчика, либо во внешнем модуле памяти. Кроме того, настройки передатчика м.б. не только электронными, но и механическими. Это когда пилот добавляет в передатчик дополнительные кнопки, тумблеры, потенциометры. Сегодня они есть и подключены к каким-то разъемам. Через полгода ? год их нет или они подключены к другим разъемам. Всего не упомнишь. ОЧЕНЬ желательно, чтобы в файле кроме настроек можно было сохранять любые комментарии к ?МОДЕЛИ?.
Ваш выбор чисел для крайних позиций ползунков и то, что происходит, если результат вычисления выходит за эти границы- все это должно быть понятно пользователю.
Если рассматривать устройство только как симулятор джойстика ? существующего диапазона канальных импульсов достаточно. Но с точки зрения использования РС интерфейса для изучения и настройки передатчика лучше расширить диапазон канальных импульсов, преобразуемый в числа 0-1023, хотя бы до 0,9?2,1 мсек. В этом случае для передатчиков с диапазоном 1?2 мсек в симуляторе будут числа примерно 100-900.
На экране надписи:
Ось1/Элероны
Ось2/Руль высоты
Ось3/Газ
Ось4/Руль направления
Ось5/Шасси
Ось6/Закрылки
Ось7/Дополн.1
Ось8/Дополн.2
А в джойстике Панели управления надписи:
( в скобках настройки по умолчанию)
Ось Х (соответствует первому канальному импульсу)
Ось У (соответствует второму канальному импульсу)
Руль (соответствует четвертому канальному импульсу)
Вращение вокруг оси Х (соответствует шестому канальному импульсу)
Вращение вокруг оси У (соответствует седьмому канальному импульсу)
Вращение вокруг оси Z (соответствует восьмому канальному импульсу)
Диск (соответствует пятому канальному импульсу)
Ползунок (соответствует третьему канальному импульсу)
Может быть, стоит на экране написать термины стандартного джойстика?
Может быть, стоит пересмотреть умолчания и третий канальный импульс назначить на ?Вращение вокруг оси Х? или ?Вращение вокруг оси У? ?
Пока хватит предложений. |
|
Вернуться к началу |
|
|
Administrator
Site Admin
Зарегистрирован: 07.02.2006 Сообщения: 14
|
|
Андрей Кондратьев писал(а): | Не понимаю, почему заглох этот форум!!! |
Он еще и не поднимался, к сожалению я не могу его продвигать на самом популярном рускоязычном форуме моделистов rcdesign.ru, единственная моя попытка дать ссылку на свой сайт привела к месяцу (или двум, уже не помню) read-only с обвинением в пиратстве и содержании варезного сайта. Сама же ссылка была удалена.
Андрей Кондратьев писал(а): | Все-таки Gadgets Group ? это ГРУППА а не кустарь ? одиночка как я.. |
Gadgets Group - это я сам и люди, которые мне помогают, например 'Андрей Кондратьев' [img]http://www.ggroup.com.ru/ipbforum/style_emoticons/<#EMO_DIR#>/smile.gif[/img]
Мне, к сожалению, сложновато с ассемблером, все написано на микрочиповском PICC18, это может объяснить и некоторые непонятки в дизассемблированном тексте.
За замечания и пожелания - спасибо. Учту их обязательно. Боюсь только руки дойдут ближе к зиме. Сейчас свободное время уходит в основном на сборку нового планера и полеты. _________________ With best regards, Site Administrator |
|
Вернуться к началу |
|
|
Андрей Кондратьев
Member
Зарегистрирован: 08.07.2006 Сообщения: 10
|
|
Андрей, посмотри также настройку таймера. Режим 16-ти разрядного чтения/записи отключен.
Вот настройка TMR1.
50 0062 0E15 MOVLW 0x15
51 0064 6EE6 MOVWF POSTINC1, ACCESS
52 0066 ECF5 CALL 0x1fea, 0
???????????????????????????.
4086 1FEA CFD9 MOVFF FSR2L, POSTINC1
4087 1FEC FFE6 NOP
4088 1FEE CFDA MOVFF FSR2H, POSTINC1
4089 1FF0 FFE6 NOP
4090 1FF2 CFE1 MOVFF FSR1L, FSR2L
4091 1FF4 FFD9 NOP
4092 1FF6 CFE2 MOVFF FSR1H, FSR2H
4093 1FF8 FFDA NOP
4094 1FFA 0EFD MOVLW 0xfd
4095 1FFC 50DB MOVF PLUSW2, W, ACCESS
4096 1FFE 0B7E ANDLW 0x7e
4097 2000 6ECD MOVWF T1CON, ACCESS
4098 2002 0EFD MOVLW 0xfd
4099 2004 ACDB BTFSS PLUSW2, 0x6, ACCESS
4100 2006 D002 BRA 0x200c
4101 2008 8ECD BSF T1CON, 0x7, ACCESS ; включить 16-ти разр чтение/запись
4102 200A D001 BRA 0x200e
4103 200C 9ECD BCF T1CON, 0x7, ACCESS; выключить 16-ти разр чтение/запись
4104 200E 6ACF CLRF TMR1H, ACCESS
4105 2010 6ACE CLRF TMR1L, ACCESS
4106 2012 909E BCF PIR1, 0, ACCESS
4107 2014 AEDB BTFSS PLUSW2, 0x7, ACCESS
4108 2016 D002 BRA 0x201c
4109 2018 809D BSF PIE1, 0, ACCESS; разрешить прерывания по переполнению TMR1
4110 201A D001 BRA 0x201e
4111 201C 909D BCF PIE1, 0, ACCESS; запретить прерывания по переполнению TMR1
4112 201E 80CD BSF T1CON, 0, ACCESS; включить таймер
????????????????????????????.
Не знаю, зачем такие хитрости, но для включения 16-ти разрядного чтения/записи вместо
50 0062 0E15 MOVLW 0x15
надо
50 0062 0E55 MOVLW 0x55; b?01010101? при предделителе 1:2
или
50 0062 0E65 MOVLW 0x65; b?01100101? при предделителе 1:4
Разбирайся, если хочешь.
Если ты думаешь, что работа п/п обработки прерываний соответствует приведенным там комментариям, то вспомни про TMR1.
Предлагаю вспомнить это.
Андрей писал(а): | Насчет длительностей импульсов, отличных от стандартного я уже давно думаю. Придется, видимо вводить режим калибровки пульта, определяющего предельный диапазон изменения длительностей импульса и приводящий его к диапазону 0<->1023. Это приведет к значительному увеличению нагрузки на PIC, так как придется делить на не целое число. |
Предлагаю алгоритм, который вообще исключит операцию деления в PIC.
Процедура, о которой ты пишешь, в компьютерном передатчике называется калибровка джойстика. ВАЖНОЕ замечание. Мы имеем дело не с джойстиком, а с PPM. Длительность канального импульса м.б. последствием многочисленных смесителей, трансляционных таблиц, дополнительных триммеров и разных ограничений внутри передатчика. Пользователь может забыть об этом, и это напоминание будет не лишним в описании.
В компьютерном передатчике Микростар применяется прием, позволивший отказаться от деления с плавающей точкой. Предлагаю воспользоваться этим приемом.
Сознательно откажемся от калибровки средних позиций джойстиков и трехпозиционных тумблеров.
В главном окне добавляем кнопку Калибровка каналов. При нажатии этой кнопки открывается модальное окно. Вариант прилагаю.
Переключение радиокнопок позволяет пользователю изменять данные в окнах Мин и Макс.
Остальные окна не связаны с радиокнопками и активны всегда.
В окнах содержатся длительности канальных импульсов в микросекундах или в миллисекундах с тремя цифрами после запятой.
Вычисление текущего значения и Тмин происходит в РС интерфейсе по формуле
Число в окне = T/6 для предделителя 1:2
или
Число в окне = T/3 для предделителя 1:4.
Т ? это 16-ти разрядное число из оперативной памяти, переданное по USB.
Тмин для канала хранится в EEPROM и передается по USB из/в оперативную память аналогично другим настройкам. Значения по умолчанию для Тмин при включении питания PIC появляются аналогично другим настройкам.
Вычисление Тмакс происходит в РС интерфейсе по формуле
Тмакс = Тмин + 1023 * 1024 / Ккан
Ккан ? масштабный коэффициент канала, сохраняемый в EEPROM, и передаваемый по USB из/в оперативную память аналогично другим настройкам. Значения по умолчанию для Ккан при включении питания PIC появляются аналогично другим настройкам.
Сейчас в PIC назначено ограничение для минимальной длительности канального импульса 833 мксек. Надо ввести ограничение и для максимальной длительности. Например 2,23мсек и соответствующую логику для FFFF.
Если в РС интерфейсе будет прочитано FFFF, для соответствующего канала вместо длительности импульса выводится надпись Нет.
Указанные ограничения в PIC м.б. жесткими или можно предусмотреть возможность изменения их в зависимости от назначений пользователя для Макс и Мин. В РС интерфейсе предлагаю жесткие ограничения, например 833?2230. Попытки пользователя выйти за эти границы ограничиваются программно независимо от сигнала с пульта.
Пользователь выбирает одну из радиокнопок, перемещает орган управления передатчика в соответствующую позицию и нажимает соответствующую кнопку (Макс или Мин). Некорректный ввод (если Мин больше Макс) должен отвергаться с появлением соответствующего предупредительного окна со звуком и текстом.
Если приняты корректные значения, производится вычисление нового Ккан, обновление окна Тмакс и обмен новыми Тмин и Ккан между оперативной памятью PIC и РС интерфейсом аналогично другим настройкам. Сохранение в EEPROM после закрытия окна или как для других настроек.
Числа в окнах Джойстик вычисляются в РС интерфейсе (и в PIC тоже!!!) по формуле
Джойстик = (Текущая длительность канала ? Тмин канала) * Ккан /1024
Деление в PIC заменяется сдвигом.
Если Джойстик < 0, то программно Джойстик = 0
Если Джойстик > 1023, то программно Джойстик = 1023
?ДЖОЙСТИК?, В ОТЛИЧИЕ ОТ СУЩЕСТВУЩЕЙ ВЕРСИИ, НЕ ПЕРЕДАЕТСЯ ИЗ PIC В РС ИНТЕРФЕЙС!!!
Масштабный коэффициент (шестнадцатиразрядное число) вычисляется в РС интерфейсе по формуле
Ккан = 1023 * 1024 / (Макс канала ? Мин канала)
Таким образом, выбранный пользователем диапазон Тмин ? Тмах всегда преобразовывается в 0 ? 1023 а в PIC нет операции деления.
Подпрограмма беззнакового умножения 16х16 в v.1.05 есть сейчас.
Т.к. вычисление Ккан производится только в процессе калибровки, то можно перенести это в PIC с добавлением п/п беззнакового деления 32/16 (1023*1024 меньше FFFFFF) и соответственно пересмотреть алгоритм для РС.
На вопрос о том, как производить калибровку каналов пульта, имеющих триммеры, нет однозначного ответа. Если калибровать при нейтральном положении триммера, то диапазон триммера будет больше. А это плюс при работе в симуляторе.
Не спеши с ответом. |
|
Вернуться к началу |
|
|
Андрей Кондратьев
Member
Зарегистрирован: 08.07.2006 Сообщения: 10
|
|
Я придумал простой способ расширить допустимый диапазон длительностей канальных импульсов.
1. Меняем
#define PULSE_OFFSET 6000
на
#define PULSE_OFFSET 5004
и добавляем
#define PULSE_CENTER 9072 // 9072 = 1512uSec * 48MHz / 4 / 2 (для предделителя 1:2)
2. Меняем
if (c < PULSE_OFFSET)
a = 1;
else
a = (c - PULSE_OFFSET) / 6;
if (a > 1023)
a = 1023;
на
if (c < PULSE_OFFSET)
a = 1;
else
a = (c - PULSE_CENTER) / 8 + 512; //Еще лучше так: a = (c - PULSE_CENTER + 4096) / 8
if (a > 1023)
a = 1023;
if (rev)
a = 1024 - a;
Получаем масштабирование всех каналов на 75% при сохранении существующего среднего положения.
В результате:
числу 1023 соответствует 13160 / 6 = 2193,3 мксек,
числу 512 соответствует 9072 / 6 = 1512 мксек,
числу 1 соответствует 830,6 мксек.
Или 1512 +/- 681мксек.
Меняю числа в прошивке и получаю RC-Joy-105-preddelitel&scale75.hex.
Но теперь в PC интерфейсе только число 512 преобразуется в правильную длительность.
Нужно делать обратное масштабирование. Что-то вроде
Ткан=((Джойстик-512)*8 + 9072)/6
(Если вместо деления на 8 применить деление на 7, то получим 1512 +/- 596 мксек.)
========================================================================
Хочу попробовать ИНТЕГРИРОВАТЬ ваше устройство в передатчик. При этом по выбору пилота входными сигналами будут либо данные, подготовленные для преобразования в РРМ либо исходные данные с ручек и триммеров. А также сигналы с кнопок и тумблеров пульта. Появится возможность назначать триммеры и ручки на разные оси джойстика. |
|
Вернуться к началу |
|
|
Administrator
Site Admin
Зарегистрирован: 07.02.2006 Сообщения: 14
|
|
Андрей Кондратьев писал(а): | Я придумал простой способ расширить допустимый диапазон длительностей канальных импульсов. |
Спасибо, разберусь в вашем предложении обязательно.
гЙФБФБ Хочу попробовать ИНТЕГРИРОВАТЬ ваше устройство в передатчик. При этом по выбору пилота входными сигналами будут либо данные, подготовленные для преобразования в РРМ либо исходные данные с ручек и триммеров. А также сигналы с кнопок и тумблеров пульта. Появится возможность назначать триммеры и ручки на разные оси джойстика.
Расскажите потом что у Вас получилось. _________________ With best regards, Site Administrator |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах You cannot attach files in this forum You can download files in this forum
|
|