Самосдельный приемник Spektrum/JR на 11 и более каналов.
на сателит после подачи питания подаются импульсы. На односателитные приемники - один, на многосателитные - несколько. Насколько я понял - несколько импульсов лишь для того, чтобы сателиты биндились не одновременно, а последовательно. Сателиту в принципе всерано сколько каналов принимать. Разбор протокола происходит в дешифраторе приемника. Сателит просто выдает то, что принял. Приемники обязаны знать все протоколы и уметь дешифровать каждый. Собственно, есть 6 каналов в пакете, 7 каналов в пакете, два пакета (для 9 каналов) - 10 бит и два пакета по 11 бит - до 12 каналов. 18 спектрум для исследований мне не попадался.
Сателит без приемника прибиндить абсолютно не трудно. Вот к примеу биндилка
Там же и на меге есть дешифраторы 3 сателита ->ППМ. Но без исходников. Хотя, насколько понимаю, большинство идей - почерпнуто с МК.
Биндилка на АВРке получится с трудом. АВР-ка медленно запускается при подаче питания. Я бился с этой поблемой в другом проекте - когда пытался заставить Мультиплекс Роял про работать с новой прошивкой со спектрумовским 12 канальным модулем. Получилось, но весьма геморойно. АВР-ка всеже медленно стартует и не успевает получить запрос от аппы (хотя, зная, что запрос был - успевает дать ответ. 😃 )
Да, я осциллографом засек импульс на сигнальном проводе сателита. Примерно через 0,09с после подачи питания основной приемник коротит сигнальный провод на землю. Сателит начинает маргать. Скорее всего биндилка на мк делает такой же импульс. Ну и что дальше…включаю я JR11 в бинд режим, сателит прекращает мегать, но бинда не происходит (данные на его выходе не появляются). Усложняем эксперемент. Теперь включаем сателит в режим бинд и отдельно включаем ar6200 в режим бинд. Заметьте, оба устройства не соединены электрически. Включаем аппу и бинд происходит(с сателита пошли данные, причем ровно 6 каналов). Сателит горит лампочкой, а ar6200 не горит. Чтоже делать? Соединяем ненадолго информационный провод сателита (и землю) с ar6200 и светодиод тоже зажигается. Или биндилка на AVR умеет делать что-то кроме импульса или предложите свой вариант 😃
К сожалению не имею ЖР11. Имею мультиплекс со спектрумовским модулем. Подаю импульс на сателит, он биндится, принимаю 2 пакета по 6 каналов 11бит\канал=12 каналов. Все.
Биндилка - на пике. На авр биндилка с трудом получится - не успевает МК стартовать. По импульсам - уже заикался, про то, что многосателитные приемники дают на сателиты разное кол-во импульсов. Сам наблюдал до 5. Пробуйте. 😃
Еще как вариант - попробуйте два раза подряд прибиндить сателит.
Кстати, выложили бы пяток пакетов с сателита. Может вы их неправильно рабираете? 😃 В одном пакете - действительно 6 каналов… А в двух - 12. 😃
Алексей, ИМХО проблема в том, что все самоделки пользуют либо модули с ППМ на входе, либо с УАРТ от младших спектрумов, а у них либо постоянное количество каналов в независимости от приемника, либо Вы сами задаете количество каналов и насильно гоните на приемник\сателлит. Старшие модели Спектрумов при бинде действительно общаются с приемником(о чем и Сектрум пишет в ФАКах к приемышам) и просто с сателитом может не понимать с кем он биндится и бинд не происходит.
Я привел пример двух приемников, состоящих исключительно из сателитов. Как быть? А так да, 12 канальный модуль ппм на входе кушал.
Общая мысль была в том, что не сателлит не биндится к передатчику у Дмитрия, а передатчик при бинде с голым сателлитом не понимает какой приемник и какой протокол надо гнать на вч-модуль, т.е бинд не происходит на стороне передатчика.
Вот собственно цитата от Спектрума
Q: Sometimes my receiver loses its bind and won’t connect requiring rebinding. What happens if the bind is lost in flight?
A: The receiver will never lose its bind unless it’s instructed to. It’s important to understand that during the binding process the receiver not only learns the GUID (code) of the transmitter but the transmitter learns and stores the type of receiver that it’s bound to. If the transmitter is placed into bind mode, the transmitter looks for the binding protocol signal from a receiver. If no signal is present, the transmitter no longer has the correct information to connect to a specific receiver and in essence the transmitter has been “unbound” from the receiver. We’ve had several DX7 customers that use transmitter stands or trays that unknowingly depress the bind button and the system is then turned on losing the necessary information to allow the connection to take place. We’ve also had DX7 customers that didn’t fully understand the range test process and pushed the bind button before turning on the transmitter also causing the system to “lose its bind.”
Т.е. получается, что слишком умные Спектрумовские передатчики вроде как не должны работать с голым сателлитом, если только не присоединить на время бинда им подходящий приемник 😦
нарыл давным давно, может поможет
Description:
Arduino sketch for binding with Spektrum RC satellite receivers.
Private Clone URL:
git@gist.github.com:ef01907a5c90dd66f987.git
spektrum_sat_bind.pde #
// Spektrum satellite binding
// quick test sketch by Sam Kelly, sam@3drobotics.com
// with info from rcgroups, mikrokopter, etc.unsigned long time;
int inData[16];
int inByte;
int index = 0;void setup()
{
Serial.begin(115200); // to print data to the terminal
SpektrumBind(); // to interface with the Spektrum sat
Serial1.begin(115200);
}void loop()
{
while(Serial1.available() > 0)
{
for(index = 0; index <= 15; index++)
{
inByte = Serial1.read();
inData[index] = inByte;
Serial.print(inByte);
Serial.print(" ");
}
Serial.println();
}
}void SpektrumBind(void)
{
unsigned char connected = 0;UCSR1B &= ~(1 << TXCIE1); // disable Tx interrupt
UCSR1B &= ~(1 << TXEN1); // disable USART1 Tx
PORTD &= ~(1 << PORTD3); // disable pull-up
DDRD |= (1 << DDD3); // Tx as output
PORTD |= (1 << PORTD3); // Set HIGH to enable adapter regulatorUCSR1B &= ~(1 << RXCIE1); // disable Rx interrupt
UCSR1B &= ~(1 << RXEN1); // disable USART1 Rx
PORTD &= ~(1 << PORTD2); // disable pull-upSerial.println(“Spektrum Satellite binding test.”);
while(time <= 10000) // Wait 10 seconds for spektrum sat connection
{
time = millis();
if(PIND & (1 << PORTD2))
{
connected = 1;
break;
}
}if(connected)
{
Serial.println(“Connected! Bind now!”);
DDRD |= (1 << DDD2); // Rx as outputdelay(90); // Delay after Rx startup
// === Update 2011-08-18 ===
// Bind mode data gathered from Spektrum DX8
// 2 low pulses: DSM2 1024/22ms (this works with Doug Weibel’s PPM Encoder firmware)
// 3 low pulses: no result
// 4 low pulses: DSM2 2048/11ms
// 5 low pulses: no result
// 6 low pulses: DSMX 22ms
// 7 low pulses: no result
// 8 low pulses: DSMX 11ms//PORTD |= (1 << PORTD2); delayMicroseconds(116);
//PORTD &= ~(1 << PORTD2); delayMicroseconds(116);
//PORTD |= (1 << PORTD2); delayMicroseconds(116);
//PORTD &= ~(1 << PORTD2); delayMicroseconds(116);
//PORTD |= (1 << PORTD2); delayMicroseconds(116);
//PORTD &= ~(1 << PORTD2); delayMicroseconds(116);
//PORTD |= (1 << PORTD2); delayMicroseconds(116);
//PORTD &= ~(1 << PORTD2); delayMicroseconds(116);
//PORTD |= (1 << PORTD2); delayMicroseconds(116);
//PORTD &= ~(1 << PORTD2); delayMicroseconds(116);
PORTD |= (1 << PORTD2); delayMicroseconds(116);
PORTD &= ~(1 << PORTD2); delayMicroseconds(116);
PORTD |= (1 << PORTD2); delayMicroseconds(116);
PORTD &= ~(1 << PORTD2); delayMicroseconds(116);
PORTD |= (1 << PORTD2); delayMicroseconds(116);
}
else
Serial.println(“Timeout.”);DDRD &= ~(1 << DDD2); // Rx as input
PORTD &= ~(1 << PORTD2);
}
Приехал кварц на волшебную частоту 14,7456Мгц, и я решил подружить контролер atmega32 сателитом Spektrum. Для контроля принимаемые данные выводились в терминальную программу.
Биндим сателит с ar6200, смотрим чего приходит с сателита. Тут первый сюрприз - приходит не 6, а 7 каналов. Наводит на мысль, что в ar6200 может 7канал не распаян. Теперь биндим сателит с китайским 9к приемником с Хоббикинга. Тут уже два сюрприза: идут все 11 каналов и каждый из них 11бит разрядностью. Неужели DSMX? ;)В приложенном файле я кратенько обощил, что известно и что сам наэксперементировал. Остается вопрос: если 11битнаые данные имеют место быть, а на экране аппы режим DSM, это как то невяжется. Может это неполноценные 11 бит, младший разряд не используется или еще чего.
11бит и ДСМХ - никак не связаны. 😃 11 бит - один из протоколов “верхнего уровня”. ДСМ2\дсмх - нижний.
По второму байту - информация интересна, надо будет посмотреть повнимательнее. А в остальном - не отличается от описанного мною ранее.
А вот такой вопрос к Aleksey Gorelikov и остальным: какой смысл знать номер пришедшего пакета (1 или 2)? Пишу окончательную программу и собираюсь просто считывать номер канала из 3,4,5,6 бита? Первые 4 байта каждого пакета понятно - игнорируем.
У меня есть предположение, что это какая-нибудь вынужденная мера для облегчения жизни приемнику. Может критичные для времени места есть. Может последовательность каналов стандартна и приемик не разбирает номер канала, а тупо пропускает биты номера канала, ориентируясь на известную последовательность и номер пакета. Одно могу сказать, что признак номера пакета есть как в 1024 разрешении, так и в 2048. Так что вряд-ли этот бит используется для определения типа протокола. Протокол скорее определяется по FF в конце пакета.
в первом пакете первые 7 каналов, во втором - вторые 7 каналов.
Так фишка в том, что у каждого канала есть идентификатор номера этого канала. Ну и смысл тогда сами пакеты между собой различать?
Вобщем, написал я прошивочку для АТмега32, что была под рукой. Проверил на предмет дрожания серв, потом сформировал ППМ из 8 каналов и подал в симулятор. Все работает изумительно четко. Приписал функцию файлсейва по каналам. Проблемы начались, когда стал формировать второй канал ППМ, чтоб засунуть в него оставшиеся 9,10, 11 каналы пульта. Без второго 16-разрядного таймера в микроконтролере ну очень неудобно.Нужна мега128. Дрожание по каналам 9,10,11 удалось свести к приемлимому минимуму, но все равно непорядочек. Пока решил остановиться на достигнутом, потому что непонятно в каком направлении двигаться дальше. Все зависит от конкретной LRS, которую буду использовать.