OSD на ATmega1281

Dacor

как бы ничего не изменилось…

Опа, изменилось. Все таки осцилл пора в поверку сдать - немногоприверал и на тебе. А какие допуски по длительности 3 и 5 каналов при старте системы?

ubd

Не может быть. Смотрите внимательно, на большем разрешении осцила, у вас скорее всего не 1 мс. И посмотрите в пачке импульсов, газ точно 3-й импульс слева если считать, в пачке импульсов, и управляющий канал 5-й?

Попробуйте сделайте 6-й канал. Я не проверял другие каналы, всегда делал 6-й. Попробуйте 6-й. Если заработает, то можете переделать на любой другой.

Dacor
ubd:

Как бы это стандарт. Читайте что такое РРМ сигнал.

Да, действительно, подзабыл.

msv
Dacor:

А какие допуски по длительности 3 и 5 каналов при старте системы?

Смотрим код из #1090
gCTRL_InBuff[gCTRL.Ch_AP_control] < -((CTRL100*80)/100)
Значение управляющего канала должно быть меньше 1,5мс(соответствует середине, те нулю)-0.5мс(определяется CTRL100)*80/100=1,5-0.4=1,1мс ( это соответствует команде MNL)
gCTRL_InBuff[gThr.Ch] < -((CTRL100*95)/100)
Значение газа должно быть меньше 1,5- ((0,5*95)/100)=1,025мс.

Dacor:

Сергей (MSV) можно Вас попросить исправить код под РРМ Эксперта

Для начала вопрос- а у эксперта нельзя настроить количество каналов в sum_ppm до 8? Там же что-то, как то настраивается?
В принципе у PPM к сожалению нет жестких стандартов, но есть значения, определяемые здравым смыслом…
Если задаться исходной задачей передать 8 каналов с периодом 20мс с минимальным спектром то неизбежно приходим:
Длина межканального интервала >2.5мсек.
Длина канального импульса 0.8-2,2мсек. Из них 0.4 мс на строб.

Dacor

Уговорил (точнее просто попросил) Дмитрия на 8-ми канальный РРМ на выходе. Залил, в конфигураторе поставил 8 - работает. Заливаю обратно 10-ти канальную, выставляю 10 - не работает. Внешне и тот и другой РРМ идентичны (ну кроме количества каналов). Блин как так то?

ubd

Ну не поддерживает 10 каналов АП.
Так заработало всё при 8ми каналах?

Dacor

Вон оно что оказывается… Я то чего то подумал, что если есть настройка количества каналов, то как бы и 12-ть модно подать - как бы это тоже обычный РРМ. Да и на большее количество есть. Ну да ладно… Буду дальше разбираться что к чему. Всем откликнувшимся спасибо!!!

P.S. Да, 8 каналов работает.

ubd

Так заработало? не понятно…

Dacor

Да, с восьмиканальным РРМ все заработало.

ubd

Блин весь мозг вынес. Там же к конфигураторе не зря указывается кол-во каналов…

Dacor
ubd:

Там же к конфигураторе не зря указывается кол-во каналов…

Да это все понятно. Нигде не было сказано (ну или я этого не заметил), что поддерживается максимум 8 каналов.

Иван
Dacor:

Да это все понятно. Нигде не было сказано (ну или я этого не заметил), что поддерживается максимум 8 каналов.

в конфигураторе только для 8ми каналов доступна настройка… 😉

Dacor

Спокойно 10 сохраняется. Версия 2.7.3 с индикацией второго напряжения и РССИ по напряжению.

msv

Я честно в доке предупредил, что контроля за допустимыми значениями пока нет и они не всегда очевидны…

Кстати, было бы интересно, если эксперт сделал бы выход по uart, поддержав мой протокол (там кстати и RSSI, и статус для определения FS передается) или разработал бы свой…

ubd

Dacor, побазарь на эту тему с Экспертом?

Кстати, было бы интересно, если эксперт сделал бы выход по uart, поддержав мой протокол (там кстати и RSSI, и статус для определения FS передается) или разработал бы свой…

Сергей, а ты подготовь доку, где расписан твой протокол.
Может Эксперт сделает? Закинем удочку, а там посмотрим…

Dacor

Он сразу спросит про поробности, а мне как бы и ответить нечего… Вот если Сергей (MSV) распишет в подробностях про протокол, тогда можно будет начинать конструктивную беседу.

msv

Физический уровень: RS-232, TTL, 19200,8,1,n
Канальный уровень относительно стандартен:


#define SYN_UART1 0xaf
#define SYN_UART2 0x50
enum { UART_READ_CNF=0x1, UART_WRITE_CNF=0x2, UART_MAIN_DATA=0x3};
//----------------------------------------------------------------------
void send_UART(u_char type, u_char *buff, u_char cnt)
//type - тип данных (для данных=UART_MAIN_DATA)
//buff - буфер с данными
//cnt - количество байт
{
u_char crc, i;
u_char *p;

while(gSendUartCnt!=0) sending_UART();
gSendUartCnt=0;
gSendUartInd=0;
p=gSendUartBuff;
*p++=SYN_UART1; // байт1 поточной синхронизации
*p++=SYN_UART2; // байт2 поточной синхронизации
*p++=cnt;            // количество байт с данными
crc=cnt;
*p++=type;          // тип пакета
crc^=type;
for(i=0; i<cnt; i++)
  {
  crc^=buff[i];
  *p++=buff[i];      // данные
  }
*p=crc;                // 1 байт crc
gSendUartCnt=2+1+1+cnt+1;
}

Данные ответствуют структуре


typedef struct
{
u_char ChVal[8]; // значения по каналам
u_char RSSI;      // RSSI
u_char DropCnt;  // счетчик дропов
u_char Valid;      // флаг валидности данных
}MAIN_DATA;

Данные передаются приемником постоянно либо по готовности принятых данных, либо по тайм-ауту с периодом ~20ms.

Dacor
msv:

Я честно в доке предупредил, что контроля за допустимыми значениями пока нет и они не всегда очевидны…

Про это знаю. Но вроде как другие АП без проблем хавают РРМ 10 и более каналов, поэтому даже не задумывался на этот счет. Ну да ладно - все работает.

ubd

Уговорил (точнее просто попросил) Дмитрия на 8-ми канальный РРМ на выходе. Залил, в конфигураторе поставил 8 - работает. Заливаю обратно 10-ти канальную, выставляю 10 - не работает. Внешне и тот и другой РРМ идентичны (ну кроме количества каналов). Блин как так то?

А можешь кинуть мне эту прошивку на 8 каналов для Эксперта. А то у меня тут есть человек, который будет использовать Эксперта на нашем АП.
Мыло в личку кинул.

Dacor

Дмитрий на сайте у себя выложил эту прошивку (в прошивках для Тини)

ubd

Что то я его сайт найти не могу. Ткни носом.

Нужно ещё узнать тини у человека или нет.
У него передатчик большой, с усилком 7 ватным. Это какая версия?